< prev index next >

src/jdk/nashorn/internal/parser/JSONParser.java

Print this page




 276         final Object[] objectSpill = new Object[values.size()];
 277 
 278         for (final Property property : propertyMap.getProperties()) {
 279             if (!dualFields || property.getType() == Object.class) {
 280                 objectSpill[property.getSlot()] = values.get(property.getSlot());
 281             } else {
 282                 primitiveSpill[property.getSlot()] = ObjectClassGenerator.pack((Number) values.get(property.getSlot()));
 283             }
 284         }
 285 
 286         final ScriptObject object = dualFields ?
 287                 new JD(propertyMap, primitiveSpill, objectSpill) : new JO(propertyMap, null, objectSpill);
 288         object.setInitialProto(global.getObjectPrototype());
 289         object.setArray(arrayData);
 290         return object;
 291     }
 292 
 293     private static Class<?> getType(final Object value) {
 294         if (value instanceof Integer) {
 295             return int.class;
 296         } else if (value instanceof Long) {
 297             return long.class;
 298         } else if (value instanceof Double) {
 299             return double.class;
 300         } else {
 301             return Object.class;
 302         }
 303     }
 304 
 305     private void expectColon() {
 306         skipWhiteSpace();
 307         final int n = next();
 308         if (n != ':') {
 309             throw expectedError(pos - 1, ":", toString(n));
 310         }
 311     }
 312 
 313     private Object parseArray() {
 314         ArrayData arrayData = ArrayData.EMPTY_ARRAY;
 315         int state = STATE_EMPTY;
 316 
 317         assert peek() == '[';


 460             skipDigits();
 461         }
 462 
 463         // exponent
 464         c = peek();
 465         if (c == 'e' || c == 'E') {
 466             pos++;
 467             c = next();
 468             if (c == '-' || c == '+') {
 469                 c = next();
 470             }
 471             if (!isDigit(c)) {
 472                 throw numberError(pos - 1);
 473             }
 474             skipDigits();
 475         }
 476 
 477         final double d = Double.parseDouble(source.substring(start, pos));
 478         if (JSType.isRepresentableAsInt(d)) {
 479             return (int) d;
 480         } else if (JSType.isRepresentableAsLong(d)) {
 481             return (long) d;
 482         }
 483         return d;
 484     }
 485 
 486     private Object parseKeyword(final String keyword, final Object value) {
 487         if (!source.regionMatches(pos, keyword, 0, keyword.length())) {
 488             throw expectedError(pos, "json literal", "ident");
 489         }
 490         pos += keyword.length();
 491         return value;
 492     }
 493 
 494     private int peek() {
 495         if (pos >= length) {
 496             return -1;
 497         }
 498         return source.charAt(pos);
 499     }
 500 
 501     private int next() {




 276         final Object[] objectSpill = new Object[values.size()];
 277 
 278         for (final Property property : propertyMap.getProperties()) {
 279             if (!dualFields || property.getType() == Object.class) {
 280                 objectSpill[property.getSlot()] = values.get(property.getSlot());
 281             } else {
 282                 primitiveSpill[property.getSlot()] = ObjectClassGenerator.pack((Number) values.get(property.getSlot()));
 283             }
 284         }
 285 
 286         final ScriptObject object = dualFields ?
 287                 new JD(propertyMap, primitiveSpill, objectSpill) : new JO(propertyMap, null, objectSpill);
 288         object.setInitialProto(global.getObjectPrototype());
 289         object.setArray(arrayData);
 290         return object;
 291     }
 292 
 293     private static Class<?> getType(final Object value) {
 294         if (value instanceof Integer) {
 295             return int.class;


 296         } else if (value instanceof Double) {
 297             return double.class;
 298         } else {
 299             return Object.class;
 300         }
 301     }
 302 
 303     private void expectColon() {
 304         skipWhiteSpace();
 305         final int n = next();
 306         if (n != ':') {
 307             throw expectedError(pos - 1, ":", toString(n));
 308         }
 309     }
 310 
 311     private Object parseArray() {
 312         ArrayData arrayData = ArrayData.EMPTY_ARRAY;
 313         int state = STATE_EMPTY;
 314 
 315         assert peek() == '[';


 458             skipDigits();
 459         }
 460 
 461         // exponent
 462         c = peek();
 463         if (c == 'e' || c == 'E') {
 464             pos++;
 465             c = next();
 466             if (c == '-' || c == '+') {
 467                 c = next();
 468             }
 469             if (!isDigit(c)) {
 470                 throw numberError(pos - 1);
 471             }
 472             skipDigits();
 473         }
 474 
 475         final double d = Double.parseDouble(source.substring(start, pos));
 476         if (JSType.isRepresentableAsInt(d)) {
 477             return (int) d;


 478         }
 479         return d;
 480     }
 481 
 482     private Object parseKeyword(final String keyword, final Object value) {
 483         if (!source.regionMatches(pos, keyword, 0, keyword.length())) {
 484             throw expectedError(pos, "json literal", "ident");
 485         }
 486         pos += keyword.length();
 487         return value;
 488     }
 489 
 490     private int peek() {
 491         if (pos >= length) {
 492             return -1;
 493         }
 494         return source.charAt(pos);
 495     }
 496 
 497     private int next() {


< prev index next >