]> Nishi Git Mirror - gwion.git/commitdiff
:art: Improve emit_stmt_auto
authorJérémie Astor <astor.jeremie@wanadoo.fr>
Sun, 10 May 2020 23:22:54 +0000 (01:22 +0200)
committerJérémie Astor <astor.jeremie@wanadoo.fr>
Sun, 10 May 2020 23:22:54 +0000 (01:22 +0200)
src/emit/emit.c

index ba1fc8736fb6926b114c6b0d6b49e4b8cef0889b..1b2ef156cfd0df2257db71ad4a1360b7022784dd 100644 (file)
@@ -1450,16 +1450,18 @@ ANN static Instr emit_stmt_autoptr_init(const Emitter emit, const Type type) {
 }
 
 ANN static m_bool _emit_stmt_auto(const Emitter emit, const Stmt_Auto stmt, m_uint *end_pc) {
+  emit_push_scope(emit);
   const Instr s1 = emit_add_instr(emit, MemSetImm);
   Instr cpy = stmt->is_ptr ? emit_stmt_autoptr_init(emit, stmt->v->type) : NULL;
-  emit_local(emit, emit->gwion->type[et_int]); // is ptr released?
+  emit_local(emit, emit->gwion->type[et_int]);
   const m_uint offset = emit_local(emit, emit->gwion->type[et_int]);
+  emit_local(emit, emit->gwion->type[et_int]);
   stmt->v->from->offset = offset + SZ_INT;
   const m_uint ini_pc  = emit_code_size(emit);
   emit_except(emit, stmt->exp->info->type);
   const Instr loop = emit_add_instr(emit, stmt->is_ptr ? AutoLoopPtr : AutoLoop);
   const Instr end = emit_add_instr(emit, BranchEqInt);
-  CHECK_BB(emit_stmt(emit, stmt->body, 1))
+  const m_bool ret = scoped_stmt(emit, stmt->body, 1);
   *end_pc = emit_code_size(emit);
   if(stmt->is_ptr) {
     loop->m_val2 = (m_uint)stmt->v->type;
@@ -1470,7 +1472,8 @@ ANN static m_bool _emit_stmt_auto(const Emitter emit, const Stmt_Auto stmt, m_ui
   tgt->m_val = ini_pc;
   s1->m_val = loop->m_val = offset;
   regpop(emit, SZ_INT);
-  return GW_OK;
+  emit_pop_scope(emit);
+  return ret;
 }
 
 ANN static m_bool emit_stmt_auto(const Emitter emit, const Stmt_Auto stmt) {