]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
Rearrange library functions to get a fixed FF_next.
authorMike Pall <mike>
Mon, 24 Sep 2012 15:13:53 +0000 (17:13 +0200)
committerMike Pall <mike>
Mon, 24 Sep 2012 15:13:53 +0000 (17:13 +0200)
src/lib_base.c
src/lj_bc.h

index 1d736b24f28d541eb5a6748d041da5dc8f6d43f8..d63c98031aef7c091987f20f7ab4ca74ea520e96 100644 (file)
@@ -68,6 +68,56 @@ LJLIB_PUSH("number")
 LJLIB_ASM_(type)               LJLIB_REC(.)
 /* Recycle the lj_lib_checkany(L, 1) from assert. */
 
+/* -- Base library: iterators --------------------------------------------- */
+
+/* This solves a circular dependency problem -- change FF_next_N as needed. */
+LJ_STATIC_ASSERT((int)FF_next == FF_next_N);
+
+LJLIB_ASM(next)
+{
+  lj_lib_checktab(L, 1);
+  return FFH_UNREACHABLE;
+}
+
+#if LJ_52 || LJ_HASFFI
+static int ffh_pairs(lua_State *L, MMS mm)
+{
+  TValue *o = lj_lib_checkany(L, 1);
+  cTValue *mo = lj_meta_lookup(L, o, mm);
+  if ((LJ_52 || tviscdata(o)) && !tvisnil(mo)) {
+    L->top = o+1;  /* Only keep one argument. */
+    copyTV(L, L->base-1, mo);  /* Replace callable. */
+    return FFH_TAILCALL;
+  } else {
+    if (!tvistab(o)) lj_err_argt(L, 1, LUA_TTABLE);
+    setfuncV(L, o-1, funcV(lj_lib_upvalue(L, 1)));
+    if (mm == MM_pairs) setnilV(o+1); else setintV(o+1, 0);
+    return FFH_RES(3);
+  }
+}
+#else
+#define ffh_pairs(L, mm)       (lj_lib_checktab(L, 1), FFH_UNREACHABLE)
+#endif
+
+LJLIB_PUSH(lastcl)
+LJLIB_ASM(pairs)
+{
+  return ffh_pairs(L, MM_pairs);
+}
+
+LJLIB_NOREGUV LJLIB_ASM(ipairs_aux)    LJLIB_REC(.)
+{
+  lj_lib_checktab(L, 1);
+  lj_lib_checkint(L, 2);
+  return FFH_UNREACHABLE;
+}
+
+LJLIB_PUSH(lastcl)
+LJLIB_ASM(ipairs)              LJLIB_REC(.)
+{
+  return ffh_pairs(L, MM_ipairs);
+}
+
 /* -- Base library: getters and setters ----------------------------------- */
 
 LJLIB_ASM_(getmetatable)       LJLIB_REC(.)
@@ -267,56 +317,6 @@ LJLIB_ASM(tostring)                LJLIB_REC(.)
   }
 }
 
-/* -- Base library: iterators --------------------------------------------- */
-
-/* This solves a circular dependency problem -- change FF_next_N as needed. */
-LJ_STATIC_ASSERT((int)FF_next == FF_next_N);
-
-LJLIB_ASM(next)
-{
-  lj_lib_checktab(L, 1);
-  return FFH_UNREACHABLE;
-}
-
-#if LJ_52 || LJ_HASFFI
-static int ffh_pairs(lua_State *L, MMS mm)
-{
-  TValue *o = lj_lib_checkany(L, 1);
-  cTValue *mo = lj_meta_lookup(L, o, mm);
-  if ((LJ_52 || tviscdata(o)) && !tvisnil(mo)) {
-    L->top = o+1;  /* Only keep one argument. */
-    copyTV(L, L->base-1, mo);  /* Replace callable. */
-    return FFH_TAILCALL;
-  } else {
-    if (!tvistab(o)) lj_err_argt(L, 1, LUA_TTABLE);
-    setfuncV(L, o-1, funcV(lj_lib_upvalue(L, 1)));
-    if (mm == MM_pairs) setnilV(o+1); else setintV(o+1, 0);
-    return FFH_RES(3);
-  }
-}
-#else
-#define ffh_pairs(L, mm)       (lj_lib_checktab(L, 1), FFH_UNREACHABLE)
-#endif
-
-LJLIB_PUSH(lastcl)
-LJLIB_ASM(pairs)
-{
-  return ffh_pairs(L, MM_pairs);
-}
-
-LJLIB_NOREGUV LJLIB_ASM(ipairs_aux)    LJLIB_REC(.)
-{
-  lj_lib_checktab(L, 1);
-  lj_lib_checkint(L, 2);
-  return FFH_UNREACHABLE;
-}
-
-LJLIB_PUSH(lastcl)
-LJLIB_ASM(ipairs)              LJLIB_REC(.)
-{
-  return ffh_pairs(L, MM_ipairs);
-}
-
 /* -- Base library: throw and catch errors -------------------------------- */
 
 LJLIB_CF(error)
index 0a82c9d450285b1092dd6c5187aeb86c5de2937f..5edff707267967aa9a5dc9e3ba968789820f1c84 100644 (file)
@@ -224,7 +224,7 @@ LJ_STATIC_ASSERT((int)BC_FUNCV + 1 == (int)BC_IFUNCV);
 LJ_STATIC_ASSERT((int)BC_FUNCV + 2 == (int)BC_JFUNCV);
 
 /* This solves a circular dependency problem, change as needed. */
-#define FF_next_N      15
+#define FF_next_N      4
 
 /* Stack slots used by FORI/FORL, relative to operand A. */
 enum {