1192 JCExpression cond, |
1192 JCExpression cond, |
1193 List<JCExpressionStatement> step, |
1193 List<JCExpressionStatement> step, |
1194 boolean testFirst) { |
1194 boolean testFirst) { |
1195 Env<GenContext> loopEnv = env.dup(loop, new GenContext()); |
1195 Env<GenContext> loopEnv = env.dup(loop, new GenContext()); |
1196 int startpc = code.entryPoint(); |
1196 int startpc = code.entryPoint(); |
1197 if (testFirst) { |
1197 if (testFirst) { //while or for loop |
1198 CondItem c; |
1198 CondItem c; |
1199 if (cond != null) { |
1199 if (cond != null) { |
1200 code.statBegin(cond.pos); |
1200 code.statBegin(cond.pos); |
1201 c = genCond(TreeInfo.skipParens(cond), CRT_FLOW_CONTROLLER); |
1201 c = genCond(TreeInfo.skipParens(cond), CRT_FLOW_CONTROLLER); |
1202 } else { |
1202 } else { |
1238 } |
1238 } |
1239 code.resolve(c.jumpTrue(), startpc); |
1239 code.resolve(c.jumpTrue(), startpc); |
1240 code.resolve(c.falseJumps); |
1240 code.resolve(c.falseJumps); |
1241 } |
1241 } |
1242 code.resolve(loopEnv.info.exit); |
1242 code.resolve(loopEnv.info.exit); |
|
1243 if (loopEnv.info.exit != null) { |
|
1244 loopEnv.info.exit.state.defined.excludeFrom(code.nextreg); |
|
1245 } |
1243 } |
1246 } |
1244 |
1247 |
1245 private enum LoopLocalVarRangeEndingPoint { |
1248 private enum LoopLocalVarRangeEndingPoint { |
1246 BEFORE_STEPS, |
1249 BEFORE_STEPS, |
1247 AFTER_STEPS, |
1250 AFTER_STEPS, |