protected IFCommand UpdateIf(IFCommand ifx, Expression check, Expression ifTrue, Expression ifFalse)
 {
     if (check != ifx.Check || ifTrue != ifx.IfTrue || ifFalse != ifx.IfFalse)
     {
         return(new IFCommand(check, ifTrue, ifFalse));
     }
     return(ifx);
 }
        protected virtual Expression VisitIf(IFCommand ifx)
        {
            var check   = this.Visit(ifx.Check);
            var ifTrue  = this.Visit(ifx.IfTrue);
            var ifFalse = this.Visit(ifx.IfFalse);

            return(this.UpdateIf(ifx, check, ifTrue, ifFalse));
        }
 protected virtual bool CompareIf(IFCommand x, IFCommand y)
 {
     return(this.Compare(x.Check, y.Check) && this.Compare(x.IfTrue, y.IfTrue) && this.Compare(x.IfFalse, y.IfFalse));
 }