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

◆ VisitEq()

override QilNode System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitEq ( QilBinary local0)
inlineprotectedvirtual

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

Definition at line 1072 of file XmlILOptimizerVisitor.cs.

1073 {
1074 QilNode qilNode = local0[0];
1075 QilNode qilNode2 = local0[1];
1076 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1077 {
1078 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
1079 }
1080 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1081 {
1082 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode2)));
1083 }
1084 if (this[XmlILOptimization.EliminateEq] && IsLiteral(qilNode) && IsLiteral(qilNode2) && AllowReplace(XmlILOptimization.EliminateEq, local0))
1085 {
1087 }
1088 if (this[XmlILOptimization.NormalizeEqLiteral] && IsLiteral(qilNode) && !IsLiteral(qilNode2) && AllowReplace(XmlILOptimization.NormalizeEqLiteral, local0))
1089 {
1090 return Replace(XmlILOptimization.NormalizeEqLiteral, local0, VisitEq(f.Eq(qilNode2, qilNode)));
1091 }
1092 if (this[XmlILOptimization.NormalizeXsltConvertEq] && qilNode.NodeType == QilNodeType.XsltConvert)
1093 {
1096 if (qilNode4.NodeType == QilNodeType.LiteralType)
1097 {
1098 XmlQueryType typ = (XmlQueryType)((QilLiteral)qilNode4).Value;
1100 {
1101 return Replace(XmlILOptimization.NormalizeXsltConvertEq, local0, VisitEq(f.Eq(qilNode3, FoldXsltConvert(qilNode2, qilNode3.XmlType))));
1102 }
1103 }
1104 }
1105 if (this[XmlILOptimization.NormalizeAddEq] && qilNode.NodeType == QilNodeType.Add)
1106 {
1107 QilNode left = qilNode[0];
1110 {
1112 }
1113 }
1114 if (this[XmlILOptimization.NormalizeIdEq] && qilNode.NodeType == QilNodeType.XsltGenerateId)
1115 {
1117 if (qilNode6.XmlType.IsSingleton && qilNode2.NodeType == QilNodeType.XsltGenerateId)
1118 {
1120 if (qilNode7.XmlType.IsSingleton && AllowReplace(XmlILOptimization.NormalizeIdEq, local0))
1121 {
1122 return Replace(XmlILOptimization.NormalizeIdEq, local0, VisitIs(f.Is(qilNode6, qilNode7)));
1123 }
1124 }
1125 }
1126 if (this[XmlILOptimization.NormalizeIdEq] && qilNode.NodeType == QilNodeType.XsltGenerateId)
1127 {
1129 if (qilNode8.XmlType.IsSingleton && qilNode2.NodeType == QilNodeType.StrConcat)
1130 {
1132 if (qilNode9.NodeType == QilNodeType.Loop)
1133 {
1136 if (qilNode10.NodeType == QilNodeType.For)
1137 {
1139 if (!qilNode12.XmlType.MaybeMany && qilNode11.NodeType == QilNodeType.XsltGenerateId)
1140 {
1142 if (qilNode13 == qilNode10 && AllowReplace(XmlILOptimization.NormalizeIdEq, local0))
1143 {
1146 }
1147 }
1148 }
1149 }
1150 }
1151 }
1152 if (this[XmlILOptimization.NormalizeIdEq] && qilNode.NodeType == QilNodeType.StrConcat)
1153 {
1155 if (qilNode15.NodeType == QilNodeType.Loop)
1156 {
1159 if (qilNode16.NodeType == QilNodeType.For)
1160 {
1162 if (!qilNode18.XmlType.MaybeMany && qilNode17.NodeType == QilNodeType.XsltGenerateId)
1163 {
1165 if (qilNode19 == qilNode16 && qilNode2.NodeType == QilNodeType.XsltGenerateId)
1166 {
1168 if (qilNode20.XmlType.IsSingleton && AllowReplace(XmlILOptimization.NormalizeIdEq, local0))
1169 {
1172 }
1173 }
1174 }
1175 }
1176 }
1177 }
1178 if (this[XmlILOptimization.NormalizeMuenchian] && qilNode.NodeType == QilNodeType.Length)
1179 {
1181 if (qilNode22.NodeType == QilNodeType.Union)
1182 {
1185 if (qilNode23.XmlType.IsSingleton && !qilNode24.XmlType.MaybeMany && qilNode2.NodeType == QilNodeType.LiteralInt32)
1186 {
1187 int num = (int)((QilLiteral)qilNode2).Value;
1188 if (num == 1 && AllowReplace(XmlILOptimization.NormalizeMuenchian, local0))
1189 {
1192 }
1193 }
1194 }
1195 }
1196 if (this[XmlILOptimization.NormalizeMuenchian] && qilNode.NodeType == QilNodeType.Length)
1197 {
1199 if (qilNode26.NodeType == QilNodeType.Union)
1200 {
1203 if (!qilNode27.XmlType.MaybeMany && qilNode28.XmlType.IsSingleton && qilNode2.NodeType == QilNodeType.LiteralInt32)
1204 {
1205 int num2 = (int)((QilLiteral)qilNode2).Value;
1206 if (num2 == 1 && AllowReplace(XmlILOptimization.NormalizeMuenchian, local0))
1207 {
1210 }
1211 }
1212 }
1213 }
1214 if (this[XmlILOptimization.AnnotateMaxLengthEq] && qilNode.NodeType == QilNodeType.Length && qilNode2.NodeType == QilNodeType.LiteralInt32)
1215 {
1216 int num3 = (int)((QilLiteral)qilNode2).Value;
1217 if (AllowReplace(XmlILOptimization.AnnotateMaxLengthEq, local0))
1218 {
1219 OptimizerPatterns.Write(qilNode).AddPattern(OptimizerPatternName.MaxPosition);
1220 OptimizerPatterns.Write(qilNode).AddArgument(OptimizerPatternArgument.ElementQName, num3);
1221 }
1222 }
1223 return NoReplace(local0);
1224 }
void Add(TKey key, TValue value)
override QilNode VisitIsEmpty(QilUnary local0)
QilNode FoldComparison(QilNodeType opType, QilNode left, QilNode right)
override QilNode VisitNot(QilUnary local0)
bool AllowReplace(XmlILOptimization pattern, QilNode original)
bool CanFoldXsltConvertNonLossy(QilNode ndLiteral, XmlQueryType typTarget)
override QilNode VisitIs(QilBinary local0)
QilNode FoldXsltConvert(QilNode ndLiteral, XmlQueryType typTarget)
override QilNode VisitNop(QilUnary local0)
override QilNode VisitEq(QilBinary local0)
QilNode FoldArithmetic(QilNodeType opType, QilLiteral left, QilLiteral right)
bool CanFoldArithmetic(QilNodeType opType, QilLiteral left, QilLiteral right)
QilUnary IsEmpty(QilNode child)
QilUnary Nop(QilNode child)
QilUnary Not(QilNode child)
QilBinary Is(QilNode left, QilNode right)
QilLoop Filter(QilNode variable, QilNode body)
QilIterator For(QilNode binding)
QilBinary Eq(QilNode left, QilNode right)
override QilNode VisitFor(QilIterator n)

References System.Collections.Generic.Dictionary< TKey, TValue >.Add(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.AllowReplace(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.CanFoldArithmetic(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.CanFoldXsltConvertNonLossy(), System.Xml.Dictionary, System.Xml.Xsl.Qil.QilFactory.Eq(), System.Xml.Xsl.Qil.QilReplaceVisitor.f, System.Xml.Xsl.Qil.QilFactory.Filter(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.FoldArithmetic(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.FoldComparison(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.FoldXsltConvert(), System.Xml.Xsl.Qil.QilFactory.For(), System.Xml.Xsl.Qil.QilFactory.Is(), System.Xml.Xsl.Qil.QilFactory.IsEmpty(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.IsLiteral(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.IsPrimitiveNumeric(), System.Xml.Xsl.XmlQueryTypeFactory.None, System.Xml.Xsl.Qil.QilFactory.Nop(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.NoReplace(), System.Xml.Xsl.Qil.QilFactory.Not(), System.Xml.Replace, System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitEq(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitFilter(), System.Xml.Xsl.Qil.QilPatternVisitor.VisitFor(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitIs(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitIsEmpty(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitNop(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitNot(), and System.Xml.Xsl.IlGen.OptimizerPatterns.Write().

Referenced by System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitEq().