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) > |