public abstract class freemarker.core.ArithmeticEngine
minor version: 0
major version: 59
flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
this_class: freemarker.core.ArithmeticEngine
super_class: java.lang.Object
{
public static final freemarker.core.ArithmeticEngine$BigDecimalEngine BIGDECIMAL_ENGINE;
descriptor: Lfreemarker/core/ArithmeticEngine$BigDecimalEngine;
flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
public static final freemarker.core.ArithmeticEngine$ConservativeEngine CONSERVATIVE_ENGINE;
descriptor: Lfreemarker/core/ArithmeticEngine$ConservativeEngine;
flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
protected int minScale;
descriptor: I
flags: (0x0004) ACC_PROTECTED
protected int maxScale;
descriptor: I
flags: (0x0004) ACC_PROTECTED
protected int roundingPolicy;
descriptor: I
flags: (0x0004) ACC_PROTECTED
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=2, locals=0, args_size=0
0: new freemarker.core.ArithmeticEngine$BigDecimalEngine
dup
invokespecial freemarker.core.ArithmeticEngine$BigDecimalEngine.<init>:()V
putstatic freemarker.core.ArithmeticEngine.BIGDECIMAL_ENGINE:Lfreemarker/core/ArithmeticEngine$BigDecimalEngine;
1: new freemarker.core.ArithmeticEngine$ConservativeEngine
dup
invokespecial freemarker.core.ArithmeticEngine$ConservativeEngine.<init>:()V
putstatic freemarker.core.ArithmeticEngine.CONSERVATIVE_ENGINE:Lfreemarker/core/ArithmeticEngine$ConservativeEngine;
return
LocalVariableTable:
Start End Slot Name Signature
public void <init>();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=1, args_size=1
start local 0 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 0
bipush 12
putfield freemarker.core.ArithmeticEngine.minScale:I
2: aload 0
bipush 12
putfield freemarker.core.ArithmeticEngine.maxScale:I
3: aload 0
iconst_4
putfield freemarker.core.ArithmeticEngine.roundingPolicy:I
4: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Lfreemarker/core/ArithmeticEngine;
public abstract int compareNumbers(java.lang.Number, java.lang.Number);
descriptor: (Ljava/lang/Number;Ljava/lang/Number;)I
flags: (0x0401) ACC_PUBLIC, ACC_ABSTRACT
Exceptions:
throws freemarker.template.TemplateException
MethodParameters:
Name Flags
first
second
public abstract java.lang.Number add(java.lang.Number, java.lang.Number);
descriptor: (Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
flags: (0x0401) ACC_PUBLIC, ACC_ABSTRACT
Exceptions:
throws freemarker.template.TemplateException
MethodParameters:
Name Flags
first
second
public abstract java.lang.Number subtract(java.lang.Number, java.lang.Number);
descriptor: (Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
flags: (0x0401) ACC_PUBLIC, ACC_ABSTRACT
Exceptions:
throws freemarker.template.TemplateException
MethodParameters:
Name Flags
first
second
public abstract java.lang.Number multiply(java.lang.Number, java.lang.Number);
descriptor: (Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
flags: (0x0401) ACC_PUBLIC, ACC_ABSTRACT
Exceptions:
throws freemarker.template.TemplateException
MethodParameters:
Name Flags
first
second
public abstract java.lang.Number divide(java.lang.Number, java.lang.Number);
descriptor: (Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
flags: (0x0401) ACC_PUBLIC, ACC_ABSTRACT
Exceptions:
throws freemarker.template.TemplateException
MethodParameters:
Name Flags
first
second
public abstract java.lang.Number modulus(java.lang.Number, java.lang.Number);
descriptor: (Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
flags: (0x0401) ACC_PUBLIC, ACC_ABSTRACT
Exceptions:
throws freemarker.template.TemplateException
MethodParameters:
Name Flags
first
second
public abstract java.lang.Number toNumber(java.lang.String);
descriptor: (Ljava/lang/String;)Ljava/lang/Number;
flags: (0x0401) ACC_PUBLIC, ACC_ABSTRACT
MethodParameters:
Name Flags
s
public void setMinScale(int);
descriptor: (I)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: iload 1
ifge 2
1: new java.lang.IllegalArgumentException
dup
ldc "minScale < 0"
invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
2: StackMap locals:
StackMap stack:
aload 0
iload 1
putfield freemarker.core.ArithmeticEngine.minScale:I
3: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Lfreemarker/core/ArithmeticEngine;
0 4 1 minScale I
MethodParameters:
Name Flags
minScale
public void setMaxScale(int);
descriptor: (I)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: iload 1
aload 0
getfield freemarker.core.ArithmeticEngine.minScale:I
if_icmpge 2
1: new java.lang.IllegalArgumentException
dup
ldc "maxScale < minScale"
invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
2: StackMap locals:
StackMap stack:
aload 0
iload 1
putfield freemarker.core.ArithmeticEngine.maxScale:I
3: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Lfreemarker/core/ArithmeticEngine;
0 4 1 maxScale I
MethodParameters:
Name Flags
maxScale
public void setRoundingPolicy(int);
descriptor: (I)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: iload 1
iconst_2
if_icmpeq 9
1: iload 1
iconst_1
if_icmpeq 9
2: iload 1
iconst_3
if_icmpeq 9
3: iload 1
iconst_5
if_icmpeq 9
4: iload 1
bipush 6
if_icmpeq 9
5: iload 1
iconst_4
if_icmpeq 9
6: iload 1
bipush 7
if_icmpeq 9
7: iload 1
ifeq 9
8: new java.lang.IllegalArgumentException
dup
ldc "invalid rounding policy"
invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
9: StackMap locals:
StackMap stack:
aload 0
iload 1
putfield freemarker.core.ArithmeticEngine.roundingPolicy:I
10: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 11 0 this Lfreemarker/core/ArithmeticEngine;
0 11 1 roundingPolicy I
MethodParameters:
Name Flags
roundingPolicy
private static java.math.BigDecimal toBigDecimal(java.lang.Number);
descriptor: (Ljava/lang/Number;)Ljava/math/BigDecimal;
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=5, locals=1, args_size=1
start local 0 0: aload 0
instanceof java.math.BigDecimal
ifeq 2
1: aload 0
checkcast java.math.BigDecimal
areturn
2: StackMap locals:
StackMap stack:
aload 0
instanceof java.lang.Integer
ifne 3
aload 0
instanceof java.lang.Long
ifne 3
aload 0
instanceof java.lang.Byte
ifne 3
aload 0
instanceof java.lang.Short
ifeq 4
3: StackMap locals:
StackMap stack:
aload 0
invokevirtual java.lang.Number.longValue:()J
invokestatic java.math.BigDecimal.valueOf:(J)Ljava/math/BigDecimal;
areturn
4: StackMap locals:
StackMap stack:
aload 0
instanceof java.math.BigInteger
ifeq 6
5: new java.math.BigDecimal
dup
aload 0
checkcast java.math.BigInteger
invokespecial java.math.BigDecimal.<init>:(Ljava/math/BigInteger;)V
areturn
6: StackMap locals:
StackMap stack:
new java.math.BigDecimal
dup
aload 0
invokevirtual java.lang.Object.toString:()Ljava/lang/String;
invokespecial java.math.BigDecimal.<init>:(Ljava/lang/String;)V
7: areturn
8: StackMap locals:
StackMap stack: java.lang.NumberFormatException
pop
9: aload 0
invokestatic freemarker.template.utility.NumberUtil.isInfinite:(Ljava/lang/Number;)Z
ifeq 13
10: new java.lang.NumberFormatException
dup
new java.lang.StringBuilder
dup
ldc "It's impossible to convert an infinte value ("
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
11: aload 0
invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
invokevirtual java.lang.Class.getSimpleName:()Ljava/lang/String;
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
ldc " "
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
aload 0
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
ldc ") to BigDecimal."
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
12: invokespecial java.lang.NumberFormatException.<init>:(Ljava/lang/String;)V
athrow
13: StackMap locals:
StackMap stack:
new java.lang.NumberFormatException
dup
new java.lang.StringBuilder
dup
ldc "Can't parse this as BigDecimal number: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 0
invokestatic freemarker.template.utility.StringUtil.jQuote:(Ljava/lang/Object;)Ljava/lang/String;
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
invokespecial java.lang.NumberFormatException.<init>:(Ljava/lang/String;)V
athrow
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 14 0 num Ljava/lang/Number;
Exception table:
from to target type
6 7 8 Class java.lang.NumberFormatException
MethodParameters:
Name Flags
num
private static java.lang.Number toBigDecimalOrDouble(java.lang.String);
descriptor: (Ljava/lang/String;)Ljava/lang/Number;
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=3, locals=2, args_size=1
start local 0 0: aload 0
invokevirtual java.lang.String.length:()I
iconst_2
if_icmple 8
1: aload 0
iconst_0
invokevirtual java.lang.String.charAt:(I)C
istore 1
start local 1 2: iload 1
bipush 73
if_icmpne 4
aload 0
ldc "INF"
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifne 3
aload 0
ldc "Infinity"
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifeq 4
3: StackMap locals: int
StackMap stack:
ldc Infinity
invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
areturn
4: StackMap locals:
StackMap stack:
iload 1
bipush 78
if_icmpne 6
aload 0
ldc "NaN"
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifeq 6
5: ldc NaN
invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
areturn
6: StackMap locals:
StackMap stack:
iload 1
bipush 45
if_icmpne 8
aload 0
iconst_1
invokevirtual java.lang.String.charAt:(I)C
bipush 73
if_icmpne 8
aload 0
ldc "-INF"
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifne 7
aload 0
ldc "-Infinity"
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifeq 8
7: StackMap locals:
StackMap stack:
ldc -Infinity
invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
areturn
end local 1 8: StackMap locals:
StackMap stack:
new java.math.BigDecimal
dup
aload 0
invokespecial java.math.BigDecimal.<init>:(Ljava/lang/String;)V
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 9 0 s Ljava/lang/String;
2 8 1 c C
MethodParameters:
Name Flags
s
}
SourceFile: "ArithmeticEngine.java"
NestMembers:
freemarker.core.ArithmeticEngine$BigDecimalEngine freemarker.core.ArithmeticEngine$ConservativeEngine
InnerClasses:
public BigDecimalEngine = freemarker.core.ArithmeticEngine$BigDecimalEngine of freemarker.core.ArithmeticEngine
public ConservativeEngine = freemarker.core.ArithmeticEngine$ConservativeEngine of freemarker.core.ArithmeticEngine