public override object Execute(IContextProvider provider, object[] dataPool)
 {
     try
     {
         object value1 = CoreFuncs.CastToNumber1(Context,
                                                 CoreFuncs.Atomize(this[0].Execute(provider, dataPool)));
         if (value1 != Undefined.Value)
         {
             object value2 = CoreFuncs.CastToNumber1(Context,
                                                     CoreFuncs.Atomize(this[1].Execute(provider, dataPool)));
             if (value2 != Undefined.Value)
             {
                 return(_binaryOper(provider, value1, value2));
             }
         }
         return(Undefined.Value);
     }
     catch (DivideByZeroException ex)
     {
         throw new XPath2Exception("", ex.Message, ex);
     }
     catch (OverflowException ex)
     {
         throw new XPath2Exception("", ex.Message, ex);
     }
 }