Skip to content

Commit 75d5147

Browse files
committed
Use a common read/write for object locations.
1 parent e79ab92 commit 75d5147

File tree

1 file changed

+23
-14
lines changed
  • truffle/src/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object

1 file changed

+23
-14
lines changed

truffle/src/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Location.java

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -206,17 +206,23 @@ protected double getDouble(DynamicObject store, boolean guard) throws Unexpected
206206
final Object getInternal(DynamicObject store, Shape expectedShape, boolean guard) {
207207
if (this instanceof ObjectLocation objectLocation) {
208208
Object value;
209-
if (field == null) {
210-
Object array = getObjectArray(store, guard);
211-
long offset = getObjectArrayOffset();
212-
value = UnsafeAccess.unsafeGetObject(array, offset, guard, this);
213-
} else {
214-
if (UseVarHandle) {
215-
value = field.varHandle().get(store);
209+
done: {
210+
Object base;
211+
long offset;
212+
if (field == null) {
213+
base = getObjectArray(store, guard);
214+
offset = getObjectArrayOffset();
216215
} else {
217-
field.receiverCheck(store);
218-
value = UnsafeAccess.unsafeGetObject(store, getFieldOffset(), guard, this);
216+
if (UseVarHandle) {
217+
value = field.varHandle().get(store);
218+
break done;
219+
} else {
220+
field.receiverCheck(store);
221+
base = store;
222+
offset = getFieldOffset();
223+
}
219224
}
225+
value = UnsafeAccess.unsafeGetObject(base, offset, guard, this);
220226
}
221227
return CompilerDirectives.inInterpreter() ? value : objectLocation.assumedTypeCast(value, guard);
222228
} else {
@@ -526,19 +532,22 @@ final void setInternal(DynamicObject receiver, Object value, boolean guard, Shap
526532
CompilerDirectives.transferToInterpreterAndInvalidate();
527533
objectLocation.invalidateTypeAssumption(value);
528534
}
535+
Object base;
536+
long offset;
529537
if (field == null) {
530-
Object array = getObjectArray(receiver, guard);
531-
long offset = getObjectArrayOffset();
532-
UnsafeAccess.unsafePutObject(array, offset, value, this);
538+
base = getObjectArray(receiver, guard);
539+
offset = getObjectArrayOffset();
533540
} else {
534541
if (UseVarHandle) {
535542
field.varHandle().set(receiver, value);
543+
return;
536544
} else {
537545
field.receiverCheck(receiver);
538-
long offset = getFieldOffset();
539-
UnsafeAccess.unsafePutObject(receiver, offset, value, this);
546+
base = receiver;
547+
offset = getFieldOffset();
540548
}
541549
}
550+
UnsafeAccess.unsafePutObject(base, offset, value, this);
542551
} else { // primitive location
543552
long longValue;
544553
if (isIntLocation()) {

0 commit comments

Comments
 (0)