475 {{ |
475 {{ |
476 {} /// JAVADOC |
476 {} /// JAVADOC |
477 MethodHandle MH_strcat = MethodHandles.lookup() |
477 MethodHandle MH_strcat = MethodHandles.lookup() |
478 .findVirtual(String.class, "concat", MethodType.methodType(String.class, String.class)); |
478 .findVirtual(String.class, "concat", MethodType.methodType(String.class, String.class)); |
479 SwitchPoint spt = new SwitchPoint(); |
479 SwitchPoint spt = new SwitchPoint(); |
480 assert(spt.isValid()); |
480 assert(!spt.hasBeenInvalidated()); |
481 // the following steps may be repeated to re-use the same switch point: |
481 // the following steps may be repeated to re-use the same switch point: |
482 MethodHandle worker1 = MH_strcat; |
482 MethodHandle worker1 = MH_strcat; |
483 MethodHandle worker2 = MethodHandles.permuteArguments(MH_strcat, MH_strcat.type(), 1, 0); |
483 MethodHandle worker2 = MethodHandles.permuteArguments(MH_strcat, MH_strcat.type(), 1, 0); |
484 MethodHandle worker = spt.guardWithTest(worker1, worker2); |
484 MethodHandle worker = spt.guardWithTest(worker1, worker2); |
485 assertEquals("method", (String) worker.invokeExact("met", "hod")); |
485 assertEquals("method", (String) worker.invokeExact("met", "hod")); |
486 SwitchPoint.invalidateAll(new SwitchPoint[]{ spt }); |
486 SwitchPoint.invalidateAll(new SwitchPoint[]{ spt }); |
487 assert(!spt.isValid()); |
487 assert(spt.hasBeenInvalidated()); |
488 assertEquals("hodmet", (String) worker.invokeExact("met", "hod")); |
488 assertEquals("hodmet", (String) worker.invokeExact("met", "hod")); |
489 {} |
489 {} |
490 }} |
490 }} |
491 } |
491 } |
492 |
492 |