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

◆ VisitFilter()

override QilNode System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitFilter ( QilLoop local0)
inlineprotectedvirtual

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

Definition at line 1617 of file XmlILOptimizerVisitor.cs.

1618 {
1619 QilNode qilNode = local0[0];
1620 QilNode qilNode2 = local0[1];
1621 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1622 {
1623 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode[0])));
1624 }
1625 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1626 {
1628 }
1629 if (this[XmlILOptimization.EliminateFilter] && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.MaybeSideEffects) && qilNode2.NodeType == QilNodeType.False && AllowReplace(XmlILOptimization.EliminateFilter, local0))
1630 {
1631 return Replace(XmlILOptimization.EliminateFilter, local0, VisitSequence(f.Sequence()));
1632 }
1633 if (this[XmlILOptimization.EliminateFilter] && qilNode2.NodeType == QilNodeType.True && AllowReplace(XmlILOptimization.EliminateFilter, local0))
1634 {
1635 return Replace(XmlILOptimization.EliminateFilter, local0, qilNode[0]);
1636 }
1637 if (this[XmlILOptimization.NormalizeAttribute] && qilNode.NodeType == QilNodeType.For)
1638 {
1640 if (qilNode3.NodeType == QilNodeType.Content)
1641 {
1642 QilNode left = qilNode3[0];
1643 if (qilNode2.NodeType == QilNodeType.And)
1644 {
1647 if (qilNode4.NodeType == QilNodeType.IsType)
1648 {
1651 if (qilNode6 == qilNode && qilNode7.NodeType == QilNodeType.LiteralType)
1652 {
1653 XmlQueryType xmlQueryType = (XmlQueryType)((QilLiteral)qilNode7).Value;
1654 if (xmlQueryType == XmlQueryTypeFactory.Attribute && qilNode5.NodeType == QilNodeType.Eq)
1655 {
1658 if (qilNode8.NodeType == QilNodeType.NameOf)
1659 {
1661 if (qilNode10 == qilNode && qilNode9.NodeType == QilNodeType.LiteralQName && AllowReplace(XmlILOptimization.NormalizeAttribute, local0))
1662 {
1663 return Replace(XmlILOptimization.NormalizeAttribute, local0, VisitAttribute(f.Attribute(left, qilNode9)));
1664 }
1665 }
1666 }
1667 }
1668 }
1669 }
1670 }
1671 }
1672 if (this[XmlILOptimization.CommuteFilterLoop] && qilNode.NodeType == QilNodeType.For)
1673 {
1675 if (qilNode11.NodeType == QilNodeType.Loop)
1676 {
1680 {
1683 }
1684 }
1685 }
1686 if (this[XmlILOptimization.NormalizeLoopInvariant] && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.MaybeSideEffects) && qilNode[0].NodeType != QilNodeType.OptimizeBarrier && !DependsOn(qilNode2, qilNode) && !OptimizerPatterns.Read(qilNode2).MatchesPattern(OptimizerPatternName.MaybeSideEffects) && AllowReplace(XmlILOptimization.NormalizeLoopInvariant, local0))
1687 {
1689 }
1690 if (this[XmlILOptimization.AnnotateMaxPositionEq] && qilNode2.NodeType == QilNodeType.Eq)
1691 {
1694 if (qilNode13.NodeType == QilNodeType.PositionOf)
1695 {
1697 if (qilNode15 == qilNode && qilNode14.NodeType == QilNodeType.LiteralInt32)
1698 {
1699 int num = (int)((QilLiteral)qilNode14).Value;
1700 if (AllowReplace(XmlILOptimization.AnnotateMaxPositionEq, local0))
1701 {
1702 OptimizerPatterns.Write(qilNode).AddPattern(OptimizerPatternName.MaxPosition);
1703 OptimizerPatterns.Write(qilNode).AddArgument(OptimizerPatternArgument.ElementQName, num);
1704 }
1705 }
1706 }
1707 }
1708 if (this[XmlILOptimization.AnnotateMaxPositionLe] && qilNode2.NodeType == QilNodeType.Le)
1709 {
1712 if (qilNode16.NodeType == QilNodeType.PositionOf)
1713 {
1715 if (qilNode18 == qilNode && qilNode17.NodeType == QilNodeType.LiteralInt32)
1716 {
1717 int num2 = (int)((QilLiteral)qilNode17).Value;
1718 if (AllowReplace(XmlILOptimization.AnnotateMaxPositionLe, local0))
1719 {
1720 OptimizerPatterns.Write(qilNode).AddPattern(OptimizerPatternName.MaxPosition);
1721 OptimizerPatterns.Write(qilNode).AddArgument(OptimizerPatternArgument.ElementQName, num2);
1722 }
1723 }
1724 }
1725 }
1726 if (this[XmlILOptimization.AnnotateMaxPositionLt] && qilNode2.NodeType == QilNodeType.Lt)
1727 {
1730 if (qilNode19.NodeType == QilNodeType.PositionOf)
1731 {
1733 if (qilNode21 == qilNode && qilNode20.NodeType == QilNodeType.LiteralInt32)
1734 {
1735 int num3 = (int)((QilLiteral)qilNode20).Value;
1736 if (AllowReplace(XmlILOptimization.AnnotateMaxPositionLt, local0))
1737 {
1738 OptimizerPatterns.Write(qilNode).AddPattern(OptimizerPatternName.MaxPosition);
1739 OptimizerPatterns.Write(qilNode).AddArgument(OptimizerPatternArgument.ElementQName, num3 - 1);
1740 }
1741 }
1742 }
1743 }
1744 if (this[XmlILOptimization.AnnotateFilter] && qilNode.NodeType == QilNodeType.For)
1745 {
1746 QilNode ndSrc = qilNode[0];
1747 if (AllowReplace(XmlILOptimization.AnnotateFilter, local0))
1748 {
1749 OptimizerPatterns.Inherit(ndSrc, local0, OptimizerPatternName.Step);
1750 OptimizerPatterns.Inherit(ndSrc, local0, OptimizerPatternName.IsDocOrderDistinct);
1751 OptimizerPatterns.Inherit(ndSrc, local0, OptimizerPatternName.SameDepth);
1752 }
1753 }
1754 if (this[XmlILOptimization.AnnotateFilterElements] && qilNode.NodeType == QilNodeType.For)
1755 {
1756 QilNode nd = qilNode[0];
1757 if (OptimizerPatterns.Read(nd).MatchesPattern(OptimizerPatternName.Axis) && qilNode2.NodeType == QilNodeType.And)
1758 {
1761 if (qilNode22.NodeType == QilNodeType.IsType)
1762 {
1765 if (qilNode24 == qilNode && qilNode25.NodeType == QilNodeType.LiteralType)
1766 {
1767 XmlQueryType xmlQueryType2 = (XmlQueryType)((QilLiteral)qilNode25).Value;
1768 if (xmlQueryType2 == XmlQueryTypeFactory.Element && qilNode23.NodeType == QilNodeType.Eq)
1769 {
1772 if (qilNode26.NodeType == QilNodeType.NameOf)
1773 {
1775 if (qilNode28 == qilNode && qilNode27.NodeType == QilNodeType.LiteralQName && AllowReplace(XmlILOptimization.AnnotateFilterElements, local0))
1776 {
1777 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.FilterElements);
1778 OptimizerPatterns.Write(local0).AddArgument(OptimizerPatternArgument.ElementQName, qilNode27);
1779 }
1780 }
1781 }
1782 }
1783 }
1784 }
1785 }
1786 if (this[XmlILOptimization.AnnotateFilterContentKind] && qilNode.NodeType == QilNodeType.For)
1787 {
1788 QilNode nd2 = qilNode[0];
1789 if (OptimizerPatterns.Read(nd2).MatchesPattern(OptimizerPatternName.Axis) && qilNode2.NodeType == QilNodeType.IsType)
1790 {
1793 if (qilNode29 == qilNode && qilNode30.NodeType == QilNodeType.LiteralType)
1794 {
1795 XmlQueryType xmlQueryType3 = (XmlQueryType)((QilLiteral)qilNode30).Value;
1796 if (MatchesContentTest(xmlQueryType3) && AllowReplace(XmlILOptimization.AnnotateFilterContentKind, local0))
1797 {
1798 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.FilterContentKind);
1799 OptimizerPatterns.Write(local0).AddArgument(OptimizerPatternArgument.ElementQName, xmlQueryType3);
1800 }
1801 }
1802 }
1803 }
1804 if (this[XmlILOptimization.AnnotateFilterAttributeKind] && qilNode.NodeType == QilNodeType.For)
1805 {
1807 if (qilNode31.NodeType == QilNodeType.Content && qilNode2.NodeType == QilNodeType.IsType)
1808 {
1811 if (qilNode32 == qilNode && qilNode33.NodeType == QilNodeType.LiteralType)
1812 {
1813 XmlQueryType xmlQueryType4 = (XmlQueryType)((QilLiteral)qilNode33).Value;
1814 if (xmlQueryType4 == XmlQueryTypeFactory.Attribute && AllowReplace(XmlILOptimization.AnnotateFilterAttributeKind, local0))
1815 {
1816 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.FilterAttributeKind);
1817 }
1818 }
1819 }
1820 }
1821 return NoReplace(local0);
1822 }
override QilNode VisitConditional(QilTernary local0)
bool AllowReplace(XmlILOptimization pattern, QilNode original)
QilNode Subs(QilNode expr, QilNode refOld, QilNode refNew)
bool DependsOn(QilNode expr, QilNode target)
override QilNode VisitNop(QilUnary local0)
override QilNode VisitAttribute(QilBinary local0)
bool NonPositional(QilNode expr, QilNode iter)
override QilNode VisitSequence(QilList local0)
QilBinary Attribute(QilNode left, QilNode right)
QilList Sequence(IList< QilNode > values)
Definition QilFactory.cs:44
QilTernary Conditional(QilNode left, QilNode center, QilNode right)
QilUnary Nop(QilNode child)
QilLoop Filter(QilNode variable, QilNode body)
QilLoop Loop(QilNode variable, QilNode body)
QilIterator For(QilNode binding)
override QilNode VisitFor(QilIterator n)

References System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.AllowReplace(), System.Xml.Xsl.Qil.QilFactory.Attribute(), System.Xml.Xsl.XmlQueryTypeFactory.Attribute, System.Xml.Xsl.Qil.QilFactory.Conditional(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.DependsOn(), System.Xml.Dictionary, System.Xml.Xsl.XmlQueryTypeFactory.Element, System.Xml.Xsl.Qil.QilReplaceVisitor.f, System.Xml.Xsl.Qil.QilFactory.Filter(), System.Xml.Xsl.Qil.QilFactory.For(), System.Xml.Xsl.IlGen.OptimizerPatterns.Inherit(), System.Xml.Xsl.IlGen.IsDocOrderDistinct, System.Xml.Xsl.Qil.QilFactory.Loop(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.MatchesContentTest(), System.Xml.Xsl.XmlQueryTypeFactory.None, System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.NonPositional(), 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.Sequence(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.Subs(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitAttribute(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitConditional(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitFilter(), System.Xml.Xsl.Qil.QilPatternVisitor.VisitFor(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitLoop(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitNop(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitSequence(), and System.Xml.Xsl.IlGen.OptimizerPatterns.Write().

Referenced by System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitDocOrderDistinct(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitEq(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitFilter(), and System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitLoop().