summaryrefslogtreecommitdiff
path: root/plugins/MirLua/src/mlua.cpp
diff options
context:
space:
mode:
authoraunsane <aunsane@gmail.com>2017-09-26 23:32:12 +0300
committeraunsane <aunsane@gmail.com>2017-09-26 23:34:06 +0300
commit2258b1b2cf951347d167d01201f0dc4bbf9a4428 (patch)
tree1632e76ea7b29da80a24a1c204d5fce932ec5e15 /plugins/MirLua/src/mlua.cpp
parent8756de2ffe2d86c34c8a37f08d68aeeb51b487c3 (diff)
MirLua: refactoring
- respect metatables in print function - srmm module functions now return metatable - version bump
Diffstat (limited to 'plugins/MirLua/src/mlua.cpp')
-rw-r--r--plugins/MirLua/src/mlua.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/plugins/MirLua/src/mlua.cpp b/plugins/MirLua/src/mlua.cpp
index d3c835ee7d..5229196f64 100644
--- a/plugins/MirLua/src/mlua.cpp
+++ b/plugins/MirLua/src/mlua.cpp
@@ -42,6 +42,21 @@ static int mlua_print(lua_State *L)
data.AppendFormat("%s", lua_tostring(L, i));
break;
default:
+ if (lua_getmetatable(L, 1))
+ {
+ if (lua_getfield(L, -1, "__tostring") == LUA_TFUNCTION)
+ {
+ lua_pushvalue(L, 1);
+ if (luaM_pcall(L, 1, 1) == LUA_OK)
+ {
+ data.AppendFormat("%s", lua_tostring(L, -1));
+ lua_pop(L, 2);
+ break;
+ }
+ lua_pop(L, 2);
+ }
+ lua_pop(L, 1);
+ }
data.AppendFormat("%s(0x%p)", luaL_typename(L, i), lua_topointer(L, i));
break;
}