Помещение массива в качестве аргумента функции в байт-коде java - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь передать массив в функцию, используя байт-код Jasmin. Он генерирует правильный класс, но выдает ошибку, когда я пытаюсь его запустить:

java .lang.VerifyError: (класс: test4, метод: основная сигнатура: ([Ljava / lang / String;) V) Регистр 1 содержит неправильный тип

В чем здесь проблема? Заранее благодарю за помощь!

Мой байт-код:

.class public input_code
.super java/lang/Object

.method private static func([Ljava/lang/String;)V
.limit stack 99
.limit locals 99

return
.end method

.method public static main([Ljava/lang/String;)V
.limit stack 99
.limit locals 99

ldc 10
anewarray java/lang/String
astore 1
aload 1
ldc 9
ldc "t"
aastore
iload 1
invokestatic input_code/func([Ljava/lang/String;)V
return
.end method

java класс:

public class input_code {
    private static void func(String[] var0) {
    }

    public static void main(String[] var0) {
        String[] var1 = new String[10];
        var1[9] = "t";
        func(var1);
    }
}

1 Ответ

0 голосов
/ 12 апреля 2020

Мой плохой здесь. У меня была ошибка в моем генераторе кода (в visitExpIdentifier) ​​

ldc "t"
aastore
iload 1 << should be aload
...