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);
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;
}
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);
}