vrchat-community / UdonSharp

A compiler for compiling C# to Udon assembly
https://udonsharp.docs.vrchat.com
MIT License
470 stars 50 forks source link

Can't seem to properly pass System.Action especially from external script #139

Closed DarkSpacer1 closed 1 year ago

DarkSpacer1 commented 1 year ago

Describe the bug in detail: When I try to use a System.Action to call a specific method (and it started complaining when I tried calling from an external script and now won't stop), it gives an error about a method not being implemented

Provide steps/code to reproduce the bug: Specific use case: public void allClientsDo(System.Action networkedEvent) { if (Networking.IsOwner(gameObject)) SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, networkedEvent.Method.Name); } Calling local: allClientsDo(localMethod);

Calling external: allClientsDo(reference.localMethod);

Additional Information: An example full error:

[UdonSharp] Assets/Scripts/npc_MiniNeso.cs(517,21): System.NotImplementedException: The method or operation is not implemented. at UdonSharp.Compiler.Binder.BoundAccessExpression.BindAccess (UdonSharp.Compiler.AbstractPhaseContext context, Microsoft.CodeAnalysis.SyntaxNode node, UdonSharp.Compiler.Symbols.Symbol accessSymbol, UdonSharp.Compiler.Binder.BoundExpression symbolExpressionSource) [0x000b1] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BoundNodes\BoundAccessExpression.cs:45 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.VisitAccessExpression (Microsoft.CodeAnalysis.SyntaxNode node) [0x00142] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:103 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.VisitExpression (Microsoft.CodeAnalysis.SyntaxNode node) [0x00001] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:108 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.VisitExpression (Microsoft.CodeAnalysis.SyntaxNode node, UdonSharp.Compiler.Symbols.TypeSymbol expectedType, System.Boolean explicitCast) [0x00001] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:156 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.VisitInvocationExpression (Microsoft.CodeAnalysis.CSharp.Syntax.InvocationExpressionSyntax node) [0x002aa] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:451 at Microsoft.CodeAnalysis.CSharp.Syntax.InvocationExpressionSyntax.Accept[TResult] (Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor1[TResult] visitor) [0x00000] in <9c2eb1fd370b4c31a981729c5e257f1b>:0 at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor1[TResult].Visit (Microsoft.CodeAnalysis.SyntaxNode node) [0x00003] in <9c2eb1fd370b4c31a981729c5e257f1b>:0 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.Visit (Microsoft.CodeAnalysis.SyntaxNode node) [0x00065] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:51 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.VisitExpressionStatement (Microsoft.CodeAnalysis.CSharp.Syntax.ExpressionStatementSyntax node) [0x00001] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:270 at Microsoft.CodeAnalysis.CSharp.Syntax.ExpressionStatementSyntax.Accept[TResult] (Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor1[TResult] visitor) [0x00000] in <9c2eb1fd370b4c31a981729c5e257f1b>:0 at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor1[TResult].Visit (Microsoft.CodeAnalysis.SyntaxNode node) [0x00003] in <9c2eb1fd370b4c31a981729c5e257f1b>:0 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.Visit (Microsoft.CodeAnalysis.SyntaxNode node) [0x00065] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:51 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.VisitStatement (Microsoft.CodeAnalysis.SyntaxNode node) [0x00001] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:182 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.VisitIfStatement (Microsoft.CodeAnalysis.CSharp.Syntax.IfStatementSyntax node) [0x00076] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:787 at Microsoft.CodeAnalysis.CSharp.Syntax.IfStatementSyntax.Accept[TResult] (Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor1[TResult] visitor) [0x00000] in <9c2eb1fd370b4c31a981729c5e257f1b>:0 at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor1[TResult].Visit (Microsoft.CodeAnalysis.SyntaxNode node) [0x00003] in <9c2eb1fd370b4c31a981729c5e257f1b>:0 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.Visit (Microsoft.CodeAnalysis.SyntaxNode node) [0x00065] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:51 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.VisitBlock (Microsoft.CodeAnalysis.CSharp.Syntax.BlockSyntax node) [0x00049] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:261 at Microsoft.CodeAnalysis.CSharp.Syntax.BlockSyntax.Accept[TResult] (Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor1[TResult] visitor) [0x00000] in <9c2eb1fd370b4c31a981729c5e257f1b>:0 at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor1[TResult].Visit (Microsoft.CodeAnalysis.SyntaxNode node) [0x00003] in <9c2eb1fd370b4c31a981729c5e257f1b>:0 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.Visit (Microsoft.CodeAnalysis.SyntaxNode node) [0x00065] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:51 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.VisitStatement (Microsoft.CodeAnalysis.SyntaxNode node) [0x00001] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:182 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.VisitIfStatement (Microsoft.CodeAnalysis.CSharp.Syntax.IfStatementSyntax node) [0x00076] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:787 at Microsoft.CodeAnalysis.CSharp.Syntax.IfStatementSyntax.Accept[TResult] (Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor1[TResult] visitor) [0x00000] in <9c2eb1fd370b4c31a981729c5e257f1b>:0 at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor1[TResult].Visit (Microsoft.CodeAnalysis.SyntaxNode node) [0x00003] in <9c2eb1fd370b4c31a981729c5e257f1b>:0 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.Visit (Microsoft.CodeAnalysis.SyntaxNode node) [0x00065] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:51 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.VisitBlock (Microsoft.CodeAnalysis.CSharp.Syntax.BlockSyntax node) [0x00049] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:261 at Microsoft.CodeAnalysis.CSharp.Syntax.BlockSyntax.Accept[TResult] (Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor1[TResult] visitor) [0x00000] in <9c2eb1fd370b4c31a981729c5e257f1b>:0 at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor1[TResult].Visit (Microsoft.CodeAnalysis.SyntaxNode node) [0x00003] in <9c2eb1fd370b4c31a981729c5e257f1b>:0 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.Visit (Microsoft.CodeAnalysis.SyntaxNode node) [0x00065] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:51 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.VisitStatement (Microsoft.CodeAnalysis.SyntaxNode node) [0x00001] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:182 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.VisitIfStatement (Microsoft.CodeAnalysis.CSharp.Syntax.IfStatementSyntax node) [0x00076] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:787 at Microsoft.CodeAnalysis.CSharp.Syntax.IfStatementSyntax.Accept[TResult] (Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor1[TResult] visitor) [0x00000] in <9c2eb1fd370b4c31a981729c5e257f1b>:0 at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor1[TResult].Visit (Microsoft.CodeAnalysis.SyntaxNode node) [0x00003] in <9c2eb1fd370b4c31a981729c5e257f1b>:0 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.Visit (Microsoft.CodeAnalysis.SyntaxNode node) [0x00065] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:51 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.VisitBlock (Microsoft.CodeAnalysis.CSharp.Syntax.BlockSyntax node) [0x00049] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:261 at Microsoft.CodeAnalysis.CSharp.Syntax.BlockSyntax.Accept[TResult] (Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor1[TResult] visitor) [0x00000] in <9c2eb1fd370b4c31a981729c5e257f1b>:0 at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor1[TResult].Visit (Microsoft.CodeAnalysis.SyntaxNode node) [0x00003] in <9c2eb1fd370b4c31a981729c5e257f1b>:0 at UdonSharp.Compiler.Binder.BinderSyntaxVisitor.Visit (Microsoft.CodeAnalysis.SyntaxNode node) [0x00065] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BinderSyntaxVisitor.cs:51 at UdonSharp.Compiler.Symbols.MethodSymbol.Bind (UdonSharp.Compiler.Binder.BindContext context) [0x00170] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\Symbols\MethodSymbol.cs:162 at UdonSharp.Compiler.Symbols.UdonSharpBehaviourMethodSymbol.Bind (UdonSharp.Compiler.Binder.BindContext context) [0x000b5] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\Symbols\UdonSharpBehaviourMethodSymbol.cs:52 at UdonSharp.Compiler.Symbols.TypeSymbol.Bind (UdonSharp.Compiler.Binder.BindContext context) [0x00193] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\Symbols\TypeSymbol.cs:137 at UdonSharp.Compiler.Binder.BindContext.Bind () [0x0001b] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\Binder\BindContext.cs:35 at UdonSharp.Compiler.UdonSharpCompilerV1+<>c__DisplayClass22_0.b__0 (System.ValueTuple`2[T1,T2] rootTypeSymbol) [0x00030] in G:\Projects\VRChat_MyLivingNesos-Migrated\Packages\com.vrchat.udonsharp\Editor\Compiler\UdonSharpCompilerV1.cs:618

Phasedragon commented 1 year ago

This is not a bug, system.action is just not supported by Udon or UdonSharp. It says so in the error: System.NotImplementedException: The method or operation is not implemented.

DarkSpacer1 commented 1 year ago

So this should be a feature suggestion then. Sorry, my bad

Phasedragon commented 1 year ago

It's not really a feature suggestion for udonsharp though, as udonsharp is just a compiler. This is a feature request for Udon itself, but that's already being covered by the future release of udon 2, which should have this along with many other features natively.

DarkSpacer1 commented 1 year ago

Ahhh ok thanks for clarifying

Guess I gotta wait >_< oh well