final class freemarker.core.DynamicKeyName extends freemarker.core.Expression
minor version: 0
major version: 59
flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
this_class: freemarker.core.DynamicKeyName
super_class: freemarker.core.Expression
{
private final freemarker.core.Expression keyExpression;
descriptor: Lfreemarker/core/Expression;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final freemarker.core.Expression target;
descriptor: Lfreemarker/core/Expression;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private static java.lang.Class[] NUMERICAL_KEY_LHO_EXPECTED_TYPES;
descriptor: [Ljava/lang/Class;
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=4, locals=1, args_size=0
0: iconst_1
getstatic freemarker.core.NonStringException.STRING_COERCABLE_TYPES:[Ljava/lang/Class;
arraylength
iadd
anewarray java.lang.Class
putstatic freemarker.core.DynamicKeyName.NUMERICAL_KEY_LHO_EXPECTED_TYPES:[Ljava/lang/Class;
1: getstatic freemarker.core.DynamicKeyName.NUMERICAL_KEY_LHO_EXPECTED_TYPES:[Ljava/lang/Class;
iconst_0
ldc Lfreemarker/template/TemplateSequenceModel;
aastore
2: iconst_0
istore 0
start local 0 3: goto 6
4: StackMap locals: int
StackMap stack:
getstatic freemarker.core.DynamicKeyName.NUMERICAL_KEY_LHO_EXPECTED_TYPES:[Ljava/lang/Class;
iload 0
iconst_1
iadd
getstatic freemarker.core.NonStringException.STRING_COERCABLE_TYPES:[Ljava/lang/Class;
iload 0
aaload
aastore
5: iinc 0 1
StackMap locals:
StackMap stack:
6: iload 0
getstatic freemarker.core.NonStringException.STRING_COERCABLE_TYPES:[Ljava/lang/Class;
arraylength
if_icmplt 4
end local 0 7: return
LocalVariableTable:
Start End Slot Name Signature
3 7 0 i I
void <init>(freemarker.core.Expression, freemarker.core.Expression);
descriptor: (Lfreemarker/core/Expression;Lfreemarker/core/Expression;)V
flags: (0x0000)
Code:
stack=2, locals=3, args_size=3
start local 0 start local 1 start local 2 0: aload 0
invokespecial freemarker.core.Expression.<init>:()V
1: aload 0
aload 1
putfield freemarker.core.DynamicKeyName.target:Lfreemarker/core/Expression;
2: aload 0
aload 2
putfield freemarker.core.DynamicKeyName.keyExpression:Lfreemarker/core/Expression;
3: return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Lfreemarker/core/DynamicKeyName;
0 4 1 target Lfreemarker/core/Expression;
0 4 2 keyExpression Lfreemarker/core/Expression;
MethodParameters:
Name Flags
target
keyExpression
freemarker.template.TemplateModel _eval(freemarker.core.Environment);
descriptor: (Lfreemarker/core/Environment;)Lfreemarker/template/TemplateModel;
flags: (0x0000)
Code:
stack=9, locals=5, args_size=2
start local 0 start local 1 0: aload 0
getfield freemarker.core.DynamicKeyName.target:Lfreemarker/core/Expression;
aload 1
invokevirtual freemarker.core.Expression.eval:(Lfreemarker/core/Environment;)Lfreemarker/template/TemplateModel;
astore 2
start local 2 1: aload 2
ifnonnull 5
2: aload 1
invokevirtual freemarker.core.Environment.isClassicCompatible:()Z
ifeq 4
3: aconst_null
areturn
4: StackMap locals: freemarker.template.TemplateModel
StackMap stack:
aload 0
getfield freemarker.core.DynamicKeyName.target:Lfreemarker/core/Expression;
aload 1
invokestatic freemarker.core.InvalidReferenceException.getInstance:(Lfreemarker/core/Expression;Lfreemarker/core/Environment;)Lfreemarker/core/InvalidReferenceException;
athrow
5: StackMap locals:
StackMap stack:
aload 0
getfield freemarker.core.DynamicKeyName.keyExpression:Lfreemarker/core/Expression;
aload 1
invokevirtual freemarker.core.Expression.eval:(Lfreemarker/core/Environment;)Lfreemarker/template/TemplateModel;
astore 3
start local 3 6: aload 3
ifnonnull 11
7: aload 1
invokevirtual freemarker.core.Environment.isClassicCompatible:()Z
ifeq 10
8: getstatic freemarker.template.TemplateScalarModel.EMPTY_STRING:Lfreemarker/template/TemplateModel;
astore 3
9: goto 11
10: StackMap locals: freemarker.template.TemplateModel
StackMap stack:
aload 0
getfield freemarker.core.DynamicKeyName.keyExpression:Lfreemarker/core/Expression;
aconst_null
aload 1
invokevirtual freemarker.core.Expression.assertNonNull:(Lfreemarker/template/TemplateModel;Lfreemarker/core/Environment;)V
11: StackMap locals:
StackMap stack:
aload 3
instanceof freemarker.template.TemplateNumberModel
ifeq 14
12: aload 0
getfield freemarker.core.DynamicKeyName.keyExpression:Lfreemarker/core/Expression;
aload 3
aload 1
invokevirtual freemarker.core.Expression.modelToNumber:(Lfreemarker/template/TemplateModel;Lfreemarker/core/Environment;)Ljava/lang/Number;
invokevirtual java.lang.Number.intValue:()I
istore 4
start local 4 13: aload 0
aload 2
iload 4
aload 1
invokevirtual freemarker.core.DynamicKeyName.dealWithNumericalKey:(Lfreemarker/template/TemplateModel;ILfreemarker/core/Environment;)Lfreemarker/template/TemplateModel;
areturn
end local 4 14: StackMap locals:
StackMap stack:
aload 3
instanceof freemarker.template.TemplateScalarModel
ifeq 17
15: aload 3
checkcast freemarker.template.TemplateScalarModel
aload 0
getfield freemarker.core.DynamicKeyName.keyExpression:Lfreemarker/core/Expression;
aload 1
invokestatic freemarker.core.EvalUtil.modelToString:(Lfreemarker/template/TemplateScalarModel;Lfreemarker/core/Expression;Lfreemarker/core/Environment;)Ljava/lang/String;
astore 4
start local 4 16: aload 0
aload 2
aload 4
aload 1
invokevirtual freemarker.core.DynamicKeyName.dealWithStringKey:(Lfreemarker/template/TemplateModel;Ljava/lang/String;Lfreemarker/core/Environment;)Lfreemarker/template/TemplateModel;
areturn
end local 4 17: StackMap locals:
StackMap stack:
aload 3
instanceof freemarker.core.RangeModel
ifeq 19
18: aload 0
aload 2
aload 3
checkcast freemarker.core.RangeModel
aload 1
invokevirtual freemarker.core.DynamicKeyName.dealWithRangeKey:(Lfreemarker/template/TemplateModel;Lfreemarker/core/RangeModel;Lfreemarker/core/Environment;)Lfreemarker/template/TemplateModel;
areturn
19: StackMap locals:
StackMap stack:
new freemarker.core.UnexpectedTypeException
dup
aload 0
getfield freemarker.core.DynamicKeyName.keyExpression:Lfreemarker/core/Expression;
aload 3
ldc "number, range, or string"
20: iconst_3
anewarray java.lang.Class
dup
iconst_0
ldc Lfreemarker/template/TemplateNumberModel;
aastore
dup
iconst_1
ldc Lfreemarker/template/TemplateScalarModel;
aastore
dup
iconst_2
ldc Lfreemarker/core/Range;
aastore
aload 1
21: invokespecial freemarker.core.UnexpectedTypeException.<init>:(Lfreemarker/core/Expression;Lfreemarker/template/TemplateModel;Ljava/lang/String;[Ljava/lang/Class;Lfreemarker/core/Environment;)V
athrow
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 22 0 this Lfreemarker/core/DynamicKeyName;
0 22 1 env Lfreemarker/core/Environment;
1 22 2 targetModel Lfreemarker/template/TemplateModel;
6 22 3 keyModel Lfreemarker/template/TemplateModel;
13 14 4 index I
16 17 4 key Ljava/lang/String;
Exceptions:
throws freemarker.template.TemplateException
MethodParameters:
Name Flags
env
private freemarker.template.TemplateModel dealWithNumericalKey(freemarker.template.TemplateModel, int, freemarker.core.Environment);
descriptor: (Lfreemarker/template/TemplateModel;ILfreemarker/core/Environment;)Lfreemarker/template/TemplateModel;
flags: (0x0002) ACC_PRIVATE
Code:
stack=8, locals=6, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 1
instanceof freemarker.template.TemplateSequenceModel
ifeq 9
1: aload 1
checkcast freemarker.template.TemplateSequenceModel
astore 4
start local 4 2: aload 4
invokeinterface freemarker.template.TemplateSequenceModel.size:()I
istore 5
start local 5 3: goto 6
end local 5 StackMap locals: freemarker.core.DynamicKeyName freemarker.template.TemplateModel int freemarker.core.Environment freemarker.template.TemplateSequenceModel
StackMap stack: java.lang.Exception
4: pop
5: ldc 2147483647
istore 5
start local 5 6: StackMap locals: int
StackMap stack:
iload 2
iload 5
if_icmpge 7
aload 4
iload 2
invokeinterface freemarker.template.TemplateSequenceModel.get:(I)Lfreemarker/template/TemplateModel;
goto 8
StackMap locals:
StackMap stack:
7: aconst_null
StackMap locals:
StackMap stack: freemarker.template.TemplateModel
8: areturn
end local 5 end local 4 9: StackMap locals:
StackMap stack:
aload 0
getfield freemarker.core.DynamicKeyName.target:Lfreemarker/core/Expression;
aload 3
invokevirtual freemarker.core.Expression.evalAndCoerceToPlainText:(Lfreemarker/core/Environment;)Ljava/lang/String;
astore 4
start local 4 10: new freemarker.template.SimpleScalar
dup
aload 4
iload 2
iload 2
iconst_1
iadd
invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
invokespecial freemarker.template.SimpleScalar.<init>:(Ljava/lang/String;)V
11: areturn
12: StackMap locals: freemarker.core.DynamicKeyName freemarker.template.TemplateModel int freemarker.core.Environment java.lang.String
StackMap stack: java.lang.IndexOutOfBoundsException
astore 5
start local 5 13: iload 2
ifge 15
14: new freemarker.core._MiscTemplateException
dup
iconst_2
anewarray java.lang.Object
dup
iconst_0
ldc "Negative index not allowed: "
aastore
dup
iconst_1
iload 2
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
aastore
invokespecial freemarker.core._MiscTemplateException.<init>:([Ljava/lang/Object;)V
athrow
15: StackMap locals: java.lang.IndexOutOfBoundsException
StackMap stack:
iload 2
aload 4
invokevirtual java.lang.String.length:()I
if_icmplt 20
16: new freemarker.core._MiscTemplateException
dup
iconst_5
anewarray java.lang.Object
dup
iconst_0
17: ldc "String index out of range: The index was "
aastore
dup
iconst_1
iload 2
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
aastore
dup
iconst_2
18: ldc " (0-based), but the length of the string is only "
aastore
dup
iconst_3
aload 4
invokevirtual java.lang.String.length:()I
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
aastore
dup
iconst_4
ldc "."
19: aastore
invokespecial freemarker.core._MiscTemplateException.<init>:([Ljava/lang/Object;)V
athrow
20: StackMap locals:
StackMap stack:
new java.lang.RuntimeException
dup
ldc "Can't explain exception"
aload 5
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
athrow
end local 5 end local 4 21: StackMap locals: freemarker.core.DynamicKeyName freemarker.template.TemplateModel int freemarker.core.Environment
StackMap stack: freemarker.core.NonStringException
pop
22: new freemarker.core.UnexpectedTypeException
dup
23: aload 0
getfield freemarker.core.DynamicKeyName.target:Lfreemarker/core/Expression;
aload 1
24: ldc "sequence or string or something automatically convertible to string (number, date or boolean)"
25: getstatic freemarker.core.DynamicKeyName.NUMERICAL_KEY_LHO_EXPECTED_TYPES:[Ljava/lang/Class;
26: aload 1
instanceof freemarker.template.TemplateHashModel
ifeq 29
27: ldc "You had a numberical value inside the []. Currently that's only supported for sequences (lists) and strings. To get a Map item with a non-string key, use myMap?api.get(myKey)."
28: goto 30
29: StackMap locals: freemarker.core.DynamicKeyName freemarker.template.TemplateModel int freemarker.core.Environment
StackMap stack: new 22 new 22 freemarker.core.Expression freemarker.template.TemplateModel java.lang.String java.lang.Class[]
aconst_null
30: StackMap locals: freemarker.core.DynamicKeyName freemarker.template.TemplateModel int freemarker.core.Environment
StackMap stack: new 22 new 22 freemarker.core.Expression freemarker.template.TemplateModel java.lang.String java.lang.Class[] java.lang.String
aload 3
31: invokespecial freemarker.core.UnexpectedTypeException.<init>:(Lfreemarker/core/Expression;Lfreemarker/template/TemplateModel;Ljava/lang/String;[Ljava/lang/Class;Ljava/lang/String;Lfreemarker/core/Environment;)V
athrow
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 32 0 this Lfreemarker/core/DynamicKeyName;
0 32 1 targetModel Lfreemarker/template/TemplateModel;
0 32 2 index I
0 32 3 env Lfreemarker/core/Environment;
2 9 4 tsm Lfreemarker/template/TemplateSequenceModel;
3 4 5 size I
6 9 5 size I
10 21 4 s Ljava/lang/String;
13 21 5 e Ljava/lang/IndexOutOfBoundsException;
Exception table:
from to target type
2 3 4 Class java.lang.Exception
10 11 12 Class java.lang.IndexOutOfBoundsException
9 11 21 Class freemarker.core.NonStringException
12 21 21 Class freemarker.core.NonStringException
Exceptions:
throws freemarker.template.TemplateException
MethodParameters:
Name Flags
targetModel
index
env
private freemarker.template.TemplateModel dealWithStringKey(freemarker.template.TemplateModel, java.lang.String, freemarker.core.Environment);
descriptor: (Lfreemarker/template/TemplateModel;Ljava/lang/String;Lfreemarker/core/Environment;)Lfreemarker/template/TemplateModel;
flags: (0x0002) ACC_PRIVATE
Code:
stack=5, locals=4, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 1
instanceof freemarker.template.TemplateHashModel
ifeq 2
1: aload 1
checkcast freemarker.template.TemplateHashModel
aload 2
invokeinterface freemarker.template.TemplateHashModel.get:(Ljava/lang/String;)Lfreemarker/template/TemplateModel;
areturn
2: StackMap locals:
StackMap stack:
new freemarker.core.NonHashException
dup
aload 0
getfield freemarker.core.DynamicKeyName.target:Lfreemarker/core/Expression;
aload 1
aload 3
invokespecial freemarker.core.NonHashException.<init>:(Lfreemarker/core/Expression;Lfreemarker/template/TemplateModel;Lfreemarker/core/Environment;)V
athrow
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lfreemarker/core/DynamicKeyName;
0 3 1 targetModel Lfreemarker/template/TemplateModel;
0 3 2 key Ljava/lang/String;
0 3 3 env Lfreemarker/core/Environment;
Exceptions:
throws freemarker.template.TemplateException
MethodParameters:
Name Flags
targetModel
key
env
private freemarker.template.TemplateModel dealWithRangeKey(freemarker.template.TemplateModel, freemarker.core.RangeModel, freemarker.core.Environment);
descriptor: (Lfreemarker/template/TemplateModel;Lfreemarker/core/RangeModel;Lfreemarker/core/Environment;)Lfreemarker/template/TemplateModel;
flags: (0x0002) ACC_PRIVATE
Code:
stack=9, locals=16, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 1
instanceof freemarker.template.TemplateSequenceModel
ifeq 4
1: aload 1
checkcast freemarker.template.TemplateSequenceModel
astore 4
start local 4 2: aconst_null
astore 5
start local 5 3: goto 13
end local 5 end local 4 4: StackMap locals:
StackMap stack:
aconst_null
astore 4
start local 4 5: aload 0
getfield freemarker.core.DynamicKeyName.target:Lfreemarker/core/Expression;
aload 3
invokevirtual freemarker.core.Expression.evalAndCoerceToPlainText:(Lfreemarker/core/Environment;)Ljava/lang/String;
astore 5
start local 5 6: goto 13
end local 5 StackMap locals: freemarker.core.DynamicKeyName freemarker.template.TemplateModel freemarker.core.RangeModel freemarker.core.Environment freemarker.template.TemplateSequenceModel
StackMap stack: freemarker.core.NonStringException
7: pop
8: new freemarker.core.UnexpectedTypeException
dup
9: aload 0
getfield freemarker.core.DynamicKeyName.target:Lfreemarker/core/Expression;
aload 0
getfield freemarker.core.DynamicKeyName.target:Lfreemarker/core/Expression;
aload 3
invokevirtual freemarker.core.Expression.eval:(Lfreemarker/core/Environment;)Lfreemarker/template/TemplateModel;
10: ldc "sequence or string or something automatically convertible to string (number, date or boolean)"
11: getstatic freemarker.core.DynamicKeyName.NUMERICAL_KEY_LHO_EXPECTED_TYPES:[Ljava/lang/Class;
aload 3
12: invokespecial freemarker.core.UnexpectedTypeException.<init>:(Lfreemarker/core/Expression;Lfreemarker/template/TemplateModel;Ljava/lang/String;[Ljava/lang/Class;Lfreemarker/core/Environment;)V
athrow
start local 5 13: StackMap locals: java.lang.String
StackMap stack:
aload 2
invokevirtual freemarker.core.RangeModel.size:()I
istore 6
start local 6 14: aload 2
invokevirtual freemarker.core.RangeModel.isRightUnbounded:()Z
istore 7
start local 7 15: aload 2
invokevirtual freemarker.core.RangeModel.isRightAdaptive:()Z
istore 8
start local 8 16: iload 7
ifne 20
iload 6
ifne 20
17: aload 0
aload 4
ifnull 18
iconst_1
goto 19
StackMap locals: freemarker.core.DynamicKeyName freemarker.template.TemplateModel freemarker.core.RangeModel freemarker.core.Environment freemarker.template.TemplateSequenceModel java.lang.String int int int
StackMap stack: freemarker.core.DynamicKeyName
18: iconst_0
StackMap locals: freemarker.core.DynamicKeyName freemarker.template.TemplateModel freemarker.core.RangeModel freemarker.core.Environment freemarker.template.TemplateSequenceModel java.lang.String int int int
StackMap stack: freemarker.core.DynamicKeyName int
19: invokevirtual freemarker.core.DynamicKeyName.emptyResult:(Z)Lfreemarker/template/TemplateModel;
areturn
20: StackMap locals:
StackMap stack:
aload 2
invokevirtual freemarker.core.RangeModel.getBegining:()I
istore 9
start local 9 21: iload 9
ifge 26
22: new freemarker.core._MiscTemplateException
dup
aload 0
getfield freemarker.core.DynamicKeyName.keyExpression:Lfreemarker/core/Expression;
iconst_3
anewarray java.lang.Object
dup
iconst_0
23: ldc "Negative range start index ("
aastore
dup
iconst_1
iload 9
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
aastore
dup
iconst_2
24: ldc ") isn't allowed for a range used for slicing."
25: aastore
invokespecial freemarker.core._MiscTemplateException.<init>:(Lfreemarker/core/Expression;[Ljava/lang/Object;)V
athrow
26: StackMap locals: int
StackMap stack:
aload 5
ifnull 27
aload 5
invokevirtual java.lang.String.length:()I
goto 28
StackMap locals:
StackMap stack:
27: aload 4
invokeinterface freemarker.template.TemplateSequenceModel.size:()I
StackMap locals:
StackMap stack: int
28: istore 10
start local 10 29: aload 2
invokevirtual freemarker.core.RangeModel.getStep:()I
istore 11
start local 11 30: iload 8
ifeq 31
iload 11
iconst_1
if_icmpne 31
iload 9
iload 10
if_icmple 42
goto 32
StackMap locals: int int
StackMap stack:
31: iload 9
iload 10
if_icmplt 42
32: StackMap locals:
StackMap stack:
new freemarker.core._MiscTemplateException
dup
aload 0
getfield freemarker.core.DynamicKeyName.keyExpression:Lfreemarker/core/Expression;
bipush 10
anewarray java.lang.Object
dup
iconst_0
33: ldc "Range start index "
aastore
dup
iconst_1
iload 9
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
aastore
dup
iconst_2
ldc " is out of bounds, because the sliced "
aastore
dup
iconst_3
34: aload 5
ifnull 35
ldc "string"
goto 36
StackMap locals: freemarker.core.DynamicKeyName freemarker.template.TemplateModel freemarker.core.RangeModel freemarker.core.Environment freemarker.template.TemplateSequenceModel java.lang.String int int int int int int
StackMap stack: new 32 new 32 freemarker.core.Expression java.lang.Object[] java.lang.Object[] int
35: ldc "sequence"
StackMap locals: freemarker.core.DynamicKeyName freemarker.template.TemplateModel freemarker.core.RangeModel freemarker.core.Environment freemarker.template.TemplateSequenceModel java.lang.String int int int int int int
StackMap stack: new 32 new 32 freemarker.core.Expression java.lang.Object[] java.lang.Object[] int java.lang.String
36: aastore
dup
iconst_4
37: ldc " has only "
aastore
dup
iconst_5
iload 10
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
aastore
dup
bipush 6
ldc " "
aastore
dup
bipush 7
aload 5
ifnull 38
ldc "character(s)"
goto 39
StackMap locals: freemarker.core.DynamicKeyName freemarker.template.TemplateModel freemarker.core.RangeModel freemarker.core.Environment freemarker.template.TemplateSequenceModel java.lang.String int int int int int int
StackMap stack: new 32 new 32 freemarker.core.Expression java.lang.Object[] java.lang.Object[] int
38: ldc "element(s)"
StackMap locals: freemarker.core.DynamicKeyName freemarker.template.TemplateModel freemarker.core.RangeModel freemarker.core.Environment freemarker.template.TemplateSequenceModel java.lang.String int int int int int int
StackMap stack: new 32 new 32 freemarker.core.Expression java.lang.Object[] java.lang.Object[] int java.lang.String
39: aastore
dup
bipush 8
40: ldc ". "
aastore
dup
bipush 9
ldc "(Note that indices are 0-based)."
41: aastore
invokespecial freemarker.core._MiscTemplateException.<init>:(Lfreemarker/core/Expression;[Ljava/lang/Object;)V
athrow
42: StackMap locals:
StackMap stack:
iload 7
ifne 68
43: iload 9
iload 6
iconst_1
isub
iload 11
imul
iadd
istore 13
start local 13 44: iload 13
ifge 52
45: iload 8
ifne 50
46: new freemarker.core._MiscTemplateException
dup
aload 0
getfield freemarker.core.DynamicKeyName.keyExpression:Lfreemarker/core/Expression;
iconst_3
anewarray java.lang.Object
dup
iconst_0
47: ldc "Negative range end index ("
aastore
dup
iconst_1
iload 13
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
aastore
dup
iconst_2
48: ldc ") isn't allowed for a range used for slicing."
49: aastore
invokespecial freemarker.core._MiscTemplateException.<init>:(Lfreemarker/core/Expression;[Ljava/lang/Object;)V
athrow
50: StackMap locals: freemarker.core.DynamicKeyName freemarker.template.TemplateModel freemarker.core.RangeModel freemarker.core.Environment freemarker.template.TemplateSequenceModel java.lang.String int int int int int int top int
StackMap stack:
iload 9
iconst_1
iadd
istore 12
start local 12 51: goto 69
end local 12 StackMap locals:
StackMap stack:
52: iload 13
iload 10
if_icmplt 66
53: iload 8
ifne 64
54: new freemarker.core._MiscTemplateException
dup
aload 0
getfield freemarker.core.DynamicKeyName.keyExpression:Lfreemarker/core/Expression;
bipush 9
anewarray java.lang.Object
dup
iconst_0
55: ldc "Range end index "
aastore
dup
iconst_1
iload 13
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
aastore
dup
iconst_2
ldc " is out of bounds, because the sliced "
aastore
dup
iconst_3
56: aload 5
ifnull 57
ldc "string"
goto 58
StackMap locals: freemarker.core.DynamicKeyName freemarker.template.TemplateModel freemarker.core.RangeModel freemarker.core.Environment freemarker.template.TemplateSequenceModel java.lang.String int int int int int int top int
StackMap stack: new 54 new 54 freemarker.core.Expression java.lang.Object[] java.lang.Object[] int
57: ldc "sequence"
StackMap locals: freemarker.core.DynamicKeyName freemarker.template.TemplateModel freemarker.core.RangeModel freemarker.core.Environment freemarker.template.TemplateSequenceModel java.lang.String int int int int int int top int
StackMap stack: new 54 new 54 freemarker.core.Expression java.lang.Object[] java.lang.Object[] int java.lang.String
58: aastore
dup
iconst_4
59: ldc " has only "
aastore
dup
iconst_5
iload 10
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
aastore
dup
bipush 6
ldc " "
aastore
dup
bipush 7
aload 5
ifnull 60
ldc "character(s)"
goto 61
StackMap locals: freemarker.core.DynamicKeyName freemarker.template.TemplateModel freemarker.core.RangeModel freemarker.core.Environment freemarker.template.TemplateSequenceModel java.lang.String int int int int int int top int
StackMap stack: new 54 new 54 freemarker.core.Expression java.lang.Object[] java.lang.Object[] int
60: ldc "element(s)"
StackMap locals: freemarker.core.DynamicKeyName freemarker.template.TemplateModel freemarker.core.RangeModel freemarker.core.Environment freemarker.template.TemplateSequenceModel java.lang.String int int int int int int top int
StackMap stack: new 54 new 54 freemarker.core.Expression java.lang.Object[] java.lang.Object[] int java.lang.String
61: aastore
dup
bipush 8
62: ldc ". (Note that indices are 0-based)."
63: aastore
invokespecial freemarker.core._MiscTemplateException.<init>:(Lfreemarker/core/Expression;[Ljava/lang/Object;)V
athrow
64: StackMap locals:
StackMap stack:
iload 10
iload 9
isub
invokestatic java.lang.Math.abs:(I)I
istore 12
start local 12 65: goto 69
end local 12 66: StackMap locals:
StackMap stack:
iload 6
istore 12
end local 13 start local 12 67: goto 69
end local 12 68: StackMap locals: freemarker.core.DynamicKeyName freemarker.template.TemplateModel freemarker.core.RangeModel freemarker.core.Environment freemarker.template.TemplateSequenceModel java.lang.String int int int int int int
StackMap stack:
iload 10
iload 9
isub
istore 12
start local 12 69: StackMap locals: int
StackMap stack:
iload 12
ifne 73
70: aload 0
aload 4
ifnull 71
iconst_1
goto 72
StackMap locals:
StackMap stack: freemarker.core.DynamicKeyName
71: iconst_0
StackMap locals: freemarker.core.DynamicKeyName freemarker.template.TemplateModel freemarker.core.RangeModel freemarker.core.Environment freemarker.template.TemplateSequenceModel java.lang.String int int int int int int int
StackMap stack: freemarker.core.DynamicKeyName int
72: invokevirtual freemarker.core.DynamicKeyName.emptyResult:(Z)Lfreemarker/template/TemplateModel;
areturn
73: StackMap locals:
StackMap stack:
aload 4
ifnull 83
74: new java.util.ArrayList
dup
iload 12
invokespecial java.util.ArrayList.<init>:(I)V
astore 13
start local 13 75: iload 9
istore 14
start local 14 76: iconst_0
istore 15
start local 15 77: goto 81
78: StackMap locals: java.util.ArrayList int int
StackMap stack:
aload 13
aload 4
iload 14
invokeinterface freemarker.template.TemplateSequenceModel.get:(I)Lfreemarker/template/TemplateModel;
invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
pop
79: iload 14
iload 11
iadd
istore 14
80: iinc 15 1
StackMap locals:
StackMap stack:
81: iload 15
iload 12
if_icmplt 78
end local 15 82: new freemarker.template.SimpleSequence
dup
aload 13
aconst_null
invokespecial freemarker.template.SimpleSequence.<init>:(Ljava/util/Collection;Lfreemarker/template/ObjectWrapper;)V
areturn
end local 14 end local 13 83: StackMap locals:
StackMap stack:
iload 11
ifge 92
iload 12
iconst_1
if_icmple 92
84: aload 2
invokevirtual freemarker.core.RangeModel.isAffactedByStringSlicingBug:()Z
ifeq 85
iload 12
iconst_2
if_icmpeq 90
85: StackMap locals:
StackMap stack:
new freemarker.core._MiscTemplateException
dup
aload 0
getfield freemarker.core.DynamicKeyName.keyExpression:Lfreemarker/core/Expression;
iconst_4
anewarray java.lang.Object
dup
iconst_0
86: ldc "Decreasing ranges aren't allowed for slicing strings (as it would give reversed text). The index range was: first = "
aastore
dup
iconst_1
87: iload 9
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
aastore
dup
iconst_2
88: ldc ", last = "
aastore
dup
iconst_3
iload 9
iload 12
iconst_1
isub
iload 11
imul
iadd
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
89: aastore
invokespecial freemarker.core._MiscTemplateException.<init>:(Lfreemarker/core/Expression;[Ljava/lang/Object;)V
athrow
90: StackMap locals:
StackMap stack:
iload 9
istore 13
start local 13 91: goto 93
end local 13 92: StackMap locals:
StackMap stack:
iload 9
iload 12
iadd
istore 13
start local 13 93: StackMap locals: int
StackMap stack:
new freemarker.template.SimpleScalar
dup
aload 5
iload 9
iload 13
invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
invokespecial freemarker.template.SimpleScalar.<init>:(Ljava/lang/String;)V
areturn
end local 13 end local 12 end local 11 end local 10 end local 9 end local 8 end local 7 end local 6 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 94 0 this Lfreemarker/core/DynamicKeyName;
0 94 1 targetModel Lfreemarker/template/TemplateModel;
0 94 2 range Lfreemarker/core/RangeModel;
0 94 3 env Lfreemarker/core/Environment;
2 4 4 targetSeq Lfreemarker/template/TemplateSequenceModel;
5 94 4 targetSeq Lfreemarker/template/TemplateSequenceModel;
3 4 5 targetStr Ljava/lang/String;
6 7 5 targetStr Ljava/lang/String;
13 94 5 targetStr Ljava/lang/String;
14 94 6 size I
15 94 7 rightUnbounded Z
16 94 8 rightAdaptive Z
21 94 9 firstIdx I
29 94 10 targetSize I
30 94 11 step I
51 52 12 resultSize I
65 66 12 resultSize I
67 68 12 resultSize I
69 94 12 resultSize I
44 67 13 lastIdx I
75 83 13 list Ljava/util/ArrayList;
76 83 14 srcIdx I
77 82 15 i I
91 92 13 exclEndIdx I
93 94 13 exclEndIdx I
Exception table:
from to target type
5 6 7 Class freemarker.core.NonStringException
Exceptions:
throws freemarker.core.UnexpectedTypeException, freemarker.core.InvalidReferenceException, freemarker.template.TemplateException
MethodParameters:
Name Flags
targetModel
range
env
private freemarker.template.TemplateModel emptyResult(boolean);
descriptor: (Z)Lfreemarker/template/TemplateModel;
flags: (0x0002) ACC_PRIVATE
Code:
stack=4, locals=2, args_size=2
start local 0 start local 1 0: iload 1
ifeq 4
1: aload 0
invokestatic freemarker.template._TemplateAPI.getTemplateLanguageVersionAsInt:(Lfreemarker/core/TemplateObject;)I
getstatic freemarker.template._TemplateAPI.VERSION_INT_2_3_21:I
if_icmpge 3
2: new freemarker.template.SimpleSequence
dup
getstatic java.util.Collections.EMPTY_LIST:Ljava/util/List;
aconst_null
invokespecial freemarker.template.SimpleSequence.<init>:(Ljava/util/Collection;Lfreemarker/template/ObjectWrapper;)V
goto 5
3: StackMap locals:
StackMap stack:
getstatic freemarker.template.utility.Constants.EMPTY_SEQUENCE:Lfreemarker/template/TemplateSequenceModel;
goto 5
4: StackMap locals:
StackMap stack:
getstatic freemarker.template.TemplateScalarModel.EMPTY_STRING:Lfreemarker/template/TemplateModel;
5: StackMap locals:
StackMap stack: freemarker.template.TemplateModel
areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 6 0 this Lfreemarker/core/DynamicKeyName;
0 6 1 seq Z
MethodParameters:
Name Flags
seq
public java.lang.String getCanonicalForm();
descriptor: ()Ljava/lang/String;
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=1, args_size=1
start local 0 0: new java.lang.StringBuilder
dup
aload 0
getfield freemarker.core.DynamicKeyName.target:Lfreemarker/core/Expression;
invokevirtual freemarker.core.Expression.getCanonicalForm:()Ljava/lang/String;
invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
1: ldc "["
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
2: aload 0
getfield freemarker.core.DynamicKeyName.keyExpression:Lfreemarker/core/Expression;
invokevirtual freemarker.core.Expression.getCanonicalForm:()Ljava/lang/String;
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
3: ldc "]"
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
4: invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Lfreemarker/core/DynamicKeyName;
java.lang.String getNodeTypeSymbol();
descriptor: ()Ljava/lang/String;
flags: (0x0000)
Code:
stack=1, locals=1, args_size=1
start local 0 0: ldc "...[...]"
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lfreemarker/core/DynamicKeyName;
boolean isLiteral();
descriptor: ()Z
flags: (0x0000)
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield freemarker.core.DynamicKeyName.constantValue:Lfreemarker/template/TemplateModel;
ifnonnull 2
aload 0
getfield freemarker.core.DynamicKeyName.target:Lfreemarker/core/Expression;
invokevirtual freemarker.core.Expression.isLiteral:()Z
ifeq 1
aload 0
getfield freemarker.core.DynamicKeyName.keyExpression:Lfreemarker/core/Expression;
invokevirtual freemarker.core.Expression.isLiteral:()Z
ifne 2
StackMap locals:
StackMap stack:
1: iconst_0
ireturn
StackMap locals:
StackMap stack:
2: iconst_1
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lfreemarker/core/DynamicKeyName;
int getParameterCount();
descriptor: ()I
flags: (0x0000)
Code:
stack=1, locals=1, args_size=1
start local 0 0: iconst_2
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lfreemarker/core/DynamicKeyName;
java.lang.Object getParameterValue(int);
descriptor: (I)Ljava/lang/Object;
flags: (0x0000)
Code:
stack=1, locals=2, args_size=2
start local 0 start local 1 0: iload 1
ifne 1
aload 0
getfield freemarker.core.DynamicKeyName.target:Lfreemarker/core/Expression;
goto 2
StackMap locals:
StackMap stack:
1: aload 0
getfield freemarker.core.DynamicKeyName.keyExpression:Lfreemarker/core/Expression;
StackMap locals:
StackMap stack: freemarker.core.Expression
2: areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lfreemarker/core/DynamicKeyName;
0 3 1 idx I
MethodParameters:
Name Flags
idx
freemarker.core.ParameterRole getParameterRole(int);
descriptor: (I)Lfreemarker/core/ParameterRole;
flags: (0x0000)
Code:
stack=1, locals=2, args_size=2
start local 0 start local 1 0: iload 1
ifne 1
getstatic freemarker.core.ParameterRole.LEFT_HAND_OPERAND:Lfreemarker/core/ParameterRole;
goto 2
StackMap locals:
StackMap stack:
1: getstatic freemarker.core.ParameterRole.ENCLOSED_OPERAND:Lfreemarker/core/ParameterRole;
StackMap locals:
StackMap stack: freemarker.core.ParameterRole
2: areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lfreemarker/core/DynamicKeyName;
0 3 1 idx I
MethodParameters:
Name Flags
idx
protected freemarker.core.Expression deepCloneWithIdentifierReplaced_inner(java.lang.String, freemarker.core.Expression, freemarker.core.Expression$ReplacemenetState);
descriptor: (Ljava/lang/String;Lfreemarker/core/Expression;Lfreemarker/core/Expression$ReplacemenetState;)Lfreemarker/core/Expression;
flags: (0x0004) ACC_PROTECTED
Code:
stack=7, locals=4, args_size=4
start local 0 start local 1 start local 2 start local 3 0: new freemarker.core.DynamicKeyName
dup
1: aload 0
getfield freemarker.core.DynamicKeyName.target:Lfreemarker/core/Expression;
aload 1
aload 2
aload 3
invokevirtual freemarker.core.Expression.deepCloneWithIdentifierReplaced:(Ljava/lang/String;Lfreemarker/core/Expression;Lfreemarker/core/Expression$ReplacemenetState;)Lfreemarker/core/Expression;
2: aload 0
getfield freemarker.core.DynamicKeyName.keyExpression:Lfreemarker/core/Expression;
aload 1
aload 2
aload 3
invokevirtual freemarker.core.Expression.deepCloneWithIdentifierReplaced:(Ljava/lang/String;Lfreemarker/core/Expression;Lfreemarker/core/Expression$ReplacemenetState;)Lfreemarker/core/Expression;
3: invokespecial freemarker.core.DynamicKeyName.<init>:(Lfreemarker/core/Expression;Lfreemarker/core/Expression;)V
areturn
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Lfreemarker/core/DynamicKeyName;
0 4 1 replacedIdentifier Ljava/lang/String;
0 4 2 replacement Lfreemarker/core/Expression;
0 4 3 replacementState Lfreemarker/core/Expression$ReplacemenetState;
MethodParameters:
Name Flags
replacedIdentifier
replacement
replacementState
}
SourceFile: "DynamicKeyName.java"
InnerClasses:
ReplacemenetState = freemarker.core.Expression$ReplacemenetState of freemarker.core.Expression