浏览代码

Some bugfixes

Hugo Musso Gualandi 3 年之前
父节点
当前提交
ebb378239c
共有 2 个文件被更改,包括 11 次插入4 次删除
  1. 7 0
      src/functions_header.c
  2. 4 4
      src/luaot_functions.c

+ 7 - 0
src/functions_header.c

@@ -110,6 +110,13 @@ typedef struct {
   (f)(L, ctx, pc, ra, v1, v2); \
 }
 
+#define luaot_arithfK(L, f) {  \
+  TValue *v1 = vRB(i);  \
+  TValue *v2 = KC(i); \
+  lua_assert(ttisnumber(v2));  \
+  (f)(L, ctx, pc, ra, v1, v2); \
+}
+
 #define luaot_bitwiseK(L, f) { \
   TValue *v1 = vRB(i); \
   TValue *v2 = KC(i);  \

+ 4 - 4
src/luaot_functions.c

@@ -145,7 +145,7 @@ void create_function(Proto *f)
                 break;
             }
             case OP_LOADTRUE: {
-                println("    luaot_LOADTRUE(ra)");
+                println("    luaot_LOADTRUE(ra);");
                 break;
             }
             case OP_LOADNIL: {
@@ -178,7 +178,7 @@ void create_function(Proto *f)
             case OP_GETI: {
                 println("    TValue *rb = vRB(i);");
                 println("    int c = GETARG_C(i);");
-                println("    luaot_GETI(L, ctx, pc, ra, rb, rc);");
+                println("    luaot_GETI(L, ctx, pc, ra, rb, c);");
                 break;
             }
             case OP_GETFIELD: {
@@ -215,7 +215,7 @@ void create_function(Proto *f)
             case OP_NEWTABLE: {
                 println("    int b = GETARG_B(i);  /* log2(hash size) + 1 */");
                 println("    int c = GETARG_C(i);  /* array size */");
-                println("    int k = TESTARK_k(i);");
+                println("    int k = TESTARG_k(i);");
                 println("    lua_assert((!k) == (GETARG_Ax(0x%08x) == 0));", f->code[pc+1]);
                 println("    if (k) {");
                 println("        luaot_NEWTABLE_1(L, ctx, pc, ra, b, c);");
@@ -590,7 +590,7 @@ void create_function(Proto *f)
                 break;
             }
             case OP_TFORLOOP: {
-                println("    if (luaot_TFORLOOP(L, ctx, pc, ra) {");
+                println("    if (luaot_TFORLOOP(L, ctx, pc, ra)) {");
                 println("      goto label_%02d; /* jump back */", ((pc+1) - GETARG_Bx(instr))); //(!)
                 println("    }");
                 break;