| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_JSON_PARSER_H_ | 5 #ifndef V8_JSON_PARSER_H_ |
| 6 #define V8_JSON_PARSER_H_ | 6 #define V8_JSON_PARSER_H_ |
| 7 | 7 |
| 8 #include "src/v8.h" | 8 #include "src/v8.h" |
| 9 | 9 |
| 10 #include "src/char-predicates-inl.h" | 10 #include "src/char-predicates-inl.h" |
| (...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 304 ParseElementResult JsonParser<seq_one_byte>::ParseElement( | 304 ParseElementResult JsonParser<seq_one_byte>::ParseElement( |
| 305 Handle<JSObject> json_object) { | 305 Handle<JSObject> json_object) { |
| 306 uint32_t index = 0; | 306 uint32_t index = 0; |
| 307 // Maybe an array index, try to parse it. | 307 // Maybe an array index, try to parse it. |
| 308 if (c0_ == '0') { | 308 if (c0_ == '0') { |
| 309 // With a leading zero, the string has to be "0" only to be an index. | 309 // With a leading zero, the string has to be "0" only to be an index. |
| 310 Advance(); | 310 Advance(); |
| 311 } else { | 311 } else { |
| 312 do { | 312 do { |
| 313 int d = c0_ - '0'; | 313 int d = c0_ - '0'; |
| 314 if (index > 429496729U - ((d > 5) ? 1 : 0)) break; | 314 if (index > 429496729U - ((d + 3) >> 3)) break; |
| 315 index = (index * 10) + d; | 315 index = (index * 10) + d; |
| 316 Advance(); | 316 Advance(); |
| 317 } while (IsDecimalDigit(c0_)); | 317 } while (IsDecimalDigit(c0_)); |
| 318 } | 318 } |
| 319 | 319 |
| 320 if (c0_ == '"') { | 320 if (c0_ == '"') { |
| 321 // Successfully parsed index, parse and store element. | 321 // Successfully parsed index, parse and store element. |
| 322 AdvanceSkipWhitespace(); | 322 AdvanceSkipWhitespace(); |
| 323 | 323 |
| 324 if (c0_ == ':') { | 324 if (c0_ == ':') { |
| (...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 834 | 834 |
| 835 DCHECK_EQ('"', c0_); | 835 DCHECK_EQ('"', c0_); |
| 836 // Advance past the last '"'. | 836 // Advance past the last '"'. |
| 837 AdvanceSkipWhitespace(); | 837 AdvanceSkipWhitespace(); |
| 838 return result; | 838 return result; |
| 839 } | 839 } |
| 840 | 840 |
| 841 } } // namespace v8::internal | 841 } } // namespace v8::internal |
| 842 | 842 |
| 843 #endif // V8_JSON_PARSER_H_ | 843 #endif // V8_JSON_PARSER_H_ |
| OLD | NEW |