System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitDocOrderDistinct C# (CSharp) Method

VisitDocOrderDistinct() protected method

protected VisitDocOrderDistinct ( QilUnary local0 ) : QilNode
local0 System.Xml.Xsl.Qil.QilUnary
return QilNode
        protected override QilNode VisitDocOrderDistinct(QilUnary local0) {
            QilNode local1 = local0[0];
            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.EliminateDod]) {
                if ( IsDocOrderDistinct(local1) ) {
                    if (AllowReplace(XmlILOptimization.EliminateDod, local0)) {
                        return Replace(XmlILOptimization.EliminateDod, local0, local1);
                    }
                }
            }
            if (this[XmlILOptimization.FoldNamedDescendants]) {
                if (local1.NodeType == QilNodeType.Loop) {
                    QilNode local2 = local1[0];
                    QilNode local7 = local1[1];
                    if (local2.NodeType == QilNodeType.For) {
                        QilNode local3 = local2[0];
                        if (local3.NodeType == QilNodeType.Loop) {
                            QilNode local4 = local3[0];
                            QilNode local5 = local3[1];
                            if (local5.NodeType == QilNodeType.DescendantOrSelf) {
                                QilNode local6 = local5[0];
                                if (local7.NodeType == QilNodeType.Filter) {
                                    QilNode local8 = local7[0];
                                    QilNode local9 = local7[1];
                                    if ((( OptimizerPatterns.Read((QilNode) (local7)).MatchesPattern(OptimizerPatternName.FilterElements) ) || ( OptimizerPatterns.Read((QilNode) (local7)).MatchesPattern(OptimizerPatternName.FilterContentKind) )) && ( IsStepPattern(local7, QilNodeType.Content) )) {
                                        if (AllowReplace(XmlILOptimization.FoldNamedDescendants, local0)) {
                                            QilNode local10 = VisitFor(f.For(VisitDescendant(f.Descendant(local6))));
                                            return Replace(XmlILOptimization.FoldNamedDescendants, local0, VisitDocOrderDistinct(f.DocOrderDistinct(VisitLoop(f.Loop(local4, VisitFilter(f.Filter(local10,  Subs(local9, local8, local10) )))))));
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.FoldNamedDescendants]) {
                if (local1.NodeType == QilNodeType.Loop) {
                    QilNode local2 = local1[0];
                    QilNode local5 = local1[1];
                    if (local2.NodeType == QilNodeType.For) {
                        QilNode local3 = local2[0];
                        if (local3.NodeType == QilNodeType.DescendantOrSelf) {
                            QilNode local4 = local3[0];
                            if (local5.NodeType == QilNodeType.Filter) {
                                QilNode local6 = local5[0];
                                QilNode local7 = local5[1];
                                if ((( OptimizerPatterns.Read((QilNode) (local5)).MatchesPattern(OptimizerPatternName.FilterElements) ) || ( OptimizerPatterns.Read((QilNode) (local5)).MatchesPattern(OptimizerPatternName.FilterContentKind) )) && ( IsStepPattern(local5, QilNodeType.Content) )) {
                                    if (AllowReplace(XmlILOptimization.FoldNamedDescendants, local0)) {
                                        QilNode local8 = VisitFor(f.For(VisitDescendant(f.Descendant(local4))));
                                        return Replace(XmlILOptimization.FoldNamedDescendants, local0, VisitFilter(f.Filter(local8,  Subs(local7, local6, local8) )));
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.CommuteDodFilter]) {
                if (local1.NodeType == QilNodeType.Filter) {
                    QilNode local2 = local1[0];
                    QilNode local4 = local1[1];
                    if (local2.NodeType == QilNodeType.For) {
                        QilNode local3 = local2[0];
                        if ( !OptimizerPatterns.Read(local2).MatchesPattern(OptimizerPatternName.IsPositional) ) {
                            if (((!( OptimizerPatterns.Read((QilNode) (local1)).MatchesPattern(OptimizerPatternName.FilterElements) )) && (!( OptimizerPatterns.Read((QilNode) (local1)).MatchesPattern(OptimizerPatternName.FilterContentKind) ))) && (!( OptimizerPatterns.Read((QilNode) (local1)).MatchesPattern(OptimizerPatternName.FilterAttributeKind) ))) {
                                if (AllowReplace(XmlILOptimization.CommuteDodFilter, local0)) {
                                    QilNode local5 = VisitFor(f.For(VisitDocOrderDistinct(f.DocOrderDistinct(local3))));
                                    return Replace(XmlILOptimization.CommuteDodFilter, local0, VisitFilter(f.Filter(local5,  Subs(local4, local2, local5) )));
                                }
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.CommuteDodFilter]) {
                if (local1.NodeType == QilNodeType.Loop) {
                    QilNode local2 = local1[0];
                    QilNode local3 = local1[1];
                    if (local3.NodeType == QilNodeType.Filter) {
                        QilNode local4 = local3[0];
                        QilNode local6 = local3[1];
                        if (local4.NodeType == QilNodeType.For) {
                            QilNode local5 = local4[0];
                            if ( !OptimizerPatterns.Read(local4).MatchesPattern(OptimizerPatternName.IsPositional) ) {
                                if (!(DependsOn(local6,local2))) {
                                    if (((!( OptimizerPatterns.Read((QilNode) (local3)).MatchesPattern(OptimizerPatternName.FilterElements) )) && (!( OptimizerPatterns.Read((QilNode) (local3)).MatchesPattern(OptimizerPatternName.FilterContentKind) ))) && (!( OptimizerPatterns.Read((QilNode) (local3)).MatchesPattern(OptimizerPatternName.FilterAttributeKind) ))) {
                                        if (AllowReplace(XmlILOptimization.CommuteDodFilter, local0)) {
                                            QilNode local7 = VisitFor(f.For(VisitDocOrderDistinct(f.DocOrderDistinct(VisitLoop(f.Loop(local2, local5))))));
                                            return Replace(XmlILOptimization.CommuteDodFilter, local0, VisitFilter(f.Filter(local7,  Subs(local6, local4, local7) )));
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.IntroduceDod]) {
                if (local1.NodeType == QilNodeType.Loop) {
                    QilNode local2 = local1[0];
                    QilNode local4 = local1[1];
                    if (local2.NodeType == QilNodeType.For) {
                        QilNode local3 = local2[0];
                        if (!( IsDocOrderDistinct(local3) )) {
                            if (( !OptimizerPatterns.Read(local2).MatchesPattern(OptimizerPatternName.IsPositional) ) && (  (local3).XmlType .IsSubtypeOf( XmlQueryTypeFactory.NodeNotRtfS ) )) {
                                if (((!( OptimizerPatterns.Read((QilNode) (local1)).MatchesPattern(OptimizerPatternName.FilterElements) )) && (!( OptimizerPatterns.Read((QilNode) (local1)).MatchesPattern(OptimizerPatternName.FilterContentKind) ))) && (!( OptimizerPatterns.Read((QilNode) (local1)).MatchesPattern(OptimizerPatternName.FilterAttributeKind) ))) {
                                    if (AllowReplace(XmlILOptimization.IntroduceDod, local0)) {
                                        QilNode local5 = VisitFor(f.For(VisitDocOrderDistinct(f.DocOrderDistinct(local3))));
                                        return Replace(XmlILOptimization.IntroduceDod, local0, VisitDocOrderDistinct(f.DocOrderDistinct(VisitLoop(f.Loop(local5,  Subs(local4, local2, local5) )))));
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.IntroducePrecedingDod]) {
                if (local1.NodeType == QilNodeType.Loop) {
                    QilNode local2 = local1[0];
                    QilNode local3 = local1[1];
                    if ((!( IsDocOrderDistinct(local3) )) && ( IsStepPattern(local3, QilNodeType.PrecedingSibling) )) {
                        if (AllowReplace(XmlILOptimization.IntroducePrecedingDod, local0)) {
                            return Replace(XmlILOptimization.IntroducePrecedingDod, local0, VisitDocOrderDistinct(f.DocOrderDistinct(VisitLoop(f.Loop(local2, VisitDocOrderDistinct(f.DocOrderDistinct(local3)))))));
                        }
                    }
                }
            }
            if (this[XmlILOptimization.EliminateReturnDod]) {
                if (local1.NodeType == QilNodeType.Loop) {
                    QilNode local2 = local1[0];
                    QilNode local3 = local1[1];
                    if (local3.NodeType == QilNodeType.DocOrderDistinct) {
                        QilNode local4 = local3[0];
                        if (!( IsStepPattern(local4, QilNodeType.PrecedingSibling) )) {
                            if (AllowReplace(XmlILOptimization.EliminateReturnDod, local0)) {
                                return Replace(XmlILOptimization.EliminateReturnDod, local0, VisitDocOrderDistinct(f.DocOrderDistinct(VisitLoop(f.Loop(local2, local4)))));
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.AnnotateDod]) {
                if (AllowReplace(XmlILOptimization.AnnotateDod, local0)) {
                     OptimizerPatterns.Write((QilNode) (local0)).AddPattern(OptimizerPatternName.IsDocOrderDistinct);  OptimizerPatterns.Inherit((QilNode) (local1), (QilNode) (local0), OptimizerPatternName.SameDepth);  }
            }
            if (this[XmlILOptimization.AnnotateDodReverse]) {
                if ( AllowDodReverse(local1) ) {
                    if (AllowReplace(XmlILOptimization.AnnotateDodReverse, local0)) {
                         OptimizerPatterns.Write((QilNode) (local0)).AddPattern(OptimizerPatternName.DodReverse);  OptimizerPatterns.Write((QilNode) (local0)).AddArgument(OptimizerPatternArgument.DodStep, local1);  }
                }
            }
            if (this[XmlILOptimization.AnnotateJoinAndDod]) {
                if (local1.NodeType == QilNodeType.Loop) {
                    QilNode local2 = local1[0];
                    QilNode local4 = local1[1];
                    if (local2.NodeType == QilNodeType.For) {
                        QilNode local3 = local2[0];
                        if ( IsDocOrderDistinct(local3) ) {
                            if (( AllowJoinAndDod(local4) ) && ( (local2) == ( OptimizerPatterns.Read((QilNode) (local4)).GetArgument(OptimizerPatternArgument.StepInput) ) )) {
                                if (AllowReplace(XmlILOptimization.AnnotateJoinAndDod, local0)) {
                                     OptimizerPatterns.Write((QilNode) (local0)).AddPattern(OptimizerPatternName.JoinAndDod);  OptimizerPatterns.Write((QilNode) (local0)).AddArgument(OptimizerPatternArgument.DodStep, local4);  }
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.AnnotateDodMerge]) {
                if (local1.NodeType == QilNodeType.Loop) {
                    QilNode local3 = local1[1];
                    if (local3.NodeType == QilNodeType.Invoke) {
                        if ( IsDocOrderDistinct(local3) ) {
                            if (AllowReplace(XmlILOptimization.AnnotateDodMerge, local0)) {
                                 OptimizerPatterns.Write((QilNode) (local0)).AddPattern(OptimizerPatternName.DodMerge);  }
                        }
                    }
                }
            }
            return NoReplace(local0);
        }
        
XmlILOptimizerVisitor