Browse Source

Add: rawequal, rawlen

AnnulusGames 1 year ago
parent
commit
d72112dafd

+ 5 - 1
src/Lua/Standard/Basic/RawEqualFunction.cs

@@ -8,6 +8,10 @@ public sealed class RawEqualFunction : LuaFunction
 
     protected override ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
     {
-        throw new NotImplementedException();
+        var arg0 = context.ReadArgument(0);
+        var arg1 = context.ReadArgument(1);
+
+        buffer.Span[0] = arg0 == arg1;
+        return new(1);
     }
 }

+ 28 - 0
src/Lua/Standard/Basic/RawLenFunction.cs

@@ -0,0 +1,28 @@
+
+namespace Lua.Standard.Basic;
+
+public sealed class RawLenFunction : LuaFunction
+{
+    public override string Name => "rawlen";
+    public static readonly RawLenFunction Instance = new();
+
+    protected override ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
+    {
+        var arg0 = context.ReadArgument(0);
+
+        if (arg0.TryRead<LuaTable>(out var table))
+        {
+            buffer.Span[0] = table.ArrayLength;
+        }
+        else if (arg0.TryRead<string>(out var str))
+        {
+            buffer.Span[0] = str.Length;
+        }
+        else
+        {
+            LuaRuntimeException.BadArgument(context.State.GetTracebacks(), 2, Name, [LuaValueType.String, LuaValueType.Table]);
+        }
+
+        return new(1);
+    }
+}