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

VisitLoop() protected method

protected VisitLoop ( QilLoop local0 ) : QilNode
local0 System.Xml.Xsl.Qil.QilLoop
return QilNode
        protected override QilNode VisitLoop(QilLoop 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( (QilNode) (local1)[0] )));
                    }
                }
            }
            if (this[XmlILOptimization.EliminateIterator]) {
                if (local1.NodeType == QilNodeType.For) {
                    QilNode local3 = local1[0];
                    if (local3.NodeType == QilNodeType.For) {
                        if ( !OptimizerPatterns.Read(local1).MatchesPattern(OptimizerPatternName.IsPositional) ) {
                            if (AllowReplace(XmlILOptimization.EliminateIterator, local0)) {
                                return Replace(XmlILOptimization.EliminateIterator, local0,  Subs(local2, local1, local3) );
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.EliminateLoop]) {
                if (local1.NodeType == QilNodeType.For) {
                    QilNode local3 = local1[0];
                    if (local3.NodeType == QilNodeType.Sequence) {
                        if ( (local3).Count == (0) ) {
                            if (AllowReplace(XmlILOptimization.EliminateLoop, local0)) {
                                return Replace(XmlILOptimization.EliminateLoop, local0, VisitSequence(f.Sequence()));
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.EliminateLoop]) {
                if ( !OptimizerPatterns.Read(local1).MatchesPattern(OptimizerPatternName.MaybeSideEffects) ) {
                    if (local2.NodeType == QilNodeType.Sequence) {
                        if ( (local2).Count == (0) ) {
                            if (AllowReplace(XmlILOptimization.EliminateLoop, local0)) {
                                return Replace(XmlILOptimization.EliminateLoop, local0, VisitSequence(f.Sequence()));
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.EliminateLoop]) {
                if (local2 == local1) {
                    if (AllowReplace(XmlILOptimization.EliminateLoop, local0)) {
                        return Replace(XmlILOptimization.EliminateLoop, local0,  (QilNode) (local1)[0] );
                    }
                }
            }
            if (this[XmlILOptimization.NormalizeLoopText]) {
                if (local1.NodeType == QilNodeType.For) {
                    QilNode local3 = local1[0];
                    if ( ( (local3).XmlType ).IsSingleton ) {
                        if (local2.NodeType == QilNodeType.TextCtor) {
                            QilNode local4 = local2[0];
                            if (AllowReplace(XmlILOptimization.NormalizeLoopText, local0)) {
                                return Replace(XmlILOptimization.NormalizeLoopText, local0, VisitTextCtor(f.TextCtor(VisitLoop(f.Loop(local1, local4)))));
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.EliminateIteratorUsedAtMostOnce]) {
                if ((( (local1).NodeType == QilNodeType.Let ) || ( ( ( (QilNode) (local1)[0] ).XmlType ).IsSingleton )) && ( !OptimizerPatterns.Read(local1).MatchesPattern(OptimizerPatternName.MaybeSideEffects) )) {
                    if (( nodeCounter.Count(local2, local1) <= 1 ) && ( !OptimizerPatterns.Read(local2).MatchesPattern(OptimizerPatternName.MaybeSideEffects) )) {
                        if (AllowReplace(XmlILOptimization.EliminateIteratorUsedAtMostOnce, local0)) {
                            return Replace(XmlILOptimization.EliminateIteratorUsedAtMostOnce, local0,  Subs(local2, local1,  (QilNode) (local1)[0] ) );
                        }
                    }
                }
            }
            if (this[XmlILOptimization.NormalizeLoopConditional]) {
                if (local2.NodeType == QilNodeType.Conditional) {
                    QilNode local3 = local2[0];
                    QilNode local4 = local2[1];
                    QilNode local5 = local2[2];
                    if (local4.NodeType == QilNodeType.Sequence) {
                        if ( (local4).Count == (0) ) {
                            if (local5 == local1) {
                                if (AllowReplace(XmlILOptimization.NormalizeLoopConditional, local0)) {
                                    return Replace(XmlILOptimization.NormalizeLoopConditional, local0, VisitFilter(f.Filter(local1, VisitNot(f.Not(local3)))));
                                }
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.NormalizeLoopConditional]) {
                if (local2.NodeType == QilNodeType.Conditional) {
                    QilNode local3 = local2[0];
                    QilNode local4 = local2[1];
                    QilNode local5 = local2[2];
                    if (local4 == local1) {
                        if (local5.NodeType == QilNodeType.Sequence) {
                            if ( (local5).Count == (0) ) {
                                if (AllowReplace(XmlILOptimization.NormalizeLoopConditional, local0)) {
                                    return Replace(XmlILOptimization.NormalizeLoopConditional, local0, VisitFilter(f.Filter(local1, local3)));
                                }
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.NormalizeLoopConditional]) {
                if (local1.NodeType == QilNodeType.For) {
                    if (local2.NodeType == QilNodeType.Conditional) {
                        QilNode local4 = local2[0];
                        QilNode local5 = local2[1];
                        QilNode local6 = local2[2];
                        if (local5.NodeType == QilNodeType.Sequence) {
                            if ( (local5).Count == (0) ) {
                                if ( NonPositional(local6, local1) ) {
                                    if (AllowReplace(XmlILOptimization.NormalizeLoopConditional, local0)) {
                                        QilNode local7 = VisitFor(f.For(VisitFilter(f.Filter(local1, VisitNot(f.Not(local4))))));
                                        return Replace(XmlILOptimization.NormalizeLoopConditional, local0, VisitLoop(f.Loop(local7,  Subs(local6, local1, local7) )));
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.NormalizeLoopConditional]) {
                if (local1.NodeType == QilNodeType.For) {
                    if (local2.NodeType == QilNodeType.Conditional) {
                        QilNode local4 = local2[0];
                        QilNode local5 = local2[1];
                        QilNode local6 = local2[2];
                        if ( NonPositional(local5, local1) ) {
                            if (local6.NodeType == QilNodeType.Sequence) {
                                if ( (local6).Count == (0) ) {
                                    if (AllowReplace(XmlILOptimization.NormalizeLoopConditional, local0)) {
                                        QilNode local7 = VisitFor(f.For(VisitFilter(f.Filter(local1, local4))));
                                        return Replace(XmlILOptimization.NormalizeLoopConditional, local0, VisitLoop(f.Loop(local7,  Subs(local5, local1, local7) )));
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.NormalizeLoopLoop]) {
                if (local2.NodeType == QilNodeType.Loop) {
                    QilNode local3 = local2[0];
                    QilNode local5 = local2[1];
                    if (local3.NodeType == QilNodeType.For) {
                        QilNode local4 = local3[0];
                        if ((!(DependsOn(local5,local1))) && ( NonPositional(local5, local3) )) {
                            if (AllowReplace(XmlILOptimization.NormalizeLoopLoop, local0)) {
                                QilNode local6 = VisitFor(f.For(VisitLoop(f.Loop(local1, local4))));
                                return Replace(XmlILOptimization.NormalizeLoopLoop, local0, VisitLoop(f.Loop(local6,  Subs(local5, local3, local6) )));
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.AnnotateSingletonLoop]) {
                if (local1.NodeType == QilNodeType.For) {
                    QilNode local3 = local1[0];
                    if ( !( (local3).XmlType ).MaybeMany ) {
                        if (AllowReplace(XmlILOptimization.AnnotateSingletonLoop, local0)) {
                             OptimizerPatterns.Inherit((QilNode) (local2), (QilNode) (local0), OptimizerPatternName.IsDocOrderDistinct);  OptimizerPatterns.Inherit((QilNode) (local2), (QilNode) (local0), OptimizerPatternName.SameDepth);  }
                    }
                }
            }
            if (this[XmlILOptimization.AnnotateRootLoop]) {
                if ( IsStepPattern(local2, QilNodeType.Root) ) {
                    if (AllowReplace(XmlILOptimization.AnnotateRootLoop, local0)) {
                         OptimizerPatterns.Write((QilNode) (local0)).AddPattern(OptimizerPatternName.SameDepth);  }
                }
            }
            if (this[XmlILOptimization.AnnotateContentLoop]) {
                if (local1.NodeType == QilNodeType.For) {
                    QilNode local3 = local1[0];
                    if ( OptimizerPatterns.Read((QilNode) (local3)).MatchesPattern(OptimizerPatternName.SameDepth) ) {
                        if ((( IsStepPattern(local2, QilNodeType.Content) ) || ( IsStepPattern(local2, QilNodeType.Union) )) && ( (local1) == ( OptimizerPatterns.Read((QilNode) (local2)).GetArgument(OptimizerPatternArgument.StepInput) ) )) {
                            if (AllowReplace(XmlILOptimization.AnnotateContentLoop, local0)) {
                                 OptimizerPatterns.Write((QilNode) (local0)).AddPattern(OptimizerPatternName.SameDepth);  OptimizerPatterns.Inherit((QilNode) (local3), (QilNode) (local0), OptimizerPatternName.IsDocOrderDistinct);  }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.AnnotateAttrNmspLoop]) {
                if (local1.NodeType == QilNodeType.For) {
                    QilNode local3 = local1[0];
                    if (((( IsStepPattern(local2, QilNodeType.Attribute) ) || ( IsStepPattern(local2, QilNodeType.XPathNamespace) )) || ( OptimizerPatterns.Read((QilNode) (local2)).MatchesPattern(OptimizerPatternName.FilterAttributeKind) )) && ( (local1) == ( OptimizerPatterns.Read((QilNode) (local2)).GetArgument(OptimizerPatternArgument.StepInput) ) )) {
                        if (AllowReplace(XmlILOptimization.AnnotateAttrNmspLoop, local0)) {
                             OptimizerPatterns.Inherit((QilNode) (local3), (QilNode) (local0), OptimizerPatternName.SameDepth);  OptimizerPatterns.Inherit((QilNode) (local3), (QilNode) (local0), OptimizerPatternName.IsDocOrderDistinct);  }
                    }
                }
            }
            if (this[XmlILOptimization.AnnotateDescendantLoop]) {
                if (local1.NodeType == QilNodeType.For) {
                    QilNode local3 = local1[0];
                    if ( OptimizerPatterns.Read((QilNode) (local3)).MatchesPattern(OptimizerPatternName.SameDepth) ) {
                        if ((( IsStepPattern(local2, QilNodeType.Descendant) ) || ( IsStepPattern(local2, QilNodeType.DescendantOrSelf) )) && ( (local1) == ( OptimizerPatterns.Read((QilNode) (local2)).GetArgument(OptimizerPatternArgument.StepInput) ) )) {
                            if (AllowReplace(XmlILOptimization.AnnotateDescendantLoop, local0)) {
                                 OptimizerPatterns.Inherit((QilNode) (local3), (QilNode) (local0), OptimizerPatternName.IsDocOrderDistinct);  }
                        }
                    }
                }
            }
            return NoReplace(local0);
        }
        
XmlILOptimizerVisitor