aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorchibash <chiba@javassist.org>2013-12-02 20:05:24 +0900
committerchibash <chiba@javassist.org>2013-12-02 20:05:24 +0900
commitc135f69c8b4d6f64ce22ade1fa9f76c614bb280e (patch)
tree259744df1ec333376e505959c4f51fcb81814ef4 /src
parent23b36218f5a07f0ecc448539807bba6b324dea8b (diff)
downloadjavassist-c135f69c8b4d6f64ce22ade1fa9f76c614bb280e.tar.gz
javassist-c135f69c8b4d6f64ce22ade1fa9f76c614bb280e.zip
fixed JASSIST-211
Diffstat (limited to 'src')
-rw-r--r--src/main/javassist/compiler/CodeGen.java2
-rw-r--r--src/test/javassist/JvstTest4.java18
2 files changed, 19 insertions, 1 deletions
diff --git a/src/main/javassist/compiler/CodeGen.java b/src/main/javassist/compiler/CodeGen.java
index bf61a2b1..bbcce895 100644
--- a/src/main/javassist/compiler/CodeGen.java
+++ b/src/main/javassist/compiler/CodeGen.java
@@ -434,7 +434,7 @@ public abstract class CodeGen extends Visitor implements Opcode, TokenId {
if (notDo)
bytecode.write16bit(pc, pc3 - pc + 1);
- boolean alwaysBranch = compileBooleanExpr(true, expr);
+ boolean alwaysBranch = compileBooleanExpr(true, expr) && breakList.size() == 0;
bytecode.addIndex(pc2 - bytecode.currentPc() + 1);
patchGoto(breakList, bytecode.currentPc());
diff --git a/src/test/javassist/JvstTest4.java b/src/test/javassist/JvstTest4.java
index df4533bb..f1aca09e 100644
--- a/src/test/javassist/JvstTest4.java
+++ b/src/test/javassist/JvstTest4.java
@@ -938,4 +938,22 @@ public class JvstTest4 extends JvstTestRoot {
cc.writeFile();
Object obj = make(cc.getName());
}
+
+ public void testWhileTrueKO() throws Exception {
+ final ClassPool pool = ClassPool.getDefault();
+ final CtClass cc = pool.makeClass("test4.TestWhileTrueKO");
+ String source = "public void testWhile() { while(true) { break; } }";
+ cc.addMethod(CtMethod.make(source, cc));
+ cc.writeFile();
+ make(cc.getName());
+ }
+
+ public void testWhileTrueOK() throws Exception {
+ final ClassPool pool = ClassPool.getDefault();
+ final CtClass cc = pool.makeClass("test4.TestWhileTrueOK");
+ String source = "public void testWhile() { while(0==0) { break; }}";
+ cc.addMethod(CtMethod.make(source, cc));
+ cc.writeFile();
+ make(cc.getName());
+ }
}