Browse Source

Implement OP_CLOSURE

Hugo Musso Gualandi 3 năm trước cách đây
mục cha
commit
f60cc933c9
2 tập tin đã thay đổi với 11 bổ sung3 xóa
  1. 9 0
      src/functions_header.c
  2. 2 3
      src/luaot_functions.c

+ 9 - 0
src/functions_header.c

@@ -879,6 +879,15 @@ CallInfo* luaot_CALL(lua_State *L, LuaotExecuteState *ctx, const Instruction *pc
     }
 }
 
+static
+void luaot_CLOSURE(lua_State *L, LuaotExecuteState *ctx, const Instruction *pc,
+                   StkId ra, int b)
+{
+    Proto *p = ctx->cl->p->p[b];
+    halfProtect(pushclosure(L, p, ctx->cl->upvals, ctx->base, ra));
+    checkGC(L, ra + 1);
+}
+
 static
 void luaot_VARARG(lua_State *L, LuaotExecuteState *ctx, const Instruction *pc,
                   StkId ra, int n)

+ 2 - 3
src/luaot_functions.c

@@ -649,9 +649,8 @@ void create_function(Proto *f)
                 break;
             }
             case OP_CLOSURE: {
-                println("    Proto *p = ctx->cl->p->p[GETARG_Bx(i)];");
-                println("    halfProtect(pushclosure(L, p, ctx->cl->upvals, ctx->base, ra));");
-                println("    checkGC(L, ra + 1);");
+                println("    int b = GETARG_Bx(i);");
+                println("    luaot_CLOSURE(L, ctx, pc, ra, b);");
                 break;
             }
             case OP_VARARG: {