From 59858ecb277c7f9d9c982d5067bcb80aee1e5d42 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Tue, 26 Jan 2021 22:52:08 +0100 Subject: [PATCH] Fix Visual Script invoke method node signature check for output params passed via reference --- Source/Editor/Surface/Archetypes/Function.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Source/Editor/Surface/Archetypes/Function.cs b/Source/Editor/Surface/Archetypes/Function.cs index 14850a37d..9f7e3757a 100644 --- a/Source/Editor/Surface/Archetypes/Function.cs +++ b/Source/Editor/Surface/Archetypes/Function.cs @@ -867,8 +867,15 @@ namespace FlaxEditor.Surface.Archetypes for (int i = 0; i < signature.Params.Length; i++) { ref var param = ref signature.Params[i]; - if (param.Type != memberParameters[i].Type || param.IsOut != memberParameters[i].IsOut) + ref var paramMember = ref memberParameters[i]; + if (param.Type != paramMember.Type || param.IsOut != paramMember.IsOut) { + // Special case: param.Type is serialized as just a type while paramMember.Type might be a reference for output parameters (eg. `out Int32` vs `out Int32&`) + var paramMemberTypeName = paramMember.Type.TypeName; + if (param.IsOut && param.IsOut == paramMember.IsOut && paramMember.Type.IsReference && !param.Type.IsReference && + paramMemberTypeName.Substring(0, paramMemberTypeName.Length - 1) == param.Type.TypeName) + continue; + isInvalid = true; break; }