summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/main.c b/main.c
index 3315f2a..9b22751 100644
--- a/main.c
+++ b/main.c
@@ -253,12 +253,17 @@ void parse_if(Lexer *l, Proc *p) {
Node *if_node = node_new(g, N_IF_ELSE, g->ctrl, cond);
if_node->val = (Value) {
.type = { .lvl = T_TOP, .t = T_TUPLE },
- .tuple = { 0 }
+ .tuple = {
+ .len = 2,
+ .cap = 2,
+ .data = new_arr(g->pool->arena, Value, 2)
+ }
};
- ZDA_PUSH(g->pool->arena, &if_node->val.tuple, (Value) { .type = { .lvl = T_CTRL, .t = T_NONE } });
- ZDA_PUSH(g->pool->arena, &if_node->val.tuple, (Value) { .type = { .lvl = T_CTRL, .t = T_NONE } });
+ if_node->val.tuple.data[0] = (Value) { .type = { .lvl = T_CTRL, .t = T_NONE } };
+ if_node->val.tuple.data[1] = (Value) { .type = { .lvl = T_CTRL, .t = T_NONE } };
if_node = node_peephole(if_node, g, l);
node_add(g, if_node, g->keepalive);
+
Node *if_true = node_new(g, N_PROJ, if_node);
Node *if_false = node_new(g, N_PROJ, if_node);
if_true->val.i = 0;
@@ -266,6 +271,7 @@ void parse_if(Lexer *l, Proc *p) {
if_true = node_peephole(if_true, g, l);
if_false = node_peephole(if_false, g, l);
node_remove(g, if_node, g->keepalive);
+
assert(if_true->in.len > 0);
assert(if_false->in.len > 0);
node_add(g, if_true, g->keepalive);