Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index ce2d51c82a77cc9c2f37bad70764bdadb0aa7b21..d18c22cffc97c436f3b6bab4d27f37c6ba1455bc 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -3238,14 +3238,13 @@ typedef BitField<int, |
class ReplacementStringBuilder { |
public: |
- ReplacementStringBuilder(Heap* heap, |
- Handle<String> subject, |
+ ReplacementStringBuilder(Heap* heap, Handle<String> subject, |
int estimated_part_count) |
: heap_(heap), |
array_builder_(heap->isolate(), estimated_part_count), |
subject_(subject), |
character_count_(0), |
- is_ascii_(subject->IsOneByteRepresentation()) { |
+ is_one_byte_(subject->IsOneByteRepresentation()) { |
// Require a non-zero initial size. Ensures that doubling the size to |
// extend the array will work. |
DCHECK(estimated_part_count > 0); |
@@ -3286,7 +3285,7 @@ class ReplacementStringBuilder { |
DCHECK(length > 0); |
AddElement(*string); |
if (!string->IsOneByteRepresentation()) { |
- is_ascii_ = false; |
+ is_one_byte_ = false; |
} |
IncrementCharacterCount(length); |
} |
@@ -3299,7 +3298,7 @@ class ReplacementStringBuilder { |
} |
Handle<String> joined_string; |
- if (is_ascii_) { |
+ if (is_one_byte_) { |
Handle<SeqOneByteString> seq; |
ASSIGN_RETURN_ON_EXCEPTION( |
isolate, seq, |
@@ -3314,7 +3313,7 @@ class ReplacementStringBuilder { |
array_builder_.length()); |
joined_string = Handle<String>::cast(seq); |
} else { |
- // Non-ASCII. |
+ // Two-byte. |
Handle<SeqTwoByteString> seq; |
ASSIGN_RETURN_ON_EXCEPTION( |
isolate, seq, |
@@ -3353,7 +3352,7 @@ class ReplacementStringBuilder { |
FixedArrayBuilder array_builder_; |
Handle<String> subject_; |
int character_count_; |
- bool is_ascii_; |
+ bool is_one_byte_; |
}; |
@@ -3559,7 +3558,7 @@ bool CompiledReplacement::Compile(Handle<String> replacement, |
String::FlatContent content = replacement->GetFlatContent(); |
DCHECK(content.IsFlat()); |
bool simple = false; |
- if (content.IsAscii()) { |
+ if (content.IsOneByte()) { |
simple = ParseReplacementPattern(&parts_, |
content.ToOneByteVector(), |
capture_count, |
@@ -3637,11 +3636,9 @@ void CompiledReplacement::Apply(ReplacementStringBuilder* builder, |
} |
-void FindAsciiStringIndices(Vector<const uint8_t> subject, |
- char pattern, |
- ZoneList<int>* indices, |
- unsigned int limit, |
- Zone* zone) { |
+void FindOneByteStringIndices(Vector<const uint8_t> subject, char pattern, |
+ ZoneList<int>* indices, unsigned int limit, |
+ Zone* zone) { |
DCHECK(limit > 0); |
// Collect indices of pattern in subject using memchr. |
// Stop after finding at most limit values. |
@@ -3711,17 +3708,14 @@ void FindStringIndicesDispatch(Isolate* isolate, |
String::FlatContent pattern_content = pattern->GetFlatContent(); |
DCHECK(subject_content.IsFlat()); |
DCHECK(pattern_content.IsFlat()); |
- if (subject_content.IsAscii()) { |
+ if (subject_content.IsOneByte()) { |
Vector<const uint8_t> subject_vector = subject_content.ToOneByteVector(); |
- if (pattern_content.IsAscii()) { |
+ if (pattern_content.IsOneByte()) { |
Vector<const uint8_t> pattern_vector = |
pattern_content.ToOneByteVector(); |
if (pattern_vector.length() == 1) { |
- FindAsciiStringIndices(subject_vector, |
- pattern_vector[0], |
- indices, |
- limit, |
- zone); |
+ FindOneByteStringIndices(subject_vector, pattern_vector[0], indices, |
+ limit, zone); |
} else { |
FindStringIndices(isolate, |
subject_vector, |
@@ -3740,7 +3734,7 @@ void FindStringIndicesDispatch(Isolate* isolate, |
} |
} else { |
Vector<const uc16> subject_vector = subject_content.ToUC16Vector(); |
- if (pattern_content.IsAscii()) { |
+ if (pattern_content.IsOneByte()) { |
Vector<const uint8_t> pattern_vector = |
pattern_content.ToOneByteVector(); |
if (pattern_vector.length() == 1) { |
@@ -3822,7 +3816,7 @@ MUST_USE_RESULT static Object* StringReplaceGlobalAtomRegExpWithString( |
int result_pos = 0; |
MaybeHandle<SeqString> maybe_res; |
- if (ResultSeqString::kHasAsciiEncoding) { |
+ if (ResultSeqString::kHasOneByteEncoding) { |
maybe_res = isolate->factory()->NewRawOneByteString(result_len); |
} else { |
maybe_res = isolate->factory()->NewRawTwoByteString(result_len); |
@@ -4002,7 +3996,7 @@ MUST_USE_RESULT static Object* StringReplaceGlobalRegExpWithEmptyString( |
if (new_length == 0) return isolate->heap()->empty_string(); |
Handle<ResultSeqString> answer; |
- if (ResultSeqString::kHasAsciiEncoding) { |
+ if (ResultSeqString::kHasOneByteEncoding) { |
answer = Handle<ResultSeqString>::cast( |
isolate->factory()->NewRawOneByteString(new_length).ToHandleChecked()); |
} else { |
@@ -4193,14 +4187,14 @@ int Runtime::StringMatch(Isolate* isolate, |
pat = String::Flatten(pat); |
DisallowHeapAllocation no_gc; // ensure vectors stay valid |
- // Extract flattened substrings of cons strings before determining asciiness. |
+ // Extract flattened substrings of cons strings before getting encoding. |
String::FlatContent seq_sub = sub->GetFlatContent(); |
String::FlatContent seq_pat = pat->GetFlatContent(); |
// dispatch on type of strings |
- if (seq_pat.IsAscii()) { |
+ if (seq_pat.IsOneByte()) { |
Vector<const uint8_t> pat_vector = seq_pat.ToOneByteVector(); |
- if (seq_sub.IsAscii()) { |
+ if (seq_sub.IsOneByte()) { |
return SearchString(isolate, |
seq_sub.ToOneByteVector(), |
pat_vector, |
@@ -4212,7 +4206,7 @@ int Runtime::StringMatch(Isolate* isolate, |
start_index); |
} |
Vector<const uc16> pat_vector = seq_pat.ToUC16Vector(); |
- if (seq_sub.IsAscii()) { |
+ if (seq_sub.IsOneByte()) { |
return SearchString(isolate, |
seq_sub.ToOneByteVector(), |
pat_vector, |
@@ -4308,9 +4302,9 @@ RUNTIME_FUNCTION(Runtime_StringLastIndexOf) { |
String::FlatContent sub_content = sub->GetFlatContent(); |
String::FlatContent pat_content = pat->GetFlatContent(); |
- if (pat_content.IsAscii()) { |
+ if (pat_content.IsOneByte()) { |
Vector<const uint8_t> pat_vector = pat_content.ToOneByteVector(); |
- if (sub_content.IsAscii()) { |
+ if (sub_content.IsOneByte()) { |
position = StringMatchBackwards(sub_content.ToOneByteVector(), |
pat_vector, |
start_index); |
@@ -4321,7 +4315,7 @@ RUNTIME_FUNCTION(Runtime_StringLastIndexOf) { |
} |
} else { |
Vector<const uc16> pat_vector = pat_content.ToUC16Vector(); |
- if (sub_content.IsAscii()) { |
+ if (sub_content.IsOneByte()) { |
position = StringMatchBackwards(sub_content.ToOneByteVector(), |
pat_vector, |
start_index); |
@@ -6346,7 +6340,7 @@ RUNTIME_FUNCTION(Runtime_StringParseInt) { |
String::FlatContent flat = subject->GetFlatContent(); |
// ECMA-262 section 15.1.2.3, empty string is NaN |
- if (flat.IsAscii()) { |
+ if (flat.IsOneByte()) { |
value = StringToInt( |
isolate->unicode_cache(), flat.ToOneByteVector(), radix); |
} else { |
@@ -6804,21 +6798,19 @@ RUNTIME_FUNCTION(Runtime_StringSplit) { |
} |
-// Copies ASCII characters to the given fixed array looking up |
+// Copies Latin1 characters to the given fixed array looking up |
// one-char strings in the cache. Gives up on the first char that is |
// not in the cache and fills the remainder with smi zeros. Returns |
// the length of the successfully copied prefix. |
-static int CopyCachedAsciiCharsToArray(Heap* heap, |
- const uint8_t* chars, |
- FixedArray* elements, |
- int length) { |
+static int CopyCachedOneByteCharsToArray(Heap* heap, const uint8_t* chars, |
+ FixedArray* elements, int length) { |
DisallowHeapAllocation no_gc; |
- FixedArray* ascii_cache = heap->single_character_string_cache(); |
+ FixedArray* one_byte_cache = heap->single_character_string_cache(); |
Object* undefined = heap->undefined_value(); |
int i; |
WriteBarrierMode mode = elements->GetWriteBarrierMode(no_gc); |
for (i = 0; i < length; ++i) { |
- Object* value = ascii_cache->get(chars[i]); |
+ Object* value = one_byte_cache->get(chars[i]); |
if (value == undefined) break; |
elements->set(i, value, mode); |
} |
@@ -6856,14 +6848,12 @@ RUNTIME_FUNCTION(Runtime_StringToArray) { |
DisallowHeapAllocation no_gc; |
String::FlatContent content = s->GetFlatContent(); |
- if (content.IsAscii()) { |
+ if (content.IsOneByte()) { |
Vector<const uint8_t> chars = content.ToOneByteVector(); |
// Note, this will initialize all elements (not only the prefix) |
// to prevent GC from seeing partially initialized array. |
- position = CopyCachedAsciiCharsToArray(isolate->heap(), |
- chars.start(), |
- *elements, |
- length); |
+ position = CopyCachedOneByteCharsToArray(isolate->heap(), chars.start(), |
+ *elements, length); |
} else { |
MemsetPointer(elements->data_start(), |
isolate->heap()->undefined_value(), |
@@ -7320,7 +7310,7 @@ RUNTIME_FUNCTION(Runtime_StringBuilderJoin) { |
} |
DCHECK(sink == end); |
- // Use %_FastAsciiArrayJoin instead. |
+ // Use %_FastOneByteArrayJoin instead. |
DCHECK(!answer->IsOneByteRepresentation()); |
return *answer; |
} |
@@ -7382,7 +7372,7 @@ RUNTIME_FUNCTION(Runtime_SparseJoinWithSeparator) { |
// Find total length of join result. |
int string_length = 0; |
- bool is_ascii = separator->IsOneByteRepresentation(); |
+ bool is_one_byte = separator->IsOneByteRepresentation(); |
bool overflow = false; |
CONVERT_NUMBER_CHECKED(int, elements_length, Int32, elements_array->length()); |
RUNTIME_ASSERT(elements_length <= elements_array->elements()->length()); |
@@ -7399,8 +7389,8 @@ RUNTIME_FUNCTION(Runtime_SparseJoinWithSeparator) { |
for (int i = 0; i < elements_length; i += 2) { |
String* string = String::cast(elements->get(i + 1)); |
int length = string->length(); |
- if (is_ascii && !string->IsOneByteRepresentation()) { |
- is_ascii = false; |
+ if (is_one_byte && !string->IsOneByteRepresentation()) { |
+ is_one_byte = false; |
} |
if (length > String::kMaxLength || |
String::kMaxLength - length < string_length) { |
@@ -7436,7 +7426,7 @@ RUNTIME_FUNCTION(Runtime_SparseJoinWithSeparator) { |
THROW_NEW_ERROR_RETURN_FAILURE(isolate, NewInvalidStringLengthError()); |
} |
- if (is_ascii) { |
+ if (is_one_byte) { |
Handle<SeqOneByteString> result = isolate->factory()->NewRawOneByteString( |
string_length).ToHandleChecked(); |
JoinSparseArrayWithSeparator<uint8_t>( |
@@ -7687,9 +7677,9 @@ RUNTIME_FUNCTION(Runtime_StringCompare) { |
int r; |
String::FlatContent x_content = x->GetFlatContent(); |
String::FlatContent y_content = y->GetFlatContent(); |
- if (x_content.IsAscii()) { |
+ if (x_content.IsOneByte()) { |
Vector<const uint8_t> x_chars = x_content.ToOneByteVector(); |
- if (y_content.IsAscii()) { |
+ if (y_content.IsOneByte()) { |
Vector<const uint8_t> y_chars = y_content.ToOneByteVector(); |
r = CompareChars(x_chars.start(), y_chars.start(), prefix_length); |
} else { |
@@ -7698,7 +7688,7 @@ RUNTIME_FUNCTION(Runtime_StringCompare) { |
} |
} else { |
Vector<const uc16> x_chars = x_content.ToUC16Vector(); |
- if (y_content.IsAscii()) { |
+ if (y_content.IsOneByte()) { |
Vector<const uint8_t> y_chars = y_content.ToOneByteVector(); |
r = CompareChars(x_chars.start(), y_chars.start(), prefix_length); |
} else { |
@@ -8657,12 +8647,12 @@ RUNTIME_FUNCTION(Runtime_OptimizeFunctionOnNextCall) { |
if (args.length() == 2 && |
unoptimized->kind() == Code::FUNCTION) { |
CONVERT_ARG_HANDLE_CHECKED(String, type, 1); |
- if (type->IsOneByteEqualTo(STATIC_ASCII_VECTOR("osr")) && FLAG_use_osr) { |
+ if (type->IsOneByteEqualTo(STATIC_CHAR_VECTOR("osr")) && FLAG_use_osr) { |
// Start patching from the currently patched loop nesting level. |
DCHECK(BackEdgeTable::Verify(isolate, unoptimized)); |
isolate->runtime_profiler()->AttemptOnStackReplacement( |
*function, Code::kMaxLoopNestingMarker); |
- } else if (type->IsOneByteEqualTo(STATIC_ASCII_VECTOR("concurrent")) && |
+ } else if (type->IsOneByteEqualTo(STATIC_CHAR_VECTOR("concurrent")) && |
isolate->concurrent_recompilation_enabled()) { |
function->MarkForConcurrentOptimization(); |
} |
@@ -8690,7 +8680,7 @@ RUNTIME_FUNCTION(Runtime_GetOptimizationStatus) { |
bool sync_with_compiler_thread = true; |
if (args.length() == 2) { |
CONVERT_ARG_HANDLE_CHECKED(String, sync, 1); |
- if (sync->IsOneByteEqualTo(STATIC_ASCII_VECTOR("no sync"))) { |
+ if (sync->IsOneByteEqualTo(STATIC_CHAR_VECTOR("no sync"))) { |
sync_with_compiler_thread = false; |
} |
} |
@@ -9691,7 +9681,7 @@ RUNTIME_FUNCTION(Runtime_DateParseString) { |
bool result; |
String::FlatContent str_content = str->GetFlatContent(); |
- if (str_content.IsAscii()) { |
+ if (str_content.IsOneByte()) { |
result = DateParser::Parse(str_content.ToOneByteVector(), |
*output_array, |
isolate->unicode_cache()); |
@@ -9784,7 +9774,7 @@ RUNTIME_FUNCTION(Runtime_ParseJson) { |
CONVERT_ARG_HANDLE_CHECKED(String, source, 0); |
source = String::Flatten(source); |
- // Optimized fast case where we only have ASCII characters. |
+ // Optimized fast case where we only have Latin1 characters. |
Handle<Object> result; |
ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
isolate, result, |
@@ -13890,7 +13880,7 @@ RUNTIME_FUNCTION(Runtime_GetDefaultICULocale) { |
return *factory->NewStringFromAsciiChecked(result); |
} |
- return *factory->NewStringFromStaticAscii("und"); |
+ return *factory->NewStringFromStaticChars("und"); |
} |
@@ -13907,8 +13897,8 @@ RUNTIME_FUNCTION(Runtime_GetLanguageTagVariants) { |
// Can be bumped when callers' requirements change. |
RUNTIME_ASSERT(length < 100); |
Handle<FixedArray> output = factory->NewFixedArray(length); |
- Handle<Name> maximized = factory->NewStringFromStaticAscii("maximized"); |
- Handle<Name> base = factory->NewStringFromStaticAscii("base"); |
+ Handle<Name> maximized = factory->NewStringFromStaticChars("maximized"); |
+ Handle<Name> base = factory->NewStringFromStaticChars("base"); |
for (unsigned int i = 0; i < length; ++i) { |
Handle<Object> locale_id; |
ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
@@ -14085,8 +14075,8 @@ RUNTIME_FUNCTION(Runtime_CreateDateTimeFormat) { |
local_object->SetInternalField(0, reinterpret_cast<Smi*>(date_format)); |
Factory* factory = isolate->factory(); |
- Handle<String> key = factory->NewStringFromStaticAscii("dateFormat"); |
- Handle<String> value = factory->NewStringFromStaticAscii("valid"); |
+ Handle<String> key = factory->NewStringFromStaticChars("dateFormat"); |
+ Handle<String> value = factory->NewStringFromStaticChars("valid"); |
JSObject::AddProperty(local_object, key, value, NONE); |
// Make object handle weak so we can delete the data format once GC kicks in. |
@@ -14182,8 +14172,8 @@ RUNTIME_FUNCTION(Runtime_CreateNumberFormat) { |
local_object->SetInternalField(0, reinterpret_cast<Smi*>(number_format)); |
Factory* factory = isolate->factory(); |
- Handle<String> key = factory->NewStringFromStaticAscii("numberFormat"); |
- Handle<String> value = factory->NewStringFromStaticAscii("valid"); |
+ Handle<String> key = factory->NewStringFromStaticChars("numberFormat"); |
+ Handle<String> value = factory->NewStringFromStaticChars("valid"); |
JSObject::AddProperty(local_object, key, value, NONE); |
Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); |
@@ -14288,8 +14278,8 @@ RUNTIME_FUNCTION(Runtime_CreateCollator) { |
local_object->SetInternalField(0, reinterpret_cast<Smi*>(collator)); |
Factory* factory = isolate->factory(); |
- Handle<String> key = factory->NewStringFromStaticAscii("collator"); |
- Handle<String> value = factory->NewStringFromStaticAscii("valid"); |
+ Handle<String> key = factory->NewStringFromStaticChars("collator"); |
+ Handle<String> value = factory->NewStringFromStaticChars("valid"); |
JSObject::AddProperty(local_object, key, value, NONE); |
Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); |
@@ -14392,8 +14382,8 @@ RUNTIME_FUNCTION(Runtime_CreateBreakIterator) { |
local_object->SetInternalField(1, reinterpret_cast<Smi*>(NULL)); |
Factory* factory = isolate->factory(); |
- Handle<String> key = factory->NewStringFromStaticAscii("breakIterator"); |
- Handle<String> value = factory->NewStringFromStaticAscii("valid"); |
+ Handle<String> key = factory->NewStringFromStaticChars("breakIterator"); |
+ Handle<String> value = factory->NewStringFromStaticChars("valid"); |
JSObject::AddProperty(local_object, key, value, NONE); |
// Make object handle weak so we can delete the break iterator once GC kicks |
@@ -14495,17 +14485,17 @@ RUNTIME_FUNCTION(Runtime_BreakIteratorBreakType) { |
int32_t status = rule_based_iterator->getRuleStatus(); |
// Keep return values in sync with JavaScript BreakType enum. |
if (status >= UBRK_WORD_NONE && status < UBRK_WORD_NONE_LIMIT) { |
- return *isolate->factory()->NewStringFromStaticAscii("none"); |
+ return *isolate->factory()->NewStringFromStaticChars("none"); |
} else if (status >= UBRK_WORD_NUMBER && status < UBRK_WORD_NUMBER_LIMIT) { |
return *isolate->factory()->number_string(); |
} else if (status >= UBRK_WORD_LETTER && status < UBRK_WORD_LETTER_LIMIT) { |
- return *isolate->factory()->NewStringFromStaticAscii("letter"); |
+ return *isolate->factory()->NewStringFromStaticChars("letter"); |
} else if (status >= UBRK_WORD_KANA && status < UBRK_WORD_KANA_LIMIT) { |
- return *isolate->factory()->NewStringFromStaticAscii("kana"); |
+ return *isolate->factory()->NewStringFromStaticChars("kana"); |
} else if (status >= UBRK_WORD_IDEO && status < UBRK_WORD_IDEO_LIMIT) { |
- return *isolate->factory()->NewStringFromStaticAscii("ideo"); |
+ return *isolate->factory()->NewStringFromStaticChars("ideo"); |
} else { |
- return *isolate->factory()->NewStringFromStaticAscii("unknown"); |
+ return *isolate->factory()->NewStringFromStaticChars("unknown"); |
} |
} |
#endif // V8_I18N_SUPPORT |
@@ -14800,21 +14790,21 @@ RUNTIME_FUNCTION(Runtime_ListNatives) { |
Handle<FixedArray> elements = factory->NewFixedArray(entry_count); |
int index = 0; |
bool inline_runtime_functions = false; |
-#define ADD_ENTRY(Name, argc, ressize) \ |
- { \ |
- HandleScope inner(isolate); \ |
- Handle<String> name; \ |
- /* Inline runtime functions have an underscore in front of the name. */ \ |
- if (inline_runtime_functions) { \ |
- name = factory->NewStringFromStaticAscii("_" #Name); \ |
- } else { \ |
- name = factory->NewStringFromStaticAscii(#Name); \ |
- } \ |
- Handle<FixedArray> pair_elements = factory->NewFixedArray(2); \ |
- pair_elements->set(0, *name); \ |
- pair_elements->set(1, Smi::FromInt(argc)); \ |
- Handle<JSArray> pair = factory->NewJSArrayWithElements(pair_elements); \ |
- elements->set(index++, *pair); \ |
+#define ADD_ENTRY(Name, argc, ressize) \ |
+ { \ |
+ HandleScope inner(isolate); \ |
+ Handle<String> name; \ |
+ /* Inline runtime functions have an underscore in front of the name. */ \ |
+ if (inline_runtime_functions) { \ |
+ name = factory->NewStringFromStaticChars("_" #Name); \ |
+ } else { \ |
+ name = factory->NewStringFromStaticChars(#Name); \ |
+ } \ |
+ Handle<FixedArray> pair_elements = factory->NewFixedArray(2); \ |
+ pair_elements->set(0, *name); \ |
+ pair_elements->set(1, Smi::FromInt(argc)); \ |
+ Handle<JSArray> pair = factory->NewJSArrayWithElements(pair_elements); \ |
+ elements->set(index++, *pair); \ |
} |
inline_runtime_functions = false; |
RUNTIME_FUNCTION_LIST(ADD_ENTRY) |
@@ -15500,7 +15490,7 @@ RUNTIME_FUNCTION(RuntimeReference_GetCachedArrayIndex) { |
} |
-RUNTIME_FUNCTION(RuntimeReference_FastAsciiArrayJoin) { |
+RUNTIME_FUNCTION(RuntimeReference_FastOneByteArrayJoin) { |
SealHandleScope shs(isolate); |
DCHECK(args.length() == 2); |
return isolate->heap()->undefined_value(); |