summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorchibash <chiba@javassist.org>2013-12-02 20:05:24 +0900
committerScott Marlow <smarlow@redhat.com>2013-12-02 10:12:27 -0500
commit7b73bcb55349356b3819c732a18d8a20bf5073d6 (patch)
tree712135e21a0a1b262fe0a8b530059683a30156a1
parentbf5722a70048db339334b23793465c299922785b (diff)
downloadjavassist-7b73bcb55349356b3819c732a18d8a20bf5073d6.tar.gz
javassist-7b73bcb55349356b3819c732a18d8a20bf5073d6.zip
fixed JASSIST-211
-rw-r--r--Readme.html2
-rw-r--r--src/main/javassist/compiler/CodeGen.java2
-rw-r--r--src/test/javassist/JvstTest4.java18
3 files changed, 20 insertions, 2 deletions
diff --git a/Readme.html b/Readme.html
index 5066e134..251e0e95 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());
+ }
}