public class freemarker.core.ArithmeticEngine$ConservativeEngine extends freemarker.core.ArithmeticEngine
minor version: 0
major version: 59
flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: freemarker.core.ArithmeticEngine$ConservativeEngine
super_class: freemarker.core.ArithmeticEngine
{
private static final int INTEGER;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 0
private static final int LONG;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 1
private static final int FLOAT;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 2
private static final int DOUBLE;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 3
private static final int BIGINTEGER;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 4
private static final int BIGDECIMAL;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 5
private static final java.util.Map classCodes;
descriptor: Ljava/util/Map;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=1, locals=0, args_size=0
0: invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.createClassCodesMap:()Ljava/util/Map;
putstatic freemarker.core.ArithmeticEngine$ConservativeEngine.classCodes:Ljava/util/Map;
return
LocalVariableTable:
Start End Slot Name Signature
public void <init>();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
invokespecial freemarker.core.ArithmeticEngine.<init>:()V
return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lfreemarker/core/ArithmeticEngine$ConservativeEngine;
public int compareNumbers(java.lang.Number, java.lang.Number);
descriptor: (Ljava/lang/Number;Ljava/lang/Number;)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=7, args_size=3
start local 0 start local 1 start local 2 0: aload 1
aload 2
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.getCommonClassCode:(Ljava/lang/Number;Ljava/lang/Number;)I
tableswitch { // 0 - 5
0: 1
1: 7
2: 13
3: 19
4: 25
5: 28
default: 31
}
1: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.intValue:()I
istore 3
start local 3 2: aload 2
invokevirtual java.lang.Number.intValue:()I
istore 4
start local 4 3: iload 3
iload 4
if_icmpge 4
iconst_m1
goto 6
StackMap locals: int int
StackMap stack:
4: iload 3
iload 4
if_icmpne 5
iconst_0
goto 6
StackMap locals:
StackMap stack:
5: iconst_1
StackMap locals:
StackMap stack: int
6: ireturn
end local 4 end local 3 7: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.longValue:()J
lstore 3
start local 3 8: aload 2
invokevirtual java.lang.Number.longValue:()J
lstore 5
start local 5 9: lload 3
lload 5
lcmp
ifge 10
iconst_m1
goto 12
StackMap locals: long long
StackMap stack:
10: lload 3
lload 5
lcmp
ifne 11
iconst_0
goto 12
StackMap locals:
StackMap stack:
11: iconst_1
StackMap locals:
StackMap stack: int
12: ireturn
end local 5 end local 3 13: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.floatValue:()F
fstore 3
start local 3 14: aload 2
invokevirtual java.lang.Number.floatValue:()F
fstore 4
start local 4 15: fload 3
fload 4
fcmpg
ifge 16
iconst_m1
goto 18
StackMap locals: float float
StackMap stack:
16: fload 3
fload 4
fcmpl
ifne 17
iconst_0
goto 18
StackMap locals:
StackMap stack:
17: iconst_1
StackMap locals:
StackMap stack: int
18: ireturn
end local 4 end local 3 19: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.doubleValue:()D
dstore 3
start local 3 20: aload 2
invokevirtual java.lang.Number.doubleValue:()D
dstore 5
start local 5 21: dload 3
dload 5
dcmpg
ifge 22
iconst_m1
goto 24
StackMap locals: double double
StackMap stack:
22: dload 3
dload 5
dcmpl
ifne 23
iconst_0
goto 24
StackMap locals:
StackMap stack:
23: iconst_1
StackMap locals:
StackMap stack: int
24: ireturn
end local 5 end local 3 25: StackMap locals:
StackMap stack:
aload 1
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
astore 3
start local 3 26: aload 2
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
astore 4
start local 4 27: aload 3
aload 4
invokevirtual java.math.BigInteger.compareTo:(Ljava/math/BigInteger;)I
ireturn
end local 4 end local 3 28: StackMap locals:
StackMap stack:
aload 1
invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
astore 3
start local 3 29: aload 2
invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
astore 4
start local 4 30: aload 3
aload 4
invokevirtual java.math.BigDecimal.compareTo:(Ljava/math/BigDecimal;)I
ireturn
end local 4 end local 3 31: StackMap locals:
StackMap stack:
new java.lang.Error
dup
invokespecial java.lang.Error.<init>:()V
athrow
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 32 0 this Lfreemarker/core/ArithmeticEngine$ConservativeEngine;
0 32 1 first Ljava/lang/Number;
0 32 2 second Ljava/lang/Number;
2 7 3 n1 I
3 7 4 n2 I
8 13 3 n1 J
9 13 5 n2 J
14 19 3 n1 F
15 19 4 n2 F
20 25 3 n1 D
21 25 5 n2 D
26 28 3 n1 Ljava/math/BigInteger;
27 28 4 n2 Ljava/math/BigInteger;
29 31 3 n1 Ljava/math/BigDecimal;
30 31 4 n2 Ljava/math/BigDecimal;
Exceptions:
throws freemarker.template.TemplateException
MethodParameters:
Name Flags
first
second
public java.lang.Number add(java.lang.Number, java.lang.Number);
descriptor: (Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=9, args_size=3
start local 0 start local 1 start local 2 0: aload 1
aload 2
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.getCommonClassCode:(Ljava/lang/Number;Ljava/lang/Number;)I
tableswitch { // 0 - 5
0: 1
1: 9
2: 16
3: 17
4: 18
5: 21
default: 24
}
1: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.intValue:()I
istore 3
start local 3 2: aload 2
invokevirtual java.lang.Number.intValue:()I
istore 4
start local 4 3: iload 3
iload 4
iadd
istore 5
start local 5 4: iload 5
iload 3
ixor
ifge 6
iload 5
iload 4
ixor
ifge 6
5: iload 3
i2l
iload 4
i2l
ladd
invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
invokevirtual java.lang.Long.longValue:()J
goto 7
6: StackMap locals: int int int
StackMap stack:
iload 5
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
invokevirtual java.lang.Integer.intValue:()I
i2l
7: StackMap locals:
StackMap stack: long
invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
8: areturn
end local 5 end local 4 end local 3 9: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.longValue:()J
lstore 3
start local 3 10: aload 2
invokevirtual java.lang.Number.longValue:()J
lstore 5
start local 5 11: lload 3
lload 5
ladd
lstore 7
start local 7 12: lload 7
lload 3
lxor
lconst_0
lcmp
ifge 14
lload 7
lload 5
lxor
lconst_0
lcmp
ifge 14
13: aload 1
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
aload 2
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
invokevirtual java.math.BigInteger.add:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
goto 15
14: StackMap locals: long long long
StackMap stack:
lload 7
invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
15: StackMap locals:
StackMap stack: java.lang.Number
areturn
end local 7 end local 5 end local 3 16: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.floatValue:()F
aload 2
invokevirtual java.lang.Number.floatValue:()F
fadd
invokestatic java.lang.Float.valueOf:(F)Ljava/lang/Float;
areturn
17: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.doubleValue:()D
aload 2
invokevirtual java.lang.Number.doubleValue:()D
dadd
invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
areturn
18: StackMap locals:
StackMap stack:
aload 1
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
astore 3
start local 3 19: aload 2
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
astore 4
start local 4 20: aload 3
aload 4
invokevirtual java.math.BigInteger.add:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
areturn
end local 4 end local 3 21: StackMap locals:
StackMap stack:
aload 1
invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
astore 3
start local 3 22: aload 2
invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
astore 4
start local 4 23: aload 3
aload 4
invokevirtual java.math.BigDecimal.add:(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;
areturn
end local 4 end local 3 24: StackMap locals:
StackMap stack:
new java.lang.Error
dup
invokespecial java.lang.Error.<init>:()V
athrow
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 25 0 this Lfreemarker/core/ArithmeticEngine$ConservativeEngine;
0 25 1 first Ljava/lang/Number;
0 25 2 second Ljava/lang/Number;
2 9 3 n1 I
3 9 4 n2 I
4 9 5 n I
10 16 3 n1 J
11 16 5 n2 J
12 16 7 n J
19 21 3 n1 Ljava/math/BigInteger;
20 21 4 n2 Ljava/math/BigInteger;
22 24 3 n1 Ljava/math/BigDecimal;
23 24 4 n2 Ljava/math/BigDecimal;
Exceptions:
throws freemarker.template.TemplateException
MethodParameters:
Name Flags
first
second
public java.lang.Number subtract(java.lang.Number, java.lang.Number);
descriptor: (Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
flags: (0x0001) ACC_PUBLIC
Code:
stack=6, locals=9, args_size=3
start local 0 start local 1 start local 2 0: aload 1
aload 2
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.getCommonClassCode:(Ljava/lang/Number;Ljava/lang/Number;)I
tableswitch { // 0 - 5
0: 1
1: 8
2: 15
3: 16
4: 17
5: 20
default: 23
}
1: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.intValue:()I
istore 3
start local 3 2: aload 2
invokevirtual java.lang.Number.intValue:()I
istore 4
start local 4 3: iload 3
iload 4
isub
istore 5
start local 5 4: iload 5
iload 3
ixor
ifge 6
iload 5
iload 4
iconst_m1
ixor
ixor
ifge 6
5: iload 3
i2l
iload 4
i2l
lsub
invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
goto 7
6: StackMap locals: int int int
StackMap stack:
iload 5
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
7: StackMap locals:
StackMap stack: java.lang.Number
areturn
end local 5 end local 4 end local 3 8: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.longValue:()J
lstore 3
start local 3 9: aload 2
invokevirtual java.lang.Number.longValue:()J
lstore 5
start local 5 10: lload 3
lload 5
lsub
lstore 7
start local 7 11: lload 7
lload 3
lxor
lconst_0
lcmp
ifge 13
lload 7
lload 5
ldc -1
lxor
lxor
lconst_0
lcmp
ifge 13
12: aload 1
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
aload 2
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
invokevirtual java.math.BigInteger.subtract:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
goto 14
13: StackMap locals: long long long
StackMap stack:
lload 7
invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
14: StackMap locals:
StackMap stack: java.lang.Number
areturn
end local 7 end local 5 end local 3 15: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.floatValue:()F
aload 2
invokevirtual java.lang.Number.floatValue:()F
fsub
invokestatic java.lang.Float.valueOf:(F)Ljava/lang/Float;
areturn
16: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.doubleValue:()D
aload 2
invokevirtual java.lang.Number.doubleValue:()D
dsub
invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
areturn
17: StackMap locals:
StackMap stack:
aload 1
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
astore 3
start local 3 18: aload 2
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
astore 4
start local 4 19: aload 3
aload 4
invokevirtual java.math.BigInteger.subtract:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
areturn
end local 4 end local 3 20: StackMap locals:
StackMap stack:
aload 1
invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
astore 3
start local 3 21: aload 2
invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
astore 4
start local 4 22: aload 3
aload 4
invokevirtual java.math.BigDecimal.subtract:(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;
areturn
end local 4 end local 3 23: StackMap locals:
StackMap stack:
new java.lang.Error
dup
invokespecial java.lang.Error.<init>:()V
athrow
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 24 0 this Lfreemarker/core/ArithmeticEngine$ConservativeEngine;
0 24 1 first Ljava/lang/Number;
0 24 2 second Ljava/lang/Number;
2 8 3 n1 I
3 8 4 n2 I
4 8 5 n I
9 15 3 n1 J
10 15 5 n2 J
11 15 7 n J
18 20 3 n1 Ljava/math/BigInteger;
19 20 4 n2 Ljava/math/BigInteger;
21 23 3 n1 Ljava/math/BigDecimal;
22 23 4 n2 Ljava/math/BigDecimal;
Exceptions:
throws freemarker.template.TemplateException
MethodParameters:
Name Flags
first
second
public java.lang.Number multiply(java.lang.Number, java.lang.Number);
descriptor: (Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=9, args_size=3
start local 0 start local 1 start local 2 0: aload 1
aload 2
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.getCommonClassCode:(Ljava/lang/Number;Ljava/lang/Number;)I
tableswitch { // 0 - 5
0: 1
1: 8
2: 15
3: 16
4: 17
5: 20
default: 26
}
1: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.intValue:()I
istore 3
start local 3 2: aload 2
invokevirtual java.lang.Number.intValue:()I
istore 4
start local 4 3: iload 3
iload 4
imul
istore 5
start local 5 4: iload 3
ifeq 5
iload 5
iload 3
idiv
iload 4
if_icmpne 6
5: StackMap locals: int int int
StackMap stack:
iload 5
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
goto 7
6: StackMap locals:
StackMap stack:
iload 3
i2l
iload 4
i2l
lmul
invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
7: StackMap locals:
StackMap stack: java.lang.Number
areturn
end local 5 end local 4 end local 3 8: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.longValue:()J
lstore 3
start local 3 9: aload 2
invokevirtual java.lang.Number.longValue:()J
lstore 5
start local 5 10: lload 3
lload 5
lmul
lstore 7
start local 7 11: lload 3
lconst_0
lcmp
ifeq 12
lload 7
lload 3
ldiv
lload 5
lcmp
ifne 13
12: StackMap locals: long long long
StackMap stack:
lload 7
invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
goto 14
13: StackMap locals:
StackMap stack:
aload 1
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
aload 2
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
invokevirtual java.math.BigInteger.multiply:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
14: StackMap locals:
StackMap stack: java.lang.Number
areturn
end local 7 end local 5 end local 3 15: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.floatValue:()F
aload 2
invokevirtual java.lang.Number.floatValue:()F
fmul
invokestatic java.lang.Float.valueOf:(F)Ljava/lang/Float;
areturn
16: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.doubleValue:()D
aload 2
invokevirtual java.lang.Number.doubleValue:()D
dmul
invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
areturn
17: StackMap locals:
StackMap stack:
aload 1
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
astore 3
start local 3 18: aload 2
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
astore 4
start local 4 19: aload 3
aload 4
invokevirtual java.math.BigInteger.multiply:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
areturn
end local 4 end local 3 20: StackMap locals:
StackMap stack:
aload 1
invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
astore 3
start local 3 21: aload 2
invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
astore 4
start local 4 22: aload 3
aload 4
invokevirtual java.math.BigDecimal.multiply:(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;
astore 5
start local 5 23: aload 5
invokevirtual java.math.BigDecimal.scale:()I
aload 0
getfield freemarker.core.ArithmeticEngine$ConservativeEngine.maxScale:I
if_icmple 24
aload 5
aload 0
getfield freemarker.core.ArithmeticEngine$ConservativeEngine.maxScale:I
aload 0
getfield freemarker.core.ArithmeticEngine$ConservativeEngine.roundingPolicy:I
invokevirtual java.math.BigDecimal.setScale:(II)Ljava/math/BigDecimal;
goto 25
StackMap locals: java.math.BigDecimal java.math.BigDecimal java.math.BigDecimal
StackMap stack:
24: aload 5
StackMap locals:
StackMap stack: java.math.BigDecimal
25: areturn
end local 5 end local 4 end local 3 26: StackMap locals:
StackMap stack:
new java.lang.Error
dup
invokespecial java.lang.Error.<init>:()V
athrow
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 27 0 this Lfreemarker/core/ArithmeticEngine$ConservativeEngine;
0 27 1 first Ljava/lang/Number;
0 27 2 second Ljava/lang/Number;
2 8 3 n1 I
3 8 4 n2 I
4 8 5 n I
9 15 3 n1 J
10 15 5 n2 J
11 15 7 n J
18 20 3 n1 Ljava/math/BigInteger;
19 20 4 n2 Ljava/math/BigInteger;
21 26 3 n1 Ljava/math/BigDecimal;
22 26 4 n2 Ljava/math/BigDecimal;
23 26 5 r Ljava/math/BigDecimal;
Exceptions:
throws freemarker.template.TemplateException
MethodParameters:
Name Flags
first
second
public java.lang.Number divide(java.lang.Number, java.lang.Number);
descriptor: (Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=8, args_size=3
start local 0 start local 1 start local 2 0: aload 1
aload 2
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.getCommonClassCode:(Ljava/lang/Number;Ljava/lang/Number;)I
tableswitch { // 0 - 5
0: 1
1: 6
2: 11
3: 12
4: 13
5: 21
default: 28
}
1: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.intValue:()I
istore 3
start local 3 2: aload 2
invokevirtual java.lang.Number.intValue:()I
istore 4
start local 4 3: iload 3
iload 4
irem
ifne 5
4: iload 3
iload 4
idiv
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
areturn
5: StackMap locals: int int
StackMap stack:
iload 3
i2d
iload 4
i2d
ddiv
invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
areturn
end local 4 end local 3 6: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.longValue:()J
lstore 3
start local 3 7: aload 2
invokevirtual java.lang.Number.longValue:()J
lstore 5
start local 5 8: lload 3
lload 5
lrem
lconst_0
lcmp
ifne 10
9: lload 3
lload 5
ldiv
invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
areturn
10: StackMap locals: long long
StackMap stack:
lload 3
l2d
lload 5
l2d
ddiv
invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
areturn
end local 5 end local 3 11: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.floatValue:()F
aload 2
invokevirtual java.lang.Number.floatValue:()F
fdiv
invokestatic java.lang.Float.valueOf:(F)Ljava/lang/Float;
areturn
12: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.doubleValue:()D
aload 2
invokevirtual java.lang.Number.doubleValue:()D
ddiv
invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
areturn
13: StackMap locals:
StackMap stack:
aload 1
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
astore 3
start local 3 14: aload 2
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
astore 4
start local 4 15: aload 3
aload 4
invokevirtual java.math.BigInteger.divideAndRemainder:(Ljava/math/BigInteger;)[Ljava/math/BigInteger;
astore 5
start local 5 16: aload 5
iconst_1
aaload
getstatic java.math.BigInteger.ZERO:Ljava/math/BigInteger;
invokevirtual java.math.BigInteger.equals:(Ljava/lang/Object;)Z
ifeq 18
17: aload 5
iconst_0
aaload
areturn
18: StackMap locals: java.math.BigInteger java.math.BigInteger java.math.BigInteger[]
StackMap stack:
new java.math.BigDecimal
dup
aload 3
invokespecial java.math.BigDecimal.<init>:(Ljava/math/BigInteger;)V
astore 6
start local 6 19: new java.math.BigDecimal
dup
aload 4
invokespecial java.math.BigDecimal.<init>:(Ljava/math/BigInteger;)V
astore 7
start local 7 20: aload 6
aload 7
aload 0
getfield freemarker.core.ArithmeticEngine$ConservativeEngine.minScale:I
aload 0
getfield freemarker.core.ArithmeticEngine$ConservativeEngine.roundingPolicy:I
invokevirtual java.math.BigDecimal.divide:(Ljava/math/BigDecimal;II)Ljava/math/BigDecimal;
areturn
end local 7 end local 6 end local 5 end local 4 end local 3 21: StackMap locals:
StackMap stack:
aload 1
invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
astore 3
start local 3 22: aload 2
invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
astore 4
start local 4 23: aload 3
invokevirtual java.math.BigDecimal.scale:()I
istore 5
start local 5 24: aload 4
invokevirtual java.math.BigDecimal.scale:()I
istore 6
start local 6 25: iload 5
iload 6
invokestatic java.lang.Math.max:(II)I
istore 7
start local 7 26: aload 0
getfield freemarker.core.ArithmeticEngine$ConservativeEngine.minScale:I
iload 7
invokestatic java.lang.Math.max:(II)I
istore 7
27: aload 3
aload 4
iload 7
aload 0
getfield freemarker.core.ArithmeticEngine$ConservativeEngine.roundingPolicy:I
invokevirtual java.math.BigDecimal.divide:(Ljava/math/BigDecimal;II)Ljava/math/BigDecimal;
areturn
end local 7 end local 6 end local 5 end local 4 end local 3 28: StackMap locals:
StackMap stack:
new java.lang.Error
dup
invokespecial java.lang.Error.<init>:()V
athrow
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 29 0 this Lfreemarker/core/ArithmeticEngine$ConservativeEngine;
0 29 1 first Ljava/lang/Number;
0 29 2 second Ljava/lang/Number;
2 6 3 n1 I
3 6 4 n2 I
7 11 3 n1 J
8 11 5 n2 J
14 21 3 n1 Ljava/math/BigInteger;
15 21 4 n2 Ljava/math/BigInteger;
16 21 5 divmod [Ljava/math/BigInteger;
19 21 6 bd1 Ljava/math/BigDecimal;
20 21 7 bd2 Ljava/math/BigDecimal;
22 28 3 n1 Ljava/math/BigDecimal;
23 28 4 n2 Ljava/math/BigDecimal;
24 28 5 scale1 I
25 28 6 scale2 I
26 28 7 scale I
Exceptions:
throws freemarker.template.TemplateException
MethodParameters:
Name Flags
first
second
public java.lang.Number modulus(java.lang.Number, java.lang.Number);
descriptor: (Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=5, args_size=3
start local 0 start local 1 start local 2 0: aload 1
aload 2
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.getCommonClassCode:(Ljava/lang/Number;Ljava/lang/Number;)I
tableswitch { // 0 - 5
0: 1
1: 2
2: 3
3: 4
4: 5
5: 8
default: 9
}
1: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.intValue:()I
aload 2
invokevirtual java.lang.Number.intValue:()I
irem
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
areturn
2: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.longValue:()J
aload 2
invokevirtual java.lang.Number.longValue:()J
lrem
invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
areturn
3: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.floatValue:()F
aload 2
invokevirtual java.lang.Number.floatValue:()F
frem
invokestatic java.lang.Float.valueOf:(F)Ljava/lang/Float;
areturn
4: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Number.doubleValue:()D
aload 2
invokevirtual java.lang.Number.doubleValue:()D
drem
invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
areturn
5: StackMap locals:
StackMap stack:
aload 1
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
astore 3
start local 3 6: aload 2
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
astore 4
start local 4 7: aload 3
aload 4
invokevirtual java.math.BigInteger.mod:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
areturn
end local 4 end local 3 8: StackMap locals:
StackMap stack:
new freemarker.core._MiscTemplateException
dup
ldc "Can't calculate remainder on BigDecimals"
invokespecial freemarker.core._MiscTemplateException.<init>:(Ljava/lang/String;)V
athrow
9: StackMap locals:
StackMap stack:
new freemarker.core.BugException
dup
invokespecial freemarker.core.BugException.<init>:()V
athrow
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 10 0 this Lfreemarker/core/ArithmeticEngine$ConservativeEngine;
0 10 1 first Ljava/lang/Number;
0 10 2 second Ljava/lang/Number;
6 8 3 n1 Ljava/math/BigInteger;
7 8 4 n2 Ljava/math/BigInteger;
Exceptions:
throws freemarker.template.TemplateException
MethodParameters:
Name Flags
first
second
public java.lang.Number toNumber(java.lang.String);
descriptor: (Ljava/lang/String;)Ljava/lang/Number;
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=3, args_size=2
start local 0 start local 1 0: aload 1
invokestatic freemarker.core.ArithmeticEngine.toBigDecimalOrDouble:(Ljava/lang/String;)Ljava/lang/Number;
astore 2
start local 2 1: aload 2
instanceof java.math.BigDecimal
ifeq 2
aload 2
invokestatic freemarker.template.utility.OptimizerUtil.optimizeNumberRepresentation:(Ljava/lang/Number;)Ljava/lang/Number;
goto 3
StackMap locals: java.lang.Number
StackMap stack:
2: aload 2
StackMap locals:
StackMap stack: java.lang.Number
3: areturn
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Lfreemarker/core/ArithmeticEngine$ConservativeEngine;
0 4 1 s Ljava/lang/String;
1 4 2 n Ljava/lang/Number;
MethodParameters:
Name Flags
s
private static java.util.Map createClassCodesMap();
descriptor: ()Ljava/util/Map;
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=3, locals=2, args_size=0
0: new java.util.HashMap
dup
bipush 17
invokespecial java.util.HashMap.<init>:(I)V
astore 0
start local 0 1: iconst_0
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
astore 1
start local 1 2: aload 0
ldc Ljava/lang/Byte;
aload 1
invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
pop
3: aload 0
ldc Ljava/lang/Short;
aload 1
invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
pop
4: aload 0
ldc Ljava/lang/Integer;
aload 1
invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
pop
5: aload 0
ldc Ljava/lang/Long;
iconst_1
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
pop
6: aload 0
ldc Ljava/lang/Float;
iconst_2
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
pop
7: aload 0
ldc Ljava/lang/Double;
iconst_3
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
pop
8: aload 0
ldc Ljava/math/BigInteger;
iconst_4
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
pop
9: aload 0
ldc Ljava/math/BigDecimal;
iconst_5
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
pop
10: aload 0
areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
1 11 0 map Ljava/util/Map;
2 11 1 intcode Ljava/lang/Integer;
private static int getClassCode(java.lang.Number);
descriptor: (Ljava/lang/Number;)I
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=6, locals=1, args_size=1
start local 0 0: getstatic freemarker.core.ArithmeticEngine$ConservativeEngine.classCodes:Ljava/util/Map;
aload 0
invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
checkcast java.lang.Integer
invokevirtual java.lang.Integer.intValue:()I
1: ireturn
2: StackMap locals:
StackMap stack: java.lang.NullPointerException
pop
3: aload 0
ifnonnull 5
4: new freemarker.core._MiscTemplateException
dup
ldc "The Number object was null."
invokespecial freemarker.core._MiscTemplateException.<init>:(Ljava/lang/String;)V
athrow
5: StackMap locals:
StackMap stack:
new freemarker.core._MiscTemplateException
dup
iconst_2
anewarray java.lang.Object
dup
iconst_0
ldc "Unknown number type "
aastore
dup
iconst_1
aload 0
invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
invokevirtual java.lang.Class.getName:()Ljava/lang/String;
aastore
invokespecial freemarker.core._MiscTemplateException.<init>:([Ljava/lang/Object;)V
athrow
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 6 0 num Ljava/lang/Number;
Exception table:
from to target type
0 1 2 Class java.lang.NullPointerException
Exceptions:
throws freemarker.template.TemplateException
MethodParameters:
Name Flags
num
private static int getCommonClassCode(java.lang.Number, java.lang.Number);
descriptor: (Ljava/lang/Number;Ljava/lang/Number;)I
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=2, locals=6, args_size=2
start local 0 start local 1 0: aload 0
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.getClassCode:(Ljava/lang/Number;)I
istore 2
start local 2 1: aload 1
invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.getClassCode:(Ljava/lang/Number;)I
istore 3
start local 3 2: iload 2
iload 3
if_icmple 3
iload 2
goto 4
StackMap locals: int int
StackMap stack:
3: iload 3
StackMap locals:
StackMap stack: int
4: istore 4
start local 4 5: iload 4
tableswitch { // 2 - 4
2: 6
3: 15
4: 10
default: 15
}
6: StackMap locals: int
StackMap stack:
iload 2
iload 3
if_icmpge 7
iload 2
goto 8
StackMap locals:
StackMap stack:
7: iload 3
StackMap locals:
StackMap stack: int
8: iconst_1
if_icmpne 15
9: iconst_3
ireturn
10: StackMap locals:
StackMap stack:
iload 2
iload 3
if_icmpge 11
iload 2
goto 12
StackMap locals:
StackMap stack:
11: iload 3
StackMap locals:
StackMap stack: int
12: istore 5
start local 5 13: iload 5
iconst_3
if_icmpeq 14
iload 5
iconst_2
if_icmpne 15
14: StackMap locals: int
StackMap stack:
iconst_5
ireturn
end local 5 15: StackMap locals:
StackMap stack:
iload 4
ireturn
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 16 0 num1 Ljava/lang/Number;
0 16 1 num2 Ljava/lang/Number;
1 16 2 c1 I
2 16 3 c2 I
5 16 4 c I
13 15 5 min I
Exceptions:
throws freemarker.template.TemplateException
MethodParameters:
Name Flags
num1
num2
private static java.math.BigInteger toBigInteger(java.lang.Number);
descriptor: (Ljava/lang/Number;)Ljava/math/BigInteger;
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=3, locals=1, args_size=1
start local 0 0: aload 0
instanceof java.math.BigInteger
ifeq 1
aload 0
checkcast java.math.BigInteger
goto 2
StackMap locals:
StackMap stack:
1: new java.math.BigInteger
dup
aload 0
invokevirtual java.lang.Object.toString:()Ljava/lang/String;
invokespecial java.math.BigInteger.<init>:(Ljava/lang/String;)V
StackMap locals:
StackMap stack: java.math.BigInteger
2: areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 num Ljava/lang/Number;
MethodParameters:
Name Flags
num
}
SourceFile: "ArithmeticEngine.java"
NestHost: freemarker.core.ArithmeticEngine
InnerClasses:
public ConservativeEngine = freemarker.core.ArithmeticEngine$ConservativeEngine of freemarker.core.ArithmeticEngine