diff options
-rw-r--r-- | Readme.html | 3 | ||||
-rw-r--r-- | src/test/test/javassist/bytecode/analysis/DomTreeTest.java | 33 |
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; + } } |