private object EvaluateFunction(CalcFunction func, object[] args, CalcEvaluatorContext context, bool acceptsArray, bool acceptsReference, int offsetRow, int offsetColumn) { try { CalcEvaluatorContext context2 = ((offsetRow != 0) && (offsetColumn != 0)) ? ((context != null) ? context.Offset(offsetRow, offsetColumn) : null) : context; object obj2 = func.IsContextSensitive ? func.Evaluate(args, context2) : func.Evaluate(args); if (obj2 is CalcReference) { if (context2 != null) { if (context2.ArrayFormulaMode) { if (context.ExpandArrayToMultiCall) { obj2 = CalcHelper.GetArrayValue(CalcConvert.ToArray(obj2), offsetRow, offsetColumn) ?? ((int)0); } } else if (!acceptsReference) { obj2 = this.ExtractValueFromReference(obj2 as CalcReference, context2.Row, context2.Column) ?? ((int)0); } } } else if (obj2 is CalcArray) { if (context == null) { obj2 = CalcHelper.GetArrayValue(obj2 as CalcArray, offsetRow, offsetColumn); } else if (context.ArrayFormulaMode) { if (context.ExpandArrayToMultiCall) { obj2 = CalcHelper.GetArrayValue(obj2 as CalcArray, offsetRow, offsetColumn); } } else if (!acceptsArray && context.ExpandArrayToMultiCall) { obj2 = CalcHelper.GetArrayValue(obj2 as CalcArray, offsetRow, offsetColumn); } } return(obj2); } catch (InvalidCastException) { return(CalcErrors.Value); } }