protected override QilNode VisitDifference(QilBinary local0) {
QilNode local1 = local0[0];
QilNode local2 = local0[1];
if (this[XmlILOptimization.FoldNone]) {
if ( (object) ( (local1).XmlType ) == (object) XmlQueryTypeFactory.None ) {
if (AllowReplace(XmlILOptimization.FoldNone, local0)) {
return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(local1)));
}
}
}
if (this[XmlILOptimization.FoldNone]) {
if ( (object) ( (local2).XmlType ) == (object) XmlQueryTypeFactory.None ) {
if (AllowReplace(XmlILOptimization.FoldNone, local0)) {
return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(local2)));
}
}
}
if (this[XmlILOptimization.EliminateDifference]) {
if (local1.NodeType == QilNodeType.Sequence) {
if ( (local1).Count == (0) ) {
if (AllowReplace(XmlILOptimization.EliminateDifference, local0)) {
return Replace(XmlILOptimization.EliminateDifference, local0, local1);
}
}
}
}
if (this[XmlILOptimization.EliminateDifference]) {
if (local2.NodeType == QilNodeType.Sequence) {
if ( (local2).Count == (0) ) {
if (AllowReplace(XmlILOptimization.EliminateDifference, local0)) {
return Replace(XmlILOptimization.EliminateDifference, local0, VisitDocOrderDistinct(f.DocOrderDistinct(local1)));
}
}
}
}
if (this[XmlILOptimization.EliminateDifference]) {
if (local2 == local1) {
if (AllowReplace(XmlILOptimization.EliminateDifference, local0)) {
return Replace(XmlILOptimization.EliminateDifference, local0, VisitSequence(f.Sequence()));
}
}
}
if (this[XmlILOptimization.EliminateDifference]) {
if (local1.NodeType == QilNodeType.XmlContext) {
if (local2.NodeType == QilNodeType.XmlContext) {
if (AllowReplace(XmlILOptimization.EliminateDifference, local0)) {
return Replace(XmlILOptimization.EliminateDifference, local0, VisitSequence(f.Sequence()));
}
}
}
}
if (this[XmlILOptimization.NormalizeDifference]) {
if ((!( IsDocOrderDistinct(local1) )) || (!( IsDocOrderDistinct(local2) ))) {
if (AllowReplace(XmlILOptimization.NormalizeDifference, local0)) {
return Replace(XmlILOptimization.NormalizeDifference, local0, VisitDifference(f.Difference(VisitDocOrderDistinct(f.DocOrderDistinct(local1)), VisitDocOrderDistinct(f.DocOrderDistinct(local2)))));
}
}
}
if (this[XmlILOptimization.AnnotateDifference]) {
if (AllowReplace(XmlILOptimization.AnnotateDifference, local0)) {
OptimizerPatterns.Write((QilNode) (local0)).AddPattern(OptimizerPatternName.IsDocOrderDistinct); }
}
return NoReplace(local0);
}