diff options
author | Leo Tenenbaum <pommicket@gmail.com> | 2019-11-08 13:02:54 -0500 |
---|---|---|
committer | Leo Tenenbaum <pommicket@gmail.com> | 2019-11-08 13:02:54 -0500 |
commit | 6800a6691602aa3b38fc8fea182bf4d1cef092ef (patch) | |
tree | 39ff92fe777dd19c8f2e44869e7025a572831189 /cgen.c | |
parent | 15d0f9a50bcd19e4d1efdd3574bc48bc712d4471 (diff) |
fixed, e.g. each x := x
Diffstat (limited to 'cgen.c')
-rw-r--r-- | cgen.c | 27 |
1 files changed, 14 insertions, 13 deletions
@@ -685,6 +685,17 @@ static bool cgen_expr_pre(CGenerator *g, Expression *e) { if (!each_enter(e, 0)) return false; cgen_write(g, "{"); if (is_range) { + if (ea->range.to) { + /* pre generate to */ + if (!cgen_type_pre(g, &ea->type, e->where)) return false; + cgen_write(g, " to_"); + if (!cgen_type_post(g, &ea->type, e->where)) return false; + cgen_write(g, " = "); + if (!cgen_expr(g, ea->range.to)) + return false; + cgen_write(g, "; "); + } + /* set value to from */ if (ea->value) { if (!cgen_type_pre(g, &ea->type, e->where)) return false; @@ -707,16 +718,6 @@ static bool cgen_expr_pre(CGenerator *g, Expression *e) { if (!cgen_set(g, NULL, "val_", ea->range.from, NULL)) return false; } - if (ea->range.to) { - /* pre generate to */ - if (!cgen_type_pre(g, &ea->type, e->where)) return false; - cgen_write(g, " to_"); - if (!cgen_type_post(g, &ea->type, e->where)) return false; - cgen_write(g, " = "); - if (!cgen_expr(g, ea->range.to)) - return false; - cgen_write(g, "; "); - } } else { /* pre-generate of */ if (!cgen_type_pre(g, &ea->of->type, e->where)) @@ -740,8 +741,8 @@ static bool cgen_expr_pre(CGenerator *g, Expression *e) { cgen_write(g, " = 0"); } cgen_write(g, "; "); - bool uses_ptr; - Type *of_type; + bool uses_ptr = false; + Type *of_type = NULL; if (!(is_range && !ea->range.to)) { /* if it's finite */ if (is_range) { if (ea->value) @@ -1427,7 +1428,7 @@ static bool cgen_val_ptr(CGenerator *g, void *v, Type *t, Location where) { case BUILTIN_U32: cgen_write(g, "%"PRIu32, *(U32 *)v); break; case BUILTIN_I64: cgen_write(g, "%"PRId64, *(I64 *)v); break; case BUILTIN_U64: cgen_write(g, "%"PRIu64, *(U64 *)v); break; - case BUILTIN_F32: cgen_write(g, F32_FMT, *(F32 *)v); break; + case BUILTIN_F32: cgen_write(g, F32_FMT"f", *(F32 *)v); break; case BUILTIN_F64: cgen_write(g, F64_FMT, *(F64 *)v); break; case BUILTIN_CHAR: cgen_write(g, "\\x%02x", *(char *)v); break; case BUILTIN_BOOL: cgen_write(g, "%s", *(bool *)v ? "true" : "false"); break; |