private void ResolveSignatureTypesInFunction(FunctionDeclarationSyntax function) { function.Type.BeginFulfilling(); var diagnosticCount = diagnostics.Count; // Resolve the declaring type because we need its type for things like `self` if (function.DeclaringType != null) ResolveSignatureTypesInTypeDeclaration(function.DeclaringType); var selfType = ResolveSelfType(function); var resolver = new ExpressionTypeResolver(function.File, diagnostics, selfType); if (function.GenericParameters != null) ResolveTypesInGenericParameters(function.GenericParameters, resolver); var parameterTypes = ResolveTypesInParameters(function, resolver); var returnType = ResolveReturnType(function, resolver); DataType functionType = new FunctionType(parameterTypes, returnType); if (function.GenericParameters?.Any() ?? false) functionType = new MetaFunctionType(function.GenericParameters.Select(p => p.Type.Fulfilled()), functionType); function.Type.Fulfill(functionType); if (diagnosticCount != diagnostics.Count) function.Poison(); }
/// <summary> /// Implements the constructor: MetaFunctionType() /// Direct superclasses: global::MetaDslx.Core.MetaType /// All superclasses: global::MetaDslx.Core.MetaType /// </summary> public virtual void MetaFunctionType(MetaFunctionType @this) { this.MetaType(@this); }