private void addFinally(ArrayList returnList,Stmnt finallyBlock) throws CompileError {
  Bytecode bc=bytecode;
  int n=returnList.size();
  for (int i=0; i < n; ++i) {
    final int[] ret=(int[])returnList.get(i);
    int pc=ret[0];
    bc.write16bit(pc,bc.currentPc() - pc + 1);
    ReturnHook hook=new JsrHook2(this,ret);
    finallyBlock.accept(this);
    hook.remove(this);
    if (!hasReturned) {
      bc.addOpcode(Opcode.GOTO);
      bc.addIndex(pc + 3 - bc.currentPc());
    }
  }
}

private void addFinally ( ArrayList returnList , Stmnt finallyBlock ) throws CompileError { Bytecode bc = bytecode ; int n = returnList . size ( ) ; for ( int i = 0 ; i < n ; ++ i ) { final int [ ] ret = ( int [ ] ) returnList . get ( i ) ; int pc = ret [ 0 ] ; bc . write16bit ( pc , bc . currentPc ( ) - pc + 1 ) ; ReturnHook hook = new JsrHook2 ( this , ret ) ; finallyBlock . accept ( this ) ; hook . remove ( this ) ; if ( ! hasReturned ) { bc . addOpcode ( Opcode . GOTO ) ; bc . addIndex ( pc + 3 - bc . currentPc ( ) ) ; } } }
adds a finally clause for earch return statement .
