Browse Source

Add: LightUserData

Akeit0 9 months ago
parent
commit
9f59f05634
1 changed files with 25 additions and 0 deletions
  1. 25 0
      src/Lua/LuaValue.cs

+ 25 - 0
src/Lua/LuaValue.cs

@@ -14,6 +14,7 @@ public enum LuaValueType : byte
     Number,
     Function,
     Thread,
+    LightUserData,
     UserData,
     Table,
 }
@@ -136,6 +137,16 @@ public readonly struct LuaValue : IEquatable<LuaValue>
                 }
                 else
                 {
+                    break;
+                }
+            case LuaValueType.LightUserData:
+                {
+                    if (referenceValue is T tValue)
+                    {
+                        result = tValue;
+                        return true;
+                    }
+
                     break;
                 }
             case LuaValueType.UserData:
@@ -360,6 +371,7 @@ public readonly struct LuaValue : IEquatable<LuaValue>
             case LuaValueType.Thread:
             case LuaValueType.Function:
             case LuaValueType.Table:
+            case LuaValueType.LightUserData:
             case LuaValueType.UserData:
                 {
                     var v = referenceValue!;
@@ -378,6 +390,13 @@ public readonly struct LuaValue : IEquatable<LuaValue>
         return true;
     }
 
+    [MethodImpl(MethodImplOptions.AggressiveInlining)]
+    public LuaValue(object obj)
+    {
+        Type = LuaValueType.LightUserData;
+        referenceValue = obj;
+    }
+
     [MethodImpl(MethodImplOptions.AggressiveInlining)]
     public LuaValue(bool value)
     {
@@ -517,6 +536,7 @@ public readonly struct LuaValue : IEquatable<LuaValue>
             LuaValueType.Function => $"function: {referenceValue!.GetHashCode()}",
             LuaValueType.Thread => $"thread: {referenceValue!.GetHashCode()}",
             LuaValueType.Table => $"table: {referenceValue!.GetHashCode()}",
+            LuaValueType.LightUserData => $"userdata: {referenceValue!.GetHashCode()}",
             LuaValueType.UserData => $"userdata: {referenceValue!.GetHashCode()}",
             _ => "",
         };
@@ -554,6 +574,11 @@ public readonly struct LuaValue : IEquatable<LuaValue>
             result = LuaValueType.Thread;
             return true;
         }
+        else if (type == typeof(ILuaUserData) || type.IsAssignableFrom(typeof(ILuaUserData)))
+        {
+            result = LuaValueType.UserData;
+            return true;
+        }
 
         result = default;
         return false;