@@ -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