瀏覽代碼

FFI: Register the FFI library as a loaded module in luaopen_ffi().

Allows loading it on startup like other libraries in lib_init.c.
Mike Pall 14 年之前
父節點
當前提交
ee644872e3
共有 2 個文件被更改,包括 12 次插入7 次删除
  1. 12 0
      src/lib_ffi.c
  2. 0 7
      src/lj_lex.c

+ 12 - 0
src/lib_ffi.c

@@ -576,6 +576,17 @@ static GCtab *ffi_finalizer(lua_State *L)
   return t;
 }
 
+/* Register FFI module as loaded. */
+static void ffi_register_module(lua_State *L)
+{
+  cTValue *tmp = lj_tab_getstr(tabV(registry(L)), lj_str_newlit(L, "_LOADED"));
+  if (tmp && tvistab(tmp)) {
+    GCtab *t = tabV(tmp);
+    copyTV(L, lj_tab_setstr(L, t, lj_str_newlit(L, LUA_FFILIBNAME)), L->top-1);
+    lj_gc_anybarriert(L, t);
+  }
+}
+
 LUALIB_API int luaopen_ffi(lua_State *L)
 {
   CTState *cts = lj_ctype_init(L);
@@ -588,6 +599,7 @@ LUALIB_API int luaopen_ffi(lua_State *L)
   lua_pushliteral(L, LJ_OS_NAME);
   lua_pushliteral(L, LJ_ARCH_NAME);
   LJ_LIB_REG(L, NULL, ffi);  /* Note: no global "ffi" created! */
+  ffi_register_module(L);
   return 1;
 }
 

+ 0 - 7
src/lj_lex.c

@@ -89,14 +89,7 @@ static void inclinenumber(LexState *ls)
 static void lex_loadffi(lua_State *L)
 {
   ptrdiff_t oldtop = savestack(L, L->top);
-  cTValue *tmp;
   luaopen_ffi(L);
-  tmp = lj_tab_getstr(tabV(registry(L)), lj_str_newlit(L, "_LOADED"));
-  if (tmp && tvistab(tmp)) {
-    GCtab *t = tabV(tmp);
-    copyTV(L, lj_tab_setstr(L, t, lj_str_newlit(L, "ffi")), L->top-1);
-    lj_gc_anybarriert(L, t);
-  }
   L->top = restorestack(L, oldtop);
 }