public class freemarker.core.ArithmeticEngine$BigDecimalEngine extends freemarker.core.ArithmeticEngine
minor version: 0
major version: 59
flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: freemarker.core.ArithmeticEngine$BigDecimalEngine
super_class: freemarker.core.ArithmeticEngine
{
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$BigDecimalEngine;
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
invokestatic freemarker.template.utility.NumberUtil.getSignum:(Ljava/lang/Number;)I
istore 3
start local 3 1: aload 2
invokestatic freemarker.template.utility.NumberUtil.getSignum:(Ljava/lang/Number;)I
istore 4
start local 4 2: iload 3
iload 4
if_icmpeq 7
3: iload 3
iload 4
if_icmpge 4
iconst_m1
goto 6
StackMap locals: int int
StackMap stack:
4: iload 3
iload 4
if_icmple 5
iconst_1
goto 6
StackMap locals:
StackMap stack:
5: iconst_0
StackMap locals:
StackMap stack: int
6: ireturn
7: StackMap locals:
StackMap stack:
iload 3
ifne 9
iload 4
ifne 9
8: iconst_0
ireturn
9: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
aload 2
invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
if_acmpne 24
10: aload 1
instanceof java.math.BigDecimal
ifeq 12
11: aload 1
checkcast java.math.BigDecimal
aload 2
checkcast java.math.BigDecimal
invokevirtual java.math.BigDecimal.compareTo:(Ljava/math/BigDecimal;)I
ireturn
12: StackMap locals:
StackMap stack:
aload 1
instanceof java.lang.Integer
ifeq 14
13: aload 1
checkcast java.lang.Integer
aload 2
checkcast java.lang.Integer
invokevirtual java.lang.Integer.compareTo:(Ljava/lang/Integer;)I
ireturn
14: StackMap locals:
StackMap stack:
aload 1
instanceof java.lang.Long
ifeq 16
15: aload 1
checkcast java.lang.Long
aload 2
checkcast java.lang.Long
invokevirtual java.lang.Long.compareTo:(Ljava/lang/Long;)I
ireturn
16: StackMap locals:
StackMap stack:
aload 1
instanceof java.lang.Double
ifeq 18
17: aload 1
checkcast java.lang.Double
aload 2
checkcast java.lang.Double
invokevirtual java.lang.Double.compareTo:(Ljava/lang/Double;)I
ireturn
18: StackMap locals:
StackMap stack:
aload 1
instanceof java.lang.Float
ifeq 20
19: aload 1
checkcast java.lang.Float
aload 2
checkcast java.lang.Float
invokevirtual java.lang.Float.compareTo:(Ljava/lang/Float;)I
ireturn
20: StackMap locals:
StackMap stack:
aload 1
instanceof java.lang.Byte
ifeq 22
21: aload 1
checkcast java.lang.Byte
aload 2
checkcast java.lang.Byte
invokevirtual java.lang.Byte.compareTo:(Ljava/lang/Byte;)I
ireturn
22: StackMap locals:
StackMap stack:
aload 1
instanceof java.lang.Short
ifeq 24
23: aload 1
checkcast java.lang.Short
aload 2
checkcast java.lang.Short
invokevirtual java.lang.Short.compareTo:(Ljava/lang/Short;)I
ireturn
24: StackMap locals:
StackMap stack:
aload 1
instanceof java.lang.Double
ifeq 33
25: aload 1
invokevirtual java.lang.Number.doubleValue:()D
dstore 5
start local 5 26: dload 5
invokestatic java.lang.Double.isInfinite:(D)Z
ifeq 33
27: aload 2
invokestatic freemarker.template.utility.NumberUtil.hasTypeThatIsKnownToNotSupportInfiniteAndNaN:(Ljava/lang/Number;)Z
ifeq 31
28: dload 5
ldc -Infinity
dcmpl
ifne 29
iconst_m1
goto 30
StackMap locals: double
StackMap stack:
29: iconst_1
StackMap locals:
StackMap stack: int
30: ireturn
31: StackMap locals:
StackMap stack:
aload 2
instanceof java.lang.Float
ifeq 33
32: dload 5
aload 2
invokevirtual java.lang.Number.doubleValue:()D
invokestatic java.lang.Double.compare:(DD)I
ireturn
end local 5 33: StackMap locals:
StackMap stack:
aload 1
instanceof java.lang.Float
ifeq 42
34: aload 1
invokevirtual java.lang.Number.floatValue:()F
fstore 5
start local 5 35: fload 5
invokestatic java.lang.Float.isInfinite:(F)Z
ifeq 42
36: aload 2
invokestatic freemarker.template.utility.NumberUtil.hasTypeThatIsKnownToNotSupportInfiniteAndNaN:(Ljava/lang/Number;)Z
ifeq 40
37: fload 5
ldc -Infinity
fcmpl
ifne 38
iconst_m1
goto 39
StackMap locals: float
StackMap stack:
38: iconst_1
StackMap locals:
StackMap stack: int
39: ireturn
40: StackMap locals:
StackMap stack:
aload 2
instanceof java.lang.Double
ifeq 42
41: fload 5
f2d
aload 2
invokevirtual java.lang.Number.doubleValue:()D
invokestatic java.lang.Double.compare:(DD)I
ireturn
end local 5 42: StackMap locals:
StackMap stack:
aload 2
instanceof java.lang.Double
ifeq 51
43: aload 2
invokevirtual java.lang.Number.doubleValue:()D
dstore 5
start local 5 44: dload 5
invokestatic java.lang.Double.isInfinite:(D)Z
ifeq 51
45: aload 1
invokestatic freemarker.template.utility.NumberUtil.hasTypeThatIsKnownToNotSupportInfiniteAndNaN:(Ljava/lang/Number;)Z
ifeq 49
46: dload 5
ldc -Infinity
dcmpl
ifne 47
iconst_1
goto 48
StackMap locals: double
StackMap stack:
47: iconst_m1
StackMap locals:
StackMap stack: int
48: ireturn
49: StackMap locals:
StackMap stack:
aload 1
instanceof java.lang.Float
ifeq 51
50: aload 1
invokevirtual java.lang.Number.doubleValue:()D
dload 5
invokestatic java.lang.Double.compare:(DD)I
ireturn
end local 5 51: StackMap locals:
StackMap stack:
aload 2
instanceof java.lang.Float
ifeq 60
52: aload 2
invokevirtual java.lang.Number.floatValue:()F
fstore 5
start local 5 53: fload 5
invokestatic java.lang.Float.isInfinite:(F)Z
ifeq 60
54: aload 1
invokestatic freemarker.template.utility.NumberUtil.hasTypeThatIsKnownToNotSupportInfiniteAndNaN:(Ljava/lang/Number;)Z
ifeq 58
55: fload 5
ldc -Infinity
fcmpl
ifne 56
iconst_1
goto 57
StackMap locals: float
StackMap stack:
56: iconst_m1
StackMap locals:
StackMap stack: int
57: ireturn
58: StackMap locals:
StackMap stack:
aload 1
instanceof java.lang.Double
ifeq 60
59: aload 1
invokevirtual java.lang.Number.doubleValue:()D
fload 5
f2d
invokestatic java.lang.Double.compare:(DD)I
ireturn
end local 5 60: StackMap locals:
StackMap stack:
aload 1
invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
aload 2
invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
invokevirtual java.math.BigDecimal.compareTo:(Ljava/math/BigDecimal;)I
ireturn
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 61 0 this Lfreemarker/core/ArithmeticEngine$BigDecimalEngine;
0 61 1 first Ljava/lang/Number;
0 61 2 second Ljava/lang/Number;
1 61 3 firstSignum I
2 61 4 secondSignum I
26 33 5 firstD D
35 42 5 firstF F
44 51 5 secondD D
53 60 5 secondF F
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=2, locals=5, args_size=3
start local 0 start local 1 start local 2 0: aload 1
invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
astore 3
start local 3 1: aload 2
invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
astore 4
start local 4 2: aload 3
aload 4
invokevirtual java.math.BigDecimal.add:(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;
areturn
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lfreemarker/core/ArithmeticEngine$BigDecimalEngine;
0 3 1 first Ljava/lang/Number;
0 3 2 second Ljava/lang/Number;
1 3 3 left Ljava/math/BigDecimal;
2 3 4 right Ljava/math/BigDecimal;
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=2, locals=5, args_size=3
start local 0 start local 1 start local 2 0: aload 1
invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
astore 3
start local 3 1: aload 2
invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
astore 4
start local 4 2: aload 3
aload 4
invokevirtual java.math.BigDecimal.subtract:(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;
areturn
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lfreemarker/core/ArithmeticEngine$BigDecimalEngine;
0 3 1 first Ljava/lang/Number;
0 3 2 second Ljava/lang/Number;
1 3 3 left Ljava/math/BigDecimal;
2 3 4 right Ljava/math/BigDecimal;
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=3, locals=6, args_size=3
start local 0 start local 1 start local 2 0: aload 1
invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
astore 3
start local 3 1: aload 2
invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
astore 4
start local 4 2: aload 3
aload 4
invokevirtual java.math.BigDecimal.multiply:(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;
astore 5
start local 5 3: aload 5
invokevirtual java.math.BigDecimal.scale:()I
aload 0
getfield freemarker.core.ArithmeticEngine$BigDecimalEngine.maxScale:I
if_icmple 5
4: aload 5
aload 0
getfield freemarker.core.ArithmeticEngine$BigDecimalEngine.maxScale:I
aload 0
getfield freemarker.core.ArithmeticEngine$BigDecimalEngine.roundingPolicy:I
invokevirtual java.math.BigDecimal.setScale:(II)Ljava/math/BigDecimal;
astore 5
5: StackMap locals: java.math.BigDecimal java.math.BigDecimal java.math.BigDecimal
StackMap stack:
aload 5
areturn
end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 6 0 this Lfreemarker/core/ArithmeticEngine$BigDecimalEngine;
0 6 1 first Ljava/lang/Number;
0 6 2 second Ljava/lang/Number;
1 6 3 left Ljava/math/BigDecimal;
2 6 4 right Ljava/math/BigDecimal;
3 6 5 result Ljava/math/BigDecimal;
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=3, locals=5, args_size=3
start local 0 start local 1 start local 2 0: aload 1
invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
astore 3
start local 3 1: aload 2
invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
astore 4
start local 4 2: aload 0
aload 3
aload 4
invokevirtual freemarker.core.ArithmeticEngine$BigDecimalEngine.divide:(Ljava/math/BigDecimal;Ljava/math/BigDecimal;)Ljava/math/BigDecimal;
areturn
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lfreemarker/core/ArithmeticEngine$BigDecimalEngine;
0 3 1 first Ljava/lang/Number;
0 3 2 second Ljava/lang/Number;
1 3 3 left Ljava/math/BigDecimal;
2 3 4 right Ljava/math/BigDecimal;
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=7, args_size=3
start local 0 start local 1 start local 2 0: aload 1
invokevirtual java.lang.Number.longValue:()J
lstore 3
start local 3 1: aload 2
invokevirtual java.lang.Number.longValue:()J
lstore 5
start local 5 2: lload 3
lload 5
lrem
invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
areturn
end local 5 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lfreemarker/core/ArithmeticEngine$BigDecimalEngine;
0 3 1 first Ljava/lang/Number;
0 3 2 second Ljava/lang/Number;
1 3 3 left J
2 3 5 right J
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=2, args_size=2
start local 0 start local 1 0: aload 1
invokestatic freemarker.core.ArithmeticEngine.toBigDecimalOrDouble:(Ljava/lang/String;)Ljava/lang/Number;
areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lfreemarker/core/ArithmeticEngine$BigDecimalEngine;
0 1 1 s Ljava/lang/String;
MethodParameters:
Name Flags
s
private java.math.BigDecimal divide(java.math.BigDecimal, java.math.BigDecimal);
descriptor: (Ljava/math/BigDecimal;Ljava/math/BigDecimal;)Ljava/math/BigDecimal;
flags: (0x0002) ACC_PRIVATE
Code:
stack=4, locals=6, args_size=3
start local 0 start local 1 start local 2 0: aload 1
invokevirtual java.math.BigDecimal.scale:()I
istore 3
start local 3 1: aload 2
invokevirtual java.math.BigDecimal.scale:()I
istore 4
start local 4 2: iload 3
iload 4
invokestatic java.lang.Math.max:(II)I
istore 5
start local 5 3: aload 0
getfield freemarker.core.ArithmeticEngine$BigDecimalEngine.minScale:I
iload 5
invokestatic java.lang.Math.max:(II)I
istore 5
4: aload 1
aload 2
iload 5
aload 0
getfield freemarker.core.ArithmeticEngine$BigDecimalEngine.roundingPolicy:I
invokevirtual java.math.BigDecimal.divide:(Ljava/math/BigDecimal;II)Ljava/math/BigDecimal;
areturn
end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Lfreemarker/core/ArithmeticEngine$BigDecimalEngine;
0 5 1 left Ljava/math/BigDecimal;
0 5 2 right Ljava/math/BigDecimal;
1 5 3 scale1 I
2 5 4 scale2 I
3 5 5 scale I
MethodParameters:
Name Flags
left
right
}
SourceFile: "ArithmeticEngine.java"
NestHost: freemarker.core.ArithmeticEngine
InnerClasses:
public BigDecimalEngine = freemarker.core.ArithmeticEngine$BigDecimalEngine of freemarker.core.ArithmeticEngine