Browse Source

Fix: coroutine.wrap

AnnulusGames 1 year ago
parent
commit
e67f553fb8
1 changed files with 15 additions and 2 deletions
  1. 15 2
      src/Lua/Standard/Coroutines/CoroutineWrapFunction.cs

+ 15 - 2
src/Lua/Standard/Coroutines/CoroutineWrapFunction.cs

@@ -17,9 +17,22 @@ public sealed class CoroutineWrapFunction : LuaFunction
 
     class Wrapper(LuaThread targetThread) : LuaFunction
     {
-        protected override async ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
+        protected override ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
         {
-            return await targetThread.Resume(context, buffer, cancellationToken);
+            var stack = context.Thread.Stack;
+            var frameBase = stack.Count;
+
+            stack.Push(targetThread);
+            foreach (var arg in context.Arguments)
+            {
+                stack.Push(arg);
+            }
+
+            return targetThread.Resume(context with
+            {
+                ArgumentCount = context.ArgumentCount + 1,
+                FrameBase = frameBase,
+            }, buffer, cancellationToken);
         }
     }
 }