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

◆ VisitFunction()

override QilNode System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitFunction ( QilFunction local0)
inlineprotectedvirtual

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

Definition at line 2029 of file XmlILOptimizerVisitor.cs.

2030 {
2031 QilNode qilNode = local0[0];
2032 QilNode qilNode2 = local0[1];
2033 QilNode qilNode3 = local0[2];
2034 XmlQueryType xmlType = local0.XmlType;
2035 if (local0.XmlType.IsSubtypeOf(XmlQueryTypeFactory.NodeS) && this[XmlILOptimization.AnnotateIndex1] && qilNode.Count == 2 && qilNode[0].XmlType.IsSubtypeOf(XmlQueryTypeFactory.Node) && qilNode[1].XmlType == XmlQueryTypeFactory.StringX && qilNode2.NodeType == QilNodeType.Filter)
2036 {
2039 if (qilNode4.NodeType == QilNodeType.For)
2040 {
2041 QilNode expr = qilNode4[0];
2042 if (qilNode5.NodeType == QilNodeType.Not)
2043 {
2045 if (qilNode6.NodeType == QilNodeType.IsEmpty)
2046 {
2048 if (qilNode7.NodeType == QilNodeType.Filter)
2049 {
2052 if (qilNode8.NodeType == QilNodeType.For)
2053 {
2055 if (qilNode9.NodeType == QilNodeType.Eq)
2056 {
2059 if (qilNode11 == qilNode8 && qilNode12.NodeType == QilNodeType.Parameter && qilNode12 == qilNode[1] && IsDocOrderDistinct(qilNode2) && AllowReplace(XmlILOptimization.AnnotateIndex1, local0))
2060 {
2061 EqualityIndexVisitor equalityIndexVisitor = new EqualityIndexVisitor();
2063 {
2064 OptimizerPatterns optimizerPatterns = OptimizerPatterns.Write(qilNode2);
2065 optimizerPatterns.AddPattern(OptimizerPatternName.EqualityIndex);
2068 }
2069 }
2070 }
2071 }
2072 }
2073 }
2074 }
2075 }
2076 }
2077 if (local0.XmlType.IsSubtypeOf(XmlQueryTypeFactory.NodeS) && this[XmlILOptimization.AnnotateIndex2] && qilNode.Count == 2 && qilNode[0].XmlType == XmlQueryTypeFactory.Node && qilNode[1].XmlType == XmlQueryTypeFactory.StringX && qilNode2.NodeType == QilNodeType.Filter)
2078 {
2081 if (qilNode13.NodeType == QilNodeType.For)
2082 {
2083 QilNode expr2 = qilNode13[0];
2084 if (qilNode14.NodeType == QilNodeType.Eq)
2085 {
2088 if (qilNode16.NodeType == QilNodeType.Parameter && qilNode16 == qilNode[1] && IsDocOrderDistinct(qilNode2) && AllowReplace(XmlILOptimization.AnnotateIndex2, local0))
2089 {
2090 EqualityIndexVisitor equalityIndexVisitor2 = new EqualityIndexVisitor();
2092 {
2093 OptimizerPatterns optimizerPatterns2 = OptimizerPatterns.Write(qilNode2);
2094 optimizerPatterns2.AddPattern(OptimizerPatternName.EqualityIndex);
2097 }
2098 }
2099 }
2100 }
2101 }
2102 return NoReplace(local0);
2103 }
bool AllowReplace(XmlILOptimization pattern, QilNode original)

References System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.AllowReplace(), System.Collections.Generic.Dictionary< TKey, TValue >.Count, System.Xml.Xsl.IlGen.IsDocOrderDistinct, System.Xml.Xsl.XmlQueryTypeFactory.Node, System.Xml.Xsl.XmlQueryTypeFactory.NodeS, System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.NoReplace(), System.Xml.Xsl.XmlQueryTypeFactory.StringX, and System.Xml.Xsl.IlGen.OptimizerPatterns.Write().