233 final long longIndex = ArrayIndex.toLongIndex(index); 234 ArrayData newArrayData = arrayData; 235 if (longIndex >= oldLength) { 236 newArrayData = newArrayData.ensure(longIndex); 237 if (longIndex > oldLength) { 238 newArrayData = newArrayData.delete(oldLength, longIndex - 1); 239 } 240 } 241 return newArrayData.set(index, value, false); 242 } 243 244 private static PropertyMap addObjectProperty(final PropertyMap propertyMap, final List<Object> values, 245 final String id, final Object value) { 246 final Property oldProperty = propertyMap.findProperty(id); 247 final Property newProperty; 248 final PropertyMap newMap; 249 final Class<?> type = ObjectClassGenerator.OBJECT_FIELDS_ONLY ? Object.class : getType(value); 250 251 if (oldProperty != null) { 252 values.set(oldProperty.getSlot(), value); 253 newProperty = new SpillProperty(id, 0, oldProperty.getSlot()); 254 newProperty.setType(type); 255 newMap = propertyMap.replaceProperty(oldProperty, newProperty);; 256 } else { 257 values.add(value); 258 newProperty = new SpillProperty(id, 0, propertyMap.size()); 259 newProperty.setType(type); 260 newMap = propertyMap.addProperty(newProperty); 261 } 262 263 return newMap; 264 } 265 266 private Object createObject(final PropertyMap propertyMap, final List<Object> values, final ArrayData arrayData) { 267 final long[] primitiveSpill = new long[values.size()]; 268 final Object[] objectSpill = new Object[values.size()]; 269 270 for (final Property property : propertyMap.getProperties()) { 271 if (property.getType() == Object.class) { 272 objectSpill[property.getSlot()] = values.get(property.getSlot()); 273 } else { 274 primitiveSpill[property.getSlot()] = ObjectClassGenerator.pack((Number) values.get(property.getSlot())); 275 } 276 } 277 278 final ScriptObject object = new JO(propertyMap, primitiveSpill, objectSpill); 279 object.setInitialProto(global.getObjectPrototype()); 280 object.setArray(arrayData); | 233 final long longIndex = ArrayIndex.toLongIndex(index); 234 ArrayData newArrayData = arrayData; 235 if (longIndex >= oldLength) { 236 newArrayData = newArrayData.ensure(longIndex); 237 if (longIndex > oldLength) { 238 newArrayData = newArrayData.delete(oldLength, longIndex - 1); 239 } 240 } 241 return newArrayData.set(index, value, false); 242 } 243 244 private static PropertyMap addObjectProperty(final PropertyMap propertyMap, final List<Object> values, 245 final String id, final Object value) { 246 final Property oldProperty = propertyMap.findProperty(id); 247 final Property newProperty; 248 final PropertyMap newMap; 249 final Class<?> type = ObjectClassGenerator.OBJECT_FIELDS_ONLY ? Object.class : getType(value); 250 251 if (oldProperty != null) { 252 values.set(oldProperty.getSlot(), value); 253 newMap = propertyMap.replaceProperty(oldProperty, new SpillProperty(id, 0, oldProperty.getSlot(), type));; 254 } else { 255 values.add(value); 256 newMap = propertyMap.addProperty(new SpillProperty(id, 0, propertyMap.size(), type)); 257 } 258 259 return newMap; 260 } 261 262 private Object createObject(final PropertyMap propertyMap, final List<Object> values, final ArrayData arrayData) { 263 final long[] primitiveSpill = new long[values.size()]; 264 final Object[] objectSpill = new Object[values.size()]; 265 266 for (final Property property : propertyMap.getProperties()) { 267 if (property.getType() == Object.class) { 268 objectSpill[property.getSlot()] = values.get(property.getSlot()); 269 } else { 270 primitiveSpill[property.getSlot()] = ObjectClassGenerator.pack((Number) values.get(property.getSlot())); 271 } 272 } 273 274 final ScriptObject object = new JO(propertyMap, primitiveSpill, objectSpill); 275 object.setInitialProto(global.getObjectPrototype()); 276 object.setArray(arrayData); |