private List<RppMethodInfo> FindConstructors([NotNull] RType classType) { var constructors = classType.Constructors; var genericArguments = classType.GenericArguments.ToList(); DefaultTypesComparator comparator = new DefaultTypesComparator(genericArguments.ToArray()); List<RppMethodInfo> candidates = OverloadQuery.Find(Args, new RType[0], constructors, comparator).ToList(); if (candidates.Count != 1) { throw SemanticExceptionFactory.CreateOverloadFailureException(Token, candidates, Args, constructors); } return candidates; }
private ResolveResults SearchInFunctions(string name, IEnumerable<IRppExpr> args, SymbolTable scope) { IReadOnlyCollection<RppMethodInfo> overloads = scope.LookupFunction(name); if (overloads.IsEmpty()) { return null; } DefaultTypesComparator typesComparator = new DefaultTypesComparator(_typeArgs); IEnumerable<IRppExpr> argList = args as IList<IRppExpr> ?? args.ToList(); List<RppMethodInfo> candidates = OverloadQuery.Find(argList, _typeArgs, overloads, typesComparator).ToList(); if (candidates.Count == 0 && overloads.Any()) { throw SemanticExceptionFactory.CreateOverloadFailureException(_token, candidates, argList, overloads); } RppMethodInfo candidate = candidates[0]; IEnumerable<RType> inferredTypeArguments = null; if (candidate.GenericParameters != null) { inferredTypeArguments = InferTypes(candidate, argList).ToList(); } return new ResolveResults(candidate, inferredTypeArguments, scope.IsInsideClosure); }