다음과 같이 로컬 메소드 pow()를 호출하려고합니다.Jasmin이 VerifyError에서 로컬 메소드 결과를 호출합니다.
내 수업은 다음과 같습니다.
.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
은 내가 잘못 여기서 뭐하는 거지?
편집 : 내 전체 코드는 아래에 있습니다.
이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
왜 전체 코드를 게시하지 않았습니까? 나는 당신이 생략 한 부분에 오류가 있다고 생각합니다. – wvdz
그게 문제라고 생각하지는 않았지만 그것을 원래 게시물 아래에 붙여 넣었습니다. – appel