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 |