Chromium Code Reviews| Index: src/json-parser.cc |
| =================================================================== |
| --- src/json-parser.cc (revision 8071) |
| +++ src/json-parser.cc (working copy) |
| @@ -380,7 +380,7 @@ |
| while (c0_ != '"') { |
| // Create new seq string |
| if (count >= kInitialSpecialStringSize * allocation_count) { |
| - allocation_count++; |
| + allocation_count = allocation_count * 2; |
| int new_size = allocation_count * kInitialSpecialStringSize; |
| Handle<String> new_two_byte = |
| isolate()->factory()->NewRawTwoByteString(new_size, |
| @@ -443,10 +443,18 @@ |
| Advance(); |
| // Shrink the the string to our length. |
| - isolate()->heap()-> |
| - new_space()-> |
| - ShrinkStringAtAllocationBoundary<SeqTwoByteString>(*seq_two_byte, |
| - count); |
| + if (isolate()->heap()->InNewSpace(*seq_two_byte)) { |
| + isolate()->heap()->new_space()-> |
| + ShrinkStringAtAllocationBoundary<SeqTwoByteString>(*seq_two_byte, |
| + count); |
| + } else { |
| + int string_size = SeqTwoByteString::SizeFor(count); |
| + int allocated_string_size = |
| + SeqTwoByteString::SizeFor(kInitialSpecialStringSize * allocation_count); |
| + int delta = allocated_string_size - string_size; |
| + Address start_filler_object = seq_two_byte->address() + delta; |
|
William Hesse
2011/05/26 14:00:52
delta is not right here. Looks good to me.
Rico
2011/05/26 14:02:56
Done.
|
| + isolate()->heap()->CreateFillerObjectAt(start_filler_object, delta); |
| + } |
| string_val_ = isolate()->factory()->NewConsString(ascii, seq_two_byte); |
| return Token::STRING; |
| } |