Browse Source

Improve: change coroutine library functions to singleton

AnnulusGames 1 year ago
parent
commit
6f68ffedc0

+ 2 - 3
src/Lua/Standard/Coroutines/CoroutineCreateFunction.cs

@@ -3,9 +3,8 @@ namespace Lua.Standard.Coroutines;
 
 
 public sealed class CoroutineCreateFunction : LuaFunction
 public sealed class CoroutineCreateFunction : LuaFunction
 {
 {
-    public const string FunctionName = "create";
-
-    public override string Name => FunctionName;
+    public static readonly CoroutineCreateFunction Instance = new();
+    public override string Name => "create";
 
 
     protected override ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
     protected override ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
     {
     {

+ 2 - 3
src/Lua/Standard/Coroutines/CoroutineResumeFunction.cs

@@ -3,9 +3,8 @@ namespace Lua.Standard.Coroutines;
 
 
 public sealed class CoroutineResumeFunction : LuaFunction
 public sealed class CoroutineResumeFunction : LuaFunction
 {
 {
-    public const string FunctionName = "resume";
-
-    public override string Name => FunctionName;
+    public static readonly CoroutineResumeFunction Instance = new();
+    public override string Name => "resume";
 
 
     protected override async ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
     protected override async ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
     {
     {

+ 2 - 2
src/Lua/Standard/Coroutines/CoroutineRunningFunction.cs

@@ -3,9 +3,9 @@ namespace Lua.Standard.Coroutines;
 
 
 public sealed class CoroutineRunningFunction : LuaFunction
 public sealed class CoroutineRunningFunction : LuaFunction
 {
 {
-    public const string FunctionName = "running";
+    public static readonly CoroutineRunningFunction Instance = new();
+    public override string Name => "running";
 
 
-    public override string Name => FunctionName;
 
 
     protected override ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
     protected override ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
     {
     {

+ 2 - 3
src/Lua/Standard/Coroutines/CoroutineStatusFunction.cs

@@ -3,9 +3,8 @@ namespace Lua.Standard.Coroutines;
 
 
 public sealed class CoroutineStatusFunction : LuaFunction
 public sealed class CoroutineStatusFunction : LuaFunction
 {
 {
-    public const string FunctionName = "status";
-
-    public override string Name => FunctionName;
+    public static readonly CoroutineStatusFunction Instance = new();
+    public override string Name => "status";
 
 
     protected override ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
     protected override ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
     {
     {

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

@@ -3,9 +3,9 @@ namespace Lua.Standard.Coroutines;
 
 
 public sealed class CoroutineWrapFunction : LuaFunction
 public sealed class CoroutineWrapFunction : LuaFunction
 {
 {
-    public const string FunctionName = "wrap";
+    public static readonly CoroutineWrapFunction Instance = new();
+    public override string Name => "wrap";
 
 
-    public override string Name => FunctionName;
 
 
     protected override ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
     protected override ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
     {
     {

+ 2 - 3
src/Lua/Standard/Coroutines/CoroutineYieldFunction.cs

@@ -3,9 +3,8 @@ namespace Lua.Standard.Coroutines;
 
 
 public sealed class CoroutineYieldFunction : LuaFunction
 public sealed class CoroutineYieldFunction : LuaFunction
 {
 {
-    public const string FunctionName = "yield";
-
-    public override string Name => FunctionName;
+    public static readonly CoroutineYieldFunction Instance = new();
+    public override string Name => "yield";
 
 
     protected override async ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
     protected override async ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
     {
     {

+ 14 - 7
src/Lua/Standard/OpenLibExtensions.cs

@@ -50,6 +50,15 @@ public static class OpenLibExtensions
         SelectFunction.Instance,
         SelectFunction.Instance,
     ];
     ];
 
 
+    static readonly LuaFunction[] coroutineFunctions = [
+        CoroutineCreateFunction.Instance,
+        CoroutineResumeFunction.Instance,
+        CoroutineYieldFunction.Instance,
+        CoroutineStatusFunction.Instance,
+        CoroutineRunningFunction.Instance,
+        CoroutineWrapFunction.Instance,
+    ];
+
     static readonly LuaFunction[] mathFunctions = [
     static readonly LuaFunction[] mathFunctions = [
         AbsFunction.Instance,
         AbsFunction.Instance,
         AcosFunction.Instance,
         AcosFunction.Instance,
@@ -156,13 +165,11 @@ public static class OpenLibExtensions
         }
         }
 
 
         // coroutine
         // coroutine
-        var coroutine = new LuaTable(0, 6);
-        coroutine[CoroutineCreateFunction.FunctionName] = new CoroutineCreateFunction();
-        coroutine[CoroutineResumeFunction.FunctionName] = new CoroutineResumeFunction();
-        coroutine[CoroutineYieldFunction.FunctionName] = new CoroutineYieldFunction();
-        coroutine[CoroutineStatusFunction.FunctionName] = new CoroutineStatusFunction();
-        coroutine[CoroutineRunningFunction.FunctionName] = new CoroutineRunningFunction();
-        coroutine[CoroutineWrapFunction.FunctionName] = new CoroutineWrapFunction();
+        var coroutine = new LuaTable(0, coroutineFunctions.Length);
+        foreach (var func in coroutineFunctions)
+        {
+            state.Environment[func.Name] = func;
+        }
 
 
         state.Environment["coroutine"] = coroutine;
         state.Environment["coroutine"] = coroutine;
     }
     }