コード例 #1
0
        /// <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);
        }
コード例 #2
0
        internal bool IsValidArgumentCount(string functionName, int argCount)
        {
            FunctionInfo             info = GetFunctionInfo(functionName);
            FormulaFunctionAttribute attr = info.FunctionAttribute;

            return(attr.IsValidMinArgCount(argCount) & attr.IsValidMaxArgCount(argCount));
        }
コード例 #3
0
            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;
            }