示例#1
0
文件: RppNew.cs 项目: dubik/csharprpp
        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;
        }
示例#2
0
        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);
        }