< prev index next >

jdk/src/java.base/share/classes/valhalla/shady/MinimalValueTypes_1_0.java

Print this page

        

*** 24,33 **** --- 24,34 ---- */ package valhalla.shady; import jdk.experimental.bytecode.BasicClassBuilder; import jdk.internal.misc.Unsafe; + import jdk.internal.misc.VM; import sun.security.action.GetPropertyAction; import java.io.BufferedOutputStream; import java.io.File; import java.io.IOException;
*** 52,69 **** --- 53,74 ---- public static final String DERIVE_VALUE_TYPE_DESC = "Ljvm/internal/value/ValueCapableClass;"; public static final String DERIVE_VT_CLASSNAME_POSTFIX = "$Value"; public static final int DERIVE_VT_CLASS_ACCESS = ACC_PUBLIC|ACC_SUPER|ACC_FINAL|ACC_VALUE|ACC_SYNTHETIC; public static final boolean DUMP_CLASS_FILES; + private static final boolean VALUE_TYPE_ENABLED; private static final JavaLangAccess JLA; static { // Use same property as in j.l.invoke.MethodHandleStatics Properties props = GetPropertyAction.privilegedGetProperties(); DUMP_CLASS_FILES = Boolean.parseBoolean( props.getProperty("java.lang.invoke.MethodHandle.DUMP_CLASS_FILES")); + VALUE_TYPE_ENABLED = Boolean.parseBoolean( + props.getProperty("valhalla.enableValueType")); + JLA = SharedSecrets.getJavaLangAccess(); } public static String getValueTypeClassName(ValueTypeDesc valueTypeDesc) { return getValueTypeClassName(valueTypeDesc.getName());
*** 191,202 **** } private final native Class<?> getDerivedValueType(Class<?> ofClass); public static Class<?> getValueClass() { ! return (Class<?>)(Object)__Value.class; //hack around static type-system checks } public static String mangleValueClassName(String name) { return ";Q" + name + ";"; } } --- 196,217 ---- } private final native Class<?> getDerivedValueType(Class<?> ofClass); public static Class<?> getValueClass() { ! return VALUE_TYPE_ENABLED ? ValueClassHolder.CLASS_OBJECT : null; } public static String mangleValueClassName(String name) { return ";Q" + name + ";"; } + + /* + * A holder class that references __Value to be loaded only when MVT is enabled. + * + * This holder class would fail verification if loaded if MVT is not enabled. + */ + private static class ValueClassHolder { + static final Class<?> CLASS_OBJECT = + (Class<?>)(Object)__Value.class; //hack around static type-system checks + } }
< prev index next >