Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index 1323254493b3aeaf81380f94abd191229adaeeb0..af01dcf018cbc3ee09c446e3466ab240cce9a0bf 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -3238,20 +3238,16 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_ObjectFreeze) { |
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 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringReplaceGlobalRegExpWithString) { |
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 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringReplaceGlobalRegExpWithString) { |
} |
} |
- if (!replacement->IsFlat()) replacement = FlattenGetString(replacement); |
+ replacement = String::Flatten(replacement); |
return StringReplaceGlobalRegExpWithString( |
isolate, subject, regexp, replacement, last_match_info); |
@@ -4296,7 +4292,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringReplaceOneCharWithString) { |
} |
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 Runtime::StringMatch(Isolate* isolate, |
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 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringLastIndexOf) { |
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 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpExecMultiple) { |
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 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_IsValidSmi) { |
// 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 @@ MaybeHandle<Object> Runtime::SetObjectProperty(Isolate* isolate, |
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 @@ MaybeHandle<Object> Runtime::ForceSetObjectProperty(Handle<JSObject> js_object, |
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 @@ MaybeHandle<Object> Runtime::DeleteObjectProperty(Isolate* isolate, |
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 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_URIEscape) { |
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 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_URIUnescape) { |
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 @@ MUST_USE_RESULT static MaybeObject* ConvertCase( |
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 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringTrim) { |
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 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringSplit) { |
// 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 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringSplit) { |
// 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 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringToArray) { |
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 @@ static Object* FlatStringCompare(String* x, String* y) { |
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_DateCurrentTime) { |
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 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_ParseJson) { |
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 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FlattenString) { |
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); |
} |