title: How to use the Frame in ASM(bytecode tool of Java)? What's meaning of every parameter of visitFrame/FrameNode?
body: <p>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:</p>
  
  <pre><code>    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);
          }
      }
  </code></pre>
  
  <p>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?</p>
  
  <p>Thanks a lot.</p>