Tracebacks.cs 707 B

123456789101112131415161718192021222324
  1. using Lua.CodeAnalysis;
  2. namespace Lua.Runtime;
  3. public class Traceback
  4. {
  5. public required CallStackFrame[] StackFrames { get; init; }
  6. internal string RootChunkName => StackFrames[^1].RootChunkName;
  7. internal SourcePosition LastPosition => StackFrames[^1].CallPosition!.Value;
  8. public override string ToString()
  9. {
  10. var str = string.Join("\n ", StackFrames
  11. .Where(x => x.CallPosition != null)
  12. .Select(x =>
  13. {
  14. return $"{x.RootChunkName}:{x.CallPosition!.Value.Line}: {(string.IsNullOrEmpty(x.ChunkName) ? "" : $"in '{x.ChunkName}'")}";
  15. })
  16. .Reverse());
  17. return $"stack traceback:\n {str}";
  18. }
  19. }