РЕДАКТИРОВАТЬ: Решение заключается в том, что я использовал aastore, когда я должен был использовать iastore, потому что я хотел сохранить элемент в массиве ints , тогда как aastore предназначен только для массивов Объекты .
У меня есть следующий метод, который я генерирую как конструктор в байт-коде
aload_0
invokespecial java/lang/Object/<init>()V
aload_0
new java/lang/StringBuilder
dup
invokespecial java/lang/StringBuilder/<init>()V
putfield com/js/interpreter/custom_types/1e9ebd0/s Ljava/lang/StringBuilder;
aload_0
iconst_0
putfield com/js/interpreter/custom_types/1e9ebd0/l I
aload_0
iconst_0
multianewarray [I 1
astore_1
iconst_0
istore_2
goto 23
18:aload_1
iload_2
iconst_0
aastore
iinc 2 1
23:iload_2
iconst_0
if_icmplt 18
aload_1
putfield com/js/interpreter/custom_types/1e9ebd0/a [I
return
Однако, это не в состоянии проверить, давая метод: signature: () V) Ожидается найти объект / массив в стеке
Тем не менее, я могу пройти и точно знать количество предметов в стеке:
aload_0
1
invokespecial java/lang/Object/<init>()V
0
aload_0
1
new java/lang/StringBuilder
2
dup
3
invokespecial java/lang/StringBuilder/<init>()V
2
putfield com/js/interpreter/custom_types/1e9ebd0/s Ljava/lang/StringBuilder;
0
aload_0
1
iconst_0
2
putfield com/js/interpreter/custom_types/1e9ebd0/l I
0
aload_0
1
iconst_0
2
multianewarray [I 1
2
astore_1
1
iconst_0
2
istore_2
1
goto 23
18:aload_1
2
iload_2
3
iconst_0
4
aastore
1
iinc 2 1
1
23:iload_2
2
iconst_0
3
if_icmplt 18
1
aload_1
2
putfield com/js/interpreter/custom_types/1e9ebd0/a [I
0
return
Когда я запускаю его через верификатор правосудия, он не дает мне никаких полезных сообщений (и даже не может проверить классы, сгенерированные javac).
Что здесь может происходить? В чем проблема?