Browse Source

fix: io.write

Akeit0 7 months ago
parent
commit
8e600ba7d2

+ 1 - 2
src/Lua/Standard/FileHandle.cs

@@ -226,8 +226,7 @@ public class FileHandle : ILuaUserData
     static readonly LuaFunction WriteFunction = new("write", (context, cancellationToken) =>
     {
         var file = context.GetArgument<FileHandle>(0);
-        context.Return();
-        var resultCount = IOHelper.Write(file, "write", context);
+        var resultCount = IOHelper.Write(file, "write", context with{ArgumentCount = context.ArgumentCount-1});
         return new(resultCount);
     });
 }

+ 0 - 1
src/Lua/Standard/IOLibrary.cs

@@ -192,7 +192,6 @@ public sealed class IOLibrary
     public ValueTask<int> Write(LuaFunctionExecutionContext context, CancellationToken cancellationToken)
     {
         var file = context.State.Environment["io"].Read<LuaTable>()["stdout"].Read<FileHandle>();
-        context.Return();
         var resultCount = IOHelper.Write(file, "write", context);
         return new(resultCount);
     }

+ 3 - 1
src/Lua/Standard/Internal/IOHelper.cs

@@ -48,7 +48,7 @@ internal static class IOHelper
     {
         try
         {
-            for (int i = 1; i < context.ArgumentCount; i++)
+            for (int i = 0; i < context.ArgumentCount; i++)
             {
                 var arg = context.Arguments[i];
                 if (arg.TryRead<string>(out var str))
@@ -70,6 +70,7 @@ internal static class IOHelper
         }
         catch (IOException ex)
         {
+            context.Thread.Stack.PopUntil(context.ReturnFrameBase);
             var stack = context.Thread.Stack;
             stack.Push(LuaValue.Nil);
             stack.Push(ex.Message);
@@ -77,6 +78,7 @@ internal static class IOHelper
             return 3;
         }
 
+        context.Thread.Stack.PopUntil(context.ReturnFrameBase);
         context.Thread.Stack.Push(new(file));
         return 1;
     }