Var vret = (Var)newContext.getVar("$$ra$$") ;
Mark the_end = new Mark() ;
Mark start_pc = new Mark() ;
Mark end_pc = new Mark() ;
Mark handler = new Mark() ;
l.add(new Nop(start_pc)) ;
createTryCatch(newContext, statements, catchBlocks,l) ;
l.add(new Nop(end_pc)) ;
l.add(new JumpSub(finallyMark)) ;
l.add(new Goto(the_end)) ;
{
l.add(new ExceptionHandler(start_pc,end_pc,handler,TypeName.THROWABLE)) ;
l.add(new Nop(handler)) ;
l.add(new Store(ex)) ;
l.add(new JumpSub(finallyMark)) ;
l.add(new Load(ex)) ;
l.add(new Throw()) ;
}
l.add(new Nop(finallyMark)) ;
l.add(new Store(vret)) ;
for(Statement s: finallyStatements) {
newContext.compile(s,l) ;
}
l.add(new ReturnVar(vret.index)) ;
l.add(new Nop(the_end)) ;
}