Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ VisitIsType()

override QilNode System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitIsType ( QilTargetType local0)
inlineprotectedvirtual

Reimplemented from System.Xml.Xsl.Qil.QilVisitor.

Definition at line 2588 of file XmlILOptimizerVisitor.cs.

2589 {
2590 QilNode qilNode = local0[0];
2591 QilNode qilNode2 = local0[1];
2592 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2593 {
2594 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2595 }
2596 if (this[XmlILOptimization.EliminateIsType] && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.MaybeSideEffects) && qilNode2.NodeType == QilNodeType.LiteralType)
2597 {
2598 XmlQueryType baseType = (XmlQueryType)((QilLiteral)qilNode2).Value;
2599 if (qilNode.XmlType.IsSubtypeOf(baseType) && AllowReplace(XmlILOptimization.EliminateIsType, local0))
2600 {
2601 return Replace(XmlILOptimization.EliminateIsType, local0, VisitTrue(f.True()));
2602 }
2603 }
2604 if (this[XmlILOptimization.EliminateIsType] && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.MaybeSideEffects) && qilNode2.NodeType == QilNodeType.LiteralType)
2605 {
2606 XmlQueryType baseType2 = (XmlQueryType)((QilLiteral)qilNode2).Value;
2607 if (qilNode.XmlType.NeverSubtypeOf(baseType2) && AllowReplace(XmlILOptimization.EliminateIsType, local0))
2608 {
2609 return Replace(XmlILOptimization.EliminateIsType, local0, VisitFalse(f.False()));
2610 }
2611 }
2612 if (this[XmlILOptimization.EliminateIsType] && qilNode2.NodeType == QilNodeType.LiteralType)
2613 {
2614 XmlQueryType xmlQueryType = (XmlQueryType)((QilLiteral)qilNode2).Value;
2615 if (qilNode.XmlType.Prime.NeverSubtypeOf(xmlQueryType.Prime) && AllowReplace(XmlILOptimization.EliminateIsType, local0))
2616 {
2617 return Replace(XmlILOptimization.EliminateIsType, local0, VisitIsEmpty(f.IsEmpty(qilNode)));
2618 }
2619 }
2620 if (this[XmlILOptimization.EliminateIsType] && OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.MaybeSideEffects) && qilNode2.NodeType == QilNodeType.LiteralType)
2621 {
2622 XmlQueryType baseType3 = (XmlQueryType)((QilLiteral)qilNode2).Value;
2623 if (qilNode.XmlType.IsSubtypeOf(baseType3) && AllowReplace(XmlILOptimization.EliminateIsType, local0))
2624 {
2625 return Replace(XmlILOptimization.EliminateIsType, local0, VisitLoop(f.Loop(VisitLet(f.Let(qilNode)), VisitTrue(f.True()))));
2626 }
2627 }
2628 if (this[XmlILOptimization.EliminateIsType] && OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.MaybeSideEffects) && qilNode2.NodeType == QilNodeType.LiteralType)
2629 {
2630 XmlQueryType baseType4 = (XmlQueryType)((QilLiteral)qilNode2).Value;
2631 if (qilNode.XmlType.NeverSubtypeOf(baseType4) && AllowReplace(XmlILOptimization.EliminateIsType, local0))
2632 {
2633 return Replace(XmlILOptimization.EliminateIsType, local0, VisitLoop(f.Loop(VisitLet(f.Let(qilNode)), VisitFalse(f.False()))));
2634 }
2635 }
2636 return NoReplace(local0);
2637 }
override QilNode VisitIsEmpty(QilUnary local0)
bool AllowReplace(XmlILOptimization pattern, QilNode original)
override QilNode VisitLet(QilIterator local0)
override QilNode VisitNop(QilUnary local0)
QilIterator Let(QilNode binding)
QilUnary IsEmpty(QilNode child)
QilUnary Nop(QilNode child)
QilLoop Loop(QilNode variable, QilNode body)
override QilNode VisitFalse(QilNode n)
override QilNode VisitTrue(QilNode n)

References System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.AllowReplace(), System.Xml.Dictionary, System.Xml.Xsl.Qil.QilReplaceVisitor.f, System.Xml.Xsl.Qil.QilFactory.False(), System.Xml.Xsl.Qil.QilFactory.IsEmpty(), System.Xml.Xsl.Qil.QilFactory.Let(), System.Xml.Xsl.Qil.QilFactory.Loop(), System.Xml.Xsl.XmlQueryTypeFactory.None, System.Xml.Xsl.Qil.QilFactory.Nop(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.NoReplace(), System.Xml.Xsl.IlGen.OptimizerPatterns.Read(), System.Xml.Replace, System.Xml.Xsl.Qil.QilFactory.True(), System.Xml.Xsl.Qil.QilPatternVisitor.VisitFalse(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitIsEmpty(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitLet(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitLoop(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitNop(), and System.Xml.Xsl.Qil.QilPatternVisitor.VisitTrue().