From d121bb240908e62663b27858568a7098d261f9c5 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sat, 16 Feb 2019 18:39:04 +0100 Subject: [PATCH] Handle binding of function parameter better, consider inheritance --- Upsilon/BaseTypes/UserData/UpsilonUserDataAttribute.cs | 2 +- .../VariableSymbols/ScriptFunctionVariableSymbol.cs | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Upsilon/BaseTypes/UserData/UpsilonUserDataAttribute.cs b/Upsilon/BaseTypes/UserData/UpsilonUserDataAttribute.cs index d55b7de..706d63f 100644 --- a/Upsilon/BaseTypes/UserData/UpsilonUserDataAttribute.cs +++ b/Upsilon/BaseTypes/UserData/UpsilonUserDataAttribute.cs @@ -2,7 +2,7 @@ using System; namespace Upsilon.BaseTypes.UserData { - [AttributeUsage(AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Interface)] + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Interface, Inherited = false)] public class UpsilonUserDataAttribute : Attribute { public UpsilonUserDataAttribute(string name) diff --git a/Upsilon/Binder/VariableSymbols/ScriptFunctionVariableSymbol.cs b/Upsilon/Binder/VariableSymbols/ScriptFunctionVariableSymbol.cs index 7d9cc16..be456f9 100644 --- a/Upsilon/Binder/VariableSymbols/ScriptFunctionVariableSymbol.cs +++ b/Upsilon/Binder/VariableSymbols/ScriptFunctionVariableSymbol.cs @@ -46,9 +46,19 @@ namespace Upsilon.Binder.VariableSymbols var userData = functionParameter.TypeContainer.UserData; if (string.IsNullOrEmpty(userData)) continue; + if (!string.Equals(userData, callingParameter.ValueType.UserData)) { + var boundFunctionType = BoundTypeHandler.GetTypeDefinition(userData).ValidInternalTypes.FirstOrDefault(); + var boundCallingType = + BoundTypeHandler.GetTypeDefinition(callingParameter.ValueType.UserData); + + if (boundCallingType.ValidInternalTypes.Contains(boundFunctionType)) + { + continue; + } + isValid = false; break; }