| Index: src/json-parser.h | 
| diff --git a/src/json-parser.h b/src/json-parser.h | 
| index 28ef8b33c8be019fb465830650d48bf41c40b23b..8561b0414de37b31488ed64c45992b377a0cbeb7 100644 | 
| --- a/src/json-parser.h | 
| +++ b/src/json-parser.h | 
| @@ -501,10 +501,10 @@ Handle<String> JsonParser<seq_ascii>::SlowScanJsonString( | 
| int count = end - start; | 
| int max_length = count + source_length_ - position_; | 
| int length = Min(max_length, Max(kInitialSpecialStringLength, 2 * count)); | 
| -  Handle<StringType> seq_str = | 
| +  Handle<StringType> seq_string = | 
| NewRawString<StringType>(factory(), length, pretenure_); | 
| // Copy prefix into seq_str. | 
| -  SinkChar* dest = seq_str->GetChars(); | 
| +  SinkChar* dest = seq_string->GetChars(); | 
| String::WriteToFlat(*prefix, dest, start, end); | 
|  | 
| while (c0_ != '"') { | 
| @@ -512,7 +512,7 @@ Handle<String> JsonParser<seq_ascii>::SlowScanJsonString( | 
| if (c0_ < 0x20) return Handle<String>::null(); | 
| if (count >= length) { | 
| // We need to create a longer sequential string for the result. | 
| -      return SlowScanJsonString<StringType, SinkChar>(seq_str, 0, count); | 
| +      return SlowScanJsonString<StringType, SinkChar>(seq_string, 0, count); | 
| } | 
| if (c0_ != '\\') { | 
| // If the sink can contain UC16 characters, or source_ contains only | 
| @@ -522,11 +522,11 @@ Handle<String> JsonParser<seq_ascii>::SlowScanJsonString( | 
| if (sizeof(SinkChar) == kUC16Size || | 
| seq_ascii || | 
| c0_ <= String::kMaxOneByteCharCode) { | 
| -        SeqStringSet(seq_str, count++, c0_); | 
| +        SeqStringSet(seq_string, count++, c0_); | 
| Advance(); | 
| } else { | 
| // StringType is SeqOneByteString and we just read a non-ASCII char. | 
| -        return SlowScanJsonString<SeqTwoByteString, uc16>(seq_str, 0, count); | 
| +        return SlowScanJsonString<SeqTwoByteString, uc16>(seq_string, 0, count); | 
| } | 
| } else { | 
| Advance();  // Advance past the \. | 
| @@ -534,22 +534,22 @@ Handle<String> JsonParser<seq_ascii>::SlowScanJsonString( | 
| case '"': | 
| case '\\': | 
| case '/': | 
| -          SeqStringSet(seq_str, count++, c0_); | 
| +          SeqStringSet(seq_string, count++, c0_); | 
| break; | 
| case 'b': | 
| -          SeqStringSet(seq_str, count++, '\x08'); | 
| +          SeqStringSet(seq_string, count++, '\x08'); | 
| break; | 
| case 'f': | 
| -          SeqStringSet(seq_str, count++, '\x0c'); | 
| +          SeqStringSet(seq_string, count++, '\x0c'); | 
| break; | 
| case 'n': | 
| -          SeqStringSet(seq_str, count++, '\x0a'); | 
| +          SeqStringSet(seq_string, count++, '\x0a'); | 
| break; | 
| case 'r': | 
| -          SeqStringSet(seq_str, count++, '\x0d'); | 
| +          SeqStringSet(seq_string, count++, '\x0d'); | 
| break; | 
| case 't': | 
| -          SeqStringSet(seq_str, count++, '\x09'); | 
| +          SeqStringSet(seq_string, count++, '\x09'); | 
| break; | 
| case 'u': { | 
| uc32 value = 0; | 
| @@ -563,13 +563,13 @@ Handle<String> JsonParser<seq_ascii>::SlowScanJsonString( | 
| } | 
| if (sizeof(SinkChar) == kUC16Size || | 
| value <= String::kMaxOneByteCharCode) { | 
| -            SeqStringSet(seq_str, count++, value); | 
| +            SeqStringSet(seq_string, count++, value); | 
| break; | 
| } else { | 
| // StringType is SeqOneByteString and we just read a non-ASCII char. | 
| position_ -= 6;  // Rewind position_ to \ in \uxxxx. | 
| Advance(); | 
| -            return SlowScanJsonString<SeqTwoByteString, uc16>(seq_str, | 
| +            return SlowScanJsonString<SeqTwoByteString, uc16>(seq_string, | 
| 0, | 
| count); | 
| } | 
| @@ -580,23 +580,13 @@ Handle<String> JsonParser<seq_ascii>::SlowScanJsonString( | 
| Advance(); | 
| } | 
| } | 
| -  // Shrink seq_string length to count. | 
| -  if (isolate()->heap()->InNewSpace(*seq_str)) { | 
| -    isolate()->heap()->new_space()-> | 
| -        template ShrinkStringAtAllocationBoundary<StringType>( | 
| -            *seq_str, count); | 
| -  } else { | 
| -    int string_size = StringType::SizeFor(count); | 
| -    int allocated_string_size = StringType::SizeFor(length); | 
| -    int delta = allocated_string_size - string_size; | 
| -    Address start_filler_object = seq_str->address() + string_size; | 
| -    seq_str->set_length(count); | 
| -    isolate()->heap()->CreateFillerObjectAt(start_filler_object, delta); | 
| -  } | 
| + | 
| ASSERT_EQ('"', c0_); | 
| // Advance past the last '"'. | 
| AdvanceSkipWhitespace(); | 
| -  return seq_str; | 
| + | 
| +  // Shrink seq_string length to count and return. | 
| +  return SeqString::Truncate(seq_string, count); | 
| } | 
|  | 
|  | 
| @@ -623,8 +613,8 @@ Handle<String> JsonParser<seq_ascii>::ScanJsonString() { | 
| int beg_pos = position_; | 
| position_ = position; | 
| return SlowScanJsonString<SeqOneByteString, uint8_t>(source_, | 
| -                                                            beg_pos, | 
| -                                                            position_); | 
| +                                                             beg_pos, | 
| +                                                             position_); | 
| } | 
| if (c0 < 0x20) return Handle<String>::null(); | 
| if (static_cast<uint32_t>(c0) > | 
|  |