Browse Source

Change: LuaFunctionExecitionContext.FrameBase (int? -> int)

AnnulusGames 1 year ago
parent
commit
d45504b4ac

+ 1 - 11
src/Lua/LuaFunction.cs

@@ -8,19 +8,9 @@ public abstract partial class LuaFunction
 
 
     public async ValueTask<int> InvokeAsync(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
     public async ValueTask<int> InvokeAsync(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
     {
     {
-        var state = context.State;
-        
-        if (context.FrameBase == null)
-        {
-            context = context with
-            {
-                FrameBase = context.Thread.Stack.Count - context.ArgumentCount
-            };
-        }
-
         var frame = new CallStackFrame
         var frame = new CallStackFrame
         {
         {
-            Base = context.FrameBase.Value,
+            Base = context.FrameBase,
             CallPosition = context.SourcePosition,
             CallPosition = context.SourcePosition,
             ChunkName = context.ChunkName ?? LuaState.DefaultChunkName,
             ChunkName = context.ChunkName ?? LuaState.DefaultChunkName,
             RootChunkName = context.RootChunkName ?? LuaState.DefaultChunkName,
             RootChunkName = context.RootChunkName ?? LuaState.DefaultChunkName,

+ 2 - 2
src/Lua/LuaFunctionExecutionContext.cs

@@ -8,7 +8,7 @@ public readonly record struct LuaFunctionExecutionContext
     public required LuaState State { get; init; }
     public required LuaState State { get; init; }
     public required LuaThread Thread { get; init; }
     public required LuaThread Thread { get; init; }
     public required int ArgumentCount { get; init; }
     public required int ArgumentCount { get; init; }
-    public int? FrameBase { get; init; }
+    public int FrameBase { get; init; }
     public SourcePosition? SourcePosition { get; init; }
     public SourcePosition? SourcePosition { get; init; }
     public string? RootChunkName { get; init; }
     public string? RootChunkName { get; init; }
     public string? ChunkName { get; init; }
     public string? ChunkName { get; init; }
@@ -17,7 +17,7 @@ public readonly record struct LuaFunctionExecutionContext
     {
     {
         get
         get
         {
         {
-            return Thread.GetStackValues().Slice(FrameBase!.Value, ArgumentCount);
+            return Thread.GetStackValues().Slice(FrameBase, ArgumentCount);
         }
         }
     }
     }
 
 

+ 1 - 1
src/Lua/Standard/Basic/XPCallFunction.cs

@@ -40,7 +40,7 @@ public sealed class XPCallFunction : LuaFunction
             {
             {
                 State = context.State,
                 State = context.State,
                 ArgumentCount = 1,
                 ArgumentCount = 1,
-                FrameBase = null,
+                FrameBase = context.Thread.Stack.Count - context.ArgumentCount,
             }, methodBuffer.AsMemory(), cancellationToken);
             }, methodBuffer.AsMemory(), cancellationToken);
 
 
             buffer.Span[0] = false;
             buffer.Span[0] = false;

+ 1 - 1
src/Lua/Standard/Table/SortFunction.cs

@@ -63,7 +63,7 @@ public sealed class SortFunction : LuaFunction
             await comparer.InvokeAsync(context with
             await comparer.InvokeAsync(context with
             {
             {
                 ArgumentCount = 2,
                 ArgumentCount = 2,
-                FrameBase = null,
+                FrameBase = context.Thread.Stack.Count - context.ArgumentCount,
             }, methodBuffer.AsMemory(), cancellationToken);
             }, methodBuffer.AsMemory(), cancellationToken);
 
 
             if (methodBuffer[0].ToBoolean())
             if (methodBuffer[0].ToBoolean())

+ 1 - 1
src/Lua/Standard/Text/GSubFunction.cs

@@ -65,7 +65,7 @@ public sealed class GSubFunction : LuaFunction
                 await func.InvokeAsync(context with
                 await func.InvokeAsync(context with
                 {
                 {
                     ArgumentCount = match.Groups.Count,
                     ArgumentCount = match.Groups.Count,
-                    FrameBase = null
+                    FrameBase = context.Thread.Stack.Count - context.ArgumentCount,
                 }, methodBuffer.AsMemory(), cancellationToken);
                 }, methodBuffer.AsMemory(), cancellationToken);
 
 
                 result = methodBuffer[0];
                 result = methodBuffer[0];