次のように、ローカル メソッド pow() を呼び出そうとしています。
私のクラスはこんな感じです。
.class public helloworld
.super java/lang/Object
.method public pow(II)I
...
.end method
.method public foo()V
...
ldc 1
ldc 2
invokevirtual helloworld/pow(II)I
return
.end method
ただし、これにより次のエラーが発生します。
java.lang.VerifyError: (class: helloworld, method: foo signature: ()V) Unable to pop operand off an empty stack
ここで何が間違っていますか?
編集:私の完全なコードは以下のとおりです。pow() は、最初の値を 2 番目の値で累乗するメソッドであることに注意してください。
val pow (val v, val pow) {
val result = v;
for (val i = 1; i < pow; i++ ) {
result = result * v;
}
return result;
}
完全なクラス:
.class public helloworld
.super java/lang/Object
.method public <init>()V
aload_0
invokenonvirtual java/lang/Object/<init>()V
return
.end method
.method public pow(II)I
.limit stack 9
.limit locals 5
iload 1
istore 3
ldc 1
istore 4
label16:
iload 4
iload 2
if_icmplt label22
iconst_0
goto label24
label22:
iconst_1
label24:
ifeq label36
goto label30
label27:
iinc 4 1
goto label16
label30:
iload 3
iload 1
imul
istore 3
goto label27
label36:
ireturn
.end method
.method public foo()V
.limit stack 3
.limit locals 3
ldc 1
ldc 2
invokevirtual helloworld/pow(II)I
return
.end method
.method public static main([Ljava/lang/String;)V
.limit stack 3
.limit locals 2
return
.end method