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

Print this page

        

*** 51,69 **** --- 51,72 ---- public static final String DERIVE_VALUE_TYPE_DESC = "Ljvm/internal/value/DeriveValueType;"; 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; + public static final boolean MANGLE_CLASS_INFO; 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")); JLA = SharedSecrets.getJavaLangAccess(); + MANGLE_CLASS_INFO = Boolean.parseBoolean( + props.getProperty("valhalla.mangleClassInfo")); } public static String getValueTypeClassName(ValueTypeDesc valueTypeDesc) { return getValueTypeClassName(valueTypeDesc.getName()); }
*** 130,142 **** public static byte[] createValueType(ValueTypeDesc valueTypeDesc) { String valueTypeClassName = getValueTypeClassName(valueTypeDesc); ! BasicClassBuilder builder = new BasicClassBuilder(valueTypeClassName, 53, 1) .withFlags(DERIVE_VT_CLASS_ACCESS) ! .withSuperclass(VALUE_CLASS_DESC); ValueTypeDesc.Field[] fields = valueTypeDesc.getFields(); for (ValueTypeDesc.Field field : fields) { builder.withField(field.name, field.type, F -> F.withFlags(field.modifiers)); } --- 133,145 ---- public static byte[] createValueType(ValueTypeDesc valueTypeDesc) { String valueTypeClassName = getValueTypeClassName(valueTypeDesc); ! BasicClassBuilder builder = new BasicClassBuilder(mangleValueClassName(valueTypeClassName), 53, 1) .withFlags(DERIVE_VT_CLASS_ACCESS) ! .withSuperclass(mangleValueClassName(VALUE_CLASS_DESC)); ValueTypeDesc.Field[] fields = valueTypeDesc.getFields(); for (ValueTypeDesc.Field field : fields) { builder.withField(field.name, field.type, F -> F.withFlags(field.modifiers)); }
*** 188,193 **** --- 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 MANGLE_CLASS_INFO ? + ";Q" + name + ";" : + name; + } }