public bool TryGetFunction(string functionName, out bool isUserFunction, out FunctionHandler retHandler) { //First, check user functions to see if function with name exists if(userFunctions.Contains(functionName)) { retHandler = new UserFunctionHandler(); isUserFunction = true; return true; } //Then, check system functions to see if function exists if (this.systemFunctions.TryGetValue(functionName, out FunctionHandler systemFunction)) { retHandler = systemFunction; isUserFunction = false; return true; } //Finally, check if function has been overridden, if it has a '_' at the front ('_' prefixed function if(functionName.StartsWith("_") && this.systemFunctions.TryGetValue(functionName.Substring(1), out FunctionHandler overridenFunction)) { retHandler = overridenFunction; isUserFunction = false; return true; } retHandler = null; isUserFunction = false; return false; }
private void RegisterFunctionWithCheck(IgnoreCaseDictionary<FunctionHandler> dict, FunctionHandler userFunctionHandler) { foreach (string function_name in userFunctionHandler.FunctionNames()) { if (dict.Contains(function_name)) { throw new Exception($"User function {function_name} was defined twice"); } else { dict.Set(function_name, userFunctionHandler); } } }