public static int print(IntPtr L) { int n = LuaAPI.lua_gettop(L); string s = String.Empty; LuaAPI.lua_getglobal(L, "tostring"); for (int i = 1; i <= n; i++) { LuaAPI.lua_pushvalue(L, -1); /* function to be called */ LuaAPI.lua_pushvalue(L, i); /* value to print */ if (0 != LuaAPI.lua_pcall(L, 1, 1, 0)) { return(LuaAPI.lua_error(L)); } s += LuaAPI.lua_tostring(L, -1); if (i != n) { s += "\t"; } LuaAPI.lua_pop(L, 1); } UnityEngine.Debug.Log("LUA: " + s); return(0); }
public static ObjectTranslator FromState(IntPtr luaState) { LuaAPI.lua_getglobal(luaState, "_translator"); int pos = (int)LuaAPI.lua_tonumber(luaState, -1); LuaAPI.lua_pop(luaState, 1); return(list[pos]); }
public static int traceback(IntPtr L) { LuaAPI.lua_getglobal(L, "debug"); LuaAPI.lua_getfield(L, -1, "traceback"); LuaAPI.lua_pushvalue(L, 1); LuaAPI.lua_pushnumber(L, 2); LuaAPI.lua_pcall(L, 2, 1, 0); return(1); }
public void AddLoader(LuaCSFunction loader, int index) { LuaAPI.lua_getglobal(L, "package"); LuaAPI.lua_getfield(L, -1, "searchers"); LuaAPI.lua_remove(L, -2); //remv table package int len = LuaAPI.lua_rawlen(L, -1); for (int i = len + 1; i > index; i--) { LuaAPI.ulua_rawgeti(L, -1, i - 1); LuaAPI.ulua_rawseti(L, -2, i); } LuaAPI.lua_pushstdcallcfunction(L, loader); LuaAPI.ulua_rawseti(L, -2, index); }
public object this[string fullPath] { get { object returnValue = null; int oldTop = LuaAPI.lua_gettop(L); string[] path = fullPath.Split(new char[] { '.' }); LuaAPI.lua_getglobal(L, path[0]); returnValue = translator.getObject(L, -1); if (path.Length > 1) { string[] remainingPath = new string[path.Length - 1]; Array.Copy(path, 1, remainingPath, 0, path.Length - 1); returnValue = getObject(remainingPath); } LuaAPI.lua_settop(L, oldTop); return(returnValue); } set { int oldTop = LuaAPI.lua_gettop(L); string[] path = fullPath.Split(new char[] { '.' }); if (path.Length == 1) { translator.push(L, value); LuaAPI.lua_setglobal(L, fullPath); } else { LuaAPI.lua_getglobal(L, path[0]); LuaTypes type = LuaAPI.lua_type(L, -1); if (type == LuaTypes.LUA_TNIL) { Debugger.LogError("Table {0} not exists", path[0]); LuaAPI.lua_settop(L, oldTop); return; } string[] remainingPath = new string[path.Length - 1]; Array.Copy(path, 1, remainingPath, 0, path.Length - 1); setObject(remainingPath, value); } LuaAPI.lua_settop(L, oldTop); } }
private void setGlobalFunctions(IntPtr luaState) { LuaAPI.lua_pushstdcallcfunction(luaState, metaFunctions.indexFunction); LuaAPI.lua_setglobal(luaState, "get_object_member"); LuaAPI.lua_getglobal(luaState, "luanet"); LuaAPI.lua_pushstring(luaState, "import_type"); LuaAPI.lua_pushstdcallcfunction(luaState, importTypeFunction); LuaAPI.lua_settable(luaState, -3); LuaAPI.lua_pushstring(luaState, "load_assembly"); LuaAPI.lua_pushstdcallcfunction(luaState, loadAssemblyFunction); LuaAPI.lua_settable(luaState, -3); LuaAPI.lua_pushstring(luaState, "make_object"); LuaAPI.lua_pushstdcallcfunction(luaState, unregisterTableFunction); LuaAPI.lua_settable(luaState, -3); LuaAPI.lua_pushstring(luaState, "ctype"); LuaAPI.lua_pushstdcallcfunction(luaState, ctypeFunction); LuaAPI.lua_settable(luaState, -3); LuaAPI.lua_pushstring(luaState, "enum"); LuaAPI.lua_pushstdcallcfunction(luaState, enumFromIntFunction); LuaAPI.lua_settable(luaState, -3); }
public LuaState() { L = LuaAPI.luaL_newstate(); LuaAPI.luaL_openlibs(L); LuaAPI.lua_newtable(L); LuaAPI.lua_pushstring(L, "getmetatable"); LuaAPI.lua_getglobal(L, "getmetatable"); LuaAPI.lua_settable(L, -3); LuaAPI.lua_pushstring(L, "rawget"); LuaAPI.lua_getglobal(L, "rawget"); LuaAPI.lua_settable(L, -3); LuaAPI.lua_pushstring(L, "rawset"); LuaAPI.lua_getglobal(L, "rawset"); LuaAPI.lua_settable(L, -3); LuaAPI.lua_setglobal(L, "luanet"); LuaAPI.lua_getglobal(L, "luanet"); translator = new ObjectTranslator(this, L); translator.PushTranslator(L); LuaAPI.lua_atpanic(L, LuaStatic.panic); LuaAPI.lua_pushstdcallcfunction(L, LuaStatic.print); LuaAPI.lua_setglobal(L, "print"); LuaAPI.lua_pushstdcallcfunction(L, LuaStatic.loadfile); LuaAPI.lua_setglobal(L, "loadfile"); LuaAPI.lua_pushstdcallcfunction(L, LuaStatic.dofile); LuaAPI.lua_setglobal(L, "dofile"); LuaAPI.lua_pushstdcallcfunction(L, LuaStatic.importWrap); LuaAPI.lua_setglobal(L, "import"); AddLoader(LuaStatic.loader, 2); AddLoader(LuaStatic.LoadBuiltinLib, 3); errorFuncRef = LuaAPI.get_error_func_ref(L); LuaAPI.lua_settop(L, 0); //clear stack }