src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/parser/JSONParser.java

Print this page




 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);