Cleanups and tests for new cases.

Signed-off-by: Tomek Grabiec <tgrab...@gmail.com>
---
 regression/jvm/TrampolineBackpatchingTest.java |   74 ++++++++++++++----------
 1 files changed, 43 insertions(+), 31 deletions(-)

diff --git a/regression/jvm/TrampolineBackpatchingTest.java 
b/regression/jvm/TrampolineBackpatchingTest.java
index 66d63fe..734d3eb 100644
--- a/regression/jvm/TrampolineBackpatchingTest.java
+++ b/regression/jvm/TrampolineBackpatchingTest.java
@@ -29,50 +29,62 @@ package jvm;
  * @author Tomasz Grabiec
  */
 public class TrampolineBackpatchingTest extends TestCase {
-
-    public static int test(int x) {
+    public static int staticMethod(int x) {
         return x+x;
     }
 
-    public static int testBackpatchingOnTheFly(int x) {
-        /* No trampoline call should be generated for this,
-           because method test() is already compiled */
-        return test(x);
+    private class A {
+        public int virtualMethod(int x) {
+            return x+x;
+        }
+
+        private int privateMethod(int x) {
+            return x+x;
+        }
+
+        public int invokePrivate(int x) {
+            return privateMethod(x);
+        }
     }
 
-    static void testVTableBackpatching() {
-        /* Instantiating RuntimeException calls virtual method
-           Throwable.fillInStackTrace.  This tests proper functioning
-           of vtable back-patching */
-        new RuntimeException("foo");
+    private class B extends A {
+        public int invokeSuper(int x) {
+            return super.virtualMethod(x);
+        }
+
+        public int invokeVirtual(int x) {
+            return virtualMethod(x);
+        }
     }
 
-    public int testArg(int a) {
-        return a+1;
+    public static void testInvokestatic() {
+        assertEquals(staticMethod(4), 8);
     }
 
-    public static void main(String [] args) {
-        int x;
-        TrampolineBackpatchingTest t = new TrampolineBackpatchingTest();
+    public  void testInvokevirtual() {
+        assertEquals(new A().virtualMethod(4), 8);
+        assertEquals(new B().invokeVirtual(4), 8);
+    }
 
-        /* Test backpatching of multiple call sites
-           at once */
-        x = 1;
-        x = test(x);
-        x = test(x);
-        x = test(x);
-        assertEquals(x, 8);
+    public  void testInvokespecial() {
+        assertEquals(new A().invokePrivate(4), 8);
+        assertEquals(new B().invokeSuper(4), 8);
+    }
 
-        x = testBackpatchingOnTheFly(8);
-        assertEquals(x, 16);
+    public static void main(String [] args) {
+        TrampolineBackpatchingTest t = new TrampolineBackpatchingTest();
 
-        testVTableBackpatching();
+        testInvokestatic();
+        t.testInvokevirtual();
+        t.testInvokespecial();
 
-        /* Another invokevirtual backpatching test */
-        x = 1;
-        x = t.testArg(x);
-        x = t.testArg(x);
-        assertEquals(x, 3);
+        /*
+         * Run tests again to check if all call sites have
+         * been properly fixed.
+         */
+        testInvokestatic();
+        t.testInvokevirtual();
+        t.testInvokespecial();
 
         exit();
     }
-- 
1.6.0.6


------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT 
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, & 
iPhoneDevCamp as they present alongside digital heavyweights like Barbarian 
Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com 
_______________________________________________
Jatovm-devel mailing list
Jatovm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jatovm-devel

Reply via email to