< 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 >