/// <summary> /// Get the first declared function of this undecorated name. /// </summary> /// <param name="scope"></param> /// <param name="nameSpace"></param> /// <param name="functionName"></param> /// <returns></returns> public static QsFunction GetFirstDeclaredFunction( QsScope scope, string nameSpace, string functionName) { IEnumerable <KeyValuePair <string, object> > Items = null; if (!string.IsNullOrEmpty(nameSpace)) { var ns = QsNamespace.GetNamespace(scope, nameSpace); Items = ns.GetItems(); } else { Items = scope.GetItems(); } var func_Pass1 = from item in Items where item.Value is QsFunction select(QsFunction) item.Value; var qf = from fun in func_Pass1 where fun.FunctionName.Equals(functionName, StringComparison.OrdinalIgnoreCase) select fun; return(qf.ElementAtOrDefault(0)); }
/// <summary> /// /// </summary> /// <param name="scope"></param> /// <param name="nameSpace"></param> /// <param name="parametersCount">filter functions by number of parameters</param> /// <param name="parametersNames"></param> /// <returns></returns> public static QsFunction[] FindFunctionByParameters( QsScope scope, string qsNamespace, string functionName, int parametersCount, params string[] parametersNames) { IEnumerable <KeyValuePair <string, object> > Items = null; if (!string.IsNullOrEmpty(qsNamespace)) { var ns = QsNamespace.GetNamespace(scope, qsNamespace); Items = ns.GetItems(); } else { Items = scope.GetItems(); } var func_Pass1 = from item in Items where item.Value is QsFunction select(QsFunction) item.Value; var func_Pass2 = from func in func_Pass1 where func.ContainsParameters(parametersNames) && func.Parameters.Length == parametersCount select func; var func_Pass3 = from fc in func_Pass2 where fc.FunctionName.Equals(functionName, StringComparison.OrdinalIgnoreCase) select fc; return(func_Pass3.ToArray()); }
/// <summary> /// Get the function that is stored in the scope. /// </summary> /// <param name="scope"></param> /// <param name="realName"></param> /// <returns></returns> public static QsFunction GetFunction(QsScope scope, string qsNamespace, string functionName) { if (string.IsNullOrEmpty(qsNamespace)) { // no namespace included then it is from the local scope. // I am adding the mathmatical functions in the root namespace // so I will test for the function namespace and QsFunction function = (QsFunction)MathNamespace.GetValueOrNull(functionName); // built int math functions will be overwrite any other functions if (function != null) { return(function); } else { function = (QsFunction)QsEvaluator.GetScopeValueOrNull(scope, qsNamespace, functionName); } return(function); } else { try { QsNamespace ns = QsNamespace.GetNamespace(scope, qsNamespace); return((QsFunction)ns.GetValue(functionName)); } catch (QsVariableNotFoundException) { return(null); } } }