public virtual api.Function resolveFunction(string localName, int arity) { api.Function f = (api.Function)_functions[signature(localName, arity)]; if (f != null || arity == -1) { return(f); } // see if we got a varg one f = (api.Function)_functions[signature(localName, -1)]; // nope if (f == null) { return(null); } if (f.canMatchArity(arity)) { return(f); } return(null); }
/// <summary> /// Obtain the function name and arity from signature. /// </summary> /// <param name="f"> /// current function. </param> /// <returns> Signature. </returns> private static string signature(api.Function f) { return(signature(f.Name, f.VariableArgument ? -1 : f.MinArity)); }
/// <summary> /// Add a function. /// </summary> /// <param name="x"> /// function to add. </param> public virtual void addFunction(api.Function x) { _functions[signature(x)] = x; }