Пример #1
0
        public rtti.FunctionDefine getOperatorDefine(OverrideableOperator operCode, RunTimeDataType v1, RunTimeDataType v2)
        {
            var           dict = operFunctions[(int)operCode];
            DefineAndFunc function;

            if (dict.TryGetValue(new OperatorFunctionKey(v1, v2), out function))
            {
                return(function.define);
            }
            else
            {
                return(null);
            }
        }
Пример #2
0
        public rtData.rtFunction getOperatorFunction(OverrideableOperator operCode, RunTimeDataType v1, RunTimeDataType v2)
        {
            var           dict = operFunctions[(int)operCode];
            DefineAndFunc function;

            if (dict.TryGetValue(new OperatorFunctionKey(v1, v2), out function))
            {
                if (function.func == null)
                {
                    function.func = new rtData.rtFunction(function.define.functionid, function.define.isMethod);
                }

                return(function.func);
            }
            else
            {
                return(null);
            }
        }
Пример #3
0
        public void AddOperatorFunction(OverrideableOperator operCode, rtti.FunctionDefine function)
        {
            var dict = operFunctions[(int)operCode];

            if (function.signature.parameters.Count == 2)
            {
                OperatorFunctionKey key = new OperatorFunctionKey(
                    function.signature.parameters[0].type,
                    function.signature.parameters[1].type
                    );
                dict.Add(key, new DefineAndFunc()
                {
                    define = function, func = null
                });
            }
            else if (operCode == OverrideableOperator.op_explicit)
            {
                OperatorFunctionKey key = new OperatorFunctionKey(
                    function.signature.parameters[0].type,
                    function.signature.returnType
                    );
                dict.Add(key, new DefineAndFunc()
                {
                    define = function, func = null
                });
            }
            else
            {
                OperatorFunctionKey key = new OperatorFunctionKey(
                    function.signature.parameters[0].type,
                    RunTimeDataType.unknown
                    );
                dict.Add(key, new DefineAndFunc()
                {
                    define = function, func = null
                });
            }
        }