]> Nishi Git Mirror - gwion.git/commitdiff
:art: Improve function ending
authorJérémie Astor <fennecdjay@gmail.com>
Sun, 27 Jun 2021 21:51:29 +0000 (23:51 +0200)
committerJérémie Astor <fennecdjay@gmail.com>
Sun, 27 Jun 2021 21:51:29 +0000 (23:51 +0200)
src/emit/emit.c
src/vm/vm_code.c

index 7326779966dbc0e28e3e102e4ec51205a202ed99..b1c8f71e2b4f3b0fbd644dd086f88a704631d89d 100644 (file)
@@ -2524,15 +2524,6 @@ ANN static void emit_func_def_args(const Emitter emit, Arg_List a) {
   } while ((a = a->next));
 }
 
-ANN static void emit_func_def_ensure(const Emitter emit, const Func_Def fdef) {
-  const m_uint size = fdef->base->ret_type->size;
-  if (size) {
-    const Instr instr = emit_regpushimm(emit, size, false);
-    instr->m_val2     = size;
-  }
-  vector_add(&emit->code->stack_return, (vtype)emit_add_instr(emit, Goto));
-}
-
 ANN static m_bool emit_func_def_return(const Emitter emit) {
   const m_uint val = emit_code_size(emit);
   CHECK_BB(emit_defers(emit));
@@ -2577,7 +2568,6 @@ ANN static m_bool emit_func_def_body(const Emitter emit, const Func_Def fdef) {
   if (fdef->base->args) emit_func_def_args(emit, fdef->base->args);
   if (fbflag(fdef->base, fbflag_variadic)) stack_alloc(emit);
   if (fdef->d.code) CHECK_BB(scoped_stmt(emit, fdef->d.code, 1));
-  emit_func_def_ensure(emit, fdef);
   return GW_OK;
 }
 
index b82334122d0a0b712986a5e5e2111878b7968ba4..1178633ec0bcbbba03ffd1fb46c60617e1b92172 100644 (file)
@@ -139,6 +139,7 @@ ANN static m_bit *tobytecode(MemPool p, const VM_Code code) {
           map_set(&code->handlers, j, new_pc);
         }
         *(m_uint *)(data + SZ_INT) = new_pc;
+        instr->m_val = new_pc;
       } else if (opcode == eRecurs /*|| opcode == eSetCode*/) {
         *(uint16_t *)(final + j * BYTECODE_SZ + SZ_INT * 2) =
             instr->udata.one += j + 1;