2

Jasmin assembler을 사용하여 자바 서브 세트를 Java 바이트 코드로 컴파일하는 컴파일러를 작성 중입니다.Jasmin Assembler : 메소드 호출에 관한 문서

메서드 호출시 매개 변수를 전달하는 방법을 정확하게 설명하는 문서가 있으면 방황합니다. official documentation에는 이러한 작업이 수행되는 방법에 대한 몇 가지 예만 나와 있습니다.

invokevirtual mypackage/MyClass/foo(Ljava/lang/Object;[I)I 

그러나이 구문에 대한 적절한 정의가 없습니다.

내가 알고 자하는 것은 전달할 매개 변수의 유형을 지정하는 데 사용해야하는 다른 문자입니다. 예를 들어 공식 문서에서 '나는'int에 사용되는 것을 보았습니다. 추측을 통해 'C'로 char 유형을 지정하고 'F'로 부동으로 지정할 수 있습니다. 나는 'L'이 갈망에 사용될 수 있다고 가정하지만, 나에게이 오류 제공 :

Exception in thread "main" java.lang.ClassFormatError: Method "println" in class Test3 has illeagal signature "L(V)" 

그것은 복식에 같은 수를하지만, 나는 완전히 아직 구현하지 않았습니다.

이 특정 문제 외에도 일반적으로 메서드 호출을위한 기발한 특수 구문이 있기 때문에 일반적으로 유용 할 것이므로 추측을 통해이를 찾을 필요가 없습니다. 당신은 JVM 사양을 보면

+2

[JVM 형 서명 (http://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/types.html# wp276) –

+0

대단히 고마워요! –

답변

4

당신은 방법의 서명을 작성하는 방법을 작동 할 수 있어야하지만 JVM type signatures

이 링크는

와 예를 보여줍니다 데이브 뉴턴에 의해 제공되는 링크를 사용하여 쉽게
long f (int n, String s, int[] arr){} 

서명을 가질 것이다

(ILjava/lang/String;[I)J 
관련 문제