I'm busy writing a compiler by using ASM 4.1. I need to compile a intermediate language into java bytecode. I find that ASM 4.1 API says," In fact these nodes must(*) be inserted just before any instruction node i that follows an unconditionnal branch instruction such as GOTO or THROW, that is the target of a jump instruction, or that starts an exception handler block. " However, I can't find the usage of the Frame in the ASM guide("ASM 4.0 A Java bytecode engineering library"). Who knows the usage of the Frame? What's the meaning of every parameter of visitFrame/FrameNode? Why do I get a "visitFrame(Opcodes.F_APPEND,...)" at some time and get a "visitFrame(Opcodes.F_SAME,...)“ at other time by using ASMifier? I can't understand!! For example, the code like below:
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);
}
}
by using ASMifier, I can get the result(Sorry, I can't attach a picture for not enghou reputation), and there is a instruction like this:"visitFrame(Opcodes.F_APPEND,2, new Object[]{Opcodes.INTEGER, Opcodes.INTEGER}, 0, null)" . Could you tell me the meaning of the parameters?
Thanks a lot.