Bläddra i källkod

Improve: support nested coroutine stacktrace

AnnulusGames 1 år sedan
förälder
incheckning
7898332ff5
3 ändrade filer med 11 tillägg och 7 borttagningar
  1. 1 1
      src/Lua/LuaFunction.cs
  2. 8 1
      src/Lua/LuaState.cs
  3. 2 5
      src/Lua/LuaThread.cs

+ 1 - 1
src/Lua/LuaFunction.cs

@@ -28,7 +28,7 @@ public abstract partial class LuaFunction
         }
         catch (Exception ex) when (ex is not (LuaException or OperationCanceledException))
         {
-            throw new LuaRuntimeException(thread.GetTraceback(), ex.Message);
+            throw new LuaRuntimeException(state.GetTraceback(), ex.Message);
         }
         finally
         {

+ 8 - 1
src/Lua/LuaState.cs

@@ -76,7 +76,14 @@ public sealed class LuaState
 
     public Traceback GetTraceback()
     {
-        return MainThread.GetTraceback();
+        // TODO: optimize
+        return new()
+        {
+            StackFrames = threadStack.AsSpan().ToArray()
+                .Append(MainThread)
+                .SelectMany(x => x.GetStackFrames())
+                .ToArray()
+        };
     }
 
     internal UpValue GetOrAddUpValue(LuaThread thread, int registerIndex)

+ 2 - 5
src/Lua/LuaThread.cs

@@ -24,12 +24,9 @@ public abstract class LuaThread
         return stack.AsSpan();
     }
 
-    internal Traceback GetTraceback()
+    internal CallStackFrame[] GetStackFrames()
     {
-        return new()
-        {
-            StackFrames = callStack.AsSpan()[1..].ToArray()
-        };
+        return callStack.AsSpan()[1..].ToArray();
     }
 
     internal void PushCallStackFrame(CallStackFrame frame)