]> Nishi Git Mirror - gwion.git/commitdiff
:bug: Fix foreach and scoped_stmt
authorJérémie Astor <fennecdjay@gmail.com>
Wed, 24 Feb 2021 17:08:29 +0000 (18:08 +0100)
committerJérémie Astor <fennecdjay@gmail.com>
Wed, 24 Feb 2021 17:08:29 +0000 (18:08 +0100)
src/emit/emit.c

index fe45053dff3c1e0c8b9b386d440127f0ac6e85c9..4131595c7d9134867e213c5ff3ccf08110836862 100644 (file)
@@ -1255,7 +1255,7 @@ ANN static inline Instr scoped_ini(const Emitter emit) {
 
 ANN static inline void scoped_end(const Emitter emit, const Instr gc) {
   emit_pop_scope(emit);
-  const m_bool pure = !vector_back(&emit->info->pure);
+  const m_bool pure = vector_size(&emit->info->pure) && !vector_back(&emit->info->pure);
   if(!pure) {
     gc->opcode = eGcIni;
     emit_add_instr(emit, GcEnd);
@@ -1788,7 +1788,10 @@ ANN static m_bool _emit_stmt_each(const Emitter emit, const Stmt_Each stmt, m_ui
   tomem->m_val = offset;
   const Instr s1 = emit_add_instr(emit, MemSetImm);
   s1->m_val = offset + SZ_INT;
-  stmt->v->from->offset = offset + SZ_INT*2;
+  const Instr loop_idx = emit_add_instr(emit, MemSetImm);
+  loop_idx->m_val = offset + SZ_INT;
+  loop_idx->m_val2 = -1;
+  stmt->v->from->offset = offset + SZ_INT *2;
   if(stmt->idx)
     stmt->vidx->from->offset = offset + SZ_INT;
   if(n) {