8284579: Improve VarHandle checks for interpreter

Reviewed-by: mcimadamore, mchung
This commit is contained in:
Claes Redestad 2022-04-13 07:21:24 +00:00
parent c35590282d
commit 280aa42880
4 changed files with 216 additions and 218 deletions

View file

@ -81,11 +81,6 @@ import java.util.function.BiFunction;
return at.accessModeType(null, value, coordinates);
}
@Override
boolean isDirect() {
return false;
}
@Override
VarHandle asDirect() {
return directTarget;
@ -102,6 +97,13 @@ import java.util.function.BiFunction;
: new IndirectVarHandle(target, value, coordinates, handleFactory, vform, true);
}
@ForceInline
boolean checkAccessModeThenIsDirect(VarHandle.AccessDescriptor ad) {
super.checkAccessModeThenIsDirect(ad);
// return false to indicate this is an IndirectVarHandle
return false;
}
@Override
public VarHandle withInvokeBehavior() {
return !hasInvokeExactBehavior()

View file

@ -522,10 +522,6 @@ public abstract sealed class VarHandle implements Constable
return new UnsupportedOperationException();
}
boolean isDirect() {
return true;
}
VarHandle asDirect() {
return this;
}
@ -2066,11 +2062,23 @@ public abstract sealed class VarHandle implements Constable
return accessModeType(accessMode.at.ordinal());
}
/**
* Validates that the given access descriptors method type matches up with
* the access mode of this VarHandle, then returns if this is a direct
* method handle. These operations were grouped together to slightly
* improve efficiency during startup/warmup.
*
* @return true if this is a direct VarHandle, false if it's an indirect
* VarHandle.
* @throws WrongMethodTypeException if there's an access type mismatch
*/
@ForceInline
final void checkExactAccessMode(VarHandle.AccessDescriptor ad) {
boolean checkAccessModeThenIsDirect(VarHandle.AccessDescriptor ad) {
if (exact && accessModeType(ad.type) != ad.symbolicMethodTypeExact) {
throwWrongMethodTypeException(ad);
}
// return true unless overridden in an IndirectVarHandle
return true;
}
@DontInline
@ -2081,10 +2089,13 @@ public abstract sealed class VarHandle implements Constable
@ForceInline
final MethodType accessModeType(int accessTypeOrdinal) {
TypesAndInvokers tis = getTypesAndInvokers();
MethodType mt = tis.methodType_table[accessTypeOrdinal];
MethodType[] mtTable = methodTypeTable;
if (mtTable == null) {
mtTable = methodTypeTable = new MethodType[VarHandle.AccessType.COUNT];
}
MethodType mt = mtTable[accessTypeOrdinal];
if (mt == null) {
mt = tis.methodType_table[accessTypeOrdinal] =
mt = mtTable[accessTypeOrdinal] =
accessModeTypeUncached(accessTypeOrdinal);
}
return mt;
@ -2159,34 +2170,24 @@ public abstract sealed class VarHandle implements Constable
}
@Stable
TypesAndInvokers typesAndInvokers;
MethodType[] methodTypeTable;
static class TypesAndInvokers {
final @Stable
MethodType[] methodType_table = new MethodType[VarHandle.AccessType.COUNT];
final @Stable
MethodHandle[] methodHandle_table = new MethodHandle[AccessMode.COUNT];
}
@ForceInline
private final TypesAndInvokers getTypesAndInvokers() {
TypesAndInvokers tis = typesAndInvokers;
if (tis == null) {
tis = typesAndInvokers = new TypesAndInvokers();
}
return tis;
}
@Stable
MethodHandle[] methodHandleTable;
@ForceInline
MethodHandle getMethodHandle(int mode) {
TypesAndInvokers tis = getTypesAndInvokers();
MethodHandle mh = tis.methodHandle_table[mode];
MethodHandle[] mhTable = methodHandleTable;
if (mhTable == null) {
mhTable = methodHandleTable = new MethodHandle[AccessMode.COUNT];
}
MethodHandle mh = mhTable[mode];
if (mh == null) {
mh = tis.methodHandle_table[mode] = getMethodHandleUncached(mode);
mh = mhTable[mode] = getMethodHandleUncached(mode);
}
return mh;
}
private final MethodHandle getMethodHandleUncached(int mode) {
MethodType mt = accessModeType(AccessMode.values()[mode]).
insertParameterTypes(0, VarHandle.class);

View file

@ -34,8 +34,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final Object guard_L_L(VarHandle handle, Object arg0, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
Object r = MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
return ad.returnType.cast(r);
} else {
@ -48,10 +48,10 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final void guard_LL_V(VarHandle handle, Object arg0, Object arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else if (handle.isDirect() && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
} else if (direct && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -63,8 +63,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final boolean guard_LLL_Z(VarHandle handle, Object arg0, Object arg1, Object arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -76,8 +76,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final Object guard_LLL_L(VarHandle handle, Object arg0, Object arg1, Object arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
Object r = MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
return ad.returnType.cast(r);
} else {
@ -90,8 +90,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final Object guard_LL_L(VarHandle handle, Object arg0, Object arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
Object r = MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
return ad.returnType.cast(r);
} else {
@ -104,8 +104,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final int guard_L_I(VarHandle handle, Object arg0, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (int) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -117,10 +117,10 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final void guard_LI_V(VarHandle handle, Object arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else if (handle.isDirect() && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
} else if (direct && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -132,8 +132,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final boolean guard_LII_Z(VarHandle handle, Object arg0, int arg1, int arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -145,8 +145,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final int guard_LII_I(VarHandle handle, Object arg0, int arg1, int arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -158,8 +158,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final int guard_LI_I(VarHandle handle, Object arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (int) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -171,8 +171,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final long guard_L_J(VarHandle handle, Object arg0, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (long) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -184,10 +184,10 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final void guard_LJ_V(VarHandle handle, Object arg0, long arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else if (handle.isDirect() && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
} else if (direct && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -199,8 +199,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final boolean guard_LJJ_Z(VarHandle handle, Object arg0, long arg1, long arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -212,8 +212,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final long guard_LJJ_J(VarHandle handle, Object arg0, long arg1, long arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -225,8 +225,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final long guard_LJ_J(VarHandle handle, Object arg0, long arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (long) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -238,8 +238,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final float guard_L_F(VarHandle handle, Object arg0, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (float) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -251,10 +251,10 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final void guard_LF_V(VarHandle handle, Object arg0, float arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else if (handle.isDirect() && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
} else if (direct && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -266,8 +266,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final boolean guard_LFF_Z(VarHandle handle, Object arg0, float arg1, float arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -279,8 +279,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final float guard_LFF_F(VarHandle handle, Object arg0, float arg1, float arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -292,8 +292,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final float guard_LF_F(VarHandle handle, Object arg0, float arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (float) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -305,8 +305,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final double guard_L_D(VarHandle handle, Object arg0, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (double) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -318,10 +318,10 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final void guard_LD_V(VarHandle handle, Object arg0, double arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else if (handle.isDirect() && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
} else if (direct && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -333,8 +333,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final boolean guard_LDD_Z(VarHandle handle, Object arg0, double arg1, double arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -346,8 +346,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final double guard_LDD_D(VarHandle handle, Object arg0, double arg1, double arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -359,8 +359,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final double guard_LD_D(VarHandle handle, Object arg0, double arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (double) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -372,8 +372,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final Object guard__L(VarHandle handle, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
Object r = MethodHandle.linkToStatic(handle, handle.vform.getMemberName(ad.mode));
return ad.returnType.cast(r);
} else {
@ -386,10 +386,10 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final void guard_L_V(VarHandle handle, Object arg0, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
} else if (handle.isDirect() && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
} else if (direct && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -401,8 +401,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final boolean guard_LL_Z(VarHandle handle, Object arg0, Object arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -414,8 +414,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final int guard__I(VarHandle handle, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (int) MethodHandle.linkToStatic(handle, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -427,10 +427,10 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final void guard_I_V(VarHandle handle, int arg0, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
} else if (handle.isDirect() && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
} else if (direct && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -442,8 +442,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final boolean guard_II_Z(VarHandle handle, int arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -455,8 +455,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final int guard_II_I(VarHandle handle, int arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (int) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -468,8 +468,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final int guard_I_I(VarHandle handle, int arg0, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (int) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -481,8 +481,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final long guard__J(VarHandle handle, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (long) MethodHandle.linkToStatic(handle, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -494,10 +494,10 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final void guard_J_V(VarHandle handle, long arg0, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
} else if (handle.isDirect() && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
} else if (direct && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -509,8 +509,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final boolean guard_JJ_Z(VarHandle handle, long arg0, long arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -522,8 +522,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final long guard_JJ_J(VarHandle handle, long arg0, long arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (long) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -535,8 +535,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final long guard_J_J(VarHandle handle, long arg0, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (long) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -548,8 +548,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final float guard__F(VarHandle handle, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (float) MethodHandle.linkToStatic(handle, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -561,10 +561,10 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final void guard_F_V(VarHandle handle, float arg0, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
} else if (handle.isDirect() && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
} else if (direct && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -576,8 +576,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final boolean guard_FF_Z(VarHandle handle, float arg0, float arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -589,8 +589,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final float guard_FF_F(VarHandle handle, float arg0, float arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (float) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -602,8 +602,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final float guard_F_F(VarHandle handle, float arg0, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (float) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -615,8 +615,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final double guard__D(VarHandle handle, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (double) MethodHandle.linkToStatic(handle, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -628,10 +628,10 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final void guard_D_V(VarHandle handle, double arg0, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
} else if (handle.isDirect() && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
} else if (direct && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -643,8 +643,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final boolean guard_DD_Z(VarHandle handle, double arg0, double arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -656,8 +656,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final double guard_DD_D(VarHandle handle, double arg0, double arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (double) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -669,8 +669,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final double guard_D_D(VarHandle handle, double arg0, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (double) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -682,8 +682,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final Object guard_LI_L(VarHandle handle, Object arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
Object r = MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
return ad.returnType.cast(r);
} else {
@ -696,10 +696,10 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final void guard_LIL_V(VarHandle handle, Object arg0, int arg1, Object arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else if (handle.isDirect() && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
} else if (direct && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -711,8 +711,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final boolean guard_LILL_Z(VarHandle handle, Object arg0, int arg1, Object arg2, Object arg3, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -724,8 +724,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final Object guard_LILL_L(VarHandle handle, Object arg0, int arg1, Object arg2, Object arg3, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
Object r = MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
return ad.returnType.cast(r);
} else {
@ -738,8 +738,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final Object guard_LIL_L(VarHandle handle, Object arg0, int arg1, Object arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
Object r = MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
return ad.returnType.cast(r);
} else {
@ -752,10 +752,10 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final void guard_LII_V(VarHandle handle, Object arg0, int arg1, int arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else if (handle.isDirect() && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
} else if (direct && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -767,8 +767,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final boolean guard_LIII_Z(VarHandle handle, Object arg0, int arg1, int arg2, int arg3, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -780,8 +780,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final int guard_LIII_I(VarHandle handle, Object arg0, int arg1, int arg2, int arg3, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -793,8 +793,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final long guard_LI_J(VarHandle handle, Object arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (long) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -806,10 +806,10 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final void guard_LIJ_V(VarHandle handle, Object arg0, int arg1, long arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else if (handle.isDirect() && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
} else if (direct && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -821,8 +821,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final boolean guard_LIJJ_Z(VarHandle handle, Object arg0, int arg1, long arg2, long arg3, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -834,8 +834,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final long guard_LIJJ_J(VarHandle handle, Object arg0, int arg1, long arg2, long arg3, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -847,8 +847,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final long guard_LIJ_J(VarHandle handle, Object arg0, int arg1, long arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -860,8 +860,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final float guard_LI_F(VarHandle handle, Object arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (float) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -873,10 +873,10 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final void guard_LIF_V(VarHandle handle, Object arg0, int arg1, float arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else if (handle.isDirect() && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
} else if (direct && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -888,8 +888,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final boolean guard_LIFF_Z(VarHandle handle, Object arg0, int arg1, float arg2, float arg3, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -901,8 +901,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final float guard_LIFF_F(VarHandle handle, Object arg0, int arg1, float arg2, float arg3, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -914,8 +914,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final float guard_LIF_F(VarHandle handle, Object arg0, int arg1, float arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -927,8 +927,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final double guard_LI_D(VarHandle handle, Object arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (double) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -940,10 +940,10 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final void guard_LID_V(VarHandle handle, Object arg0, int arg1, double arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else if (handle.isDirect() && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
} else if (direct && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -955,8 +955,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final boolean guard_LIDD_Z(VarHandle handle, Object arg0, int arg1, double arg2, double arg3, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -968,8 +968,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final double guard_LIDD_D(VarHandle handle, Object arg0, int arg1, double arg2, double arg3, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -981,8 +981,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final double guard_LID_D(VarHandle handle, Object arg0, int arg1, double arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -994,8 +994,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final int guard_LJ_I(VarHandle handle, Object arg0, long arg1, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (int) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -1007,10 +1007,10 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final void guard_LJI_V(VarHandle handle, Object arg0, long arg1, int arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else if (handle.isDirect() && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
} else if (direct && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -1022,8 +1022,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final boolean guard_LJII_Z(VarHandle handle, Object arg0, long arg1, int arg2, int arg3, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -1035,8 +1035,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final int guard_LJII_I(VarHandle handle, Object arg0, long arg1, int arg2, int arg3, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -1048,8 +1048,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final int guard_LJI_I(VarHandle handle, Object arg0, long arg1, int arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -1061,10 +1061,10 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final void guard_LJJ_V(VarHandle handle, Object arg0, long arg1, long arg2, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else if (handle.isDirect() && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
} else if (direct && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -1076,8 +1076,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final boolean guard_LJJJ_Z(VarHandle handle, Object arg0, long arg1, long arg2, long arg3, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -1089,8 +1089,8 @@ final class VarHandleGuards {
@LambdaForm.Compiled
@Hidden
static final long guard_LJJJ_J(VarHandle handle, Object arg0, long arg1, long arg2, long arg3, VarHandle.AccessDescriptor ad) throws Throwable {
handle.checkExactAccessMode(ad);
if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
boolean direct = handle.checkAccessModeThenIsDirect(ad);
if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
} else {
MethodHandle mh = handle.getMethodHandle(ad.mode);

View file

@ -695,8 +695,8 @@ final class VarHandles {
// @LambdaForm.Compiled
// @Hidden
// static final <METHOD> throws Throwable {
// handle.checkExactAccessMode(ad);
// if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
// boolean direct = handle.checkAccessModeThenIsDirect(ad);
// if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
// <RESULT_ERASED>MethodHandle.linkToStatic(<LINK_TO_STATIC_ARGS>);<RETURN_ERASED>
// } else {
// MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -710,10 +710,10 @@ final class VarHandles {
// @LambdaForm.Compiled
// @Hidden
// static final <METHOD> throws Throwable {
// handle.checkExactAccessMode(ad);
// if (handle.isDirect() && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
// boolean direct = handle.checkAccessModeThenIsDirect(ad);
// if (direct && handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
// MethodHandle.linkToStatic(<LINK_TO_STATIC_ARGS>);
// } else if (handle.isDirect() && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
// } else if (direct && handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
// MethodHandle.linkToStatic(<LINK_TO_STATIC_ARGS>);
// } else {
// MethodHandle mh = handle.getMethodHandle(ad.mode);
@ -859,9 +859,6 @@ final class VarHandles {
// List<String> LINK_TO_STATIC_ARGS = params.keySet().stream().
// collect(toList());
// LINK_TO_STATIC_ARGS.add("handle.vform.getMemberName(ad.mode)");
// List<String> LINK_TO_STATIC_ARGS_V = params.keySet().stream().
// collect(toList());
// LINK_TO_STATIC_ARGS_V.add("handle.vform.getMemberName_V(ad.mode)");
//
// List<String> LINK_TO_INVOKER_ARGS = params.keySet().stream().
// collect(toList());
@ -894,8 +891,6 @@ final class VarHandles {
// replace("<RETURN_ERASED>", RETURN_ERASED).
// replaceAll("<LINK_TO_STATIC_ARGS>", LINK_TO_STATIC_ARGS.stream().
// collect(joining(", "))).
// replaceAll("<LINK_TO_STATIC_ARGS_V>", LINK_TO_STATIC_ARGS_V.stream().
// collect(joining(", "))).
// replace("<LINK_TO_INVOKER_ARGS>", LINK_TO_INVOKER_ARGS.stream().
// collect(joining(", ")))
// .indent(4);