| Index: src/runtime.cc
|
| diff --git a/src/runtime.cc b/src/runtime.cc
|
| index f6051acc222929088cca0a78710dbb07cc763e33..5e71e5fa7971fc7596a6d9536e130148aa7d4030 100644
|
| --- a/src/runtime.cc
|
| +++ b/src/runtime.cc
|
| @@ -2990,7 +2990,8 @@ MUST_USE_RESULT static MaybeObject* StringReplaceRegExpWithString(
|
| if (is_global &&
|
| regexp->TypeTag() == JSRegExp::ATOM &&
|
| simple_replace) {
|
| - if (subject->HasOnlyAsciiChars() && replacement->HasOnlyAsciiChars()) {
|
| + if (subject->IsOneByteConvertible() &&
|
| + replacement->IsOneByteConvertible()) {
|
| return StringReplaceAtomRegExpWithString<SeqOneByteString>(
|
| isolate, subject, regexp, replacement, last_match_info);
|
| } else {
|
| @@ -3081,7 +3082,7 @@ MUST_USE_RESULT static MaybeObject* StringReplaceRegExpWithEmptyString(
|
| if (is_global &&
|
| regexp->TypeTag() == JSRegExp::ATOM) {
|
| Handle<String> empty_string = isolate->factory()->empty_string();
|
| - if (subject->HasOnlyAsciiChars()) {
|
| + if (subject->IsOneByteRepresentation()) {
|
| return StringReplaceAtomRegExpWithString<SeqOneByteString>(
|
| isolate,
|
| subject,
|
| @@ -3210,7 +3211,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringReplaceRegExpWithString) {
|
| ASSERT(last_match_info->HasFastObjectElements());
|
|
|
| if (replacement->length() == 0) {
|
| - if (subject->HasOnlyAsciiChars()) {
|
| + if (subject->IsOneByteConvertible()) {
|
| return StringReplaceRegExpWithEmptyString<SeqOneByteString>(
|
| isolate, subject, regexp, last_match_info);
|
| } else {
|
| @@ -3377,7 +3378,7 @@ static int StringMatchBackwards(Vector<const schar> subject,
|
| if (sizeof(schar) == 1 && sizeof(pchar) > 1) {
|
| for (int i = 0; i < pattern_length; i++) {
|
| uc16 c = pattern[i];
|
| - if (c > String::kMaxAsciiCharCode) {
|
| + if (c > String::kMaxOneByteCharCode) {
|
| return -1;
|
| }
|
| }
|
| @@ -5258,14 +5259,14 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_URIUnescape) {
|
|
|
| source->TryFlatten();
|
|
|
| - bool ascii = true;
|
| + bool one_byte = true;
|
| int length = source->length();
|
|
|
| int unescaped_length = 0;
|
| for (int i = 0; i < length; unescaped_length++) {
|
| int step;
|
| - if (Unescape(source, i, length, &step) > String::kMaxAsciiCharCode) {
|
| - ascii = false;
|
| + if (Unescape(source, i, length, &step) > String::kMaxOneByteCharCode) {
|
| + one_byte = false;
|
| }
|
| i += step;
|
| }
|
| @@ -5276,7 +5277,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_URIUnescape) {
|
|
|
| Object* o;
|
| { MaybeObject* maybe_o =
|
| - ascii ?
|
| + one_byte ?
|
| isolate->heap()->AllocateRawOneByteString(unescaped_length) :
|
| isolate->heap()->AllocateRawTwoByteString(unescaped_length);
|
| if (!maybe_o->ToObject(&o)) return maybe_o;
|
| @@ -5933,6 +5934,7 @@ MUST_USE_RESULT static MaybeObject* ConvertCase(
|
| // Assume that the string is not empty; we need this assumption later
|
| if (length == 0) return s;
|
|
|
| +#ifndef ENABLE_LATIN_1
|
| // Simpler handling of ASCII strings.
|
| //
|
| // NOTE: This assumes that the upper/lower case of an ASCII
|
| @@ -5949,6 +5951,7 @@ MUST_USE_RESULT static MaybeObject* ConvertCase(
|
| result->GetChars(), SeqOneByteString::cast(s)->GetChars(), length);
|
| return has_changed_character ? result : s;
|
| }
|
| +#endif
|
|
|
| Object* answer;
|
| { MaybeObject* maybe_answer =
|
| @@ -6461,7 +6464,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringBuilderConcat) {
|
| if (first->IsString()) return first;
|
| }
|
|
|
| - bool ascii = special->HasOnlyAsciiChars();
|
| + bool one_byte = special->IsOneByteConvertible();
|
| int position = 0;
|
| for (int i = 0; i < array_length; i++) {
|
| int increment = 0;
|
| @@ -6502,8 +6505,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringBuilderConcat) {
|
| String* element = String::cast(elt);
|
| int element_length = element->length();
|
| increment = element_length;
|
| - if (ascii && !element->HasOnlyAsciiChars()) {
|
| - ascii = false;
|
| + if (one_byte && !element->IsOneByteConvertible()) {
|
| + one_byte = false;
|
| }
|
| } else {
|
| ASSERT(!elt->IsTheHole());
|
| @@ -6519,7 +6522,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringBuilderConcat) {
|
| int length = position;
|
| Object* object;
|
|
|
| - if (ascii) {
|
| + if (one_byte) {
|
| { MaybeObject* maybe_object =
|
| isolate->heap()->AllocateRawOneByteString(length);
|
| if (!maybe_object->ToObject(&object)) return maybe_object;
|
| @@ -6624,7 +6627,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringBuilderJoin) {
|
| }
|
| ASSERT(sink == end);
|
|
|
| - ASSERT(!answer->HasOnlyAsciiChars()); // Use %_FastAsciiArrayJoin instead.
|
| + // Use %_FastAsciiArrayJoin instead.
|
| + ASSERT(!answer->IsOneByteRepresentation());
|
| return answer;
|
| }
|
|
|
| @@ -8016,7 +8020,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_OptimizeFunctionOnNextCall) {
|
| if (args.length() == 2 &&
|
| unoptimized->kind() == Code::FUNCTION) {
|
| CONVERT_ARG_HANDLE_CHECKED(String, type, 1);
|
| - CHECK(type->IsEqualTo(CStrVector("osr")));
|
| + CHECK(type->IsOneByteEqualTo(STATIC_ASCII_VECTOR("osr")));
|
| isolate->runtime_profiler()->AttemptOnStackReplacement(*function);
|
| unoptimized->set_allow_osr_at_loop_nesting_level(
|
| Code::kMaxLoopNestingMarker);
|
|
|