// 执行call操作 private object applyCallOperator(string Identifier, string IdentifierLower, ASTNode_ArgList Args, int LineNumber) { object pNativeFunc = fetchValueOfIdentifier(Identifier, IdentifierLower, LineNumber); if (pNativeFunc is NativeCallHandler == false) { throw new RuntimeException(LineNumber, String.Format("\"{0}\" is not callable.", Identifier)); } NativeCallHandler pHandler = (NativeCallHandler)pNativeFunc; object[] pArgs = null; if (Args.Args.Count > 0) { pArgs = new object[Args.Args.Count]; for (int i = 0; i < Args.Args.Count; ++i) { // 计算参数 pArgs[i] = ExecExpression(Args.Args[i]); } } // 调用函数 return(pHandler(this, pArgs, LineNumber)); }
/// <summary> /// 注册原生函数 /// </summary> /// <remarks>覆盖已有定义</remarks> /// <param name="Identifier">标识符</param> /// <param name="Handler">回调</param> public void RegisterIdentifier(string Identifier, NativeCallHandler Handler) { string IdLower = Identifier.ToLower(); if (_Environment.ContainsKey(IdLower)) { _Environment[IdLower] = Handler; } else { _Environment.Add(IdLower, Handler); } }