< prev index next >

src/java.base/share/classes/java/lang/invoke/DirectMethodHandle.java

Print this page
rev 55127 : 8223351: [lworld] Primary mirror and nullable mirror for inline type
Reviewed-by: tbd

*** 76,86 **** static DirectMethodHandle make(byte refKind, Class<?> refc, MemberName member, Class<?> callerClass) { MethodType mtype = member.getMethodOrFieldType(); if (!member.isStatic()) { if (!member.getDeclaringClass().isAssignableFrom(refc) || member.isConstructor()) throw new InternalError(member.toString()); ! mtype = mtype.insertParameterTypes(0, refc.isValue() ? refc.asValueType() : refc); } if (!member.isField()) { // refKind reflects the original type of lookup via findSpecial or // findVirtual etc. switch (refKind) { --- 76,86 ---- static DirectMethodHandle make(byte refKind, Class<?> refc, MemberName member, Class<?> callerClass) { MethodType mtype = member.getMethodOrFieldType(); if (!member.isStatic()) { if (!member.getDeclaringClass().isAssignableFrom(refc) || member.isConstructor()) throw new InternalError(member.toString()); ! mtype = mtype.insertParameterTypes(0, refc.asPrimaryType()); } if (!member.isField()) { // refKind reflects the original type of lookup via findSpecial or // findVirtual etc. switch (refKind) {
*** 109,124 **** } else { LambdaForm lform = preparedFieldLambdaForm(member); if (member.isStatic()) { long offset = MethodHandleNatives.staticFieldOffset(member); Object base = MethodHandleNatives.staticFieldBase(member); ! return member.isValue() ? new StaticValueAccessor(mtype, lform, member, base, offset) : new StaticAccessor(mtype, lform, member, base, offset); } else { long offset = MethodHandleNatives.objectFieldOffset(member); assert(offset == (int)offset); ! return member.isValue() ? new ValueAccessor(mtype, lform, member, (int)offset) : new Accessor(mtype, lform, member, (int)offset); } } } --- 109,124 ---- } else { LambdaForm lform = preparedFieldLambdaForm(member); if (member.isStatic()) { long offset = MethodHandleNatives.staticFieldOffset(member); Object base = MethodHandleNatives.staticFieldBase(member); ! return member.isInlineableField() ? new StaticValueAccessor(mtype, lform, member, base, offset) : new StaticAccessor(mtype, lform, member, base, offset); } else { long offset = MethodHandleNatives.objectFieldOffset(member); assert(offset == (int)offset); ! return member.isInlineableField() ? new ValueAccessor(mtype, lform, member, (int)offset) : new Accessor(mtype, lform, member, (int)offset); } } }
*** 133,145 **** return makeAllocator(member); return make(member.getDeclaringClass(), member); } private static DirectMethodHandle makeAllocator(MemberName ctor) { assert(ctor.isConstructor() && ctor.getName().equals("<init>")); ! Class<?> instanceClass = ctor.getDeclaringClass(); ! if (instanceClass.isValue()) ! instanceClass = instanceClass.asValueType(); // convert to Q-Type ctor = ctor.asConstructor(); assert(ctor.isConstructor() && ctor.getReferenceKind() == REF_newInvokeSpecial) : ctor; MethodType mtype = ctor.getMethodType().changeReturnType(instanceClass); LambdaForm lform = preparedLambdaForm(ctor); MemberName init = ctor.asSpecial(); --- 133,143 ---- return makeAllocator(member); return make(member.getDeclaringClass(), member); } private static DirectMethodHandle makeAllocator(MemberName ctor) { assert(ctor.isConstructor() && ctor.getName().equals("<init>")); ! Class<?> instanceClass = ctor.getDeclaringClass().asPrimaryType(); // convert to Q-Type ctor = ctor.asConstructor(); assert(ctor.isConstructor() && ctor.getReferenceKind() == REF_newInvokeSpecial) : ctor; MethodType mtype = ctor.getMethodType().changeReturnType(instanceClass); LambdaForm lform = preparedLambdaForm(ctor); MemberName init = ctor.asSpecial();
*** 665,680 **** case REF_putStatic: formOp = AF_PUTSTATIC; break; default: throw new InternalError(m.toString()); } if (shouldBeInitialized(m)) { // precompute the barrier-free version: ! preparedFieldLambdaForm(formOp, m.isVolatile(), m.isValue(), m.isFlattened(), ftype); assert((AF_GETSTATIC_INIT - AF_GETSTATIC) == (AF_PUTSTATIC_INIT - AF_PUTSTATIC)); formOp += (AF_GETSTATIC_INIT - AF_GETSTATIC); } ! LambdaForm lform = preparedFieldLambdaForm(formOp, m.isVolatile(), m.isValue(), m.isFlattened(), ftype); maybeCompile(lform, m); assert(lform.methodType().dropParameterTypes(0, 1) .equals(m.getInvocationType().basicType())) : Arrays.asList(m, m.getInvocationType().basicType(), lform, lform.methodType()); return lform; --- 663,678 ---- case REF_putStatic: formOp = AF_PUTSTATIC; break; default: throw new InternalError(m.toString()); } if (shouldBeInitialized(m)) { // precompute the barrier-free version: ! preparedFieldLambdaForm(formOp, m.isVolatile(), m.isInlineableField(), m.isFlattened(), ftype); assert((AF_GETSTATIC_INIT - AF_GETSTATIC) == (AF_PUTSTATIC_INIT - AF_PUTSTATIC)); formOp += (AF_GETSTATIC_INIT - AF_GETSTATIC); } ! LambdaForm lform = preparedFieldLambdaForm(formOp, m.isVolatile(), m.isInlineableField(), m.isFlattened(), ftype); maybeCompile(lform, m); assert(lform.methodType().dropParameterTypes(0, 1) .equals(m.getInvocationType().basicType())) : Arrays.asList(m, m.getInvocationType().basicType(), lform, lform.methodType()); return lform;
< prev index next >