Exemplo n.º 1
0
        public Object VisitCallNode(ICallASTNode call)
        {
            if (call == null)
            {
                throw new ArgumentNullException("call", "The argument cannot equal to null");
            }

            IList <IASTNode> argsList = call.Args;

            List <Object> evaluatedArgsList = new List <Object>();

            foreach (IASTNode arg in argsList)
            {
                if (arg == null)
                {
                    throw new ArgumentNullException("arg", "The argument cannot equal to null");
                }

                if (arg.Type == E_NODE_TYPE.NT_IDENTIFIER)
                {
                    evaluatedArgsList.Add(mEnvironment.Get((arg as IIdentifierASTNode).Name));

                    continue;
                }

                evaluatedArgsList.Add(arg.Accept(this));
            }

            return(CIntrinsicsUtils.Eval(call.IntrinsicType, evaluatedArgsList.ToArray()));
        }
Exemplo n.º 2
0
        public string VisitCallNode(ICallASTNode call)
        {
            StringBuilder argsStr = new StringBuilder();

            IList <IASTNode> argsList = call.Args;

            int argsCount = argsList.Count;

            for (int i = 0; i < argsCount; ++i)
            {
                if (i < argsCount - 1)
                {
                    argsStr.AppendFormat("{0}, ", argsList[i].Accept(this));
                }
                else
                {
                    argsStr.AppendFormat("{0}", argsList[i].Accept(this));
                }
            }

            StringBuilder callStr = new StringBuilder();

            switch (call.IntrinsicType)
            {
            case E_INTRINSIC_FUNC_TYPE.IFT_CONCAT:
                callStr.Append("CONCAT");
                break;

            case E_INTRINSIC_FUNC_TYPE.IFT_FILTER:
                callStr.Append("FILTER");
                break;

            case E_INTRINSIC_FUNC_TYPE.IFT_GET:
                callStr.Append("GET");
                break;

            case E_INTRINSIC_FUNC_TYPE.IFT_HEAD:
                callStr.Append("HEAD");
                break;

            case E_INTRINSIC_FUNC_TYPE.IFT_INDEXOF:
                callStr.Append("INDEXOF");
                break;

            case E_INTRINSIC_FUNC_TYPE.IFT_LAST:
                callStr.Append("LAST");
                break;

            case E_INTRINSIC_FUNC_TYPE.IFT_LEN:
                callStr.Append("LEN");
                break;

            case E_INTRINSIC_FUNC_TYPE.IFT_MAP:
                callStr.Append("MAP");
                break;

            case E_INTRINSIC_FUNC_TYPE.IFT_MAX:
                callStr.Append("MAX");
                break;

            case E_INTRINSIC_FUNC_TYPE.IFT_MIN:
                callStr.Append("MIN");
                break;

            case E_INTRINSIC_FUNC_TYPE.IFT_REVERSE:
                callStr.Append("REVERSE");
                break;

            case E_INTRINSIC_FUNC_TYPE.IFT_SLICE:
                callStr.Append("SLICE");
                break;

            case E_INTRINSIC_FUNC_TYPE.IFT_SORT:
                callStr.Append("SORT");
                break;

            case E_INTRINSIC_FUNC_TYPE.IFT_SUM:
                callStr.Append("SUM");
                break;

            case E_INTRINSIC_FUNC_TYPE.IFT_VECOP:
                callStr.Append("VECOP");
                break;
            }

            callStr.AppendFormat("({0})", argsStr);

            return(callStr.ToString());
        }