public void visitBreak(JCBreak tree) { Env<GenContext> targetEnv = unwind(tree.target, env); assert code.state.stacksize == 0; targetEnv.info.addExit(code.branch(goto_)); endFinalizerGaps(env, targetEnv); }
public void visitBreak(JCBreak tree) { Env<GenContext> targetEnv = unwind(tree.target, env); assert code.state.stacksize == 0; targetEnv.info.addExit(code.branch(goto_)); endFinalizerGaps(env, targetEnv); }
public void visitContinue(JCContinue tree) { Env<GenContext> targetEnv = unwind(tree.target, env); assert code.state.stacksize == 0; targetEnv.info.addCont(code.branch(goto_)); endFinalizerGaps(env, targetEnv); }
public void visitContinue(JCContinue tree) { Env<GenContext> targetEnv = unwind(tree.target, env); assert code.state.stacksize == 0; targetEnv.info.addCont(code.branch(goto_)); endFinalizerGaps(env, targetEnv); }
public void visitBreak(JCBreak tree) { Env<GenContext> targetEnv = unwind(tree.target, env); Assert.check(code.state.stacksize == 0); targetEnv.info.addExit(code.branch(goto_)); endFinalizerGaps(env, targetEnv); }
public void visitContinue(JCContinue tree) { Env<GenContext> targetEnv = unwind(tree.target, env); Assert.check(code.state.stacksize == 0); targetEnv.info.addCont(code.branch(goto_)); endFinalizerGaps(env, targetEnv); }
public void visitBreak(JCBreak tree) { Env<GenContext> targetEnv = unwind(tree.target, env); Assert.check(code.state.stacksize == 0); targetEnv.info.addExit(code.branch(goto_)); endFinalizerGaps(env, targetEnv); }
public void visitContinue(JCContinue tree) { Env<GenContext> targetEnv = unwind(tree.target, env); Assert.check(code.state.stacksize == 0); targetEnv.info.addCont(code.branch(goto_)); endFinalizerGaps(env, targetEnv); }
public void visitReturn(JCReturn tree) { int limit = code.nextreg; final Env<GenContext> targetEnv; if (tree.expr != null) { Item r = genExpr(tree.expr, pt).load(); if (hasFinally(env.enclMethod, env)) { r = makeTemp(pt); r.store(); } targetEnv = unwind(env.enclMethod, env); r.load(); code.emitop0(ireturn + Code.truncate(Code.typecode(pt))); } else { targetEnv = unwind(env.enclMethod, env); code.emitop0(return_); } endFinalizerGaps(env, targetEnv); code.endScopes(limit); }
public void visitReturn(JCReturn tree) { int limit = code.nextreg; final Env<GenContext> targetEnv; if (tree.expr != null) { Item r = genExpr(tree.expr, pt).load(); if (hasFinally(env.enclMethod, env)) { r = makeTemp(pt); r.store(); } targetEnv = unwind(env.enclMethod, env); r.load(); code.emitop0(ireturn + Code.truncate(Code.typecode(pt))); } else { targetEnv = unwind(env.enclMethod, env); code.emitop0(return_); } endFinalizerGaps(env, targetEnv); code.endScopes(limit); }
public void visitReturn(JCReturn tree) { int limit = code.nextreg; final Env<GenContext> targetEnv; /* Save and then restore the location of the return in case a finally * is expanded (with unwind()) in the middle of our bytecodes. */ int tmpPos = code.pendingStatPos; if (tree.expr != null) { Item r = genExpr(tree.expr, pt).load(); if (hasFinally(env.enclMethod, env)) { r = makeTemp(pt); r.store(); } targetEnv = unwind(env.enclMethod, env); code.pendingStatPos = tmpPos; r.load(); code.emitop0(ireturn + Code.truncate(Code.typecode(pt))); } else { targetEnv = unwind(env.enclMethod, env); code.pendingStatPos = tmpPos; code.emitop0(return_); } endFinalizerGaps(env, targetEnv); code.endScopes(limit); }
public void visitReturn(JCReturn tree) { int limit = code.nextreg; final Env<GenContext> targetEnv; if (tree.expr != null) { Item r = genExpr(tree.expr, pt).load(); if (hasFinally(env.enclMethod, env)) { r = makeTemp(pt); r.store(); } targetEnv = unwind(env.enclMethod, env); r.load(); code.emitop0(ireturn + Code.truncate(Code.typecode(pt))); } else { /* If we have a statement like: * * return; * * we need to store the code.pendingStatPos value before generating * the finalizer. */ int tmpPos = code.pendingStatPos; targetEnv = unwind(env.enclMethod, env); code.pendingStatPos = tmpPos; code.emitop0(return_); } endFinalizerGaps(env, targetEnv); code.endScopes(limit); }