@@ -107,13 +107,13 @@ public ExtLocation declaredLocation(Object value) {
107
107
protected Location moveLocation (Location oldLocation ) {
108
108
final boolean decorateFinal = false ;
109
109
if (oldLocation instanceof IntLocation ) {
110
- return newIntLocation (decorateFinal , oldLocation );
110
+ return newIntLocation (decorateFinal , oldLocation , NO_VALUE );
111
111
} else if (oldLocation instanceof DoubleLocation ) {
112
- return newDoubleLocation (decorateFinal , ((DoubleLocation ) oldLocation ).isImplicitCastIntToDouble (), oldLocation );
112
+ return newDoubleLocation (decorateFinal , ((DoubleLocation ) oldLocation ).isImplicitCastIntToDouble (), oldLocation , NO_VALUE );
113
113
} else if (oldLocation instanceof LongLocation ) {
114
- return newLongLocation (decorateFinal , ((LongLocation ) oldLocation ).isImplicitCastIntToLong (), oldLocation );
114
+ return newLongLocation (decorateFinal , ((LongLocation ) oldLocation ).isImplicitCastIntToLong (), oldLocation , NO_VALUE );
115
115
} else if (oldLocation instanceof BooleanLocation ) {
116
- return newBooleanLocation (decorateFinal , oldLocation );
116
+ return newBooleanLocation (decorateFinal , oldLocation , NO_VALUE );
117
117
} else if (oldLocation instanceof AbstractObjectFieldLocation ) {
118
118
return newObjectLocation (decorateFinal , oldLocation , NO_VALUE );
119
119
} else if (oldLocation instanceof AbstractObjectArrayLocation ) {
@@ -266,10 +266,10 @@ private static int tryAllocatePrimitiveSlot(ExtLayout l, int startIndex, final i
266
266
267
267
@ Override
268
268
public Location newIntLocation (boolean useFinal ) {
269
- return newIntLocation (false , null );
269
+ return newIntLocation (false , null , NO_VALUE );
270
270
}
271
271
272
- private Location newIntLocation (boolean decorateFinal , Location oldLocation ) {
272
+ private Location newIntLocation (boolean decorateFinal , Location oldLocation , Object value ) {
273
273
if (PrimitiveLocations && IntegerLocations ) {
274
274
ExtLayout l = getLayout ();
275
275
if (InObjectFields ) {
@@ -288,15 +288,15 @@ private Location newIntLocation(boolean decorateFinal, Location oldLocation) {
288
288
return advance (location );
289
289
}
290
290
}
291
- return newObjectLocation (decorateFinal , null , NO_VALUE );
291
+ return newObjectLocation (decorateFinal , oldLocation , value );
292
292
}
293
293
294
294
@ Override
295
295
public Location newDoubleLocation (boolean useFinal ) {
296
- return newDoubleLocation (false , getLayout ().isAllowedIntToDouble (), null );
296
+ return newDoubleLocation (false , getLayout ().isAllowedIntToDouble (), null , NO_VALUE );
297
297
}
298
298
299
- private Location newDoubleLocation (boolean decorateFinal , boolean allowIntToDouble , Location oldLocation ) {
299
+ private Location newDoubleLocation (boolean decorateFinal , boolean allowIntToDouble , Location oldLocation , Object value ) {
300
300
if (PrimitiveLocations && DoubleLocations ) {
301
301
ExtLayout l = getLayout ();
302
302
if (InObjectFields ) {
@@ -316,7 +316,7 @@ private Location newDoubleLocation(boolean decorateFinal, boolean allowIntToDoub
316
316
return advance (location );
317
317
}
318
318
}
319
- return newObjectLocation (decorateFinal , null , NO_VALUE );
319
+ return newObjectLocation (decorateFinal , oldLocation , value );
320
320
}
321
321
322
322
/**
@@ -339,10 +339,10 @@ private static int alignArrayIndex(int index, int slotSize) {
339
339
340
340
@ Override
341
341
public Location newLongLocation (boolean useFinal ) {
342
- return newLongLocation (false , getLayout ().isAllowedIntToLong (), null );
342
+ return newLongLocation (false , getLayout ().isAllowedIntToLong (), null , NO_VALUE );
343
343
}
344
344
345
- private Location newLongLocation (boolean decorateFinal , boolean allowIntToLong , Location oldLocation ) {
345
+ private Location newLongLocation (boolean decorateFinal , boolean allowIntToLong , Location oldLocation , Object value ) {
346
346
if (PrimitiveLocations && LongLocations ) {
347
347
ExtLayout l = getLayout ();
348
348
if (InObjectFields ) {
@@ -362,15 +362,15 @@ private Location newLongLocation(boolean decorateFinal, boolean allowIntToLong,
362
362
return advance (location );
363
363
}
364
364
}
365
- return newObjectLocation (decorateFinal , null , NO_VALUE );
365
+ return newObjectLocation (decorateFinal , oldLocation , value );
366
366
}
367
367
368
368
@ Override
369
369
public Location newBooleanLocation (boolean useFinal ) {
370
- return newBooleanLocation (false , null );
370
+ return newBooleanLocation (false , null , NO_VALUE );
371
371
}
372
372
373
- private Location newBooleanLocation (boolean decorateFinal , Location oldLocation ) {
373
+ private Location newBooleanLocation (boolean decorateFinal , Location oldLocation , Object value ) {
374
374
if (PrimitiveLocations && BooleanLocations && InObjectFields ) {
375
375
ExtLayout l = getLayout ();
376
376
int fieldIndex = tryAllocatePrimitiveSlot (l , primitiveFieldSize , Integer .BYTES );
@@ -383,7 +383,7 @@ private Location newBooleanLocation(boolean decorateFinal, Location oldLocation)
383
383
}
384
384
}
385
385
}
386
- return newObjectLocation (decorateFinal , null , NO_VALUE );
386
+ return newObjectLocation (decorateFinal , oldLocation , value );
387
387
}
388
388
389
389
@ Override
@@ -411,9 +411,9 @@ protected Location locationForValueUpcast(Object value, Location oldLocation, in
411
411
boolean allowedIntToDouble = getLayout ().isAllowedIntToDouble () || Flags .isImplicitCastIntToDouble (putFlags );
412
412
boolean allowedIntToLong = getLayout ().isAllowedIntToLong () || Flags .isImplicitCastIntToLong (putFlags );
413
413
if (value instanceof Double && allowedIntToDouble ) {
414
- newLocation = newDoubleLocation (decorateFinal , allowedIntToDouble , oldLocation );
414
+ newLocation = newDoubleLocation (decorateFinal , allowedIntToDouble , oldLocation , NO_VALUE );
415
415
} else if (value instanceof Long && allowedIntToLong ) {
416
- newLocation = newLongLocation (decorateFinal , allowedIntToLong , oldLocation );
416
+ newLocation = newLongLocation (decorateFinal , allowedIntToLong , oldLocation , NO_VALUE );
417
417
}
418
418
}
419
419
@@ -456,14 +456,14 @@ protected Location locationForValue(Object value, boolean nonNull, int putFlags)
456
456
}
457
457
boolean decorateFinal = true ;
458
458
if (value instanceof Integer ) {
459
- return newIntLocation (decorateFinal , null );
459
+ return newIntLocation (decorateFinal , null , value );
460
460
} else if (value instanceof Double ) {
461
- return newDoubleLocation (decorateFinal , getLayout ().isAllowedIntToDouble (), null );
461
+ return newDoubleLocation (decorateFinal , getLayout ().isAllowedIntToDouble (), null , value );
462
462
} else if (value instanceof Long ) {
463
- return newLongLocation (decorateFinal , getLayout ().isAllowedIntToLong (), null );
463
+ return newLongLocation (decorateFinal , getLayout ().isAllowedIntToLong (), null , value );
464
464
} else if (value instanceof Boolean ) {
465
- return newBooleanLocation (decorateFinal , null );
466
- } else if (TypedObjectLocations && value != null && value . getClass () != null ) {
465
+ return newBooleanLocation (decorateFinal , null , value );
466
+ } else if (TypedObjectLocations && value != null ) {
467
467
return newTypedObjectLocation (value .getClass (), nonNull , decorateFinal , null , value );
468
468
}
469
469
return newObjectLocation (decorateFinal , null , value );
0 commit comments