From 8a9519a5f442726bafa954f5beecf67b0df3cf45 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Mon, 2 Sep 2013 01:55:07 +0200 Subject: [PATCH] Add internal API to add sub-modules to package.preload. --- src/lj_lib.c | 10 ++++++++++ src/lj_lib.h | 2 ++ 2 files changed, 12 insertions(+) diff --git a/src/lj_lib.c b/src/lj_lib.c index bdbaba1d..df66ed51 100644 --- a/src/lj_lib.c +++ b/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) diff --git a/src/lj_lib.h b/src/lj_lib.h index 463bfb60..f9377bad 100644 --- a/src/lj_lib.h +++ b/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