< prev index next >
src/java.base/share/classes/java/lang/invoke/SwitchPoint.java
Print this page
rev 12617 : [mq]: 8134356-gt-lt-in-code
@@ -81,33 +81,33 @@
* <p style="font-size:smaller;">
* <em>Implementation Note:</em>
* A switch point behaves as if implemented on top of {@link MutableCallSite},
* approximately as follows:
* <blockquote><pre>{@code
-public class SwitchPoint {
- private static final MethodHandle
- K_true = MethodHandles.constant(boolean.class, true),
- K_false = MethodHandles.constant(boolean.class, false);
- private final MutableCallSite mcs;
- private final MethodHandle mcsInvoker;
- public SwitchPoint() {
- this.mcs = new MutableCallSite(K_true);
- this.mcsInvoker = mcs.dynamicInvoker();
- }
- public MethodHandle guardWithTest(
- MethodHandle target, MethodHandle fallback) {
- // Note: mcsInvoker is of type ()boolean.
- // Target and fallback may take any arguments, but must have the same type.
- return MethodHandles.guardWithTest(this.mcsInvoker, target, fallback);
- }
- public static void invalidateAll(SwitchPoint[] spts) {
- List<MutableCallSite> mcss = new ArrayList<>();
- for (SwitchPoint spt : spts) mcss.add(spt.mcs);
- for (MutableCallSite mcs : mcss) mcs.setTarget(K_false);
- MutableCallSite.syncAll(mcss.toArray(new MutableCallSite[0]));
- }
-}
+ * public class SwitchPoint {
+ * private static final MethodHandle
+ * K_true = MethodHandles.constant(boolean.class, true),
+ * K_false = MethodHandles.constant(boolean.class, false);
+ * private final MutableCallSite mcs;
+ * private final MethodHandle mcsInvoker;
+ * public SwitchPoint() {
+ * this.mcs = new MutableCallSite(K_true);
+ * this.mcsInvoker = mcs.dynamicInvoker();
+ * }
+ * public MethodHandle guardWithTest(
+ * MethodHandle target, MethodHandle fallback) {
+ * // Note: mcsInvoker is of type ()boolean.
+ * // Target and fallback may take any arguments, but must have the same type.
+ * return MethodHandles.guardWithTest(this.mcsInvoker, target, fallback);
+ * }
+ * public static void invalidateAll(SwitchPoint[] spts) {
+ * List<MutableCallSite> mcss = new ArrayList<>();
+ * for (SwitchPoint spt : spts) mcss.add(spt.mcs);
+ * for (MutableCallSite mcs : mcss) mcs.setTarget(K_false);
+ * MutableCallSite.syncAll(mcss.toArray(new MutableCallSite[0]));
+ * }
+ * }
* }</pre></blockquote>
* @author Remi Forax, JSR 292 EG
*/
public class SwitchPoint {
private static final MethodHandle
< prev index next >