summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Readme.html3
-rw-r--r--src/test/test/javassist/bytecode/analysis/DomTreeTest.java33
2 files changed, 36 insertions, 0 deletions
diff --git a/Readme.html b/Readme.html
index 5e790515..450b2ec3 100644
--- a/Readme.html
+++ b/Readme.html
@@ -282,6 +282,9 @@ see javassist.Dump.
<h2>Changes</h2>
<p>-version 3.17
+<ul>
+ <li>JIRA JASSIST-168.
+</ul>
<p>-version 3.16.1 on March 6, 2012
<ul>
diff --git a/src/test/test/javassist/bytecode/analysis/DomTreeTest.java b/src/test/test/javassist/bytecode/analysis/DomTreeTest.java
index dd348d01..4e277e8f 100644
--- a/src/test/test/javassist/bytecode/analysis/DomTreeTest.java
+++ b/src/test/test/javassist/bytecode/analysis/DomTreeTest.java
@@ -36,10 +36,12 @@ public class DomTreeTest extends TestCase {
}
private void testBlock(Block b, int[] incoming, int[] outgoing) {
+ assertEquals(incoming.length, b.incomings());
int i = 0;
for (int index: incoming)
assertEquals(index, b.incoming(i++).position());
i = 0;
+ assertEquals(outgoing.length, b.exits());
for (int index: outgoing)
assertEquals(index, b.exit(i++).position());
}
@@ -56,4 +58,35 @@ public class DomTreeTest extends TestCase {
k = 3 ;
}
}
+
+ public void testDomtree2() throws Exception {
+ ControlFlow cf = new ControlFlow(pool.get(DomTreeTest.class.getName()).getDeclaredMethod("test2"));
+ Block[] blocks = cf.basicBlocks();
+ // for (int i = 0; i < blocks.length; i++)
+ // System.out.println(i + ": " + blocks[i]);
+ testBlock(blocks[0], new int[] { 7 }, new int[] { 14, 7 } );
+ testBlock(blocks[1], new int[] { 0 }, new int[] { 0, 12 } );
+ testBlock(blocks[2], new int[] { 7 }, new int[] {});
+ testBlock(blocks[3], new int[] { 0 }, new int[] {});
+
+ Node[] dom = cf.dominatorTree();
+ assertNull(dom[0].parent());
+ assertEquals(0, dom[1].parent().block().position());
+ assertEquals(7, dom[2].parent().block().position());
+ assertEquals(0, dom[3].parent().block().position());
+
+ Node[] pdom = cf.postDominatorTree();
+ assertNull(pdom[0].parent());
+ assertNull(pdom[1].parent());
+ assertNull(pdom[2].parent());
+ assertNull(pdom[3].parent());
+ }
+
+ public int test2(int i){
+ while (i-- > 0)
+ if (i == 3)
+ return 1;
+
+ return i + 3;
+ }
}