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

VisitFilter() protected method

protected VisitFilter ( QilLoop local0 ) : QilNode
local0 System.Xml.Xsl.Qil.QilLoop
return QilNode
        protected override QilNode VisitFilter(QilLoop local0) {
            QilNode local1 = local0[0];
            QilNode local2 = local0[1];
            if (this[XmlILOptimization.FoldNone]) {
                if ( (object) ( (local2).XmlType ) == (object) XmlQueryTypeFactory.None ) {
                    if (AllowReplace(XmlILOptimization.FoldNone, local0)) {
                        return Replace(XmlILOptimization.FoldNone, local0, VisitLoop(f.Loop(local1, local2)));
                    }
                }
            }
            if (this[XmlILOptimization.EliminateFilter]) {
                if ( !OptimizerPatterns.Read(local1).MatchesPattern(OptimizerPatternName.MaybeSideEffects) ) {
                    if (local2.NodeType == QilNodeType.False) {
                        if (AllowReplace(XmlILOptimization.EliminateFilter, local0)) {
                            return Replace(XmlILOptimization.EliminateFilter, local0, VisitSequence(f.Sequence()));
                        }
                    }
                }
            }
            if (this[XmlILOptimization.EliminateFilter]) {
                if (local2.NodeType == QilNodeType.True) {
                    if (AllowReplace(XmlILOptimization.EliminateFilter, local0)) {
                        return Replace(XmlILOptimization.EliminateFilter, local0,  (QilNode) (local1)[0] );
                    }
                }
            }
            if (this[XmlILOptimization.NormalizeAttribute]) {
                if (local1.NodeType == QilNodeType.For) {
                    QilNode local3 = local1[0];
                    if (local3.NodeType == QilNodeType.Content) {
                        QilNode local4 = local3[0];
                        if (local2.NodeType == QilNodeType.And) {
                            QilNode local5 = local2[0];
                            QilNode local9 = local2[1];
                            if (local5.NodeType == QilNodeType.IsType) {
                                QilNode local6 = local5[0];
                                QilNode local7 = local5[1];
                                if (local6 == local1) {
                                    if (local7.NodeType == QilNodeType.LiteralType) {
                                        XmlQueryType local8 = (XmlQueryType)((QilLiteral)local7).Value;
                                        if ( (local8) == ( XmlQueryTypeFactory.Attribute ) ) {
                                            if (local9.NodeType == QilNodeType.Eq) {
                                                QilNode local10 = local9[0];
                                                QilNode local12 = local9[1];
                                                if (local10.NodeType == QilNodeType.NameOf) {
                                                    QilNode local11 = local10[0];
                                                    if (local11 == local1) {
                                                        if (local12.NodeType == QilNodeType.LiteralQName) {
                                                            if (AllowReplace(XmlILOptimization.NormalizeAttribute, local0)) {
                                                                return Replace(XmlILOptimization.NormalizeAttribute, local0, VisitAttribute(f.Attribute(local4, local12)));
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.CommuteFilterLoop]) {
                if (local1.NodeType == QilNodeType.For) {
                    QilNode local3 = local1[0];
                    if (local3.NodeType == QilNodeType.Loop) {
                        QilNode local4 = local3[0];
                        QilNode local5 = local3[1];
                        if ( NonPositional(local2, local1) ) {
                            if (AllowReplace(XmlILOptimization.CommuteFilterLoop, local0)) {
                                QilNode local6 = VisitFor(f.For(local5));
                                return Replace(XmlILOptimization.CommuteFilterLoop, local0, VisitLoop(f.Loop(local4, VisitFilter(f.Filter(local6,  Subs(local2, local1, local6) )))));
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.NormalizeLoopInvariant]) {
                if ( !OptimizerPatterns.Read(local1).MatchesPattern(OptimizerPatternName.MaybeSideEffects) ) {
                    if ((!(DependsOn(local2,local1))) && ( !OptimizerPatterns.Read(local2).MatchesPattern(OptimizerPatternName.MaybeSideEffects) )) {
                        if (AllowReplace(XmlILOptimization.NormalizeLoopInvariant, local0)) {
                            return Replace(XmlILOptimization.NormalizeLoopInvariant, local0, VisitConditional(f.Conditional(local2,  (QilNode) (local1)[0] , VisitSequence(f.Sequence()))));
                        }
                    }
                }
            }
            if (this[XmlILOptimization.AnnotateMaxPositionEq]) {
                if (local2.NodeType == QilNodeType.Eq) {
                    QilNode local3 = local2[0];
                    QilNode local5 = local2[1];
                    if (local3.NodeType == QilNodeType.PositionOf) {
                        QilNode local4 = local3[0];
                        if (local4 == local1) {
                            if (local5.NodeType == QilNodeType.LiteralInt32) {
                                int local6 = (int)((QilLiteral)local5).Value;
                                if (AllowReplace(XmlILOptimization.AnnotateMaxPositionEq, local0)) {
                                     OptimizerPatterns.Write((QilNode) (local1)).AddPattern(OptimizerPatternName.MaxPosition);  OptimizerPatterns.Write((QilNode) (local1)).AddArgument(OptimizerPatternArgument.MaxPosition, local6);  }
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.AnnotateMaxPositionLe]) {
                if (local2.NodeType == QilNodeType.Le) {
                    QilNode local3 = local2[0];
                    QilNode local5 = local2[1];
                    if (local3.NodeType == QilNodeType.PositionOf) {
                        QilNode local4 = local3[0];
                        if (local4 == local1) {
                            if (local5.NodeType == QilNodeType.LiteralInt32) {
                                int local6 = (int)((QilLiteral)local5).Value;
                                if (AllowReplace(XmlILOptimization.AnnotateMaxPositionLe, local0)) {
                                     OptimizerPatterns.Write((QilNode) (local1)).AddPattern(OptimizerPatternName.MaxPosition);  OptimizerPatterns.Write((QilNode) (local1)).AddArgument(OptimizerPatternArgument.MaxPosition, local6);  }
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.AnnotateMaxPositionLt]) {
                if (local2.NodeType == QilNodeType.Lt) {
                    QilNode local3 = local2[0];
                    QilNode local5 = local2[1];
                    if (local3.NodeType == QilNodeType.PositionOf) {
                        QilNode local4 = local3[0];
                        if (local4 == local1) {
                            if (local5.NodeType == QilNodeType.LiteralInt32) {
                                int local6 = (int)((QilLiteral)local5).Value;
                                if (AllowReplace(XmlILOptimization.AnnotateMaxPositionLt, local0)) {
                                     OptimizerPatterns.Write((QilNode) (local1)).AddPattern(OptimizerPatternName.MaxPosition);  OptimizerPatterns.Write((QilNode) (local1)).AddArgument(OptimizerPatternArgument.MaxPosition,  local6 - 1 );  }
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.AnnotateFilter]) {
                if (local1.NodeType == QilNodeType.For) {
                    QilNode local3 = local1[0];
                    if (AllowReplace(XmlILOptimization.AnnotateFilter, local0)) {
                         OptimizerPatterns.Inherit((QilNode) (local3), (QilNode) (local0), OptimizerPatternName.Step);  OptimizerPatterns.Inherit((QilNode) (local3), (QilNode) (local0), OptimizerPatternName.IsDocOrderDistinct);  OptimizerPatterns.Inherit((QilNode) (local3), (QilNode) (local0), OptimizerPatternName.SameDepth);  }
                }
            }
            if (this[XmlILOptimization.AnnotateFilterElements]) {
                if (local1.NodeType == QilNodeType.For) {
                    QilNode local3 = local1[0];
                    if ( OptimizerPatterns.Read((QilNode) (local3)).MatchesPattern(OptimizerPatternName.Axis) ) {
                        if (local2.NodeType == QilNodeType.And) {
                            QilNode local4 = local2[0];
                            QilNode local8 = local2[1];
                            if (local4.NodeType == QilNodeType.IsType) {
                                QilNode local5 = local4[0];
                                QilNode local6 = local4[1];
                                if (local5 == local1) {
                                    if (local6.NodeType == QilNodeType.LiteralType) {
                                        XmlQueryType local7 = (XmlQueryType)((QilLiteral)local6).Value;
                                        if ( (local7) == ( XmlQueryTypeFactory.Element ) ) {
                                            if (local8.NodeType == QilNodeType.Eq) {
                                                QilNode local9 = local8[0];
                                                QilNode local11 = local8[1];
                                                if (local9.NodeType == QilNodeType.NameOf) {
                                                    QilNode local10 = local9[0];
                                                    if (local10 == local1) {
                                                        if (local11.NodeType == QilNodeType.LiteralQName) {
                                                            if (AllowReplace(XmlILOptimization.AnnotateFilterElements, local0)) {
                                                                 OptimizerPatterns.Write((QilNode) (local0)).AddPattern(OptimizerPatternName.FilterElements);  OptimizerPatterns.Write((QilNode) (local0)).AddArgument(OptimizerPatternArgument.ElementQName, local11);  }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.AnnotateFilterContentKind]) {
                if (local1.NodeType == QilNodeType.For) {
                    QilNode local3 = local1[0];
                    if ( OptimizerPatterns.Read((QilNode) (local3)).MatchesPattern(OptimizerPatternName.Axis) ) {
                        if (local2.NodeType == QilNodeType.IsType) {
                            QilNode local4 = local2[0];
                            QilNode local5 = local2[1];
                            if (local4 == local1) {
                                if (local5.NodeType == QilNodeType.LiteralType) {
                                    XmlQueryType local6 = (XmlQueryType)((QilLiteral)local5).Value;
                                    if ( MatchesContentTest(local6) ) {
                                        if (AllowReplace(XmlILOptimization.AnnotateFilterContentKind, local0)) {
                                             OptimizerPatterns.Write((QilNode) (local0)).AddPattern(OptimizerPatternName.FilterContentKind);  OptimizerPatterns.Write((QilNode) (local0)).AddArgument(OptimizerPatternArgument.KindTestType, local6);  }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.AnnotateFilterAttributeKind]) {
                if (local1.NodeType == QilNodeType.For) {
                    QilNode local3 = local1[0];
                    if (local3.NodeType == QilNodeType.Content) {
                        if (local2.NodeType == QilNodeType.IsType) {
                            QilNode local5 = local2[0];
                            QilNode local6 = local2[1];
                            if (local5 == local1) {
                                if (local6.NodeType == QilNodeType.LiteralType) {
                                    XmlQueryType local7 = (XmlQueryType)((QilLiteral)local6).Value;
                                    if ( (local7) == ( XmlQueryTypeFactory.Attribute ) ) {
                                        if (AllowReplace(XmlILOptimization.AnnotateFilterAttributeKind, local0)) {
                                             OptimizerPatterns.Write((QilNode) (local0)).AddPattern(OptimizerPatternName.FilterAttributeKind);  }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return NoReplace(local0);
        }
        
XmlILOptimizerVisitor