diff --git a/Assets/LuaFramework/Lua/Main.lua b/Assets/LuaFramework/Lua/Main.lua index d3981aa27..95bd32c23 100644 --- a/Assets/LuaFramework/Lua/Main.lua +++ b/Assets/LuaFramework/Lua/Main.lua @@ -7,4 +7,7 @@ end function OnLevelWasLoaded(level) collectgarbage("collect") Time.timeSinceLevelLoad = 0 +end + +function OnApplicationQuit() end \ No newline at end of file diff --git a/Assets/LuaFramework/ToLua/Core/LuaDLL.cs b/Assets/LuaFramework/ToLua/Core/LuaDLL.cs index 5f7281d9b..83d126d30 100644 --- a/Assets/LuaFramework/ToLua/Core/LuaDLL.cs +++ b/Assets/LuaFramework/ToLua/Core/LuaDLL.cs @@ -187,7 +187,7 @@ public string short_src public class LuaDLL { - public static string version = "1.0.7.364"; + public static string version = "1.0.7.377"; public static int LUA_MULTRET = -1; public static string[] LuaTypeName = { "none", "nil", "boolean", "lightuserdata", "number", "string", "table", "function", "userdata", "thread" }; diff --git a/Assets/LuaFramework/ToLua/Core/LuaFunction.cs b/Assets/LuaFramework/ToLua/Core/LuaFunction.cs index 3dcbeb66a..43fdd8b8d 100644 --- a/Assets/LuaFramework/ToLua/Core/LuaFunction.cs +++ b/Assets/LuaFramework/ToLua/Core/LuaFunction.cs @@ -365,6 +365,7 @@ public R1 Invoke() } //慎用, 有gc alloc + [System.Obsolete("LuaFunction.LazyCall() is obsolete.Use LuaFunction.Invoke()")] public object[] LazyCall(params object[] args) { BeginPCall(); @@ -375,7 +376,7 @@ public object[] LazyCall(params object[] args) EndPCall(); throw new LuaException("stack overflow"); } - + PushArgs(args); PCall(); object[] objs = luaState.CheckObjects(oldTop); diff --git a/Assets/LuaFramework/ToLua/Core/LuaState.cs b/Assets/LuaFramework/ToLua/Core/LuaState.cs index 7dcfdad08..bf6d7828f 100644 --- a/Assets/LuaFramework/ToLua/Core/LuaState.cs +++ b/Assets/LuaFramework/ToLua/Core/LuaState.cs @@ -579,7 +579,7 @@ public T DoString(string chunk, string chunkName = "LuaState.cs") return LuaLoadBuffer(buffer, chunkName); } - public void DoFile(string fileName) + byte[] LoadFileBuffer(string fileName) { #if UNITY_EDITOR if (!beStart) @@ -596,36 +596,30 @@ public void DoFile(string fileName) throw new LuaException(error); } + return buffer; + } + + string LuaChunkName(string name) + { if (LuaConst.openLuaDebugger) { - fileName = LuaFileUtils.Instance.FindFile(fileName); + name = LuaFileUtils.Instance.FindFile(name); } + return "@" + name; + } + + public void DoFile(string fileName) + { + byte[] buffer = LoadFileBuffer(fileName); + fileName = LuaChunkName(fileName); LuaLoadBuffer(buffer, fileName); } public T DoFile(string fileName) { -#if UNITY_EDITOR - if (!beStart) - { - throw new LuaException("you must call Start() first to initialize LuaState"); - } -#endif - byte[] buffer = LuaFileUtils.Instance.ReadFile(fileName); - - if (buffer == null) - { - string error = string.Format("cannot open {0}: No such file or directory", fileName); - error += LuaFileUtils.Instance.FindFileError(fileName); - throw new LuaException(error); - } - - if (LuaConst.openLuaDebugger) - { - fileName = LuaFileUtils.Instance.FindFile(fileName); - } - + byte[] buffer = LoadFileBuffer(fileName); + fileName = LuaChunkName(fileName); return LuaLoadBuffer(buffer, fileName); } @@ -1807,6 +1801,46 @@ public void RefreshDelegateMap() } } + public void NewTable(string fullPath) + { + string[] path = fullPath.Split(new char[] { '.' }); + int oldTop = LuaDLL.lua_gettop(L); + + if (path.Length == 1) + { + LuaDLL.lua_newtable(L); + LuaDLL.lua_setglobal(L, fullPath); + } + else + { + LuaDLL.lua_getglobal(L, path[0]); + + for (int i = 1; i < path.Length - 1; i++) + { + LuaDLL.lua_pushstring(L, path[i]); + LuaDLL.lua_gettable(L, -2); + } + + LuaDLL.lua_pushstring(L, path[path.Length - 1]); + LuaDLL.lua_newtable(L); + LuaDLL.lua_settable(L, -3); + } + + LuaDLL.lua_settop(L, oldTop); + } + + + public LuaTable NewTable(int narr = 0, int nrec = 0) + { + int oldTop = LuaDLL.lua_gettop(L); + + LuaDLL.lua_createtable(L, 0, 0); + LuaTable table = ToLua.ToLuaTable(L, oldTop + 1); + + LuaDLL.lua_settop(L, oldTop); + return table; + } + //慎用 public void ReLoad(string moduleFileName) { diff --git a/Assets/LuaFramework/ToLua/Core/LuaStatePtr.cs b/Assets/LuaFramework/ToLua/Core/LuaStatePtr.cs index 57b85797e..e9e030df1 100644 --- a/Assets/LuaFramework/ToLua/Core/LuaStatePtr.cs +++ b/Assets/LuaFramework/ToLua/Core/LuaStatePtr.cs @@ -527,7 +527,7 @@ public int LuaTypeError(int stackPos, string tname, string t2 = null) return LuaDLL.luaL_typerror(L, stackPos, tname, t2); } - public bool LuaDoString(string chunk, string chunkName = "LuaStatePtr.cs") + public bool LuaDoString(string chunk, string chunkName = "@LuaStatePtr.cs") { byte[] buffer = Encoding.UTF8.GetBytes(chunk); int status = LuaDLL.luaL_loadbuffer(L, buffer, buffer.Length, chunkName); diff --git a/Assets/LuaFramework/ToLua/Core/ToLua.cs b/Assets/LuaFramework/ToLua/Core/ToLua.cs index 3f78bb99c..6845bae55 100644 --- a/Assets/LuaFramework/ToLua/Core/ToLua.cs +++ b/Assets/LuaFramework/ToLua/Core/ToLua.cs @@ -46,7 +46,7 @@ public static class ToLua #if UNITY_EDITOR static int _instanceID = -1; - static int _line = 200; + static int _line = 201; private static object consoleWindow; private static object logListView; private static FieldInfo logListViewCurrentRow; @@ -155,14 +155,15 @@ static int Print(IntPtr L) int line = LuaDLL.tolua_where(L, 1); string filename = LuaDLL.lua_tostring(L, -1); LuaDLL.lua_settop(L, n); + int offset = filename[0] == '@' ? 1 : 0; if (!filename.Contains(".")) { - sb.Append('[').Append(filename).Append(".lua:").Append(line).Append("]:"); + sb.Append('[').Append(filename, offset, filename.Length - offset).Append(".lua:").Append(line).Append("]:"); } else { - sb.Append('[').Append(filename).Append(':').Append(line).Append("]:"); + sb.Append('[').Append(filename, offset, filename.Length - offset).Append(':').Append(line).Append("]:"); } #endif @@ -226,9 +227,9 @@ static int Loader(IntPtr L) if (LuaConst.openLuaDebugger) { fileName = LuaFileUtils.Instance.FindFile(fileName); - } + } - if (LuaDLL.luaL_loadbuffer(L, buffer, buffer.Length, fileName) != 0) + if (LuaDLL.luaL_loadbuffer(L, buffer, buffer.Length, "@"+ fileName) != 0) { string err = LuaDLL.lua_tostring(L, -1); throw new LuaException(err, LuaException.GetLastError()); diff --git a/Assets/LuaFramework/ToLua/Editor/ToLuaExport.cs b/Assets/LuaFramework/ToLua/Editor/ToLuaExport.cs index afb6c204e..bb5fba690 100644 --- a/Assets/LuaFramework/ToLua/Editor/ToLuaExport.cs +++ b/Assets/LuaFramework/ToLua/Editor/ToLuaExport.cs @@ -1444,6 +1444,7 @@ static void GenFunction(_MethodBase m) if (!haveParams) { int count = paramInfos.Length + offset; + if (m.Name == "op_UnaryNegation") count = 2; sb.AppendFormat("\t\t\tToLua.CheckArgsCount(L, {0});\r\n", count); } else diff --git a/Assets/LuaFramework/ToLua/Lua/event.lua b/Assets/LuaFramework/ToLua/Lua/event.lua index ec0ac970e..cd3dc3874 100644 --- a/Assets/LuaFramework/ToLua/Lua/event.lua +++ b/Assets/LuaFramework/ToLua/Lua/event.lua @@ -165,10 +165,8 @@ _event.__call = function(self, ...) self.current = i local flag, msg = f(...) - if not flag then - if self.keepSafe then - _list:remove(i) - end + if not flag then + _list:remove(i) self.lock = false error(msg) end diff --git a/Assets/LuaFramework/ToLua/Misc/LuaClient.cs b/Assets/LuaFramework/ToLua/Misc/LuaClient.cs index 4949cb4db..da58d5167 100644 --- a/Assets/LuaFramework/ToLua/Misc/LuaClient.cs +++ b/Assets/LuaFramework/ToLua/Misc/LuaClient.cs @@ -92,7 +92,7 @@ public void OpenZbsDebugger(string ip = "localhost") luaState.AddSearchPath(LuaConst.zbsDir); } - luaState.LuaDoString(string.Format("DebugServerIp = '{0}'", ip)); + luaState.LuaDoString(string.Format("DebugServerIp = '{0}'", ip), "@LuaClient.cs"); } [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))] @@ -216,8 +216,9 @@ public virtual void Destroy() if (luaState != null) { #if UNITY_5_4_OR_NEWER - SceneManager.sceneLoaded -= OnSceneLoaded; + SceneManager.sceneLoaded -= OnSceneLoaded; #endif + luaState.Call("OnApplicationQuit", false); LuaState state = luaState; luaState = null; @@ -233,7 +234,7 @@ public virtual void Destroy() loop = null; } - state.Dispose(); + state.Dispose(); Instance = null; } } diff --git a/Assets/LuaFramework/ToLua/Misc/LuaCoroutine.cs b/Assets/LuaFramework/ToLua/Misc/LuaCoroutine.cs index 63abee63e..5754fa3d9 100644 --- a/Assets/LuaFramework/ToLua/Misc/LuaCoroutine.cs +++ b/Assets/LuaFramework/ToLua/Misc/LuaCoroutine.cs @@ -123,7 +123,7 @@ public static void Register(LuaState state, MonoBehaviour behaviour) state.RegFunction("StopCoroutine", StopCoroutine); state.EndModule(); - state.LuaDoString(strCo, "LuaCoroutine.cs"); + state.LuaDoString(strCo, "@LuaCoroutine.cs"); mb = behaviour; } diff --git a/Assets/LuaFramework/ToLua/Source/Generate/DelegateFactory.cs b/Assets/LuaFramework/ToLua/Source/Generate/DelegateFactory.cs index 5e1d3fbae..4ad0ae622 100644 --- a/Assets/LuaFramework/ToLua/Source/Generate/DelegateFactory.cs +++ b/Assets/LuaFramework/ToLua/Source/Generate/DelegateFactory.cs @@ -17,9 +17,6 @@ public static void Init() public static void Register() { dict.Clear(); - - - } public static Delegate CreateDelegate(Type t, LuaFunction func = null) diff --git a/ReadMe.txt b/ReadMe.txt index f2a3c110a..c8601ba63 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -21,6 +21,9 @@ XlsxToLua: https://github.com/zhangqi-ulua/XlsxToLua UnityHello: https://github.com/woshihuo12/UnityHello Excel配置:https://github.com/sy-yanghuan/proton +//-------------2017-11-05------------- +(1)更新tolua#到1.0.7.380版 + //-------------2017-09-20------------- (1)LuaManager初始化加入委托初始化