mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8254354: Add a withInvokeExactBehavior() VarHandle combinator
Reviewed-by: psandoz, chegar
This commit is contained in:
parent
d6f1463cb3
commit
0a41ca6b75
12 changed files with 1660 additions and 459 deletions
|
@ -68,8 +68,8 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
|||
private static abstract class ByteArrayViewVarHandle extends VarHandle {
|
||||
final boolean be;
|
||||
|
||||
ByteArrayViewVarHandle(VarForm form, boolean be) {
|
||||
super(form);
|
||||
ByteArrayViewVarHandle(VarForm form, boolean be, boolean exact) {
|
||||
super(form, exact);
|
||||
this.be = be;
|
||||
}
|
||||
}
|
||||
|
@ -77,12 +77,30 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
|||
static final class ArrayHandle extends ByteArrayViewVarHandle {
|
||||
|
||||
ArrayHandle(boolean be) {
|
||||
super(ArrayHandle.FORM, be);
|
||||
this(be, false);
|
||||
}
|
||||
|
||||
private ArrayHandle(boolean be, boolean exact) {
|
||||
super(ArrayHandle.FORM, be, exact);
|
||||
}
|
||||
|
||||
@Override
|
||||
final MethodType accessModeTypeUncached(AccessMode accessMode) {
|
||||
return accessMode.at.accessModeType(byte[].class, $type$.class, int.class);
|
||||
public ArrayHandle withInvokeExactBehavior() {
|
||||
return hasInvokeExactBehavior()
|
||||
? this
|
||||
: new ArrayHandle(be, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayHandle withInvokeBehavior() {
|
||||
return !hasInvokeExactBehavior()
|
||||
? this
|
||||
: new ArrayHandle(be, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
final MethodType accessModeTypeUncached(AccessType at) {
|
||||
return at.accessModeType(byte[].class, $type$.class, int.class);
|
||||
}
|
||||
|
||||
@ForceInline
|
||||
|
@ -555,12 +573,30 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase {
|
|||
static final class ByteBufferHandle extends ByteArrayViewVarHandle {
|
||||
|
||||
ByteBufferHandle(boolean be) {
|
||||
super(ByteBufferHandle.FORM, be);
|
||||
this(be, false);
|
||||
}
|
||||
|
||||
private ByteBufferHandle(boolean be, boolean exact) {
|
||||
super(ByteBufferHandle.FORM, be, exact);
|
||||
}
|
||||
|
||||
@Override
|
||||
final MethodType accessModeTypeUncached(AccessMode accessMode) {
|
||||
return accessMode.at.accessModeType(ByteBuffer.class, $type$.class, int.class);
|
||||
public ByteBufferHandle withInvokeExactBehavior() {
|
||||
return hasInvokeExactBehavior()
|
||||
? this
|
||||
: new ByteBufferHandle(be, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ByteBufferHandle withInvokeBehavior() {
|
||||
return !hasInvokeExactBehavior()
|
||||
? this
|
||||
: new ByteBufferHandle(be, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
final MethodType accessModeTypeUncached(AccessType at) {
|
||||
return at.accessModeType(ByteBuffer.class, $type$.class, int.class);
|
||||
}
|
||||
|
||||
@ForceInline
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue