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

◆ FoldArithmetic()

QilNode System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.FoldArithmetic ( QilNodeType opType,
QilLiteral left,
QilLiteral right )
inlineprivate

Definition at line 3129 of file XmlILOptimizerVisitor.cs.

3130 {
3131 checked
3132 {
3133 try
3134 {
3135 switch (left.NodeType)
3136 {
3137 case QilNodeType.LiteralInt32:
3138 {
3139 int num7 = left;
3140 int num8 = right;
3141 switch (opType)
3142 {
3143 case QilNodeType.Add:
3144 return f.LiteralInt32(num7 + num8);
3145 case QilNodeType.Subtract:
3146 return f.LiteralInt32(num7 - num8);
3147 case QilNodeType.Multiply:
3148 return f.LiteralInt32(num7 * num8);
3149 case QilNodeType.Divide:
3150 return f.LiteralInt32(unchecked(num7 / num8));
3151 case QilNodeType.Modulo:
3152 return f.LiteralInt32(unchecked(num7 % num8));
3153 }
3154 break;
3155 }
3156 case QilNodeType.LiteralInt64:
3157 {
3158 long num5 = left;
3159 long num6 = right;
3160 switch (opType)
3161 {
3162 case QilNodeType.Add:
3163 return f.LiteralInt64(num5 + num6);
3164 case QilNodeType.Subtract:
3165 return f.LiteralInt64(num5 - num6);
3166 case QilNodeType.Multiply:
3167 return f.LiteralInt64(num5 * num6);
3168 case QilNodeType.Divide:
3169 return f.LiteralInt64(unchecked(num5 / num6));
3170 case QilNodeType.Modulo:
3171 return f.LiteralInt64(unchecked(num5 % num6));
3172 }
3173 break;
3174 }
3175 case QilNodeType.LiteralDecimal:
3176 {
3177 decimal num3 = left;
3178 decimal num4 = right;
3179 switch (opType)
3180 {
3181 case QilNodeType.Add:
3182 return f.LiteralDecimal(num3 + num4);
3183 case QilNodeType.Subtract:
3184 return f.LiteralDecimal(num3 - num4);
3185 case QilNodeType.Multiply:
3186 return f.LiteralDecimal(num3 * num4);
3187 case QilNodeType.Divide:
3188 return f.LiteralDecimal(num3 / num4);
3189 case QilNodeType.Modulo:
3190 return f.LiteralDecimal(num3 % num4);
3191 }
3192 break;
3193 }
3194 case QilNodeType.LiteralDouble:
3195 {
3196 double num = left;
3197 double num2 = right;
3198 switch (opType)
3199 {
3200 case QilNodeType.Add:
3201 return f.LiteralDouble(num + num2);
3202 case QilNodeType.Subtract:
3203 return f.LiteralDouble(num - num2);
3204 case QilNodeType.Multiply:
3205 return f.LiteralDouble(num * num2);
3206 case QilNodeType.Divide:
3207 return f.LiteralDouble(num / num2);
3208 case QilNodeType.Modulo:
3209 return f.LiteralDouble(num % num2);
3210 }
3211 break;
3212 }
3213 }
3214 }
3215 catch (OverflowException)
3216 {
3217 }
3218 catch (DivideByZeroException)
3219 {
3220 }
3221 return opType switch
3222 {
3223 QilNodeType.Add => f.Add(left, right),
3224 QilNodeType.Subtract => f.Subtract(left, right),
3225 QilNodeType.Multiply => f.Multiply(left, right),
3226 QilNodeType.Divide => f.Divide(left, right),
3227 QilNodeType.Modulo => f.Modulo(left, right),
3228 _ => null,
3229 };
3230 }
3231 }
QilLiteral LiteralDecimal(decimal value)
QilBinary Subtract(QilNode left, QilNode right)
QilBinary Divide(QilNode left, QilNode right)
QilLiteral LiteralInt32(int value)
QilBinary Add(QilNode left, QilNode right)
QilLiteral LiteralDouble(double value)
QilBinary Modulo(QilNode left, QilNode right)
QilLiteral LiteralInt64(long value)
QilBinary Multiply(QilNode left, QilNode right)
virtual void Add(QilNode node)
Definition QilNode.cs:121

References System.Xml.Xsl.Qil.QilFactory.Add(), System.Xml.Xsl.Qil.QilNode.Add(), System.Xml.Dictionary, System.Xml.Xsl.Qil.QilFactory.Divide(), System.Xml.Xsl.Qil.QilReplaceVisitor.f, System.Xml.Xsl.Qil.QilFactory.LiteralDecimal(), System.Xml.Xsl.Qil.QilFactory.LiteralDouble(), System.Xml.Xsl.Qil.QilFactory.LiteralInt32(), System.Xml.Xsl.Qil.QilFactory.LiteralInt64(), System.Xml.Xsl.Qil.QilFactory.Modulo(), System.Xml.Xsl.Qil.QilFactory.Multiply(), System.Xml.Xsl.Qil.QilNode.NodeType, and System.Xml.Xsl.Qil.QilFactory.Subtract().

Referenced by System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.CanFoldArithmetic(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitAdd(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitDivide(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitEq(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitModulo(), System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitMultiply(), and System.Xml.Xsl.IlGen.XmlILOptimizerVisitor.VisitSubtract().