Inline one level of recursive call of WriteToFlat for the common case of cons string list.
BUG= TEST= Review URL: https://chromiumcodereview.appspot.com/9536011 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@10871 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
b854d09721
commit
84eea3e531
@ -6862,10 +6862,21 @@ void String::WriteToFlat(String* src,
|
||||
// Left hand side is longer. Recurse over right.
|
||||
if (to > boundary) {
|
||||
String* second = cons_string->second();
|
||||
WriteToFlat(second,
|
||||
sink + boundary - from,
|
||||
0,
|
||||
// When repeatedly appending to a string, we get a cons string that
|
||||
// is unbalanced to the left, a list, essentially. We inline the
|
||||
// common case of sequential ascii right child.
|
||||
if (to - boundary == 1) {
|
||||
sink[boundary - from] = static_cast<sinkchar>(second->Get(0));
|
||||
} else if (second->IsSeqAsciiString()) {
|
||||
CopyChars(sink + boundary - from,
|
||||
SeqAsciiString::cast(second)->GetChars(),
|
||||
to - boundary);
|
||||
} else {
|
||||
WriteToFlat(second,
|
||||
sink + boundary - from,
|
||||
0,
|
||||
to - boundary);
|
||||
}
|
||||
to = boundary;
|
||||
}
|
||||
source = first;
|
||||
|
Loading…
Reference in New Issue
Block a user