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())); }
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()); }