Browse Source

Merge pull request #190 from nuskey8/fix-error-level

Fix error level
Akeit0 5 months ago
parent
commit
71d1ea456a
2 changed files with 10 additions and 11 deletions
  1. 4 7
      src/Lua/Exceptions.cs
  2. 6 4
      src/Lua/Runtime/Tracebacks.cs

+ 4 - 7
src/Lua/Exceptions.cs

@@ -299,15 +299,14 @@ public class LuaRuntimeException : Exception, ILuaTracebackBuildable
         }
     }
 
-    static string CreateMessage(Traceback traceback, LuaValue errorObject)
+    static string CreateMessage(Traceback traceback, LuaValue errorObject, int level)
     {
         var pooledList = new PooledList<char>(64);
         pooledList.Clear();
         try
         {
             pooledList.AddRange("Lua-CSharp: ");
-            traceback.WriteLastLuaTrace(ref pooledList);
-            pooledList.AddRange(": ");
+            traceback.WriteLastLuaTrace(ref pooledList, level);
             pooledList.AddRange($"{errorObject}");
             return pooledList.AsSpan().ToString();
         }
@@ -366,7 +365,6 @@ public class LuaRuntimeException : Exception, ILuaTracebackBuildable
                     try
                     {
                         Traceback.WriteLastLuaTrace(callStack, ref pooledList);
-                        if (pooledList.Length != 0) pooledList.AddRange(": ");
                         pooledList.AddRange(message);
                         return pooledList.AsSpan().ToString();
                     }
@@ -385,8 +383,7 @@ public class LuaRuntimeException : Exception, ILuaTracebackBuildable
             pooledList.Clear();
             try
             {
-                luaTraceback.WriteLastLuaTrace(ref pooledList);
-                if (pooledList.Length != 0) pooledList.AddRange(": ");
+                luaTraceback.WriteLastLuaTrace(ref pooledList, level);
                 pooledList.AddRange(message);
                 return pooledList.AsSpan().ToString();
             }
@@ -407,7 +404,7 @@ public class LuaRuntimeException : Exception, ILuaTracebackBuildable
                 return ErrorObject.ToString();
             }
 
-            return CreateMessage(LuaTraceback, ErrorObject);
+            return CreateMessage(LuaTraceback, ErrorObject, level);
         }
     }
 

+ 6 - 4
src/Lua/Runtime/Tracebacks.cs

@@ -10,11 +10,12 @@ public class Traceback(LuaState state, ReadOnlySpan<CallStackFrame> stackFrames)
     readonly CallStackFrame[] stackFramesArray = stackFrames.ToArray();
     public ReadOnlySpan<CallStackFrame> StackFrames => stackFramesArray;
 
-    internal static void WriteLastLuaTrace(ReadOnlySpan<CallStackFrame> stackFrames, ref PooledList<char> list)
+    internal static void WriteLastLuaTrace(ReadOnlySpan<CallStackFrame> stackFrames, ref PooledList<char> list, int level = 1)
     {
+        if (level < 1) return;
         var intFormatBuffer = (stackalloc char[15]);
         var shortSourceBuffer = (stackalloc char[59]);
-        for (var index = stackFrames.Length - 1; index >= 1; index--)
+        for (var index = stackFrames.Length - level; index >= 1; index--)
         {
             LuaFunction lastFunc = stackFrames[index - 1].Function;
             var frame = stackFrames[index];
@@ -34,14 +35,15 @@ public class Traceback(LuaState state, ReadOnlySpan<CallStackFrame> stackFrames)
                     list.AddRange(intFormatBuffer[..charsWritten]);
                 }
 
+                list.AddRange(": ");
                 return;
             }
         }
     }
 
-    internal void WriteLastLuaTrace(ref PooledList<char> list)
+    internal void WriteLastLuaTrace(ref PooledList<char> list, int level = 1)
     {
-        WriteLastLuaTrace(StackFrames, ref list);
+        WriteLastLuaTrace(StackFrames, ref list, level);
     }
 
     public int LastLine