From ad3491890872721b7cfb81517c1465c7bdbd53a8 Mon Sep 17 00:00:00 2001 From: Benoit Giannangeli Date: Wed, 12 Apr 2017 16:26:13 +0200 Subject: debug.setmetatable debug.getmetatable --- README.md | 4 ++-- src/ldblib.js | 28 +++++++++++++++++++++++----- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index b23562c..2e53fc2 100644 --- a/README.md +++ b/README.md @@ -88,15 +88,15 @@ - [x] debug.debug - [x] debug.getinfo - [x] debug.getlocal + - [x] debug.getmetatable - [x] debug.getregistry + - [x] debug.setmetatable - [x] debug.traceback - [ ] debug.gethook - - [ ] debug.getmetatable - [ ] debug.getupvalue - [ ] debug.getuservalue - [ ] debug.sethook - [ ] debug.setlocal - - [ ] debug.setmetatable - [ ] debug.setupvalue - [ ] debug.setuservalue - [ ] debug.upvalueid diff --git a/src/ldblib.js b/src/ldblib.js index 7dde1c4..2edc507 100644 --- a/src/ldblib.js +++ b/src/ldblib.js @@ -23,6 +23,22 @@ const db_getregistry = function(L) { return 1; }; +const db_getmetatable = function(L) { + lauxlib.luaL_checkany(L, 1); + if (!lapi.lua_getmetatable(L, 1)) { + lapi.lua_pushnil(L); /* no metatable */ + } + return 1; +}; + +const db_setmetatable = function(L) { + const t = lapi.lua_type(L, 2); + lauxlib.luaL_argcheck(L, t == lua.CT.LUA_TNIL || t == lua.CT.LUA_TTABLE, 2, lua.to_luastring("nil or table expected")); + lapi.lua_settop(L, 2); + lapi.lua_setmetatable(L, 1); + return 1; /* return 1st argument */ +}; + /* ** Auxiliary function used by several library functions: check for ** an optional thread as function's first argument and set 'arg' with @@ -194,11 +210,13 @@ const db_traceback = function(L) { }; const dblib = { - "getinfo": db_getinfo, - "getlocal": db_getlocal, - "getregistry": db_getregistry, - "traceback": db_traceback, - "upvalueid": db_upvalueid + "getinfo": db_getinfo, + "getlocal": db_getlocal, + "getmetatable": db_getmetatable, + "getregistry": db_getregistry, + "setmetatable": db_setmetatable, + "traceback": db_traceback, + "upvalueid": db_upvalueid }; // Only with Node -- cgit v1.2.3-70-g09d2