Browse Source

From Lua 5.2: Add luaL_setmetatable().

Contributed by François Perrad.
Mike Pall 8 years ago
parent
commit
2b8de8cfc6
3 changed files with 8 additions and 2 deletions
  1. 1 0
      src/lauxlib.h
  2. 1 2
      src/lib_package.c
  3. 6 0
      src/lj_api.c

+ 1 - 0
src/lauxlib.h

@@ -89,6 +89,7 @@ LUALIB_API void (luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup);
 LUALIB_API void (luaL_pushmodule) (lua_State *L, const char *modname,
 LUALIB_API void (luaL_pushmodule) (lua_State *L, const char *modname,
 				   int sizehint);
 				   int sizehint);
 LUALIB_API void *(luaL_testudata) (lua_State *L, int ud, const char *tname);
 LUALIB_API void *(luaL_testudata) (lua_State *L, int ud, const char *tname);
+LUALIB_API void (luaL_setmetatable) (lua_State *L, const char *tname);
 
 
 
 
 /*
 /*

+ 1 - 2
src/lib_package.c

@@ -193,8 +193,7 @@ static void **ll_register(lua_State *L, const char *path)
     lua_pop(L, 1);
     lua_pop(L, 1);
     plib = (void **)lua_newuserdata(L, sizeof(void *));
     plib = (void **)lua_newuserdata(L, sizeof(void *));
     *plib = NULL;
     *plib = NULL;
-    luaL_getmetatable(L, "_LOADLIB");
-    lua_setmetatable(L, -2);
+    luaL_setmetatable(L, "_LOADLIB");
     lua_pushfstring(L, "LOADLIB: %s", path);
     lua_pushfstring(L, "LOADLIB: %s", path);
     lua_pushvalue(L, -2);
     lua_pushvalue(L, -2);
     lua_settable(L, LUA_REGISTRYINDEX);
     lua_settable(L, LUA_REGISTRYINDEX);

+ 6 - 0
src/lj_api.c

@@ -1000,6 +1000,12 @@ LUA_API int lua_setmetatable(lua_State *L, int idx)
   return 1;
   return 1;
 }
 }
 
 
+LUALIB_API void luaL_setmetatable(lua_State *L, const char *tname)
+{
+  lua_getfield(L, LUA_REGISTRYINDEX, tname);
+  lua_setmetatable(L, -2);
+}
+
 LUA_API int lua_setfenv(lua_State *L, int idx)
 LUA_API int lua_setfenv(lua_State *L, int idx)
 {
 {
   cTValue *o = index2adr(L, idx);
   cTValue *o = index2adr(L, idx);