diff options
author | Leo Tenenbaum <pommicket@gmail.com> | 2019-11-13 12:07:12 -0500 |
---|---|---|
committer | Leo Tenenbaum <pommicket@gmail.com> | 2019-11-13 12:07:12 -0500 |
commit | 36d01481e735d40df558ef90eadd3c705f8173c7 (patch) | |
tree | 317050aac8e67cd425ba3f566c8debcc8138412c /decls_cgen.c | |
parent | 011577f9e34205b44d5e32b0f04788bfb6a3c92b (diff) |
local & anonymous fns with const params
Diffstat (limited to 'decls_cgen.c')
-rw-r--r-- | decls_cgen.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/decls_cgen.c b/decls_cgen.c index a484e24..1a23a90 100644 --- a/decls_cgen.c +++ b/decls_cgen.c @@ -2,6 +2,7 @@ static bool cgen_decls_stmt(CGenerator *g, Statement *s); static bool cgen_decls_block(CGenerator *g, Block *b); static bool cgen_decls_expr(CGenerator *g, Expression *e) { + cgen_recurse_subexprs(g, e, cgen_decls_expr, cgen_decls_block); switch (e->kind) { case EXPR_CALL: e->call.c.instance = 0; @@ -57,17 +58,18 @@ static bool cgen_decls_expr(CGenerator *g, Expression *e) { e->fn.c.name = NULL; if (!e->fn.c.id) e->fn.c.id = g->ident_counter++; - fn_enter(&e->fn, 0); - if (!cgen_fn_header(g, &e->fn, e->where, 0)) - return false; - cgen_write(g, ";"); - cgen_nl(g); - fn_exit(&e->fn); - break; + if (!e->type.fn.constant) { + fn_enter(&e->fn, 0); + if (!cgen_fn_header(g, &e->fn, e->where, 0)) + return false; + cgen_write(g, ";"); + cgen_nl(g); + fn_exit(&e->fn); + } + break; default: break; } - cgen_recurse_subexprs(g, e, cgen_decls_expr, cgen_decls_block); return true; } |