예제 #1
0
        private Function Resolve(string Token, IEnumerable <Expression> Args)
        {
            Function resolve = context.LookupFunction(Token, Args).SingleOrDefault();

            if (!(resolve is null))
            {
                return(resolve);
            }
예제 #2
0
        private Function Resolve(string Token, IEnumerable <Expression> Args)
        {
            Function resolve = context.LookupFunction(Token, Args).SingleOrDefault();

            if (!ReferenceEquals(resolve, null))
            {
                return(resolve);
            }
            else
            {
                return(UnknownFunction.New(Token, Args.Count()));
            }
        }
예제 #3
0
        protected override Expression VisitCall(Call F)
        {
            F = (Call)base.VisitCall(F);

            if (F.Target is UnknownFunction)
            {
                IEnumerable <Function> lookup = ns.LookupFunction(F.Target.Name, F.Arguments);
                switch (lookup.Count())
                {
                case 0: return(F);

                case 1: return(Call.New(lookup.Single(), F.Arguments));

                default: throw new UnresolvedName(F.Target.Name);
                }
            }

            return(F);
        }