diff options
author | chibash <chiba@javassist.org> | 2013-12-02 20:05:24 +0900 |
---|---|---|
committer | chibash <chiba@javassist.org> | 2013-12-02 20:05:24 +0900 |
commit | c135f69c8b4d6f64ce22ade1fa9f76c614bb280e (patch) | |
tree | 259744df1ec333376e505959c4f51fcb81814ef4 | |
parent | 23b36218f5a07f0ecc448539807bba6b324dea8b (diff) | |
download | javassist-c135f69c8b4d6f64ce22ade1fa9f76c614bb280e.tar.gz javassist-c135f69c8b4d6f64ce22ade1fa9f76c614bb280e.zip |
fixed JASSIST-211
-rw-r--r-- | Readme.html | 2 | ||||
-rw-r--r-- | src/main/javassist/compiler/CodeGen.java | 2 | ||||
-rw-r--r-- | src/test/javassist/JvstTest4.java | 18 |
3 files changed, 20 insertions, 2 deletions
diff --git a/Readme.html b/Readme.html index 290d2097..4c5288be 100644 --- a/Readme.html +++ b/Readme.html @@ -283,7 +283,7 @@ see javassist.Dump. <p>-version 3.19 <ul> -<li>JIRA JASSIST-158, 205, 206, 207, 212, 216. +<li>JIRA JASSIST-158, 205, 206, 207, 211, 212, 216. </ul> </p> 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()); + } } |