On May 26, 2011, at 10:11 AM, Tom Rodriguez wrote: > isValid looks fine.
Thanks Tom. I also corrected the javadoc, added a demo of isValid and copied the javadoc example into the unit tests. -- John diff --git a/src/share/classes/java/lang/invoke/SwitchPoint.java b/src/share/classes/java/lang/invoke/SwitchPoint.java --- a/src/share/classes/java/lang/invoke/SwitchPoint.java +++ b/src/share/classes/java/lang/invoke/SwitchPoint.java @@ -56,16 +56,17 @@ * <p> * Here is an example of a switch point in action: * <blockquote><pre> -MethodType MT_str2 = MethodType.methodType(String.class, String.class); MethodHandle MH_strcat = MethodHandles.lookup() - .findVirtual(String.class, "concat", MT_str2); + .findVirtual(String.class, "concat", MethodType.methodType(String.class, String.class)); SwitchPoint spt = new SwitchPoint(); +assert(spt.isValid()); // the following steps may be repeated to re-use the same switch point: -MethodHandle worker1 = strcat; -MethodHandle worker2 = MethodHandles.permuteArguments(strcat, MT_str2, 1, 0); +MethodHandle worker1 = MH_strcat; +MethodHandle worker2 = MethodHandles.permuteArguments(MH_strcat, MH_strcat.type(), 1, 0); MethodHandle worker = spt.guardWithTest(worker1, worker2); assertEquals("method", (String) worker.invokeExact("met", "hod")); SwitchPoint.invalidateAll(new SwitchPoint[]{ spt }); +assert(!spt.isValid()); assertEquals("hodmet", (String) worker.invokeExact("met", "hod")); * </pre></blockquote> * <p style="font-size:smaller;"> diff --git a/test/java/lang/invoke/JavaDocExamplesTest.java b/test/java/lang/invoke/JavaDocExamplesTest.java --- a/test/java/lang/invoke/JavaDocExamplesTest.java +++ b/test/java/lang/invoke/JavaDocExamplesTest.java @@ -471,6 +471,25 @@ }} } + @Test public void testSwitchPoint() throws Throwable { + {{ +{} /// JAVADOC +MethodHandle MH_strcat = MethodHandles.lookup() + .findVirtual(String.class, "concat", MethodType.methodType(String.class, String.class)); +SwitchPoint spt = new SwitchPoint(); +assert(spt.isValid()); +// the following steps may be repeated to re-use the same switch point: +MethodHandle worker1 = MH_strcat; +MethodHandle worker2 = MethodHandles.permuteArguments(MH_strcat, MH_strcat.type(), 1, 0); +MethodHandle worker = spt.guardWithTest(worker1, worker2); +assertEquals("method", (String) worker.invokeExact("met", "hod")); +SwitchPoint.invalidateAll(new SwitchPoint[]{ spt }); +assert(!spt.isValid()); +assertEquals("hodmet", (String) worker.invokeExact("met", "hod")); +{} + }} + } + /* ---- TEMPLATE ---- @Test public void testFoo() throws Throwable { {{
_______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev