summaryrefslogtreecommitdiff
path: root/decls_cgen.c
diff options
context:
space:
mode:
authorLeo Tenenbaum <pommicket@gmail.com>2019-11-13 12:07:12 -0500
committerLeo Tenenbaum <pommicket@gmail.com>2019-11-13 12:07:12 -0500
commit36d01481e735d40df558ef90eadd3c705f8173c7 (patch)
tree317050aac8e67cd425ba3f566c8debcc8138412c /decls_cgen.c
parent011577f9e34205b44d5e32b0f04788bfb6a3c92b (diff)
local & anonymous fns with const params
Diffstat (limited to 'decls_cgen.c')
-rw-r--r--decls_cgen.c18
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;
}