Revision: 20572
Author: [email protected]
Date: Tue Apr 8 09:49:49 2014 UTC
Log: Implement handlified String::Flatten.
[email protected]
Review URL: https://codereview.chromium.org/228093004
http://code.google.com/p/v8/source/detail?r=20572
Modified:
/branches/bleeding_edge/src/api.cc
/branches/bleeding_edge/src/factory.cc
/branches/bleeding_edge/src/handles.cc
/branches/bleeding_edge/src/handles.h
/branches/bleeding_edge/src/hydrogen.cc
/branches/bleeding_edge/src/json-parser.h
/branches/bleeding_edge/src/json-stringifier.h
/branches/bleeding_edge/src/jsregexp.cc
/branches/bleeding_edge/src/liveedit.cc
/branches/bleeding_edge/src/messages.cc
/branches/bleeding_edge/src/objects-debug.cc
/branches/bleeding_edge/src/objects-inl.h
/branches/bleeding_edge/src/objects.cc
/branches/bleeding_edge/src/objects.h
/branches/bleeding_edge/src/parser.cc
/branches/bleeding_edge/src/runtime.cc
/branches/bleeding_edge/test/cctest/test-api.cc
/branches/bleeding_edge/test/cctest/test-strings.cc
=======================================
--- /branches/bleeding_edge/src/api.cc Tue Apr 8 07:04:13 2014 UTC
+++ /branches/bleeding_edge/src/api.cc Tue Apr 8 09:49:49 2014 UTC
@@ -2312,8 +2312,8 @@
EnsureInitializedForIsolate(isolate, "v8::JSON::Parse");
ENTER_V8(isolate);
i::HandleScope scope(isolate);
- i::Handle<i::String> source = i::Handle<i::String>(
- FlattenGetString(Utils::OpenHandle(*json_string)));
+ i::Handle<i::String> source =
+ i::String::Flatten(Utils::OpenHandle(*json_string));
EXCEPTION_PREAMBLE(isolate);
i::MaybeHandle<i::Object> maybe_result =
source->IsSeqOneByteString() ? i::JsonParser<true>::Parse(source)
@@ -4676,7 +4676,7 @@
ENTER_V8(isolate);
i::Handle<i::String> str = Utils::OpenHandle(this);
if (options & HINT_MANY_WRITES_EXPECTED) {
- FlattenString(str); // Flatten the string for efficiency.
+ str = i::String::Flatten(str); // Flatten the string for efficiency.
}
const int string_length = str->length();
bool write_null = !(options & NO_NULL_TERMINATION);
@@ -4711,7 +4711,7 @@
}
}
// Recursive slow path can potentially be unreasonable slow. Flatten.
- str = FlattenGetString(str);
+ str = i::String::Flatten(str);
Utf8WriterVisitor writer(buffer, capacity, false, replace_invalid_utf8);
i::String::VisitFlat(&writer, *str);
return writer.CompleteWrite(write_null, nchars_ref);
@@ -4733,7 +4733,7 @@
if (options & String::HINT_MANY_WRITES_EXPECTED) {
// Flatten the string for efficiency. This applies whether we are
// using StringCharacterStream or Get(i) to access the characters.
- FlattenString(str);
+ str = i::String::Flatten(str);
}
int end = start + length;
if ((length == -1) || (length > str->length() - start) )
=======================================
--- /branches/bleeding_edge/src/factory.cc Tue Apr 8 06:45:53 2014 UTC
+++ /branches/bleeding_edge/src/factory.cc Tue Apr 8 09:49:49 2014 UTC
@@ -529,7 +529,7 @@
str = Handle<String>(slice->parent(), isolate());
offset += slice->offset();
} else {
- str = FlattenGetString(str);
+ str = String::Flatten(str);
}
ASSERT(str->IsSeqString() || str->IsExternalString());
=======================================
--- /branches/bleeding_edge/src/handles.cc Tue Apr 8 07:04:13 2014 UTC
+++ /branches/bleeding_edge/src/handles.cc Tue Apr 8 09:49:49 2014 UTC
@@ -132,16 +132,6 @@
constructor->GetHeap()->ReinitializeJSGlobalProxy(*constructor,
*global),
JSGlobalProxy);
}
-
-
-void FlattenString(Handle<String> string) {
- CALL_HEAP_FUNCTION_VOID(string->GetIsolate(), string->TryFlatten());
-}
-
-
-Handle<String> FlattenGetString(Handle<String> string) {
- CALL_HEAP_FUNCTION(string->GetIsolate(), string->TryFlatten(), String);
-}
Handle<Object> GetProperty(Handle<JSReceiver> obj,
@@ -262,7 +252,7 @@
Handle<FixedArray> CalculateLineEnds(Handle<String> src,
bool with_last_line) {
- src = FlattenGetString(src);
+ src = String::Flatten(src);
// Rough estimate of line count based on a roughly estimated average
// length of (unpacked) code.
int line_count_estimate = src->length() >> 4;
=======================================
--- /branches/bleeding_edge/src/handles.h Tue Apr 8 07:04:13 2014 UTC
+++ /branches/bleeding_edge/src/handles.h Tue Apr 8 09:49:49 2014 UTC
@@ -287,13 +287,6 @@
// an object of expected type, or the handle is an error if running out
// of space or encountering an internal error.
-// Flattens a string.
-void FlattenString(Handle<String> str);
-
-// Flattens a string and returns the underlying external or sequential
-// string.
-Handle<String> FlattenGetString(Handle<String> str);
-
Handle<Object> GetProperty(Handle<JSReceiver> obj, const char* name);
// Get the JS object corresponding to the given script; create it
=======================================
--- /branches/bleeding_edge/src/hydrogen.cc Fri Apr 4 12:06:11 2014 UTC
+++ /branches/bleeding_edge/src/hydrogen.cc Tue Apr 8 09:49:49 2014 UTC
@@ -4929,7 +4929,7 @@
Handle<Object> constant_object = cell->type()->AsConstant();
if (constant_object->IsConsString()) {
constant_object =
- FlattenGetString(Handle<String>::cast(constant_object));
+ String::Flatten(Handle<String>::cast(constant_object));
}
HConstant* constant = New<HConstant>(constant_object);
return ast_context()->ReturnInstruction(constant, expr->id());
=======================================
--- /branches/bleeding_edge/src/json-parser.h Tue Apr 8 07:04:13 2014 UTC
+++ /branches/bleeding_edge/src/json-parser.h Tue Apr 8 09:49:49 2014 UTC
@@ -59,7 +59,7 @@
object_constructor_(isolate_->native_context()->object_function(),
isolate_),
position_(-1) {
- FlattenString(source_);
+ source_ = String::Flatten(source_);
pretenure_ = (source_length_ >= kPretenureTreshold) ? TENURED :
NOT_TENURED;
// Optimized fast case where we only have ASCII characters.
=======================================
--- /branches/bleeding_edge/src/json-stringifier.h Fri Apr 4 12:25:45 2014
UTC
+++ /branches/bleeding_edge/src/json-stringifier.h Tue Apr 8 09:49:49 2014
UTC
@@ -305,7 +305,7 @@
return stringifier.Stringify(object);
}
- FlattenString(object);
+ object = String::Flatten(object);
ASSERT(object->IsFlat());
if (object->IsOneByteRepresentationUnderneath()) {
Handle<String> result = isolate->factory()->NewRawOneByteString(
@@ -873,7 +873,7 @@
void BasicJsonStringifier::SerializeString(Handle<String> object) {
- object = FlattenGetString(object);
+ object = String::Flatten(object);
if (is_ascii_) {
if (object->IsOneByteRepresentationUnderneath()) {
SerializeString_<true, uint8_t>(object);
=======================================
--- /branches/bleeding_edge/src/jsregexp.cc Tue Mar 25 09:51:13 2014 UTC
+++ /branches/bleeding_edge/src/jsregexp.cc Tue Apr 8 09:49:49 2014 UTC
@@ -184,7 +184,7 @@
re->set_data(*cached);
return re;
}
- pattern = FlattenGetString(pattern);
+ pattern = String::Flatten(pattern);
PostponeInterruptsScope postpone(isolate);
RegExpCompileData parse_result;
FlatStringReader reader(isolate, pattern);
@@ -290,7 +290,7 @@
ASSERT(0 <= index);
ASSERT(index <= subject->length());
- if (!subject->IsFlat()) FlattenString(subject);
+ subject = String::Flatten(subject);
DisallowHeapAllocation no_gc; // ensure vectors stay valid
String* needle =
String::cast(regexp->DataAt(JSRegExp::kAtomPatternIndex));
@@ -439,7 +439,7 @@
JSRegExp::Flags flags = re->GetFlags();
Handle<String> pattern(re->Pattern());
- if (!pattern->IsFlat()) FlattenString(pattern);
+ pattern = String::Flatten(pattern);
RegExpCompileData compile_data;
FlatStringReader reader(isolate, pattern);
if (!RegExpParser::ParseRegExp(&reader, flags.is_multiline(),
@@ -528,7 +528,7 @@
int RegExpImpl::IrregexpPrepare(Handle<JSRegExp> regexp,
Handle<String> subject) {
- if (!subject->IsFlat()) FlattenString(subject);
+ subject = String::Flatten(subject);
// Check the asciiness of the underlying storage.
bool is_ascii = subject->IsOneByteRepresentationUnderneath();
@@ -6015,7 +6015,7 @@
// Sample some characters from the middle of the string.
static const int kSampleSize = 128;
- FlattenString(sample_subject);
+ sample_subject = String::Flatten(sample_subject);
int chars_sampled = 0;
int half_way = (sample_subject->length() - kSampleSize) / 2;
for (int i = Max(0, half_way);
=======================================
--- /branches/bleeding_edge/src/liveedit.cc Tue Apr 8 09:44:24 2014 UTC
+++ /branches/bleeding_edge/src/liveedit.cc Tue Apr 8 09:49:49 2014 UTC
@@ -582,8 +582,8 @@
Handle<JSArray> LiveEdit::CompareStrings(Handle<String> s1,
Handle<String> s2) {
- s1 = FlattenGetString(s1);
- s2 = FlattenGetString(s2);
+ s1 = String::Flatten(s1);
+ s2 = String::Flatten(s2);
LineEndsWrapper line_ends1(s1);
LineEndsWrapper line_ends2(s2);
=======================================
--- /branches/bleeding_edge/src/messages.cc Tue Apr 8 09:44:24 2014 UTC
+++ /branches/bleeding_edge/src/messages.cc Tue Apr 8 09:49:49 2014 UTC
@@ -180,7 +180,7 @@
// here to improve the efficiency of converting it to a C string and
// other operations that are likely to take place (see
GetLocalizedMessage
// for example).
- FlattenString(result_string);
+ result_string = String::Flatten(result_string);
return result_string;
}
=======================================
--- /branches/bleeding_edge/src/objects-debug.cc Mon Apr 7 09:41:13 2014
UTC
+++ /branches/bleeding_edge/src/objects-debug.cc Tue Apr 8 09:49:49 2014
UTC
@@ -522,6 +522,7 @@
CHECK(this->second() == GetHeap()->empty_string() ||
this->second()->IsString());
CHECK(this->length() >= ConsString::kMinLength);
+ CHECK(this->length() == this->first()->length() +
this->second()->length());
if (this->IsFlat()) {
// A flat cons can only be created by String::SlowTryFlatten.
// Afterwards, the first part may be externalized.
=======================================
--- /branches/bleeding_edge/src/objects-inl.h Mon Apr 7 10:00:14 2014 UTC
+++ /branches/bleeding_edge/src/objects-inl.h Tue Apr 8 09:49:49 2014 UTC
@@ -3029,6 +3029,14 @@
}
return SlowEquals(other);
}
+
+
+Handle<String> String::Flatten(Handle<String> string, PretenureFlag
pretenure) {
+ if (!string->IsConsString()) return string;
+ Handle<ConsString> cons = Handle<ConsString>::cast(string);
+ if (cons->IsFlat()) return handle(cons->first());
+ return SlowFlatten(cons, pretenure);
+}
MaybeObject* String::TryFlatten(PretenureFlag pretenure) {
=======================================
--- /branches/bleeding_edge/src/objects.cc Tue Apr 8 09:36:04 2014 UTC
+++ /branches/bleeding_edge/src/objects.cc Tue Apr 8 09:49:49 2014 UTC
@@ -1180,6 +1180,34 @@
}
return false;
}
+
+
+Handle<String> String::SlowFlatten(Handle<ConsString> cons,
+ PretenureFlag pretenure) {
+ ASSERT(AllowHeapAllocation::IsAllowed());
+ ASSERT(cons->second()->length() != 0);
+ Isolate* isolate = cons->GetIsolate();
+ int length = cons->length();
+ PretenureFlag tenure = isolate->heap()->InNewSpace(*cons) ? pretenure
+ : TENURED;
+ Handle<SeqString> result;
+ if (cons->IsOneByteRepresentation()) {
+ Handle<SeqOneByteString> flat =
isolate->factory()->NewRawOneByteString(
+ length, tenure).ToHandleChecked();
+ DisallowHeapAllocation no_gc;
+ WriteToFlat(*cons, flat->GetChars(), 0, length);
+ result = flat;
+ } else {
+ Handle<SeqTwoByteString> flat =
isolate->factory()->NewRawTwoByteString(
+ length, tenure).ToHandleChecked();
+ DisallowHeapAllocation no_gc;
+ WriteToFlat(*cons, flat->GetChars(), 0, length);
+ result = flat;
+ }
+ cons->set_first(*result);
+ cons->set_second(isolate->heap()->empty_string());
+ return result;
+}
MaybeObject* String::SlowTryFlatten(PretenureFlag pretenure) {
@@ -6388,7 +6416,7 @@
AssertNoContextChange ncc(isolate);
// Try to flatten before operating on the string.
- if (name->IsString()) String::cast(*name)->TryFlatten();
+ if (name->IsString()) name = String::Flatten(Handle<String>::cast(name));
if (!JSObject::CanSetCallback(object, name)) return;
@@ -6576,7 +6604,7 @@
AssertNoContextChange ncc(isolate);
// Try to flatten before operating on the string.
- if (name->IsString()) FlattenString(Handle<String>::cast(name));
+ if (name->IsString()) name = String::Flatten(Handle<String>::cast(name));
if (!JSObject::CanSetCallback(object, name)) {
return factory->undefined_value();
=======================================
--- /branches/bleeding_edge/src/objects.h Tue Apr 8 07:04:13 2014 UTC
+++ /branches/bleeding_edge/src/objects.h Tue Apr 8 09:49:49 2014 UTC
@@ -9005,6 +9005,13 @@
// string.
inline String* TryFlattenGetString(PretenureFlag pretenure =
NOT_TENURED);
+ static inline Handle<String> Flatten(Handle<String> string,
+ PretenureFlag pretenure =
NOT_TENURED);
+
+ static Handle<String> SlowFlatten(Handle<ConsString> cons,
+ PretenureFlag tenure);
+
+
// Tries to return the content of a flat string as a structure holding
either
// a flat vector of char or of uc16.
// If the string isn't flat, and therefore doesn't have flat content, the
=======================================
--- /branches/bleeding_edge/src/parser.cc Thu Apr 3 12:30:37 2014 UTC
+++ /branches/bleeding_edge/src/parser.cc Tue Apr 8 09:49:49 2014 UTC
@@ -859,7 +859,7 @@
(*cached_data_)->Initialize();
}
- source->TryFlatten();
+ source = String::Flatten(source);
FunctionLiteral* result;
if (source->IsExternalTwoByteString()) {
// Notice that the stream is destroyed at the end of the branch block.
@@ -998,7 +998,7 @@
Handle<SharedFunctionInfo> shared_info = info()->shared_info();
// Initialize parser state.
- source->TryFlatten();
+ source = String::Flatten(source);
FunctionLiteral* result;
if (source->IsExternalTwoByteString()) {
ExternalTwoByteStringUtf16CharacterStream stream(
=======================================
--- /branches/bleeding_edge/src/runtime.cc Tue Apr 8 09:44:24 2014 UTC
+++ /branches/bleeding_edge/src/runtime.cc Tue Apr 8 09:49:49 2014 UTC
@@ -3238,20 +3238,16 @@
RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_StringCharCodeAt) {
- SealHandleScope shs(isolate);
+ HandleScope handle_scope(isolate);
ASSERT(args.length() == 2);
- CONVERT_ARG_CHECKED(String, subject, 0);
+ CONVERT_ARG_HANDLE_CHECKED(String, subject, 0);
CONVERT_NUMBER_CHECKED(uint32_t, i, Uint32, args[1]);
// Flatten the string. If someone wants to get a char at an index
// in a cons string, it is likely that more indices will be
// accessed.
- Object* flat;
- { MaybeObject* maybe_flat = subject->TryFlatten();
- if (!maybe_flat->ToObject(&flat)) return maybe_flat;
- }
- subject = String::cast(flat);
+ subject = String::Flatten(subject);
if (i >= static_cast<uint32_t>(subject->length())) {
return isolate->heap()->nan_value();
@@ -4210,7 +4206,7 @@
ASSERT(regexp->GetFlags().is_global());
- if (!subject->IsFlat()) subject = FlattenGetString(subject);
+ subject = String::Flatten(subject);
if (replacement->length() == 0) {
if (subject->HasOnlyOneByteChars()) {
@@ -4222,7 +4218,7 @@
}
}
- if (!replacement->IsFlat()) replacement = FlattenGetString(replacement);
+ replacement = String::Flatten(replacement);
return StringReplaceGlobalRegExpWithString(
isolate, subject, regexp, replacement, last_match_info);
@@ -4296,7 +4292,7 @@
}
if (isolate->has_pending_exception()) return Failure::Exception();
- subject = FlattenGetString(subject);
+ subject = String::Flatten(subject);
ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
isolate, result,
StringReplaceOneCharWithString(
@@ -4321,8 +4317,8 @@
int subject_length = sub->length();
if (start_index + pattern_length > subject_length) return -1;
- if (!sub->IsFlat()) FlattenString(sub);
- if (!pat->IsFlat()) FlattenString(pat);
+ sub = String::Flatten(sub);
+ pat = String::Flatten(pat);
DisallowHeapAllocation no_gc; // ensure vectors stay valid
// Extract flattened substrings of cons strings before determining
asciiness.
@@ -4432,8 +4428,8 @@
return Smi::FromInt(start_index);
}
- if (!sub->IsFlat()) FlattenString(sub);
- if (!pat->IsFlat()) FlattenString(pat);
+ sub = String::Flatten(sub);
+ pat = String::Flatten(pat);
int position = -1;
DisallowHeapAllocation no_gc; // ensure vectors stay valid
@@ -4758,11 +4754,11 @@
ASSERT(args.length() == 4);
CONVERT_ARG_HANDLE_CHECKED(String, subject, 1);
- if (!subject->IsFlat()) FlattenString(subject);
CONVERT_ARG_HANDLE_CHECKED(JSRegExp, regexp, 0);
CONVERT_ARG_HANDLE_CHECKED(JSArray, last_match_info, 2);
CONVERT_ARG_HANDLE_CHECKED(JSArray, result_array, 3);
+ subject = String::Flatten(subject);
ASSERT(regexp->GetFlags().is_global());
if (regexp->CaptureCount() == 0) {
@@ -4876,9 +4872,9 @@
// string->Get(index).
static Handle<Object> GetCharAt(Handle<String> string, uint32_t index) {
if (index < static_cast<uint32_t>(string->length())) {
- string->TryFlatten();
- return
string->GetIsolate()->factory()->LookupSingleCharacterStringFromCode(
- string->Get(index));
+ Factory* factory = string->GetIsolate()->factory();
+ return factory->LookupSingleCharacterStringFromCode(
+ String::Flatten(string)->Get(index));
}
return Execution::CharAt(string, index);
}
@@ -5310,7 +5306,7 @@
return JSObject::SetElement(js_object, index, value, attr,
strict_mode, true, set_mode);
} else {
- if (name->IsString()) Handle<String>::cast(name)->TryFlatten();
+ if (name->IsString()) name =
String::Flatten(Handle<String>::cast(name));
return JSReceiver::SetProperty(js_object, name, value, attr,
strict_mode);
}
}
@@ -5360,9 +5356,9 @@
return JSObject::SetElement(js_object, index, value, attr,
SLOPPY, false, DEFINE_PROPERTY);
} else {
- if (name->IsString()) Handle<String>::cast(name)->TryFlatten();
- return JSObject::SetLocalPropertyIgnoreAttributes(js_object, name,
- value, attr);
+ if (name->IsString()) name =
String::Flatten(Handle<String>::cast(name));
+ return JSObject::SetLocalPropertyIgnoreAttributes(
+ js_object, name, value, attr);
}
}
@@ -5415,7 +5411,7 @@
name = Handle<String>::cast(converted);
}
- if (name->IsString()) Handle<String>::cast(name)->TryFlatten();
+ if (name->IsString()) name = String::Flatten(Handle<String>::cast(name));
return JSReceiver::DeleteProperty(receiver, name, mode);
}
@@ -6263,7 +6259,7 @@
HandleScope scope(isolate);
ASSERT(args.length() == 1);
CONVERT_ARG_HANDLE_CHECKED(String, source, 0);
- Handle<String> string = FlattenGetString(source);
+ Handle<String> string = String::Flatten(source);
ASSERT(string->IsFlat());
Handle<String> result;
ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
@@ -6279,7 +6275,7 @@
HandleScope scope(isolate);
ASSERT(args.length() == 1);
CONVERT_ARG_HANDLE_CHECKED(String, source, 0);
- Handle<String> string = FlattenGetString(source);
+ Handle<String> string = String::Flatten(source);
ASSERT(string->IsFlat());
Handle<String> result;
ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
@@ -6573,7 +6569,7 @@
unibrow::Mapping<Converter, 128>* mapping) {
HandleScope handle_scope(isolate);
CONVERT_ARG_HANDLE_CHECKED(String, s, 0);
- s = FlattenGetString(s);
+ s = String::Flatten(s);
int length = s->length();
// Assume that the string is not empty; we need this assumption later
if (length == 0) return *s;
@@ -6647,7 +6643,7 @@
CONVERT_BOOLEAN_ARG_CHECKED(trimLeft, 1);
CONVERT_BOOLEAN_ARG_CHECKED(trimRight, 2);
- string = FlattenGetString(string);
+ string = String::Flatten(string);
int length = string->length();
int left = 0;
@@ -6703,7 +6699,8 @@
// isn't empty, we can never create more parts than ~half the length
// of the subject.
- if (!subject->IsFlat()) FlattenString(subject);
+ subject = String::Flatten(subject);
+ pattern = String::Flatten(pattern);
static const int kMaxInitialListCapacity = 16;
@@ -6712,7 +6709,6 @@
// Find (up to limit) indices of separator and end-of-string in subject
int initial_capacity = Min<uint32_t>(kMaxInitialListCapacity, limit);
ZoneList<int> indices(initial_capacity, zone_scope.zone());
- if (!pattern->IsFlat()) FlattenString(pattern);
FindStringIndicesDispatch(isolate, *subject, *pattern,
&indices, limit, zone_scope.zone());
@@ -6803,7 +6799,7 @@
CONVERT_ARG_HANDLE_CHECKED(String, s, 0);
CONVERT_NUMBER_CHECKED(uint32_t, limit, Uint32, args[1]);
- s = FlattenGetString(s);
+ s = String::Flatten(s);
const int length = static_cast<int>(Min<uint32_t>(s->length(), limit));
Handle<FixedArray> elements;
@@ -7677,7 +7673,7 @@
RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_StringCompare) {
- SealHandleScope shs(isolate);
+ HandleScope shs(isolate);
ASSERT(args.length() == 2);
CONVERT_ARG_CHECKED(String, x, 0);
@@ -9651,15 +9647,13 @@
RUNTIME_FUNCTION(MaybeObject*, Runtime_DateParseString) {
HandleScope scope(isolate);
ASSERT(args.length() == 2);
-
CONVERT_ARG_HANDLE_CHECKED(String, str, 0);
- FlattenString(str);
-
CONVERT_ARG_HANDLE_CHECKED(JSArray, output, 1);
JSObject::EnsureCanContainHeapObjectElements(output);
RUNTIME_ASSERT(output->HasFastObjectElements());
+ str = String::Flatten(str);
DisallowHeapAllocation no_gc;
FixedArray* output_array = FixedArray::cast(output->elements());
@@ -9752,7 +9746,7 @@
ASSERT_EQ(1, args.length());
CONVERT_ARG_HANDLE_CHECKED(String, source, 0);
- source = Handle<String>(FlattenGetString(source));
+ source = String::Flatten(source);
// Optimized fast case where we only have ASCII characters.
Handle<Object> result;
ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
@@ -14578,8 +14572,7 @@
HandleScope scope(isolate);
ASSERT(args.length() == 1);
CONVERT_ARG_HANDLE_CHECKED(String, str, 0);
- FlattenString(str);
- return isolate->heap()->undefined_value();
+ return *String::Flatten(str);
}
=======================================
--- /branches/bleeding_edge/test/cctest/test-api.cc Tue Apr 8 07:04:13
2014 UTC
+++ /branches/bleeding_edge/test/cctest/test-api.cc Tue Apr 8 09:49:49
2014 UTC
@@ -7589,7 +7589,7 @@
int len = str->Utf8Length();
if (len < 0) {
i::Handle<i::String> istr(v8::Utils::OpenHandle(*str));
- i::FlattenString(istr);
+ i::String::Flatten(istr);
len = str->Utf8Length();
}
return len;
@@ -18935,8 +18935,7 @@
int length = string->length();
CHECK(string->IsOneByteRepresentation());
- FlattenString(string);
- i::Handle<i::String> flat_string = FlattenGetString(string);
+ i::Handle<i::String> flat_string = i::String::Flatten(string);
CHECK(string->IsOneByteRepresentation());
CHECK(flat_string->IsOneByteRepresentation());
=======================================
--- /branches/bleeding_edge/test/cctest/test-strings.cc Thu Apr 3 12:41:37
2014 UTC
+++ /branches/bleeding_edge/test/cctest/test-strings.cc Tue Apr 8 09:49:49
2014 UTC
@@ -452,7 +452,7 @@
// Special work needed for flat string.
if (flat) {
data->stats_.empty_leaves_++;
- FlattenString(root);
+ String::Flatten(root);
CHECK(root->IsConsString() && root->IsFlat());
}
return root;
@@ -573,7 +573,7 @@
v8::HandleScope scope(CcTest::isolate());
ConsStringGenerationData data(false);
Handle<String> flat = ConstructBalanced(&data);
- FlattenString(flat);
+ String::Flatten(flat);
Handle<String> left_asymmetric = ConstructLeft(&data, DEEP_DEPTH);
Handle<String> right_asymmetric = ConstructRight(&data, DEEP_DEPTH);
Handle<String> symmetric = ConstructBalanced(&data);
@@ -593,19 +593,19 @@
printf("6\n");
TraverseFirst(left_asymmetric, right_deep_asymmetric, 65536);
printf("7\n");
- FlattenString(left_asymmetric);
+ String::Flatten(left_asymmetric);
printf("10\n");
Traverse(flat, left_asymmetric);
printf("11\n");
- FlattenString(right_asymmetric);
+ String::Flatten(right_asymmetric);
printf("12\n");
Traverse(flat, right_asymmetric);
printf("14\n");
- FlattenString(symmetric);
+ String::Flatten(symmetric);
printf("15\n");
Traverse(flat, symmetric);
printf("16\n");
- FlattenString(left_deep_asymmetric);
+ String::Flatten(left_deep_asymmetric);
printf("18\n");
}
@@ -670,7 +670,7 @@
ConsStringStats flat_string_stats;
AccumulateStats(flat_string, &flat_string_stats);
// Flatten string.
- FlattenString(flat_string);
+ String::Flatten(flat_string);
// Build unflattened version of cons string to test.
Handle<String> cons_string = build(i, &data);
ConsStringStats cons_string_stats;
@@ -725,7 +725,7 @@
Handle<String> string =
factory->NewConsString(data->block(0), data->block(1))
.ToHandleChecked();
- FlattenString(string);
+ String::Flatten(string);
return string;
}
case 7:
@@ -740,7 +740,7 @@
Handle<String> left =
factory->NewConsString(data->block(0), data->block(1))
.ToHandleChecked();
- FlattenString(left);
+ String::Flatten(left);
return factory->NewConsString(left,
data->block(2)).ToHandleChecked();
}
case 8:
@@ -757,11 +757,11 @@
Handle<String> left =
factory->NewConsString(data->block(0), data->block(1))
.ToHandleChecked();
- FlattenString(left);
+ String::Flatten(left);
Handle<String> right =
factory->NewConsString(data->block(2), data->block(2))
.ToHandleChecked();
- FlattenString(right);
+ String::Flatten(right);
return factory->NewConsString(left, right).ToHandleChecked();
}
}
@@ -878,7 +878,7 @@
}
Handle<String> flat_string =
factory->NewConsString(string, foo_string).ToHandleChecked();
- FlattenString(flat_string);
+ String::Flatten(flat_string);
for (int i = 0; i < 500; i++) {
TraverseFirst(flat_string, string, DEEP_ASCII_DEPTH);
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.