aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2017-04-07 12:38:05 +0200
committerMike Pall <mike>2017-04-07 12:38:05 +0200
commit2b8de8cfc6ae483d6ec16b7609bab64e37d6fc02 (patch)
tree4bd1834a7f4b22d215b9d89a04e33452155e71ec
parentcde968f91f28a4819e15443a5f32c89daddb4c15 (diff)
downloadluajit-2b8de8cfc6ae483d6ec16b7609bab64e37d6fc02.tar.gz
luajit-2b8de8cfc6ae483d6ec16b7609bab64e37d6fc02.tar.bz2
luajit-2b8de8cfc6ae483d6ec16b7609bab64e37d6fc02.zip
From Lua 5.2: Add luaL_setmetatable().
Contributed by François Perrad.
-rw-r--r--src/lauxlib.h1
-rw-r--r--src/lib_package.c3
-rw-r--r--src/lj_api.c6
3 files changed, 8 insertions, 2 deletions
diff --git a/src/lauxlib.h b/src/lauxlib.h
index 1ca0d74f..a44f0272 100644
--- a/src/lauxlib.h
+++ b/src/lauxlib.h
@@ -89,6 +89,7 @@ LUALIB_API void (luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup);
89LUALIB_API void (luaL_pushmodule) (lua_State *L, const char *modname, 89LUALIB_API void (luaL_pushmodule) (lua_State *L, const char *modname,
90 int sizehint); 90 int sizehint);
91LUALIB_API void *(luaL_testudata) (lua_State *L, int ud, const char *tname); 91LUALIB_API void *(luaL_testudata) (lua_State *L, int ud, const char *tname);
92LUALIB_API void (luaL_setmetatable) (lua_State *L, const char *tname);
92 93
93 94
94/* 95/*
diff --git a/src/lib_package.c b/src/lib_package.c
index 40bafed5..6fac43ec 100644
--- a/src/lib_package.c
+++ b/src/lib_package.c
@@ -193,8 +193,7 @@ static void **ll_register(lua_State *L, const char *path)
193 lua_pop(L, 1); 193 lua_pop(L, 1);
194 plib = (void **)lua_newuserdata(L, sizeof(void *)); 194 plib = (void **)lua_newuserdata(L, sizeof(void *));
195 *plib = NULL; 195 *plib = NULL;
196 luaL_getmetatable(L, "_LOADLIB"); 196 luaL_setmetatable(L, "_LOADLIB");
197 lua_setmetatable(L, -2);
198 lua_pushfstring(L, "LOADLIB: %s", path); 197 lua_pushfstring(L, "LOADLIB: %s", path);
199 lua_pushvalue(L, -2); 198 lua_pushvalue(L, -2);
200 lua_settable(L, LUA_REGISTRYINDEX); 199 lua_settable(L, LUA_REGISTRYINDEX);
diff --git a/src/lj_api.c b/src/lj_api.c
index c784ed3f..fe8880eb 100644
--- a/src/lj_api.c
+++ b/src/lj_api.c
@@ -1000,6 +1000,12 @@ LUA_API int lua_setmetatable(lua_State *L, int idx)
1000 return 1; 1000 return 1;
1001} 1001}
1002 1002
1003LUALIB_API void luaL_setmetatable(lua_State *L, const char *tname)
1004{
1005 lua_getfield(L, LUA_REGISTRYINDEX, tname);
1006 lua_setmetatable(L, -2);
1007}
1008
1003LUA_API int lua_setfenv(lua_State *L, int idx) 1009LUA_API int lua_setfenv(lua_State *L, int idx)
1004{ 1010{
1005 cTValue *o = index2adr(L, idx); 1011 cTValue *o = index2adr(L, idx);