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:
yangguo@chromium.org 2012-02-29 14:25:24 +00:00
parent b854d09721
commit 84eea3e531

View File

@ -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;