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

VisitIsType() protected method

protected VisitIsType ( QilTargetType local0 ) : QilNode
local0 System.Xml.Xsl.Qil.QilTargetType
return QilNode
        protected override QilNode VisitIsType(QilTargetType 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.EliminateIsType]) {
                if ( !OptimizerPatterns.Read(local1).MatchesPattern(OptimizerPatternName.MaybeSideEffects) ) {
                    if (local2.NodeType == QilNodeType.LiteralType) {
                        XmlQueryType local3 = (XmlQueryType)((QilLiteral)local2).Value;
                        if (  (local1).XmlType .IsSubtypeOf(local3) ) {
                            if (AllowReplace(XmlILOptimization.EliminateIsType, local0)) {
                                return Replace(XmlILOptimization.EliminateIsType, local0, VisitTrue(f.True()));
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.EliminateIsType]) {
                if ( !OptimizerPatterns.Read(local1).MatchesPattern(OptimizerPatternName.MaybeSideEffects) ) {
                    if (local2.NodeType == QilNodeType.LiteralType) {
                        XmlQueryType local3 = (XmlQueryType)((QilLiteral)local2).Value;
                        if (  (local1).XmlType .NeverSubtypeOf(local3) ) {
                            if (AllowReplace(XmlILOptimization.EliminateIsType, local0)) {
                                return Replace(XmlILOptimization.EliminateIsType, local0, VisitFalse(f.False()));
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.EliminateIsType]) {
                if (local2.NodeType == QilNodeType.LiteralType) {
                    XmlQueryType local3 = (XmlQueryType)((QilLiteral)local2).Value;
                    if (   (local1).XmlType .Prime .NeverSubtypeOf( local3.Prime ) ) {
                        if (AllowReplace(XmlILOptimization.EliminateIsType, local0)) {
                            return Replace(XmlILOptimization.EliminateIsType, local0, VisitIsEmpty(f.IsEmpty(local1)));
                        }
                    }
                }
            }
            if (this[XmlILOptimization.EliminateIsType]) {
                if (!( !OptimizerPatterns.Read(local1).MatchesPattern(OptimizerPatternName.MaybeSideEffects) )) {
                    if (local2.NodeType == QilNodeType.LiteralType) {
                        XmlQueryType local3 = (XmlQueryType)((QilLiteral)local2).Value;
                        if (  (local1).XmlType .IsSubtypeOf(local3) ) {
                            if (AllowReplace(XmlILOptimization.EliminateIsType, local0)) {
                                return Replace(XmlILOptimization.EliminateIsType, local0, VisitLoop(f.Loop(VisitLet(f.Let(local1)), VisitTrue(f.True()))));
                            }
                        }
                    }
                }
            }
            if (this[XmlILOptimization.EliminateIsType]) {
                if (!( !OptimizerPatterns.Read(local1).MatchesPattern(OptimizerPatternName.MaybeSideEffects) )) {
                    if (local2.NodeType == QilNodeType.LiteralType) {
                        XmlQueryType local3 = (XmlQueryType)((QilLiteral)local2).Value;
                        if (  (local1).XmlType .NeverSubtypeOf(local3) ) {
                            if (AllowReplace(XmlILOptimization.EliminateIsType, local0)) {
                                return Replace(XmlILOptimization.EliminateIsType, local0, VisitLoop(f.Loop(VisitLet(f.Let(local1)), VisitFalse(f.False()))));
                            }
                        }
                    }
                }
            }
            return NoReplace(local0);
        }
        
XmlILOptimizerVisitor