|
@@ -5177,6 +5177,8 @@ void compile_node(buffer_t *gbuf, buffer_t *buf, list_t *ctx, table_t *ltab,
|
|
break;
|
|
break;
|
|
|
|
|
|
case N_IF:
|
|
case N_IF:
|
|
|
|
+ CTXPUSH("scope");
|
|
|
|
+ EMIT("qi_new_scope(state);\n");
|
|
EMIT("if (_qi_truthy(state, ");
|
|
EMIT("if (_qi_truthy(state, ");
|
|
compile_node(gbuf, buf, ctx, ltab, lstk, sstk, lbl, node->a);
|
|
compile_node(gbuf, buf, ctx, ltab, lstk, sstk, lbl, node->a);
|
|
EMIT(")) {\n");
|
|
EMIT(")) {\n");
|
|
@@ -5185,7 +5187,10 @@ void compile_node(buffer_t *gbuf, buffer_t *buf, list_t *ctx, table_t *ltab,
|
|
EMIT("} else {\n");
|
|
EMIT("} else {\n");
|
|
compile_node(gbuf, buf, ctx, ltab, lstk, sstk, lbl, node->c);
|
|
compile_node(gbuf, buf, ctx, ltab, lstk, sstk, lbl, node->c);
|
|
}
|
|
}
|
|
- EMIT("}");
|
|
|
|
|
|
+ EMIT("}\n");
|
|
|
|
+
|
|
|
|
+ CTXPOP();
|
|
|
|
+ EMIT("qi_old_scope(state);\n");
|
|
break;
|
|
break;
|
|
|
|
|
|
case N_SWITCH: {
|
|
case N_SWITCH: {
|
|
@@ -5263,6 +5268,9 @@ void compile_node(buffer_t *gbuf, buffer_t *buf, list_t *ctx, table_t *ltab,
|
|
table_set(ltab, node->t2->text, pair);
|
|
table_set(ltab, node->t2->text, pair);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ CTXPUSH("scope");
|
|
|
|
+ EMIT("qi_new_scope(state);\n");
|
|
|
|
+
|
|
if (!node->a) {
|
|
if (!node->a) {
|
|
EMIT("for (;;) {\n");
|
|
EMIT("for (;;) {\n");
|
|
} else if (node->a && !node->b) {
|
|
} else if (node->a && !node->b) {
|
|
@@ -5294,6 +5302,9 @@ void compile_node(buffer_t *gbuf, buffer_t *buf, list_t *ctx, table_t *ltab,
|
|
EMIT("}\n");
|
|
EMIT("}\n");
|
|
|
|
|
|
EMIT("__break%d:;\n", gid);
|
|
EMIT("__break%d:;\n", gid);
|
|
|
|
+
|
|
|
|
+ CTXPOP();
|
|
|
|
+ EMIT("qi_old_scope(state);\n");
|
|
} break;
|
|
} break;
|
|
|
|
|
|
case N_FOROF:
|
|
case N_FOROF:
|
|
@@ -5314,6 +5325,9 @@ void compile_node(buffer_t *gbuf, buffer_t *buf, list_t *ctx, table_t *ltab,
|
|
table_set(ltab, node->t2->text, pair);
|
|
table_set(ltab, node->t2->text, pair);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ CTXPUSH("scope");
|
|
|
|
+ EMIT("qi_new_scope(state);\n");
|
|
|
|
+
|
|
char *varname = tempvar();
|
|
char *varname = tempvar();
|
|
|
|
|
|
EMIT("qi_value_t *%s = qi_iter(state, ", varname);
|
|
EMIT("qi_value_t *%s = qi_iter(state, ", varname);
|
|
@@ -5351,6 +5365,9 @@ void compile_node(buffer_t *gbuf, buffer_t *buf, list_t *ctx, table_t *ltab,
|
|
EMIT("}\n");
|
|
EMIT("}\n");
|
|
|
|
|
|
EMIT("__break%d:;\n", gid);
|
|
EMIT("__break%d:;\n", gid);
|
|
|
|
+
|
|
|
|
+ CTXPOP();
|
|
|
|
+ EMIT("qi_old_scope(state);\n");
|
|
} break;
|
|
} break;
|
|
|
|
|
|
case N_BREAK:
|
|
case N_BREAK:
|