summaryrefslogtreecommitdiff
path: root/cgen.c
diff options
context:
space:
mode:
authorLeo Tenenbaum <pommicket@gmail.com>2019-11-13 12:33:46 -0500
committerLeo Tenenbaum <pommicket@gmail.com>2019-11-13 12:33:46 -0500
commitb1352ae5faada93af4443ec9a0e66c2d08872484 (patch)
tree1c09141ade4b94cf0b9eb359c8b219d0a2250fb9 /cgen.c
parent36d01481e735d40df558ef90eadd3c705f8173c7 (diff)
fixed some problems with compile time params
Diffstat (limited to 'cgen.c')
-rw-r--r--cgen.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/cgen.c b/cgen.c
index 2dc187d..956fd83 100644
--- a/cgen.c
+++ b/cgen.c
@@ -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;