aboutsummaryrefslogtreecommitdiffstats
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
parent23b36218f5a07f0ecc448539807bba6b324dea8b (diff)
downloadjavassist-c135f69c8b4d6f64ce22ade1fa9f76c614bb280e.tar.gz
javassist-c135f69c8b4d6f64ce22ade1fa9f76c614bb280e.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 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());
+ }
}