2
0
Эх сурвалжийг харах

Add internal API to add sub-modules to package.preload.

Mike Pall 12 жил өмнө
parent
commit
8a9519a5f4
2 өөрчлөгдсөн 12 нэмэгдсэн , 0 устгасан
  1. 10 0
      src/lj_lib.c
  2. 2 0
      src/lj_lib.h

+ 10 - 0
src/lj_lib.c

@@ -148,6 +148,16 @@ void lj_lib_register(lua_State *L, const char *libname,
   }
 }
 
+void lj_lib_prereg(lua_State *L, const char *name, lua_CFunction f, GCtab *env)
+{
+  luaL_findtable(L, LUA_REGISTRYINDEX, "_PRELOAD", 4);
+  lua_pushcfunction(L, f);
+  /* NOBARRIER: The function is new (marked white). */
+  setgcref(funcV(L->top-1)->c.env, obj2gco(env));
+  lua_setfield(L, -2, name);
+  L->top--;
+}
+
 /* -- Type checks --------------------------------------------------------- */
 
 TValue *lj_lib_checkany(lua_State *L, int narg)

+ 2 - 0
src/lj_lib.h

@@ -89,6 +89,8 @@ static LJ_AINLINE GCfunc *lj_lib_pushcc(lua_State *L, lua_CFunction f,
 
 LJ_FUNC void lj_lib_register(lua_State *L, const char *libname,
 			     const uint8_t *init, const lua_CFunction *cf);
+LJ_FUNC void lj_lib_prereg(lua_State *L, const char *name, lua_CFunction f,
+			   GCtab *env);
 
 /* Library init data tags. */
 #define LIBINIT_LENMASK	0x3f