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