私は ASM 4.1 を使用してコンパイラーを作成するのに忙しいです。中間言語を Java バイトコードにコンパイルする必要があります。ASM 4.1 API には、「実際、これらのノードは (*) GOTO や THROW などの無条件分岐命令に続く命令ノード i の直前に挿入する必要があります。これはジャンプ命令のターゲットです。例外ハンドラ ブロック. "しかし、ASM ガイド (「ASM 4.0 A Java バイトコード エンジニアリング ライブラリ」) でフレームの使用法を見つけることができません。フレームの使用法を知っているのは誰ですか? visitFrame/FrameNode のすべてのパラメータの意味は何ですか? ASMifier を使用すると、ある時点で「visitFrame(Opcodes.F_APPEND,...)」を取得し、別の時点で「visitFrame(Opcodes.F_SAME,...)」を取得するのはなぜですか? 理解できません!!たとえば、以下のようなコード:
int a = 2;
int b = 3;
if(a == 3){
System.out.println("hello");
}else{
System.out.println(a);
if(b == 23){
System.out.println("world");
}else{
System.out.println(b);
}
}
ASMifier を使用すると、結果を取得できます (申し訳ありませんが、評判が悪いため画像を添付できません)、次のような命令があります:"visitFrame(Opcodes.F_APPEND,2, new Object[]{Opcodes.INTEGER , Opcodes.INTEGER}, 0, null)" . パラメータの意味を教えてください。
どうもありがとう。