diff options
author | Leo Tenenbaum <pommicket@gmail.com> | 2019-11-13 12:33:46 -0500 |
---|---|---|
committer | Leo Tenenbaum <pommicket@gmail.com> | 2019-11-13 12:33:46 -0500 |
commit | b1352ae5faada93af4443ec9a0e66c2d08872484 (patch) | |
tree | 1c09141ade4b94cf0b9eb359c8b219d0a2250fb9 /cgen.c | |
parent | 36d01481e735d40df558ef90eadd3c705f8173c7 (diff) |
fixed some problems with compile time params
Diffstat (limited to 'cgen.c')
-rw-r--r-- | cgen.c | 25 |
1 files changed, 15 insertions, 10 deletions
@@ -1689,6 +1689,9 @@ static bool cgen_decl(CGenerator *g, Declaration *d) { cgen_write(g, " = "); if (!cgen_val(g, *val, type, d->where)) return false; + } else { + cgen_write(g, " = "); + cgen_zero_value(g, type); } cgen_write(g, ";"); cgen_nl(g); @@ -1791,18 +1794,20 @@ static bool cgen_stmt(CGenerator *g, Statement *s) { static bool cgen_defs_expr(CGenerator *g, Expression *e) { if (e->kind == EXPR_FN) { FnExpr *f = &e->fn; - HashTable *instances = f->c.instances; - if (instances) { - /* generate each instance */ - ValNumPair *pairs = instances->data; - for (U64 i = 0; i < instances->cap; i++) { - if (instances->occupied[i]) { - /* generate this instance */ - if (!cgen_fn(g, f, e->where, pairs[i].num, pairs[i].val.tuple)) - return false; + + if (e->type.fn.constant) { + HashTable *instances = f->c.instances; + if (instances) { + /* generate each instance */ + ValNumPair *pairs = instances->data; + for (U64 i = 0; i < instances->cap; i++) { + if (instances->occupied[i]) { + /* generate this instance */ + if (!cgen_fn(g, f, e->where, pairs[i].num, pairs[i].val.tuple)) + return false; + } } } - } else { if (!cgen_fn(g, &e->fn, e->where, 0, NULL)) return false; |