|  | using System.Collections.Generic; | 
|  | using System.Linq; | 
|  | using OfficeOpenXml.FormulaParsing.Excel.Functions; | 
|  | using OfficeOpenXml.FormulaParsing.Exceptions; | 
|  | using OfficeOpenXml.FormulaParsing.Utilities; | 
|  |  | 
|  | namespace OfficeOpenXml.FormulaParsing.ExpressionGraph.FunctionCompilers; | 
|  |  | 
|  | public class IfErrorFunctionCompiler : FunctionCompiler { | 
|  | public IfErrorFunctionCompiler(ExcelFunction function) | 
|  | : base(function) { | 
|  | Require.That(function).Named("function").IsNotNull(); | 
|  | } | 
|  |  | 
|  | public override CompileResult Compile(IEnumerable<Expression> children, ParsingContext context) { | 
|  | if (children.Count() != 2) { | 
|  | throw new ExcelErrorValueException(eErrorType.Value); | 
|  | } | 
|  | var args = new List<FunctionArgument>(); | 
|  | Function.BeforeInvoke(context); | 
|  | var firstChild = children.First(); | 
|  | var lastChild = children.ElementAt(1); | 
|  | try { | 
|  | var result = firstChild.Compile(); | 
|  | if (result.DataType == DataType.ExcelError) { | 
|  | args.Add(new(lastChild.Compile().Result)); | 
|  | } else { | 
|  | args.Add(new(result.Result)); | 
|  | } | 
|  | } catch (ExcelErrorValueException) { | 
|  | args.Add(new(lastChild.Compile().Result)); | 
|  | } | 
|  | return Function.Execute(args, context); | 
|  | } | 
|  | } |