Exemplo n.º 1
0
        // 执行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));
        }
Exemplo n.º 2
0
        /// <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);
            }
        }