Просмотр исходного кода

Merge pull request #250 from nuskey8/feature/support-return-object

improve: support returning object type in SourceGenerator
Akito Inoue 1 неделя назад
Родитель
Сommit
70b43fc808

+ 5 - 0
src/Lua.SourceGenerator/LuaObjectGenerator.Emit.cs

@@ -8,6 +8,11 @@ partial class LuaObjectGenerator
 {
     static string GetLuaValuePrefix(ITypeSymbol typeSymbol, SymbolReferences references, Compilation compilation)
     {
+        if (SymbolEqualityComparer.Default.Equals(typeSymbol, references.Object))
+        {
+            return "global::Lua.LuaValue.FromObject(";
+        }
+
         return compilation.ClassifyCommonConversion(typeSymbol, references.LuaUserData).Exists
             ? "global::Lua.LuaValue.FromUserData("
             : "(";

+ 2 - 0
src/Lua.SourceGenerator/SymbolReferences.cs

@@ -19,6 +19,7 @@ public sealed class SymbolReferences
             LuaIgnoreMemberAttribute = compilation.GetTypeByMetadataName("Lua.LuaIgnoreMemberAttribute")!,
             LuaMetamethodAttribute = compilation.GetTypeByMetadataName("Lua.LuaMetamethodAttribute")!,
             LuaValue = compilation.GetTypeByMetadataName("Lua.LuaValue")!,
+            Object = compilation.GetTypeByMetadataName("System.Object")!,
             Boolean = compilation.GetTypeByMetadataName("System.Boolean")!,
             String = compilation.GetTypeByMetadataName("System.String")!,
             Double = compilation.GetTypeByMetadataName("System.Double")!,
@@ -35,6 +36,7 @@ public sealed class SymbolReferences
     public INamedTypeSymbol LuaIgnoreMemberAttribute { get; private set; } = null!;
     public INamedTypeSymbol LuaMetamethodAttribute { get; private set; } = null!;
     public INamedTypeSymbol LuaValue { get; private set; } = null!;
+    public INamedTypeSymbol Object { get; private set; } = null!;
     public INamedTypeSymbol Boolean { get; private set; } = null!;
     public INamedTypeSymbol String { get; private set; } = null!;
     public INamedTypeSymbol Double { get; private set; } = null!;

+ 3 - 0
tests/Lua.Tests/LuaObjectTests.cs

@@ -40,6 +40,9 @@ public partial class LuaTestObj
         await Task.Delay(1);
         return new LuaTestObj() { x = a.x - b.x, y = a.y - b.y };
     }
+
+    [LuaMember]
+    public object GetObj() => this;
 }
 
 [LuaObject]