txlyre 3 hari lalu
induk
melakukan
292d8aa63d
1 mengubah file dengan 18 tambahan dan 1 penghapusan
  1. 18 1
      qic.c

+ 18 - 1
qic.c

@@ -5177,6 +5177,8 @@ void compile_node(buffer_t *gbuf, buffer_t *buf, list_t *ctx, table_t *ltab,
     break;
 
   case N_IF:
+    CTXPUSH("scope");
+    EMIT("qi_new_scope(state);\n");
     EMIT("if (_qi_truthy(state, ");
     compile_node(gbuf, buf, ctx, ltab, lstk, sstk, lbl, node->a);
     EMIT(")) {\n");
@@ -5185,7 +5187,10 @@ void compile_node(buffer_t *gbuf, buffer_t *buf, list_t *ctx, table_t *ltab,
       EMIT("} else {\n");
       compile_node(gbuf, buf, ctx, ltab, lstk, sstk, lbl, node->c);
     }
-    EMIT("}");
+    EMIT("}\n");
+
+    CTXPOP();
+    EMIT("qi_old_scope(state);\n");
     break;
 
   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);
     }
 
+    CTXPUSH("scope");
+    EMIT("qi_new_scope(state);\n");
+ 
     if (!node->a) {
       EMIT("for (;;) {\n");
     } 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("__break%d:;\n", gid);
+
+    CTXPOP();
+    EMIT("qi_old_scope(state);\n");
   } break;
 
   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);
     }
 
+    CTXPUSH("scope");
+    EMIT("qi_new_scope(state);\n");
+
     char *varname = tempvar();
 
     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("__break%d:;\n", gid);
+
+    CTXPOP();
+    EMIT("qi_old_scope(state);\n");
   } break;
 
   case N_BREAK: