internal static int print(IntPtr L) { int n = LuaDLL.lua_gettop(L); string s = ""; LuaDLL.lua_getglobal(L, "tostring"); for (int i = 1; i <= n; i++) { if (i > 1) { s += " "; } LuaDLL.lua_pushvalue(L, -1); LuaDLL.lua_pushvalue(L, i); LuaDLL.lua_call(L, 1, 1); s += LuaDLL.lua_tostring(L, -1); LuaDLL.lua_pop(L, 1); } LuaDLL.lua_settop(L, n); SluaLogger.Log(s); if (logDelegate != null) { logDelegate(s); } return(0); }
public static int errorReport(IntPtr L) { LuaDLL.lua_getglobal(L, "debug"); LuaDLL.lua_getfield(L, -1, "traceback"); LuaDLL.lua_pushvalue(L, 1); LuaDLL.lua_pushnumber(L, 2); LuaDLL.lua_call(L, 2, 1); LuaDLL.lua_remove(L, -2); SluaLogger.LogError(LuaDLL.lua_tostring(L, -1)); if (errorDelegate != null) { errorDelegate(LuaDLL.lua_tostring(L, -1)); } LuaDLL.lua_pop(L, 1); return(0); }
public object doFile(string fn) { byte[] bytes = loadFile(fn); if (bytes == null) { SluaLogger.LogError(string.Format("Can't find {0}", fn)); return(null); } object obj; if (doBuffer(bytes, "@" + fn, out obj)) { return(obj); } return(null); }
public void Close() { if (L != IntPtr.Zero) { if (LuaState.main == this) { SluaLogger.Log("Finalizing Lua State."); // be careful, if you close lua vm, make sure you don't use lua state again, // comment this line as default for avoid unexpected crash. LuaDLL.lua_close(L); ObjectCache.del(L); ObjectCache.clear(); statemap.Clear(); oldptr = IntPtr.Zero; oldstate = null; L = IntPtr.Zero; LuaState.main = null; } } }