diff options
Diffstat (limited to 'deps/v8/src/builtins/builtins-string.cc')
-rw-r--r-- | deps/v8/src/builtins/builtins-string.cc | 57 |
1 files changed, 30 insertions, 27 deletions
diff --git a/deps/v8/src/builtins/builtins-string.cc b/deps/v8/src/builtins/builtins-string.cc index 854bb5e58a..e52fbd577d 100644 --- a/deps/v8/src/builtins/builtins-string.cc +++ b/deps/v8/src/builtins/builtins-string.cc @@ -19,7 +19,8 @@ namespace internal { namespace { // for String.fromCodePoint bool IsValidCodePoint(Isolate* isolate, Handle<Object> value) { - if (!value->IsNumber() && !Object::ToNumber(value).ToHandle(&value)) { + if (!value->IsNumber() && + !Object::ToNumber(isolate, value).ToHandle(&value)) { return false; } @@ -37,7 +38,8 @@ bool IsValidCodePoint(Isolate* isolate, Handle<Object> value) { uc32 NextCodePoint(Isolate* isolate, BuiltinArguments args, int index) { Handle<Object> value = args.at(1 + index); - ASSIGN_RETURN_ON_EXCEPTION_VALUE(isolate, value, Object::ToNumber(value), -1); + ASSIGN_RETURN_ON_EXCEPTION_VALUE(isolate, value, + Object::ToNumber(isolate, value), -1); if (!IsValidCodePoint(isolate, value)) { isolate->Throw(*isolate->factory()->NewRangeError( MessageTemplate::kInvalidCodePoint, value)); @@ -52,7 +54,7 @@ uc32 NextCodePoint(Isolate* isolate, BuiltinArguments args, int index) { BUILTIN(StringFromCodePoint) { HandleScope scope(isolate); int const length = args.length() - 1; - if (length == 0) return isolate->heap()->empty_string(); + if (length == 0) return ReadOnlyRoots(isolate).empty_string(); DCHECK_LT(0, length); // Optimistically assume that the resulting String contains only one byte @@ -64,7 +66,7 @@ BUILTIN(StringFromCodePoint) { for (index = 0; index < length; index++) { code = NextCodePoint(isolate, args, index); if (code < 0) { - return isolate->heap()->exception(); + return ReadOnlyRoots(isolate).exception(); } if (code > String::kMaxOneByteCharCode) { break; @@ -94,7 +96,7 @@ BUILTIN(StringFromCodePoint) { } code = NextCodePoint(isolate, args, index); if (code < 0) { - return isolate->heap()->exception(); + return ReadOnlyRoots(isolate).exception(); } } @@ -122,7 +124,7 @@ BUILTIN(StringPrototypeEndsWith) { Maybe<bool> is_reg_exp = RegExpUtils::IsRegExp(isolate, search); if (is_reg_exp.IsNothing()) { DCHECK(isolate->has_pending_exception()); - return isolate->heap()->exception(); + return ReadOnlyRoots(isolate).exception(); } if (is_reg_exp.FromJust()) { THROW_NEW_ERROR_RETURN_FAILURE( @@ -146,10 +148,10 @@ BUILTIN(StringPrototypeEndsWith) { } int start = end - search_string->length(); - if (start < 0) return isolate->heap()->false_value(); + if (start < 0) return ReadOnlyRoots(isolate).false_value(); - str = String::Flatten(str); - search_string = String::Flatten(search_string); + str = String::Flatten(isolate, str); + search_string = String::Flatten(isolate, search_string); DisallowHeapAllocation no_gc; // ensure vectors stay valid String::FlatContent str_content = str->GetFlatContent(); @@ -169,10 +171,10 @@ BUILTIN(StringPrototypeEndsWith) { for (int i = 0; i < search_string->length(); i++) { if (str_reader.Get(start + i) != search_reader.Get(i)) { - return isolate->heap()->false_value(); + return ReadOnlyRoots(isolate).false_value(); } } - return isolate->heap()->true_value(); + return ReadOnlyRoots(isolate).true_value(); } // ES6 section 21.1.3.9 @@ -219,8 +221,8 @@ BUILTIN(StringPrototypeLocaleCompare) { int d = str1->Get(0) - str2->Get(0); if (d != 0) return Smi::FromInt(d); - str1 = String::Flatten(str1); - str2 = String::Flatten(str2); + str1 = String::Flatten(isolate, str1); + str2 = String::Flatten(isolate, str2); DisallowHeapAllocation no_gc; String::FlatContent flat1 = str1->GetFlatContent(); @@ -252,13 +254,13 @@ BUILTIN(StringPrototypeNormalize) { ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, form, Object::ToString(isolate, form_input)); - if (!(String::Equals(form, + if (!(String::Equals(isolate, form, isolate->factory()->NewStringFromStaticChars("NFC")) || - String::Equals(form, + String::Equals(isolate, form, isolate->factory()->NewStringFromStaticChars("NFD")) || - String::Equals(form, + String::Equals(isolate, form, isolate->factory()->NewStringFromStaticChars("NFKC")) || - String::Equals(form, + String::Equals(isolate, form, isolate->factory()->NewStringFromStaticChars("NFKD")))) { Handle<String> valid_forms = isolate->factory()->NewStringFromStaticChars("NFC, NFD, NFKC, NFKD"); @@ -280,7 +282,7 @@ BUILTIN(StringPrototypeStartsWith) { Maybe<bool> is_reg_exp = RegExpUtils::IsRegExp(isolate, search); if (is_reg_exp.IsNothing()) { DCHECK(isolate->has_pending_exception()); - return isolate->heap()->exception(); + return ReadOnlyRoots(isolate).exception(); } if (is_reg_exp.FromJust()) { THROW_NEW_ERROR_RETURN_FAILURE( @@ -304,18 +306,19 @@ BUILTIN(StringPrototypeStartsWith) { } if (start + search_string->length() > str->length()) { - return isolate->heap()->false_value(); + return ReadOnlyRoots(isolate).false_value(); } - FlatStringReader str_reader(isolate, String::Flatten(str)); - FlatStringReader search_reader(isolate, String::Flatten(search_string)); + FlatStringReader str_reader(isolate, String::Flatten(isolate, str)); + FlatStringReader search_reader(isolate, + String::Flatten(isolate, search_string)); for (int i = 0; i < search_string->length(); i++) { if (str_reader.Get(start + i) != search_reader.Get(i)) { - return isolate->heap()->false_value(); + return ReadOnlyRoots(isolate).false_value(); } } - return isolate->heap()->true_value(); + return ReadOnlyRoots(isolate).true_value(); } #ifndef V8_INTL_SUPPORT @@ -430,7 +433,7 @@ template <class Converter> V8_WARN_UNUSED_RESULT static Object* ConvertCase( Handle<String> s, Isolate* isolate, unibrow::Mapping<Converter, 128>* mapping) { - s = String::Flatten(s); + s = String::Flatten(isolate, s); int length = s->length(); // Assume that the string is not empty; we need this assumption later if (length == 0) return *s; @@ -525,14 +528,14 @@ BUILTIN(StringRaw) { Object::ToObject(isolate, templ)); Handle<Object> raw; - ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, raw, - Object::GetProperty(cooked, raw_string)); + ASSIGN_RETURN_FAILURE_ON_EXCEPTION( + isolate, raw, Object::GetProperty(isolate, cooked, raw_string)); ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, raw, Object::ToObject(isolate, raw)); Handle<Object> raw_len; ASSIGN_RETURN_FAILURE_ON_EXCEPTION( isolate, raw_len, - Object::GetProperty(raw, isolate->factory()->length_string())); + Object::GetProperty(isolate, raw, isolate->factory()->length_string())); ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, raw_len, Object::ToLength(isolate, raw_len)); |