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

◆ VisitDocOrderDistinct()

override QilNode System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitDocOrderDistinct ( QilUnary local0)
inlineprotectedvirtual

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

Definition at line 1863 of file XmlILOptimizerVisitor.cs.

1864 {
1865 QilNode qilNode = local0[0];
1866 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1867 {
1868 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
1869 }
1870 if (this[XmlILOptimization.EliminateDod] && IsDocOrderDistinct(qilNode) && AllowReplace(XmlILOptimization.EliminateDod, local0))
1871 {
1872 return Replace(XmlILOptimization.EliminateDod, local0, qilNode);
1873 }
1874 if (this[XmlILOptimization.FoldNamedDescendants] && qilNode.NodeType == QilNodeType.Loop)
1875 {
1878 if (qilNode2.NodeType == QilNodeType.For)
1879 {
1881 if (qilNode4.NodeType == QilNodeType.Loop)
1882 {
1885 if (qilNode5.NodeType == QilNodeType.DescendantOrSelf)
1886 {
1887 QilNode child = qilNode5[0];
1888 if (qilNode3.NodeType == QilNodeType.Filter)
1889 {
1890 QilNode refOld = qilNode3[0];
1891 QilNode expr = qilNode3[1];
1892 if ((OptimizerPatterns.Read(qilNode3).MatchesPattern(OptimizerPatternName.FilterElements) || OptimizerPatterns.Read(qilNode3).MatchesPattern(OptimizerPatternName.FilterContentKind)) && IsStepPattern(qilNode3, QilNodeType.Content) && AllowReplace(XmlILOptimization.FoldNamedDescendants, local0))
1893 {
1896 }
1897 }
1898 }
1899 }
1900 }
1901 }
1902 if (this[XmlILOptimization.FoldNamedDescendants] && qilNode.NodeType == QilNodeType.Loop)
1903 {
1906 if (qilNode7.NodeType == QilNodeType.For)
1907 {
1909 if (qilNode9.NodeType == QilNodeType.DescendantOrSelf)
1910 {
1911 QilNode child2 = qilNode9[0];
1912 if (qilNode8.NodeType == QilNodeType.Filter)
1913 {
1915 QilNode expr2 = qilNode8[1];
1916 if ((OptimizerPatterns.Read(qilNode8).MatchesPattern(OptimizerPatternName.FilterElements) || OptimizerPatterns.Read(qilNode8).MatchesPattern(OptimizerPatternName.FilterContentKind)) && IsStepPattern(qilNode8, QilNodeType.Content) && AllowReplace(XmlILOptimization.FoldNamedDescendants, local0))
1917 {
1920 }
1921 }
1922 }
1923 }
1924 }
1925 if (this[XmlILOptimization.CommuteDodFilter] && qilNode.NodeType == QilNodeType.Filter)
1926 {
1928 QilNode expr3 = qilNode[1];
1929 if (qilNode11.NodeType == QilNodeType.For)
1930 {
1932 if (!OptimizerPatterns.Read(qilNode11).MatchesPattern(OptimizerPatternName.IsPositional) && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.FilterElements) && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.FilterContentKind) && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.FilterAttributeKind) && AllowReplace(XmlILOptimization.CommuteDodFilter, local0))
1933 {
1936 }
1937 }
1938 }
1939 if (this[XmlILOptimization.CommuteDodFilter] && qilNode.NodeType == QilNodeType.Loop)
1940 {
1943 if (qilNode14.NodeType == QilNodeType.Filter)
1944 {
1946 QilNode expr4 = qilNode14[1];
1947 if (qilNode15.NodeType == QilNodeType.For)
1948 {
1949 QilNode body = qilNode15[0];
1950 if (!OptimizerPatterns.Read(qilNode15).MatchesPattern(OptimizerPatternName.IsPositional) && !DependsOn(expr4, qilNode13) && !OptimizerPatterns.Read(qilNode14).MatchesPattern(OptimizerPatternName.FilterElements) && !OptimizerPatterns.Read(qilNode14).MatchesPattern(OptimizerPatternName.FilterContentKind) && !OptimizerPatterns.Read(qilNode14).MatchesPattern(OptimizerPatternName.FilterAttributeKind) && AllowReplace(XmlILOptimization.CommuteDodFilter, local0))
1951 {
1954 }
1955 }
1956 }
1957 }
1958 if (this[XmlILOptimization.IntroduceDod] && qilNode.NodeType == QilNodeType.Loop)
1959 {
1961 QilNode expr5 = qilNode[1];
1962 if (qilNode17.NodeType == QilNodeType.For)
1963 {
1965 if (!IsDocOrderDistinct(qilNode18) && !OptimizerPatterns.Read(qilNode17).MatchesPattern(OptimizerPatternName.IsPositional) && qilNode18.XmlType.IsSubtypeOf(XmlQueryTypeFactory.NodeNotRtfS) && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.FilterElements) && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.FilterContentKind) && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.FilterAttributeKind) && AllowReplace(XmlILOptimization.IntroduceDod, local0))
1966 {
1969 }
1970 }
1971 }
1972 if (this[XmlILOptimization.IntroducePrecedingDod] && qilNode.NodeType == QilNodeType.Loop)
1973 {
1976 if (!IsDocOrderDistinct(qilNode20) && IsStepPattern(qilNode20, QilNodeType.PrecedingSibling) && AllowReplace(XmlILOptimization.IntroducePrecedingDod, local0))
1977 {
1979 }
1980 }
1981 if (this[XmlILOptimization.EliminateReturnDod] && qilNode.NodeType == QilNodeType.Loop)
1982 {
1985 if (qilNode21.NodeType == QilNodeType.DocOrderDistinct)
1986 {
1988 if (!IsStepPattern(qilNode22, QilNodeType.PrecedingSibling) && AllowReplace(XmlILOptimization.EliminateReturnDod, local0))
1989 {
1991 }
1992 }
1993 }
1994 if (this[XmlILOptimization.AnnotateDod] && AllowReplace(XmlILOptimization.AnnotateDod, local0))
1995 {
1996 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.IsDocOrderDistinct);
1997 OptimizerPatterns.Inherit(qilNode, local0, OptimizerPatternName.SameDepth);
1998 }
1999 if (this[XmlILOptimization.AnnotateDodReverse] && AllowDodReverse(qilNode) && AllowReplace(XmlILOptimization.AnnotateDodReverse, local0))
2000 {
2001 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.DodReverse);
2002 OptimizerPatterns.Write(local0).AddArgument(OptimizerPatternArgument.ElementQName, qilNode);
2003 }
2004 if (this[XmlILOptimization.AnnotateJoinAndDod] && qilNode.NodeType == QilNodeType.Loop)
2005 {
2008 if (qilNode23.NodeType == QilNodeType.For)
2009 {
2010 QilNode nd = qilNode23[0];
2011 if (IsDocOrderDistinct(nd) && AllowJoinAndDod(qilNode24) && qilNode23 == OptimizerPatterns.Read(qilNode24).GetArgument(OptimizerPatternArgument.StepInput) && AllowReplace(XmlILOptimization.AnnotateJoinAndDod, local0))
2012 {
2013 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.JoinAndDod);
2014 OptimizerPatterns.Write(local0).AddArgument(OptimizerPatternArgument.ElementQName, qilNode24);
2015 }
2016 }
2017 }
2018 if (this[XmlILOptimization.AnnotateDodMerge] && qilNode.NodeType == QilNodeType.Loop)
2019 {
2021 if (qilNode25.NodeType == QilNodeType.Invoke && IsDocOrderDistinct(qilNode25) && AllowReplace(XmlILOptimization.AnnotateDodMerge, local0))
2022 {
2023 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.DodMerge);
2024 }
2025 }
2026 return NoReplace(local0);
2027 }
override QilNode VisitDescendant(QilUnary local0)
bool AllowReplace(XmlILOptimization pattern, QilNode original)
QilNode Subs(QilNode expr, QilNode refOld, QilNode refNew)
bool DependsOn(QilNode expr, QilNode target)
bool IsStepPattern(QilNode nd, QilNodeType stepType)
override QilNode VisitNop(QilUnary local0)
override QilNode VisitDocOrderDistinct(QilUnary local0)
QilUnary Descendant(QilNode child)
QilUnary Nop(QilNode child)
QilUnary DocOrderDistinct(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.AllowDodReverse(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.AllowJoinAndDod(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.AllowReplace(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.DependsOn(), System.Xml.Xsl.Qil.QilFactory.Descendant(), System.Xml.Xsl.Qil.QilFactory.DocOrderDistinct(), 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.IlGen.XmlILOptimizerVisitor.IsStepPattern(), System.Xml.Xsl.Qil.QilFactory.Loop(), System.Xml.Xsl.XmlQueryTypeFactory.NodeNotRtfS, 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.IlGen.XmlILOptimizerVisitor.Subs(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitDescendant(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitDocOrderDistinct(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitFilter(), System.Xml.Xsl.Qil.QilPatternVisitor.VisitFor(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitLoop(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitNop(), and System.Xml.Xsl.IlGen.OptimizerPatterns.Write().

Referenced by System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitDifference(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitDocOrderDistinct(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitIntersection(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitLength(), and System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitUnion().