/// <summary> /// Perform validation on operands passed to a function /// </summary> private ErrorValueOperand MarshalArguments(FunctionInfo info, IOperand[] ops) { FormulaFunctionAttribute attr = info.FunctionAttribute; for (int i = 0; i <= ops.Length - 1; i++) { IOperand op = ops[i]; // We don't want invalid references if (IsInvalidReference(op)) { return(new ErrorValueOperand(ErrorValueType.Ref)); } ArgumentMarshalResult result = attr.MarshalArgument(i, op); if (result.Success == false) { return((ErrorValueOperand)result.Result); } ops[i] = result.Result; } return(null); }
internal bool IsValidArgumentCount(string functionName, int argCount) { FunctionInfo info = GetFunctionInfo(functionName); FormulaFunctionAttribute attr = info.FunctionAttribute; return(attr.IsValidMinArgCount(argCount) & attr.IsValidMaxArgCount(argCount)); }
public FunctionInfo(FormulaFunctionCall target, FormulaFunctionAttribute attr) { FunctionTarget = target; FunctionAttribute = attr; string targetName = target.Method.Name; if (attr.Names != null && attr.Names.Length > 0) { int addlNamesLen = attr.Names.Length; Names = new string[addlNamesLen + 1]; Array.Copy(attr.Names, 0, Names, 1, addlNamesLen); } else { Names = new string[1]; } Names[0] = targetName; Volatile = attr.IsVolatile; }