From 23d15010edc905a3b7c123e85ef6d1960d3da039 Mon Sep 17 00:00:00 2001 From: Benoit Giannangeli Date: Tue, 21 Feb 2017 08:46:48 +0100 Subject: luaG_ functions --- src/ltm.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/ltm.js') diff --git a/src/ltm.js b/src/ltm.js index 77d65e4..f163f44 100644 --- a/src/ltm.js +++ b/src/ltm.js @@ -65,6 +65,21 @@ const luaT_init = function(L) { } }; +/* +** Return the name of the type of an object. For tables and userdata +** with metatable, use their '__name' metafield, if present. +*/ +const luaT_objtypename = function(L, o) { + if ((o.ttistable() && o.metatable !== null) + || (o.ttisfulluserdata() && o.metatable !== null)) { + let name = o.__index(o, '__name'); + if (name.ttisstring()) + return name.value; + } + + return ttypename(o.ttnov()); +}; + const luaT_callTM = function(L, f, p1, p2, p3, hasres) { let result = p3; let func = L.top; @@ -131,4 +146,5 @@ module.exports.luaT_trybinTM = luaT_trybinTM; module.exports.luaT_callorderTM = luaT_callorderTM; module.exports.luaT_gettmbyobj = luaT_gettmbyobj; module.exports.luaT_init = luaT_init; +module.exports.luaT_objtypename = luaT_objtypename; module.exports.ttypename = ttypename; \ No newline at end of file -- cgit v1.2.3-54-g00ecf