Rename SeqAsciiString
This is a straight rename: NewRawAsciiString -> NewRawOneByteString SeqAscii -> SeqOneByte SeqOneByteString cannot yet take non-ascii data. R=yangguo@chromium.org, BUG= Review URL: https://chromiumcodereview.appspot.com/11411005 Patch from Dan Carney <dcarney@google.com>. git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@12972 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
5df210bd35
commit
3699616609
@ -5123,7 +5123,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
|
||||
__ ldr(subject,
|
||||
FieldMemOperand(subject, ExternalString::kResourceDataOffset));
|
||||
// Move the pointer so that offset-wise, it looks like a sequential string.
|
||||
STATIC_ASSERT(SeqTwoByteString::kHeaderSize == SeqAsciiString::kHeaderSize);
|
||||
STATIC_ASSERT(SeqTwoByteString::kHeaderSize == SeqOneByteString::kHeaderSize);
|
||||
__ sub(subject,
|
||||
subject,
|
||||
Operand(SeqTwoByteString::kHeaderSize - kHeapObjectTag));
|
||||
@ -5850,7 +5850,7 @@ void StringHelper::GenerateTwoCharacterSymbolTableProbe(MacroAssembler* masm,
|
||||
|
||||
// Check if the two characters match.
|
||||
// Assumes that word load is little endian.
|
||||
__ ldrh(scratch, FieldMemOperand(candidate, SeqAsciiString::kHeaderSize));
|
||||
__ ldrh(scratch, FieldMemOperand(candidate, SeqOneByteString::kHeaderSize));
|
||||
__ cmp(chars, scratch);
|
||||
__ b(eq, &found_in_symbol_table);
|
||||
__ bind(&next_probe[i]);
|
||||
@ -6063,8 +6063,8 @@ void SubStringStub::Generate(MacroAssembler* masm) {
|
||||
|
||||
__ bind(&sequential_string);
|
||||
// Locate first character of underlying subject string.
|
||||
STATIC_ASSERT(SeqTwoByteString::kHeaderSize == SeqAsciiString::kHeaderSize);
|
||||
__ add(r5, r5, Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
STATIC_ASSERT(SeqTwoByteString::kHeaderSize == SeqOneByteString::kHeaderSize);
|
||||
__ add(r5, r5, Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
|
||||
__ bind(&allocate_result);
|
||||
// Sequential acii string. Allocate the result.
|
||||
@ -6078,13 +6078,13 @@ void SubStringStub::Generate(MacroAssembler* masm) {
|
||||
// Locate first character of substring to copy.
|
||||
__ add(r5, r5, r3);
|
||||
// Locate first character of result.
|
||||
__ add(r1, r0, Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
__ add(r1, r0, Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
|
||||
// r0: result string
|
||||
// r1: first character of result string
|
||||
// r2: result string length
|
||||
// r5: first character of substring to copy
|
||||
STATIC_ASSERT((SeqAsciiString::kHeaderSize & kObjectAlignmentMask) == 0);
|
||||
STATIC_ASSERT((SeqOneByteString::kHeaderSize & kObjectAlignmentMask) == 0);
|
||||
StringHelper::GenerateCopyCharactersLong(masm, r1, r5, r2, r3, r4, r6, r7, r9,
|
||||
COPY_ASCII | DEST_ALWAYS_ALIGNED);
|
||||
__ jmp(&return_r0);
|
||||
@ -6209,7 +6209,7 @@ void StringCompareStub::GenerateAsciiCharsCompareLoop(
|
||||
// doesn't need an additional compare.
|
||||
__ SmiUntag(length);
|
||||
__ add(scratch1, length,
|
||||
Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
__ add(left, left, Operand(scratch1));
|
||||
__ add(right, right, Operand(scratch1));
|
||||
__ rsb(length, length, Operand::Zero());
|
||||
@ -6362,8 +6362,8 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
&call_runtime);
|
||||
|
||||
// Get the two characters forming the sub string.
|
||||
__ ldrb(r2, FieldMemOperand(r0, SeqAsciiString::kHeaderSize));
|
||||
__ ldrb(r3, FieldMemOperand(r1, SeqAsciiString::kHeaderSize));
|
||||
__ ldrb(r2, FieldMemOperand(r0, SeqOneByteString::kHeaderSize));
|
||||
__ ldrb(r3, FieldMemOperand(r1, SeqOneByteString::kHeaderSize));
|
||||
|
||||
// Try to lookup two character string in symbol table. If it is not found
|
||||
// just allocate a new one.
|
||||
@ -6382,7 +6382,7 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
// in a little endian mode)
|
||||
__ mov(r6, Operand(2));
|
||||
__ AllocateAsciiString(r0, r6, r4, r5, r9, &call_runtime);
|
||||
__ strh(r2, FieldMemOperand(r0, SeqAsciiString::kHeaderSize));
|
||||
__ strh(r2, FieldMemOperand(r0, SeqOneByteString::kHeaderSize));
|
||||
__ IncrementCounter(counters->string_add_native(), 1, r2, r3);
|
||||
__ add(sp, sp, Operand(2 * kPointerSize));
|
||||
__ Ret();
|
||||
@ -6464,10 +6464,10 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
|
||||
STATIC_ASSERT(kSeqStringTag == 0);
|
||||
__ tst(r4, Operand(kStringRepresentationMask));
|
||||
STATIC_ASSERT(SeqAsciiString::kHeaderSize == SeqTwoByteString::kHeaderSize);
|
||||
STATIC_ASSERT(SeqOneByteString::kHeaderSize == SeqTwoByteString::kHeaderSize);
|
||||
__ add(r7,
|
||||
r0,
|
||||
Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag),
|
||||
Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag),
|
||||
LeaveCC,
|
||||
eq);
|
||||
__ b(eq, &first_prepared);
|
||||
@ -6480,10 +6480,10 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
|
||||
STATIC_ASSERT(kSeqStringTag == 0);
|
||||
__ tst(r5, Operand(kStringRepresentationMask));
|
||||
STATIC_ASSERT(SeqAsciiString::kHeaderSize == SeqTwoByteString::kHeaderSize);
|
||||
STATIC_ASSERT(SeqOneByteString::kHeaderSize == SeqTwoByteString::kHeaderSize);
|
||||
__ add(r1,
|
||||
r1,
|
||||
Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag),
|
||||
Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag),
|
||||
LeaveCC,
|
||||
eq);
|
||||
__ b(eq, &second_prepared);
|
||||
@ -6506,7 +6506,7 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
__ b(eq, &non_ascii_string_add_flat_result);
|
||||
|
||||
__ AllocateAsciiString(r0, r6, r4, r5, r9, &call_runtime);
|
||||
__ add(r6, r0, Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
__ add(r6, r0, Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
// r0: result string.
|
||||
// r7: first character of first string.
|
||||
// r1: first character of second string.
|
||||
|
@ -416,7 +416,7 @@ void StringCharLoadGenerator::Generate(MacroAssembler* masm,
|
||||
__ b(ne, &external_string);
|
||||
|
||||
// Prepare sequential strings
|
||||
STATIC_ASSERT(SeqTwoByteString::kHeaderSize == SeqAsciiString::kHeaderSize);
|
||||
STATIC_ASSERT(SeqTwoByteString::kHeaderSize == SeqOneByteString::kHeaderSize);
|
||||
__ add(string,
|
||||
string,
|
||||
Operand(SeqTwoByteString::kHeaderSize - kHeapObjectTag));
|
||||
|
@ -3624,7 +3624,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
__ ldr(scratch1, FieldMemOperand(string, HeapObject::kMapOffset));
|
||||
__ ldrb(scratch1, FieldMemOperand(scratch1, Map::kInstanceTypeOffset));
|
||||
__ JumpIfInstanceTypeIsNotSequentialAscii(scratch1, scratch2, &bailout);
|
||||
__ ldr(scratch1, FieldMemOperand(string, SeqAsciiString::kLengthOffset));
|
||||
__ ldr(scratch1, FieldMemOperand(string, SeqOneByteString::kLengthOffset));
|
||||
__ add(string_length, string_length, Operand(scratch1), SetCC);
|
||||
__ b(vs, &bailout);
|
||||
__ cmp(element, elements_end);
|
||||
@ -3653,7 +3653,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
// Add (separator length times array_length) - separator length to the
|
||||
// string_length to get the length of the result string. array_length is not
|
||||
// smi but the other values are, so the result is a smi
|
||||
__ ldr(scratch1, FieldMemOperand(separator, SeqAsciiString::kLengthOffset));
|
||||
__ ldr(scratch1, FieldMemOperand(separator, SeqOneByteString::kLengthOffset));
|
||||
__ sub(string_length, string_length, Operand(scratch1));
|
||||
__ smull(scratch2, ip, array_length, scratch1);
|
||||
// Check for smi overflow. No overflow if higher 33 bits of 64-bit result are
|
||||
@ -3691,10 +3691,10 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
array_length = no_reg;
|
||||
__ add(result_pos,
|
||||
result,
|
||||
Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
|
||||
// Check the length of the separator.
|
||||
__ ldr(scratch1, FieldMemOperand(separator, SeqAsciiString::kLengthOffset));
|
||||
__ ldr(scratch1, FieldMemOperand(separator, SeqOneByteString::kLengthOffset));
|
||||
__ cmp(scratch1, Operand(Smi::FromInt(1)));
|
||||
__ b(eq, &one_char_separator);
|
||||
__ b(gt, &long_separator);
|
||||
@ -3710,7 +3710,9 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
__ ldr(string, MemOperand(element, kPointerSize, PostIndex));
|
||||
__ ldr(string_length, FieldMemOperand(string, String::kLengthOffset));
|
||||
__ SmiUntag(string_length);
|
||||
__ add(string, string, Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
__ add(string,
|
||||
string,
|
||||
Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
__ CopyBytes(string, result_pos, string_length, scratch1);
|
||||
__ cmp(element, elements_end);
|
||||
__ b(lt, &empty_separator_loop); // End while (element < elements_end).
|
||||
@ -3720,7 +3722,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
// One-character separator case
|
||||
__ bind(&one_char_separator);
|
||||
// Replace separator with its ASCII character value.
|
||||
__ ldrb(separator, FieldMemOperand(separator, SeqAsciiString::kHeaderSize));
|
||||
__ ldrb(separator, FieldMemOperand(separator, SeqOneByteString::kHeaderSize));
|
||||
// Jump into the loop after the code that copies the separator, so the first
|
||||
// element is not preceded by a separator
|
||||
__ jmp(&one_char_separator_loop_entry);
|
||||
@ -3740,7 +3742,9 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
__ ldr(string, MemOperand(element, kPointerSize, PostIndex));
|
||||
__ ldr(string_length, FieldMemOperand(string, String::kLengthOffset));
|
||||
__ SmiUntag(string_length);
|
||||
__ add(string, string, Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
__ add(string,
|
||||
string,
|
||||
Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
__ CopyBytes(string, result_pos, string_length, scratch1);
|
||||
__ cmp(element, elements_end);
|
||||
__ b(lt, &one_char_separator_loop); // End while (element < elements_end).
|
||||
@ -3761,14 +3765,16 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
__ SmiUntag(string_length);
|
||||
__ add(string,
|
||||
separator,
|
||||
Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
__ CopyBytes(string, result_pos, string_length, scratch1);
|
||||
|
||||
__ bind(&long_separator);
|
||||
__ ldr(string, MemOperand(element, kPointerSize, PostIndex));
|
||||
__ ldr(string_length, FieldMemOperand(string, String::kLengthOffset));
|
||||
__ SmiUntag(string_length);
|
||||
__ add(string, string, Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
__ add(string,
|
||||
string,
|
||||
Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
__ CopyBytes(string, result_pos, string_length, scratch1);
|
||||
__ cmp(element, elements_end);
|
||||
__ b(lt, &long_separator_loop); // End while (element < elements_end).
|
||||
|
@ -1786,10 +1786,10 @@ void MacroAssembler::AllocateAsciiString(Register result,
|
||||
Label* gc_required) {
|
||||
// Calculate the number of bytes needed for the characters in the string while
|
||||
// observing object alignment.
|
||||
ASSERT((SeqAsciiString::kHeaderSize & kObjectAlignmentMask) == 0);
|
||||
ASSERT((SeqOneByteString::kHeaderSize & kObjectAlignmentMask) == 0);
|
||||
ASSERT(kCharSize == 1);
|
||||
add(scratch1, length,
|
||||
Operand(kObjectAlignmentMask + SeqAsciiString::kHeaderSize));
|
||||
Operand(kObjectAlignmentMask + SeqOneByteString::kHeaderSize));
|
||||
and_(scratch1, scratch1, Operand(~kObjectAlignmentMask));
|
||||
|
||||
// Allocate ASCII string in new space.
|
||||
|
@ -54,7 +54,7 @@ class SourceCodeCache BASE_EMBEDDED {
|
||||
|
||||
bool Lookup(Vector<const char> name, Handle<SharedFunctionInfo>* handle) {
|
||||
for (int i = 0; i < cache_->length(); i+=2) {
|
||||
SeqAsciiString* str = SeqAsciiString::cast(cache_->get(i));
|
||||
SeqOneByteString* str = SeqOneByteString::cast(cache_->get(i));
|
||||
if (str->IsEqualTo(name)) {
|
||||
*handle = Handle<SharedFunctionInfo>(
|
||||
SharedFunctionInfo::cast(cache_->get(i + 1)));
|
||||
|
@ -178,7 +178,7 @@ Handle<String> Factory::LookupAsciiSymbol(Vector<const char> string) {
|
||||
}
|
||||
|
||||
|
||||
Handle<String> Factory::LookupAsciiSymbol(Handle<SeqAsciiString> string,
|
||||
Handle<String> Factory::LookupAsciiSymbol(Handle<SeqOneByteString> string,
|
||||
int from,
|
||||
int length) {
|
||||
CALL_HEAP_FUNCTION(isolate(),
|
||||
@ -222,12 +222,12 @@ Handle<String> Factory::NewStringFromTwoByte(Vector<const uc16> string,
|
||||
}
|
||||
|
||||
|
||||
Handle<SeqAsciiString> Factory::NewRawAsciiString(int length,
|
||||
Handle<SeqOneByteString> Factory::NewRawOneByteString(int length,
|
||||
PretenureFlag pretenure) {
|
||||
CALL_HEAP_FUNCTION(
|
||||
isolate(),
|
||||
isolate()->heap()->AllocateRawAsciiString(length, pretenure),
|
||||
SeqAsciiString);
|
||||
SeqOneByteString);
|
||||
}
|
||||
|
||||
|
||||
|
@ -82,7 +82,7 @@ class Factory {
|
||||
Handle<String> LookupSymbol(Vector<const char> str);
|
||||
Handle<String> LookupSymbol(Handle<String> str);
|
||||
Handle<String> LookupAsciiSymbol(Vector<const char> str);
|
||||
Handle<String> LookupAsciiSymbol(Handle<SeqAsciiString>,
|
||||
Handle<String> LookupAsciiSymbol(Handle<SeqOneByteString>,
|
||||
int from,
|
||||
int length);
|
||||
Handle<String> LookupTwoByteSymbol(Vector<const uc16> str);
|
||||
@ -130,7 +130,7 @@ class Factory {
|
||||
// Allocates and partially initializes an ASCII or TwoByte String. The
|
||||
// characters of the string are uninitialized. Currently used in regexp code
|
||||
// only, where they are pretenured.
|
||||
Handle<SeqAsciiString> NewRawAsciiString(
|
||||
Handle<SeqOneByteString> NewRawOneByteString(
|
||||
int length,
|
||||
PretenureFlag pretenure = NOT_TENURED);
|
||||
Handle<SeqTwoByteString> NewRawTwoByteString(
|
||||
|
@ -109,12 +109,12 @@ MaybeObject* Heap::AllocateSymbol(Vector<const char> str,
|
||||
|
||||
MaybeObject* Heap::AllocateAsciiSymbol(Vector<const char> str,
|
||||
uint32_t hash_field) {
|
||||
if (str.length() > SeqAsciiString::kMaxLength) {
|
||||
if (str.length() > SeqOneByteString::kMaxLength) {
|
||||
return Failure::OutOfMemoryException();
|
||||
}
|
||||
// Compute map and object size.
|
||||
Map* map = ascii_symbol_map();
|
||||
int size = SeqAsciiString::SizeFor(str.length());
|
||||
int size = SeqOneByteString::SizeFor(str.length());
|
||||
|
||||
// Allocate string.
|
||||
Object* result;
|
||||
@ -134,7 +134,7 @@ MaybeObject* Heap::AllocateAsciiSymbol(Vector<const char> str,
|
||||
ASSERT_EQ(size, answer->Size());
|
||||
|
||||
// Fill in the characters.
|
||||
memcpy(answer->address() + SeqAsciiString::kHeaderSize,
|
||||
memcpy(answer->address() + SeqOneByteString::kHeaderSize,
|
||||
str.start(), str.length());
|
||||
|
||||
return answer;
|
||||
|
38
src/heap.cc
38
src/heap.cc
@ -1764,7 +1764,7 @@ template<MarksHandling marks_handling,
|
||||
class ScavengingVisitor : public StaticVisitorBase {
|
||||
public:
|
||||
static void Initialize() {
|
||||
table_.Register(kVisitSeqAsciiString, &EvacuateSeqAsciiString);
|
||||
table_.Register(kVisitSeqOneByteString, &EvacuateSeqOneByteString);
|
||||
table_.Register(kVisitSeqTwoByteString, &EvacuateSeqTwoByteString);
|
||||
table_.Register(kVisitShortcutCandidate, &EvacuateShortcutCandidate);
|
||||
table_.Register(kVisitByteArray, &EvacuateByteArray);
|
||||
@ -2008,11 +2008,11 @@ class ScavengingVisitor : public StaticVisitorBase {
|
||||
}
|
||||
|
||||
|
||||
static inline void EvacuateSeqAsciiString(Map* map,
|
||||
static inline void EvacuateSeqOneByteString(Map* map,
|
||||
HeapObject** slot,
|
||||
HeapObject* object) {
|
||||
int object_size = SeqAsciiString::cast(object)->
|
||||
SeqAsciiStringSize(map->instance_type());
|
||||
int object_size = SeqOneByteString::cast(object)->
|
||||
SeqOneByteStringSize(map->instance_type());
|
||||
EvacuateObject<DATA_OBJECT, UNKNOWN_SIZE, kObjectAlignment>(
|
||||
map, slot, object, object_size);
|
||||
}
|
||||
@ -3354,7 +3354,7 @@ MUST_USE_RESULT static inline MaybeObject* MakeOrFindTwoCharacterString(
|
||||
{ MaybeObject* maybe_result = heap->AllocateRawAsciiString(2);
|
||||
if (!maybe_result->ToObject(&result)) return maybe_result;
|
||||
}
|
||||
char* dest = SeqAsciiString::cast(result)->GetChars();
|
||||
char* dest = SeqOneByteString::cast(result)->GetChars();
|
||||
dest[0] = c1;
|
||||
dest[1] = c2;
|
||||
return result;
|
||||
@ -3428,20 +3428,20 @@ MaybeObject* Heap::AllocateConsString(String* first, String* second) {
|
||||
if (!maybe_result->ToObject(&result)) return maybe_result;
|
||||
}
|
||||
// Copy the characters into the new object.
|
||||
char* dest = SeqAsciiString::cast(result)->GetChars();
|
||||
char* dest = SeqOneByteString::cast(result)->GetChars();
|
||||
// Copy first part.
|
||||
const char* src;
|
||||
if (first->IsExternalString()) {
|
||||
src = ExternalAsciiString::cast(first)->GetChars();
|
||||
} else {
|
||||
src = SeqAsciiString::cast(first)->GetChars();
|
||||
src = SeqOneByteString::cast(first)->GetChars();
|
||||
}
|
||||
for (int i = 0; i < first_length; i++) *dest++ = src[i];
|
||||
// Copy second part.
|
||||
if (second->IsExternalString()) {
|
||||
src = ExternalAsciiString::cast(second)->GetChars();
|
||||
} else {
|
||||
src = SeqAsciiString::cast(second)->GetChars();
|
||||
src = SeqOneByteString::cast(second)->GetChars();
|
||||
}
|
||||
for (int i = 0; i < second_length; i++) *dest++ = src[i];
|
||||
return result;
|
||||
@ -3452,7 +3452,7 @@ MaybeObject* Heap::AllocateConsString(String* first, String* second) {
|
||||
if (!maybe_result->ToObject(&result)) return maybe_result;
|
||||
}
|
||||
// Copy the characters into the new object.
|
||||
char* dest = SeqAsciiString::cast(result)->GetChars();
|
||||
char* dest = SeqOneByteString::cast(result)->GetChars();
|
||||
String::WriteToFlat(first, dest, 0, first_length);
|
||||
String::WriteToFlat(second, dest + first_length, 0, second_length);
|
||||
isolate_->counters()->string_add_runtime_ext_to_ascii()->Increment();
|
||||
@ -3529,7 +3529,7 @@ MaybeObject* Heap::AllocateSubString(String* buffer,
|
||||
// Copy the characters into the new object.
|
||||
if (is_ascii) {
|
||||
ASSERT(string_result->IsAsciiRepresentation());
|
||||
char* dest = SeqAsciiString::cast(string_result)->GetChars();
|
||||
char* dest = SeqOneByteString::cast(string_result)->GetChars();
|
||||
String::WriteToFlat(buffer, dest, start, end);
|
||||
} else {
|
||||
ASSERT(string_result->IsTwoByteRepresentation());
|
||||
@ -4572,7 +4572,7 @@ MaybeObject* Heap::AllocateStringFromAscii(Vector<const char> string,
|
||||
}
|
||||
|
||||
// Copy the characters into the new object.
|
||||
CopyChars(SeqAsciiString::cast(result)->GetChars(), string.start(), length);
|
||||
CopyChars(SeqOneByteString::cast(result)->GetChars(), string.start(), length);
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -4627,7 +4627,7 @@ MaybeObject* Heap::AllocateStringFromTwoByte(Vector<const uc16> string,
|
||||
if (String::IsAscii(start, length)) {
|
||||
MaybeObject* maybe_result = AllocateRawAsciiString(length, pretenure);
|
||||
if (!maybe_result->ToObject(&result)) return maybe_result;
|
||||
CopyChars(SeqAsciiString::cast(result)->GetChars(), start, length);
|
||||
CopyChars(SeqOneByteString::cast(result)->GetChars(), start, length);
|
||||
} else { // It's not an ASCII string.
|
||||
MaybeObject* maybe_result = AllocateRawTwoByteString(length, pretenure);
|
||||
if (!maybe_result->ToObject(&result)) return maybe_result;
|
||||
@ -4682,11 +4682,11 @@ MaybeObject* Heap::AllocateInternalSymbol(unibrow::CharacterStream* buffer,
|
||||
Map* map;
|
||||
|
||||
if (is_ascii) {
|
||||
if (chars > SeqAsciiString::kMaxLength) {
|
||||
if (chars > SeqOneByteString::kMaxLength) {
|
||||
return Failure::OutOfMemoryException();
|
||||
}
|
||||
map = ascii_symbol_map();
|
||||
size = SeqAsciiString::SizeFor(chars);
|
||||
size = SeqOneByteString::SizeFor(chars);
|
||||
} else {
|
||||
if (chars > SeqTwoByteString::kMaxLength) {
|
||||
return Failure::OutOfMemoryException();
|
||||
@ -4727,12 +4727,12 @@ MaybeObject* Heap::AllocateInternalSymbol(unibrow::CharacterStream* buffer,
|
||||
|
||||
|
||||
MaybeObject* Heap::AllocateRawAsciiString(int length, PretenureFlag pretenure) {
|
||||
if (length < 0 || length > SeqAsciiString::kMaxLength) {
|
||||
if (length < 0 || length > SeqOneByteString::kMaxLength) {
|
||||
return Failure::OutOfMemoryException();
|
||||
}
|
||||
|
||||
int size = SeqAsciiString::SizeFor(length);
|
||||
ASSERT(size <= SeqAsciiString::kMaxSize);
|
||||
int size = SeqOneByteString::SizeFor(length);
|
||||
ASSERT(size <= SeqOneByteString::kMaxSize);
|
||||
|
||||
AllocationSpace space = (pretenure == TENURED) ? OLD_DATA_SPACE : NEW_SPACE;
|
||||
AllocationSpace retry_space = OLD_DATA_SPACE;
|
||||
@ -4764,7 +4764,7 @@ MaybeObject* Heap::AllocateRawAsciiString(int length, PretenureFlag pretenure) {
|
||||
if (FLAG_verify_heap) {
|
||||
// Initialize string's content to ensure ASCII-ness (character range 0-127)
|
||||
// as required when verifying the heap.
|
||||
char* dest = SeqAsciiString::cast(result)->GetChars();
|
||||
char* dest = SeqOneByteString::cast(result)->GetChars();
|
||||
memset(dest, 0x0F, length * kCharSize);
|
||||
}
|
||||
#endif
|
||||
@ -5625,7 +5625,7 @@ MaybeObject* Heap::LookupAsciiSymbol(Vector<const char> string) {
|
||||
}
|
||||
|
||||
|
||||
MaybeObject* Heap::LookupAsciiSymbol(Handle<SeqAsciiString> string,
|
||||
MaybeObject* Heap::LookupAsciiSymbol(Handle<SeqOneByteString> string,
|
||||
int from,
|
||||
int length) {
|
||||
Object* symbol = NULL;
|
||||
|
@ -1045,9 +1045,8 @@ class Heap {
|
||||
return LookupSymbol(CStrVector(str));
|
||||
}
|
||||
MUST_USE_RESULT MaybeObject* LookupSymbol(String* str);
|
||||
MUST_USE_RESULT MaybeObject* LookupAsciiSymbol(Handle<SeqAsciiString> string,
|
||||
int from,
|
||||
int length);
|
||||
MUST_USE_RESULT MaybeObject* LookupAsciiSymbol(
|
||||
Handle<SeqOneByteString> string, int from, int length);
|
||||
|
||||
bool LookupSymbolIfExists(String* str, String** symbol);
|
||||
bool LookupTwoCharsSymbolIfExists(String* str, String** symbol);
|
||||
|
@ -3888,9 +3888,9 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
|
||||
__ test(ecx, ecx);
|
||||
__ j(zero, &setup_two_byte, Label::kNear);
|
||||
__ SmiUntag(esi);
|
||||
__ lea(ecx, FieldOperand(eax, esi, times_1, SeqAsciiString::kHeaderSize));
|
||||
__ lea(ecx, FieldOperand(eax, esi, times_1, SeqOneByteString::kHeaderSize));
|
||||
__ mov(Operand(esp, 3 * kPointerSize), ecx); // Argument 4.
|
||||
__ lea(ecx, FieldOperand(eax, ebx, times_1, SeqAsciiString::kHeaderSize));
|
||||
__ lea(ecx, FieldOperand(eax, ebx, times_1, SeqOneByteString::kHeaderSize));
|
||||
__ mov(Operand(esp, 2 * kPointerSize), ecx); // Argument 3.
|
||||
__ jmp(&setup_rest, Label::kNear);
|
||||
|
||||
@ -4036,7 +4036,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
|
||||
}
|
||||
__ mov(eax, FieldOperand(eax, ExternalString::kResourceDataOffset));
|
||||
// Move the pointer so that offset-wise, it looks like a sequential string.
|
||||
STATIC_ASSERT(SeqTwoByteString::kHeaderSize == SeqAsciiString::kHeaderSize);
|
||||
STATIC_ASSERT(SeqTwoByteString::kHeaderSize == SeqOneByteString::kHeaderSize);
|
||||
__ sub(eax, Immediate(SeqTwoByteString::kHeaderSize - kHeapObjectTag));
|
||||
STATIC_ASSERT(kTwoByteStringTag == 0);
|
||||
__ test_b(ebx, kStringEncodingMask);
|
||||
@ -5580,8 +5580,8 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
__ JumpIfNotBothSequentialAsciiStrings(eax, edx, ebx, ecx, &call_runtime);
|
||||
|
||||
// Get the two characters forming the new string.
|
||||
__ movzx_b(ebx, FieldOperand(eax, SeqAsciiString::kHeaderSize));
|
||||
__ movzx_b(ecx, FieldOperand(edx, SeqAsciiString::kHeaderSize));
|
||||
__ movzx_b(ebx, FieldOperand(eax, SeqOneByteString::kHeaderSize));
|
||||
__ movzx_b(ecx, FieldOperand(edx, SeqOneByteString::kHeaderSize));
|
||||
|
||||
// Try to lookup two character string in symbol table. If it is not found
|
||||
// just allocate a new one.
|
||||
@ -5598,8 +5598,8 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
__ mov(eax, Operand(esp, 2 * kPointerSize)); // First argument.
|
||||
__ mov(edx, Operand(esp, 1 * kPointerSize)); // Second argument.
|
||||
// Get the two characters forming the new string.
|
||||
__ movzx_b(ebx, FieldOperand(eax, SeqAsciiString::kHeaderSize));
|
||||
__ movzx_b(ecx, FieldOperand(edx, SeqAsciiString::kHeaderSize));
|
||||
__ movzx_b(ebx, FieldOperand(eax, SeqOneByteString::kHeaderSize));
|
||||
__ movzx_b(ecx, FieldOperand(edx, SeqOneByteString::kHeaderSize));
|
||||
__ bind(&make_two_character_string_no_reload);
|
||||
__ IncrementCounter(counters->string_add_make_two_char(), 1);
|
||||
__ AllocateAsciiString(eax, 2, edi, edx, &call_runtime);
|
||||
@ -5607,7 +5607,7 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
__ shl(ecx, kBitsPerByte);
|
||||
__ or_(ebx, ecx);
|
||||
// Set the characters in the new string.
|
||||
__ mov_w(FieldOperand(eax, SeqAsciiString::kHeaderSize), ebx);
|
||||
__ mov_w(FieldOperand(eax, SeqOneByteString::kHeaderSize), ebx);
|
||||
__ IncrementCounter(counters->string_add_native(), 1);
|
||||
__ ret(2 * kPointerSize);
|
||||
|
||||
@ -5674,10 +5674,10 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
__ test_b(ecx, kShortExternalStringMask);
|
||||
__ j(not_zero, &call_runtime);
|
||||
__ mov(eax, FieldOperand(eax, ExternalString::kResourceDataOffset));
|
||||
STATIC_ASSERT(SeqAsciiString::kHeaderSize == SeqTwoByteString::kHeaderSize);
|
||||
STATIC_ASSERT(SeqOneByteString::kHeaderSize == SeqTwoByteString::kHeaderSize);
|
||||
__ jmp(&first_prepared, Label::kNear);
|
||||
__ bind(&first_is_sequential);
|
||||
__ add(eax, Immediate(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
__ add(eax, Immediate(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
__ bind(&first_prepared);
|
||||
|
||||
__ mov(edi, FieldOperand(edx, HeapObject::kMapOffset));
|
||||
@ -5695,10 +5695,10 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
__ test_b(edi, kShortExternalStringMask);
|
||||
__ j(not_zero, &call_runtime);
|
||||
__ mov(edx, FieldOperand(edx, ExternalString::kResourceDataOffset));
|
||||
STATIC_ASSERT(SeqAsciiString::kHeaderSize == SeqTwoByteString::kHeaderSize);
|
||||
STATIC_ASSERT(SeqOneByteString::kHeaderSize == SeqTwoByteString::kHeaderSize);
|
||||
__ jmp(&second_prepared, Label::kNear);
|
||||
__ bind(&second_is_sequential);
|
||||
__ add(edx, Immediate(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
__ add(edx, Immediate(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
__ bind(&second_prepared);
|
||||
|
||||
// Push the addresses of both strings' first characters onto the stack.
|
||||
@ -5719,7 +5719,7 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
// eax: result string
|
||||
__ mov(ecx, eax);
|
||||
// Locate first character of result.
|
||||
__ add(ecx, Immediate(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
__ add(ecx, Immediate(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
// Load first argument's length and first character location. Account for
|
||||
// values currently on the stack when fetching arguments from it.
|
||||
__ mov(edx, Operand(esp, 4 * kPointerSize));
|
||||
@ -6029,7 +6029,7 @@ void StringHelper::GenerateTwoCharacterSymbolTableProbe(MacroAssembler* masm,
|
||||
temp, temp, &next_probe_pop_mask[i]);
|
||||
|
||||
// Check if the two characters match.
|
||||
__ mov(temp, FieldOperand(candidate, SeqAsciiString::kHeaderSize));
|
||||
__ mov(temp, FieldOperand(candidate, SeqOneByteString::kHeaderSize));
|
||||
__ and_(temp, 0x0000ffff);
|
||||
__ cmp(chars, temp);
|
||||
__ j(equal, &found_in_symbol_table);
|
||||
@ -6257,7 +6257,7 @@ void SubStringStub::Generate(MacroAssembler* masm) {
|
||||
__ j(not_zero, &runtime);
|
||||
__ mov(edi, FieldOperand(edi, ExternalString::kResourceDataOffset));
|
||||
// Move the pointer so that offset-wise, it looks like a sequential string.
|
||||
STATIC_ASSERT(SeqTwoByteString::kHeaderSize == SeqAsciiString::kHeaderSize);
|
||||
STATIC_ASSERT(SeqTwoByteString::kHeaderSize == SeqOneByteString::kHeaderSize);
|
||||
__ sub(edi, Immediate(SeqTwoByteString::kHeaderSize - kHeapObjectTag));
|
||||
|
||||
__ bind(&sequential_string);
|
||||
@ -6277,12 +6277,12 @@ void SubStringStub::Generate(MacroAssembler* masm) {
|
||||
__ mov(edx, esi); // esi used by following code.
|
||||
// Locate first character of result.
|
||||
__ mov(edi, eax);
|
||||
__ add(edi, Immediate(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
__ add(edi, Immediate(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
// Load string argument and locate character of sub string start.
|
||||
__ pop(esi);
|
||||
__ pop(ebx);
|
||||
__ SmiUntag(ebx);
|
||||
__ lea(esi, FieldOperand(esi, ebx, times_1, SeqAsciiString::kHeaderSize));
|
||||
__ lea(esi, FieldOperand(esi, ebx, times_1, SeqOneByteString::kHeaderSize));
|
||||
|
||||
// eax: result string
|
||||
// ecx: result length
|
||||
@ -6443,9 +6443,9 @@ void StringCompareStub::GenerateAsciiCharsCompareLoop(
|
||||
// doesn't need an additional compare.
|
||||
__ SmiUntag(length);
|
||||
__ lea(left,
|
||||
FieldOperand(left, length, times_1, SeqAsciiString::kHeaderSize));
|
||||
FieldOperand(left, length, times_1, SeqOneByteString::kHeaderSize));
|
||||
__ lea(right,
|
||||
FieldOperand(right, length, times_1, SeqAsciiString::kHeaderSize));
|
||||
FieldOperand(right, length, times_1, SeqOneByteString::kHeaderSize));
|
||||
__ neg(length);
|
||||
Register index = length; // index = -length;
|
||||
|
||||
|
@ -751,7 +751,7 @@ void StringCharLoadGenerator::Generate(MacroAssembler* masm,
|
||||
__ movzx_b(result, FieldOperand(string,
|
||||
index,
|
||||
times_1,
|
||||
SeqAsciiString::kHeaderSize));
|
||||
SeqOneByteString::kHeaderSize));
|
||||
__ bind(&done);
|
||||
}
|
||||
|
||||
|
@ -3580,7 +3580,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
__ cmp(scratch, kStringTag | kOneByteStringTag | kSeqStringTag);
|
||||
__ j(not_equal, &bailout);
|
||||
__ add(string_length,
|
||||
FieldOperand(string, SeqAsciiString::kLengthOffset));
|
||||
FieldOperand(string, SeqOneByteString::kLengthOffset));
|
||||
__ j(overflow, &bailout);
|
||||
__ add(index, Immediate(1));
|
||||
__ cmp(index, array_length);
|
||||
@ -3617,7 +3617,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
// Add (separator length times array_length) - separator length
|
||||
// to string_length.
|
||||
__ mov(scratch, separator_operand);
|
||||
__ mov(scratch, FieldOperand(scratch, SeqAsciiString::kLengthOffset));
|
||||
__ mov(scratch, FieldOperand(scratch, SeqOneByteString::kLengthOffset));
|
||||
__ sub(string_length, scratch); // May be negative, temporarily.
|
||||
__ imul(scratch, array_length_operand);
|
||||
__ j(overflow, &bailout);
|
||||
@ -3631,11 +3631,11 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
__ AllocateAsciiString(result_pos, string_length, scratch,
|
||||
index, string, &bailout);
|
||||
__ mov(result_operand, result_pos);
|
||||
__ lea(result_pos, FieldOperand(result_pos, SeqAsciiString::kHeaderSize));
|
||||
__ lea(result_pos, FieldOperand(result_pos, SeqOneByteString::kHeaderSize));
|
||||
|
||||
|
||||
__ mov(string, separator_operand);
|
||||
__ cmp(FieldOperand(string, SeqAsciiString::kLengthOffset),
|
||||
__ cmp(FieldOperand(string, SeqOneByteString::kLengthOffset),
|
||||
Immediate(Smi::FromInt(1)));
|
||||
__ j(equal, &one_char_separator);
|
||||
__ j(greater, &long_separator);
|
||||
@ -3660,7 +3660,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
FieldOperand(string, String::kLengthOffset));
|
||||
__ shr(string_length, 1);
|
||||
__ lea(string,
|
||||
FieldOperand(string, SeqAsciiString::kHeaderSize));
|
||||
FieldOperand(string, SeqOneByteString::kHeaderSize));
|
||||
__ CopyBytes(string, result_pos, string_length, scratch);
|
||||
__ add(index, Immediate(1));
|
||||
__ bind(&loop_1_condition);
|
||||
@ -3673,7 +3673,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
// One-character separator case
|
||||
__ bind(&one_char_separator);
|
||||
// Replace separator with its ASCII character value.
|
||||
__ mov_b(scratch, FieldOperand(string, SeqAsciiString::kHeaderSize));
|
||||
__ mov_b(scratch, FieldOperand(string, SeqOneByteString::kHeaderSize));
|
||||
__ mov_b(separator_operand, scratch);
|
||||
|
||||
__ Set(index, Immediate(0));
|
||||
@ -3701,7 +3701,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
FieldOperand(string, String::kLengthOffset));
|
||||
__ shr(string_length, 1);
|
||||
__ lea(string,
|
||||
FieldOperand(string, SeqAsciiString::kHeaderSize));
|
||||
FieldOperand(string, SeqOneByteString::kHeaderSize));
|
||||
__ CopyBytes(string, result_pos, string_length, scratch);
|
||||
__ add(index, Immediate(1));
|
||||
|
||||
@ -3730,7 +3730,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
FieldOperand(string, String::kLengthOffset));
|
||||
__ shr(string_length, 1);
|
||||
__ lea(string,
|
||||
FieldOperand(string, SeqAsciiString::kHeaderSize));
|
||||
FieldOperand(string, SeqOneByteString::kHeaderSize));
|
||||
__ CopyBytes(string, result_pos, string_length, scratch);
|
||||
|
||||
__ bind(&loop_3_entry);
|
||||
@ -3742,7 +3742,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
FieldOperand(string, String::kLengthOffset));
|
||||
__ shr(string_length, 1);
|
||||
__ lea(string,
|
||||
FieldOperand(string, SeqAsciiString::kHeaderSize));
|
||||
FieldOperand(string, SeqOneByteString::kHeaderSize));
|
||||
__ CopyBytes(string, result_pos, string_length, scratch);
|
||||
__ add(index, Immediate(1));
|
||||
|
||||
|
@ -1458,14 +1458,14 @@ void MacroAssembler::AllocateAsciiString(Register result,
|
||||
Label* gc_required) {
|
||||
// Calculate the number of bytes needed for the characters in the string while
|
||||
// observing object alignment.
|
||||
ASSERT((SeqAsciiString::kHeaderSize & kObjectAlignmentMask) == 0);
|
||||
ASSERT((SeqOneByteString::kHeaderSize & kObjectAlignmentMask) == 0);
|
||||
mov(scratch1, length);
|
||||
ASSERT(kCharSize == 1);
|
||||
add(scratch1, Immediate(kObjectAlignmentMask));
|
||||
and_(scratch1, Immediate(~kObjectAlignmentMask));
|
||||
|
||||
// Allocate ASCII string in new space.
|
||||
AllocateInNewSpace(SeqAsciiString::kHeaderSize,
|
||||
AllocateInNewSpace(SeqOneByteString::kHeaderSize,
|
||||
times_1,
|
||||
scratch1,
|
||||
result,
|
||||
@ -1493,7 +1493,7 @@ void MacroAssembler::AllocateAsciiString(Register result,
|
||||
ASSERT(length > 0);
|
||||
|
||||
// Allocate ASCII string in new space.
|
||||
AllocateInNewSpace(SeqAsciiString::SizeFor(length),
|
||||
AllocateInNewSpace(SeqOneByteString::SizeFor(length),
|
||||
result,
|
||||
scratch1,
|
||||
scratch2,
|
||||
@ -2920,8 +2920,8 @@ void MacroAssembler::EnsureNotWhite(
|
||||
// Value now either 4 (if ASCII) or 8 (if UC16), i.e., char-size shifted
|
||||
// by 2. If we multiply the string length as smi by this, it still
|
||||
// won't overflow a 32-bit value.
|
||||
ASSERT_EQ(SeqAsciiString::kMaxSize, SeqTwoByteString::kMaxSize);
|
||||
ASSERT(SeqAsciiString::kMaxSize <=
|
||||
ASSERT_EQ(SeqOneByteString::kMaxSize, SeqTwoByteString::kMaxSize);
|
||||
ASSERT(SeqOneByteString::kMaxSize <=
|
||||
static_cast<int>(0xffffffffu >> (2 + kSmiTagSize)));
|
||||
imul(length, FieldOperand(value, String::kLengthOffset));
|
||||
shr(length, 2 + kSmiTagSize + kSmiShiftSize);
|
||||
|
@ -58,7 +58,7 @@ class JsonParser BASE_EMBEDDED {
|
||||
if (position_ >= source_length_) {
|
||||
c0_ = kEndOfString;
|
||||
} else if (seq_ascii) {
|
||||
c0_ = seq_source_->SeqAsciiStringGet(position_);
|
||||
c0_ = seq_source_->SeqOneByteStringGet(position_);
|
||||
} else {
|
||||
c0_ = source_->Get(position_);
|
||||
}
|
||||
@ -160,7 +160,7 @@ class JsonParser BASE_EMBEDDED {
|
||||
private:
|
||||
Handle<String> source_;
|
||||
int source_length_;
|
||||
Handle<SeqAsciiString> seq_source_;
|
||||
Handle<SeqOneByteString> seq_source_;
|
||||
|
||||
PretenureFlag pretenure_;
|
||||
Isolate* isolate_;
|
||||
@ -186,7 +186,7 @@ Handle<Object> JsonParser<seq_ascii>::ParseJson(Handle<String> source,
|
||||
|
||||
// Optimized fast case where we only have ASCII characters.
|
||||
if (seq_ascii) {
|
||||
seq_source_ = Handle<SeqAsciiString>::cast(source_);
|
||||
seq_source_ = Handle<SeqOneByteString>::cast(source_);
|
||||
}
|
||||
|
||||
// Set initial position right before the string.
|
||||
@ -472,8 +472,8 @@ inline void SeqStringSet(Handle<SeqTwoByteString> seq_str, int i, uc32 c) {
|
||||
}
|
||||
|
||||
template <>
|
||||
inline void SeqStringSet(Handle<SeqAsciiString> seq_str, int i, uc32 c) {
|
||||
seq_str->SeqAsciiStringSet(i, c);
|
||||
inline void SeqStringSet(Handle<SeqOneByteString> seq_str, int i, uc32 c) {
|
||||
seq_str->SeqOneByteStringSet(i, c);
|
||||
}
|
||||
|
||||
template <typename StringType>
|
||||
@ -489,10 +489,10 @@ inline Handle<SeqTwoByteString> NewRawString(Factory* factory,
|
||||
}
|
||||
|
||||
template <>
|
||||
inline Handle<SeqAsciiString> NewRawString(Factory* factory,
|
||||
inline Handle<SeqOneByteString> NewRawString(Factory* factory,
|
||||
int length,
|
||||
PretenureFlag pretenure) {
|
||||
return factory->NewRawAsciiString(length, pretenure);
|
||||
return factory->NewRawOneByteString(length, pretenure);
|
||||
}
|
||||
|
||||
|
||||
@ -530,7 +530,7 @@ Handle<String> JsonParser<seq_ascii>::SlowScanJsonString(
|
||||
SeqStringSet(seq_str, count++, c0_);
|
||||
Advance();
|
||||
} else {
|
||||
// StringType is SeqAsciiString and we just read a non-ASCII char.
|
||||
// StringType is SeqOneByteString and we just read a non-ASCII char.
|
||||
return SlowScanJsonString<SeqTwoByteString, uc16>(seq_str, 0, count);
|
||||
}
|
||||
} else {
|
||||
@ -570,7 +570,7 @@ Handle<String> JsonParser<seq_ascii>::SlowScanJsonString(
|
||||
SeqStringSet(seq_str, count++, value);
|
||||
break;
|
||||
} else {
|
||||
// StringType is SeqAsciiString and we just read a non-ASCII char.
|
||||
// StringType is SeqOneByteString and we just read a non-ASCII char.
|
||||
position_ -= 6; // Rewind position_ to \ in \uxxxx.
|
||||
Advance();
|
||||
return SlowScanJsonString<SeqTwoByteString, uc16>(seq_str,
|
||||
@ -626,7 +626,7 @@ Handle<String> JsonParser<seq_ascii>::ScanJsonString() {
|
||||
c0_ = c0;
|
||||
int beg_pos = position_;
|
||||
position_ = position;
|
||||
return SlowScanJsonString<SeqAsciiString, char>(source_,
|
||||
return SlowScanJsonString<SeqOneByteString, char>(source_,
|
||||
beg_pos,
|
||||
position_);
|
||||
}
|
||||
@ -634,7 +634,7 @@ Handle<String> JsonParser<seq_ascii>::ScanJsonString() {
|
||||
running_hash = StringHasher::AddCharacterCore(running_hash, c0);
|
||||
position++;
|
||||
if (position >= source_length_) return Handle<String>::null();
|
||||
c0 = seq_source_->SeqAsciiStringGet(position);
|
||||
c0 = seq_source_->SeqOneByteStringGet(position);
|
||||
} while (c0 != '"');
|
||||
int length = position - position_;
|
||||
uint32_t hash = (length <= String::kMaxHashCalcLength)
|
||||
@ -677,7 +677,7 @@ Handle<String> JsonParser<seq_ascii>::ScanJsonString() {
|
||||
position_);
|
||||
}
|
||||
} else {
|
||||
return SlowScanJsonString<SeqAsciiString, char>(source_,
|
||||
return SlowScanJsonString<SeqOneByteString, char>(source_,
|
||||
beg_pos,
|
||||
position_);
|
||||
}
|
||||
@ -689,8 +689,8 @@ Handle<String> JsonParser<seq_ascii>::ScanJsonString() {
|
||||
beg_pos,
|
||||
length);
|
||||
} else {
|
||||
result = factory()->NewRawAsciiString(length, pretenure_);
|
||||
char* dest = SeqAsciiString::cast(*result)->GetChars();
|
||||
result = factory()->NewRawOneByteString(length, pretenure_);
|
||||
char* dest = SeqOneByteString::cast(*result)->GetChars();
|
||||
String::WriteToFlat(*source_, dest, beg_pos, position_);
|
||||
}
|
||||
ASSERT_EQ('"', c0_);
|
||||
|
@ -219,7 +219,7 @@ BasicJsonStringifier::BasicJsonStringifier(Isolate* isolate)
|
||||
accumulator_store_ = Handle<JSValue>::cast(
|
||||
factory_->ToObject(factory_->empty_string()));
|
||||
part_length_ = kInitialPartLength;
|
||||
current_part_ = factory_->NewRawAsciiString(kInitialPartLength);
|
||||
current_part_ = factory_->NewRawOneByteString(kInitialPartLength);
|
||||
tojson_symbol_ = factory_->LookupAsciiSymbol("toJSON");
|
||||
stack_ = factory_->NewJSArray(8);
|
||||
}
|
||||
@ -246,7 +246,7 @@ MaybeObject* BasicJsonStringifier::Stringify(Handle<Object> object) {
|
||||
template <bool is_ascii, typename Char>
|
||||
void BasicJsonStringifier::Append_(Char c) {
|
||||
if (is_ascii) {
|
||||
SeqAsciiString::cast(*current_part_)->SeqAsciiStringSet(
|
||||
SeqOneByteString::cast(*current_part_)->SeqOneByteStringSet(
|
||||
current_index_++, c);
|
||||
} else {
|
||||
SeqTwoByteString::cast(*current_part_)->SeqTwoByteStringSet(
|
||||
@ -636,8 +636,8 @@ void BasicJsonStringifier::ShrinkCurrentPart() {
|
||||
|
||||
int string_size, allocated_string_size;
|
||||
if (is_ascii_) {
|
||||
allocated_string_size = SeqAsciiString::SizeFor(part_length_);
|
||||
string_size = SeqAsciiString::SizeFor(current_index_);
|
||||
allocated_string_size = SeqOneByteString::SizeFor(part_length_);
|
||||
string_size = SeqOneByteString::SizeFor(current_index_);
|
||||
} else {
|
||||
allocated_string_size = SeqTwoByteString::SizeFor(part_length_);
|
||||
string_size = SeqTwoByteString::SizeFor(current_index_);
|
||||
@ -663,7 +663,7 @@ void BasicJsonStringifier::Extend() {
|
||||
part_length_ *= kPartLengthGrowthFactor;
|
||||
}
|
||||
if (is_ascii_) {
|
||||
current_part_ = factory_->NewRawAsciiString(part_length_);
|
||||
current_part_ = factory_->NewRawOneByteString(part_length_);
|
||||
} else {
|
||||
current_part_ = factory_->NewRawTwoByteString(part_length_);
|
||||
}
|
||||
@ -719,7 +719,7 @@ void BasicJsonStringifier::SerializeString_(Vector<const Char> vector,
|
||||
if (is_ascii) {
|
||||
SerializeStringUnchecked_(
|
||||
vector.start(),
|
||||
SeqAsciiString::cast(*current_part_)->GetChars(),
|
||||
SeqOneByteString::cast(*current_part_)->GetChars(),
|
||||
length);
|
||||
} else {
|
||||
SerializeStringUnchecked_(
|
||||
|
@ -71,7 +71,7 @@ typedef int (*RawComparer)(const void*, const void*);
|
||||
v(ExternalAsciiString, "unexpected: ExternalAsciiString") \
|
||||
v(ExternalString, "unexpected: ExternalString") \
|
||||
v(SeqTwoByteString, "unexpected: SeqTwoByteString") \
|
||||
v(SeqAsciiString, "unexpected: SeqAsciiString") \
|
||||
v(SeqOneByteString, "unexpected: SeqOneByteString") \
|
||||
v(SeqString, "unexpected: SeqString") \
|
||||
v(JSFunctionResultCache, "unexpected: JSFunctionResultCache") \
|
||||
v(NativeContext, "unexpected: NativeContext") \
|
||||
|
@ -5322,7 +5322,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
|
||||
__ lw(subject,
|
||||
FieldMemOperand(subject, ExternalString::kResourceDataOffset));
|
||||
// Move the pointer so that offset-wise, it looks like a sequential string.
|
||||
STATIC_ASSERT(SeqTwoByteString::kHeaderSize == SeqAsciiString::kHeaderSize);
|
||||
STATIC_ASSERT(SeqTwoByteString::kHeaderSize == SeqOneByteString::kHeaderSize);
|
||||
__ Subu(subject,
|
||||
subject,
|
||||
SeqTwoByteString::kHeaderSize - kHeapObjectTag);
|
||||
@ -6071,7 +6071,7 @@ void StringHelper::GenerateTwoCharacterSymbolTableProbe(MacroAssembler* masm,
|
||||
|
||||
// Check if the two characters match.
|
||||
// Assumes that word load is little endian.
|
||||
__ lhu(scratch, FieldMemOperand(candidate, SeqAsciiString::kHeaderSize));
|
||||
__ lhu(scratch, FieldMemOperand(candidate, SeqOneByteString::kHeaderSize));
|
||||
__ Branch(&found_in_symbol_table, eq, chars, Operand(scratch));
|
||||
__ bind(&next_probe[i]);
|
||||
}
|
||||
@ -6288,8 +6288,8 @@ void SubStringStub::Generate(MacroAssembler* masm) {
|
||||
|
||||
__ bind(&sequential_string);
|
||||
// Locate first character of underlying subject string.
|
||||
STATIC_ASSERT(SeqTwoByteString::kHeaderSize == SeqAsciiString::kHeaderSize);
|
||||
__ Addu(t1, t1, Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
STATIC_ASSERT(SeqTwoByteString::kHeaderSize == SeqOneByteString::kHeaderSize);
|
||||
__ Addu(t1, t1, Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
|
||||
__ bind(&allocate_result);
|
||||
// Sequential acii string. Allocate the result.
|
||||
@ -6304,13 +6304,13 @@ void SubStringStub::Generate(MacroAssembler* masm) {
|
||||
__ Addu(t1, t1, a3);
|
||||
|
||||
// Locate first character of result.
|
||||
__ Addu(a1, v0, Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
__ Addu(a1, v0, Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
|
||||
// v0: result string
|
||||
// a1: first character of result string
|
||||
// a2: result string length
|
||||
// t1: first character of substring to copy
|
||||
STATIC_ASSERT((SeqAsciiString::kHeaderSize & kObjectAlignmentMask) == 0);
|
||||
STATIC_ASSERT((SeqOneByteString::kHeaderSize & kObjectAlignmentMask) == 0);
|
||||
StringHelper::GenerateCopyCharactersLong(
|
||||
masm, a1, t1, a2, a3, t0, t2, t3, t4, COPY_ASCII | DEST_ALWAYS_ALIGNED);
|
||||
__ jmp(&return_v0);
|
||||
@ -6442,7 +6442,7 @@ void StringCompareStub::GenerateAsciiCharsCompareLoop(
|
||||
// doesn't need an additional compare.
|
||||
__ SmiUntag(length);
|
||||
__ Addu(scratch1, length,
|
||||
Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
__ Addu(left, left, Operand(scratch1));
|
||||
__ Addu(right, right, Operand(scratch1));
|
||||
__ Subu(length, zero_reg, length);
|
||||
@ -6597,8 +6597,8 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
&call_runtime);
|
||||
|
||||
// Get the two characters forming the sub string.
|
||||
__ lbu(a2, FieldMemOperand(a0, SeqAsciiString::kHeaderSize));
|
||||
__ lbu(a3, FieldMemOperand(a1, SeqAsciiString::kHeaderSize));
|
||||
__ lbu(a2, FieldMemOperand(a0, SeqOneByteString::kHeaderSize));
|
||||
__ lbu(a3, FieldMemOperand(a1, SeqOneByteString::kHeaderSize));
|
||||
|
||||
// Try to lookup two character string in symbol table. If it is not found
|
||||
// just allocate a new one.
|
||||
@ -6616,7 +6616,7 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
// in a little endian mode).
|
||||
__ li(t2, Operand(2));
|
||||
__ AllocateAsciiString(v0, t2, t0, t1, t5, &call_runtime);
|
||||
__ sh(a2, FieldMemOperand(v0, SeqAsciiString::kHeaderSize));
|
||||
__ sh(a2, FieldMemOperand(v0, SeqOneByteString::kHeaderSize));
|
||||
__ IncrementCounter(counters->string_add_native(), 1, a2, a3);
|
||||
__ DropAndRet(2);
|
||||
|
||||
@ -6701,11 +6701,11 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
STATIC_ASSERT(kSeqStringTag == 0);
|
||||
__ And(t4, t0, Operand(kStringRepresentationMask));
|
||||
|
||||
STATIC_ASSERT(SeqAsciiString::kHeaderSize == SeqTwoByteString::kHeaderSize);
|
||||
STATIC_ASSERT(SeqOneByteString::kHeaderSize == SeqTwoByteString::kHeaderSize);
|
||||
Label skip_first_add;
|
||||
__ Branch(&skip_first_add, ne, t4, Operand(zero_reg));
|
||||
__ Branch(USE_DELAY_SLOT, &first_prepared);
|
||||
__ addiu(t3, a0, SeqAsciiString::kHeaderSize - kHeapObjectTag);
|
||||
__ addiu(t3, a0, SeqOneByteString::kHeaderSize - kHeapObjectTag);
|
||||
__ bind(&skip_first_add);
|
||||
// External string: rule out short external string and load string resource.
|
||||
STATIC_ASSERT(kShortExternalStringTag != 0);
|
||||
@ -6716,11 +6716,11 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
|
||||
STATIC_ASSERT(kSeqStringTag == 0);
|
||||
__ And(t4, t1, Operand(kStringRepresentationMask));
|
||||
STATIC_ASSERT(SeqAsciiString::kHeaderSize == SeqTwoByteString::kHeaderSize);
|
||||
STATIC_ASSERT(SeqOneByteString::kHeaderSize == SeqTwoByteString::kHeaderSize);
|
||||
Label skip_second_add;
|
||||
__ Branch(&skip_second_add, ne, t4, Operand(zero_reg));
|
||||
__ Branch(USE_DELAY_SLOT, &second_prepared);
|
||||
__ addiu(a1, a1, SeqAsciiString::kHeaderSize - kHeapObjectTag);
|
||||
__ addiu(a1, a1, SeqOneByteString::kHeaderSize - kHeapObjectTag);
|
||||
__ bind(&skip_second_add);
|
||||
// External string: rule out short external string and load string resource.
|
||||
STATIC_ASSERT(kShortExternalStringTag != 0);
|
||||
@ -6741,7 +6741,7 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
__ Branch(&non_ascii_string_add_flat_result, eq, t4, Operand(zero_reg));
|
||||
|
||||
__ AllocateAsciiString(v0, t2, t0, t1, t5, &call_runtime);
|
||||
__ Addu(t2, v0, Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
__ Addu(t2, v0, Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
// v0: result string.
|
||||
// t3: first character of first string.
|
||||
// a1: first character of second string
|
||||
|
@ -408,7 +408,7 @@ void StringCharLoadGenerator::Generate(MacroAssembler* masm,
|
||||
__ Branch(&external_string, ne, at, Operand(zero_reg));
|
||||
|
||||
// Prepare sequential strings
|
||||
STATIC_ASSERT(SeqTwoByteString::kHeaderSize == SeqAsciiString::kHeaderSize);
|
||||
STATIC_ASSERT(SeqTwoByteString::kHeaderSize == SeqOneByteString::kHeaderSize);
|
||||
__ Addu(string,
|
||||
string,
|
||||
SeqTwoByteString::kHeaderSize - kHeapObjectTag);
|
||||
|
@ -3659,7 +3659,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
__ lw(scratch1, FieldMemOperand(string, HeapObject::kMapOffset));
|
||||
__ lbu(scratch1, FieldMemOperand(scratch1, Map::kInstanceTypeOffset));
|
||||
__ JumpIfInstanceTypeIsNotSequentialAscii(scratch1, scratch2, &bailout);
|
||||
__ lw(scratch1, FieldMemOperand(string, SeqAsciiString::kLengthOffset));
|
||||
__ lw(scratch1, FieldMemOperand(string, SeqOneByteString::kLengthOffset));
|
||||
__ AdduAndCheckForOverflow(string_length, string_length, scratch1, scratch3);
|
||||
__ BranchOnOverflow(&bailout, scratch3);
|
||||
__ Branch(&loop, lt, element, Operand(elements_end));
|
||||
@ -3686,7 +3686,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
// Add (separator length times array_length) - separator length to the
|
||||
// string_length to get the length of the result string. array_length is not
|
||||
// smi but the other values are, so the result is a smi.
|
||||
__ lw(scratch1, FieldMemOperand(separator, SeqAsciiString::kLengthOffset));
|
||||
__ lw(scratch1, FieldMemOperand(separator, SeqOneByteString::kLengthOffset));
|
||||
__ Subu(string_length, string_length, Operand(scratch1));
|
||||
__ Mult(array_length, scratch1);
|
||||
// Check for smi overflow. No overflow if higher 33 bits of 64-bit result are
|
||||
@ -3726,10 +3726,10 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
array_length = no_reg;
|
||||
__ Addu(result_pos,
|
||||
result,
|
||||
Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
|
||||
// Check the length of the separator.
|
||||
__ lw(scratch1, FieldMemOperand(separator, SeqAsciiString::kLengthOffset));
|
||||
__ lw(scratch1, FieldMemOperand(separator, SeqOneByteString::kLengthOffset));
|
||||
__ li(at, Operand(Smi::FromInt(1)));
|
||||
__ Branch(&one_char_separator, eq, scratch1, Operand(at));
|
||||
__ Branch(&long_separator, gt, scratch1, Operand(at));
|
||||
@ -3746,7 +3746,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
__ Addu(element, element, kPointerSize);
|
||||
__ lw(string_length, FieldMemOperand(string, String::kLengthOffset));
|
||||
__ SmiUntag(string_length);
|
||||
__ Addu(string, string, SeqAsciiString::kHeaderSize - kHeapObjectTag);
|
||||
__ Addu(string, string, SeqOneByteString::kHeaderSize - kHeapObjectTag);
|
||||
__ CopyBytes(string, result_pos, string_length, scratch1);
|
||||
// End while (element < elements_end).
|
||||
__ Branch(&empty_separator_loop, lt, element, Operand(elements_end));
|
||||
@ -3756,7 +3756,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
// One-character separator case.
|
||||
__ bind(&one_char_separator);
|
||||
// Replace separator with its ASCII character value.
|
||||
__ lbu(separator, FieldMemOperand(separator, SeqAsciiString::kHeaderSize));
|
||||
__ lbu(separator, FieldMemOperand(separator, SeqOneByteString::kHeaderSize));
|
||||
// Jump into the loop after the code that copies the separator, so the first
|
||||
// element is not preceded by a separator.
|
||||
__ jmp(&one_char_separator_loop_entry);
|
||||
@ -3778,7 +3778,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
__ Addu(element, element, kPointerSize);
|
||||
__ lw(string_length, FieldMemOperand(string, String::kLengthOffset));
|
||||
__ SmiUntag(string_length);
|
||||
__ Addu(string, string, SeqAsciiString::kHeaderSize - kHeapObjectTag);
|
||||
__ Addu(string, string, SeqOneByteString::kHeaderSize - kHeapObjectTag);
|
||||
__ CopyBytes(string, result_pos, string_length, scratch1);
|
||||
// End while (element < elements_end).
|
||||
__ Branch(&one_char_separator_loop, lt, element, Operand(elements_end));
|
||||
@ -3799,7 +3799,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
__ SmiUntag(string_length);
|
||||
__ Addu(string,
|
||||
separator,
|
||||
Operand(SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
Operand(SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
__ CopyBytes(string, result_pos, string_length, scratch1);
|
||||
|
||||
__ bind(&long_separator);
|
||||
@ -3807,7 +3807,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
__ Addu(element, element, kPointerSize);
|
||||
__ lw(string_length, FieldMemOperand(string, String::kLengthOffset));
|
||||
__ SmiUntag(string_length);
|
||||
__ Addu(string, string, SeqAsciiString::kHeaderSize - kHeapObjectTag);
|
||||
__ Addu(string, string, SeqOneByteString::kHeaderSize - kHeapObjectTag);
|
||||
__ CopyBytes(string, result_pos, string_length, scratch1);
|
||||
// End while (element < elements_end).
|
||||
__ Branch(&long_separator_loop, lt, element, Operand(elements_end));
|
||||
|
@ -3109,9 +3109,9 @@ void MacroAssembler::AllocateAsciiString(Register result,
|
||||
Label* gc_required) {
|
||||
// Calculate the number of bytes needed for the characters in the string
|
||||
// while observing object alignment.
|
||||
ASSERT((SeqAsciiString::kHeaderSize & kObjectAlignmentMask) == 0);
|
||||
ASSERT((SeqOneByteString::kHeaderSize & kObjectAlignmentMask) == 0);
|
||||
ASSERT(kCharSize == 1);
|
||||
addiu(scratch1, length, kObjectAlignmentMask + SeqAsciiString::kHeaderSize);
|
||||
addiu(scratch1, length, kObjectAlignmentMask + SeqOneByteString::kHeaderSize);
|
||||
And(scratch1, scratch1, Operand(~kObjectAlignmentMask));
|
||||
|
||||
// Allocate ASCII string in new space.
|
||||
|
@ -463,13 +463,13 @@ void String::StringVerify() {
|
||||
ConsString::cast(this)->ConsStringVerify();
|
||||
} else if (IsSlicedString()) {
|
||||
SlicedString::cast(this)->SlicedStringVerify();
|
||||
} else if (IsSeqAsciiString()) {
|
||||
SeqAsciiString::cast(this)->SeqAsciiStringVerify();
|
||||
} else if (IsSeqOneByteString()) {
|
||||
SeqOneByteString::cast(this)->SeqOneByteStringVerify();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void SeqAsciiString::SeqAsciiStringVerify() {
|
||||
void SeqOneByteString::SeqOneByteStringVerify() {
|
||||
CHECK(String::IsAscii(GetChars(), length()));
|
||||
}
|
||||
|
||||
|
@ -229,7 +229,7 @@ bool Object::IsSeqString() {
|
||||
}
|
||||
|
||||
|
||||
bool Object::IsSeqAsciiString() {
|
||||
bool Object::IsSeqOneByteString() {
|
||||
if (!IsString()) return false;
|
||||
return StringShape(String::cast(this)).IsSequential() &&
|
||||
String::cast(this)->IsAsciiRepresentation();
|
||||
@ -2358,7 +2358,7 @@ CAST_ACCESSOR(PolymorphicCodeCacheHashTable)
|
||||
CAST_ACCESSOR(MapCache)
|
||||
CAST_ACCESSOR(String)
|
||||
CAST_ACCESSOR(SeqString)
|
||||
CAST_ACCESSOR(SeqAsciiString)
|
||||
CAST_ACCESSOR(SeqOneByteString)
|
||||
CAST_ACCESSOR(SeqTwoByteString)
|
||||
CAST_ACCESSOR(SlicedString)
|
||||
CAST_ACCESSOR(ConsString)
|
||||
@ -2463,7 +2463,7 @@ uint16_t String::Get(int index) {
|
||||
ASSERT(index >= 0 && index < length());
|
||||
switch (StringShape(this).full_representation_tag()) {
|
||||
case kSeqStringTag | kOneByteStringTag:
|
||||
return SeqAsciiString::cast(this)->SeqAsciiStringGet(index);
|
||||
return SeqOneByteString::cast(this)->SeqOneByteStringGet(index);
|
||||
case kSeqStringTag | kTwoByteStringTag:
|
||||
return SeqTwoByteString::cast(this)->SeqTwoByteStringGet(index);
|
||||
case kConsStringTag | kOneByteStringTag:
|
||||
@ -2490,7 +2490,7 @@ void String::Set(int index, uint16_t value) {
|
||||
ASSERT(StringShape(this).IsSequential());
|
||||
|
||||
return this->IsAsciiRepresentation()
|
||||
? SeqAsciiString::cast(this)->SeqAsciiStringSet(index, value)
|
||||
? SeqOneByteString::cast(this)->SeqOneByteStringSet(index, value)
|
||||
: SeqTwoByteString::cast(this)->SeqTwoByteStringSet(index, value);
|
||||
}
|
||||
|
||||
@ -2512,25 +2512,25 @@ String* String::GetUnderlying() {
|
||||
}
|
||||
|
||||
|
||||
uint16_t SeqAsciiString::SeqAsciiStringGet(int index) {
|
||||
uint16_t SeqOneByteString::SeqOneByteStringGet(int index) {
|
||||
ASSERT(index >= 0 && index < length());
|
||||
return READ_BYTE_FIELD(this, kHeaderSize + index * kCharSize);
|
||||
}
|
||||
|
||||
|
||||
void SeqAsciiString::SeqAsciiStringSet(int index, uint16_t value) {
|
||||
void SeqOneByteString::SeqOneByteStringSet(int index, uint16_t value) {
|
||||
ASSERT(index >= 0 && index < length() && value <= kMaxAsciiCharCode);
|
||||
WRITE_BYTE_FIELD(this, kHeaderSize + index * kCharSize,
|
||||
static_cast<byte>(value));
|
||||
}
|
||||
|
||||
|
||||
Address SeqAsciiString::GetCharsAddress() {
|
||||
Address SeqOneByteString::GetCharsAddress() {
|
||||
return FIELD_ADDR(this, kHeaderSize);
|
||||
}
|
||||
|
||||
|
||||
char* SeqAsciiString::GetChars() {
|
||||
char* SeqOneByteString::GetChars() {
|
||||
return reinterpret_cast<char*>(GetCharsAddress());
|
||||
}
|
||||
|
||||
@ -2562,7 +2562,7 @@ int SeqTwoByteString::SeqTwoByteStringSize(InstanceType instance_type) {
|
||||
}
|
||||
|
||||
|
||||
int SeqAsciiString::SeqAsciiStringSize(InstanceType instance_type) {
|
||||
int SeqOneByteString::SeqOneByteStringSize(InstanceType instance_type) {
|
||||
return SizeFor(length());
|
||||
}
|
||||
|
||||
@ -2980,8 +2980,8 @@ int HeapObject::SizeFromMap(Map* map) {
|
||||
return FixedArray::BodyDescriptor::SizeOf(map, this);
|
||||
}
|
||||
if (instance_type == ASCII_STRING_TYPE) {
|
||||
return SeqAsciiString::SizeFor(
|
||||
reinterpret_cast<SeqAsciiString*>(this)->length());
|
||||
return SeqOneByteString::SizeFor(
|
||||
reinterpret_cast<SeqOneByteString*>(this)->length());
|
||||
}
|
||||
if (instance_type == BYTE_ARRAY_TYPE) {
|
||||
return reinterpret_cast<ByteArray*>(this)->ByteArraySize();
|
||||
|
@ -68,7 +68,7 @@ void StaticNewSpaceVisitor<StaticVisitor>::Initialize() {
|
||||
SharedFunctionInfo::BodyDescriptor,
|
||||
int>::Visit);
|
||||
|
||||
table_.Register(kVisitSeqAsciiString, &VisitSeqAsciiString);
|
||||
table_.Register(kVisitSeqOneByteString, &VisitSeqOneByteString);
|
||||
|
||||
table_.Register(kVisitSeqTwoByteString, &VisitSeqTwoByteString);
|
||||
|
||||
@ -123,7 +123,7 @@ void StaticMarkingVisitor<StaticVisitor>::Initialize() {
|
||||
|
||||
table_.Register(kVisitFreeSpace, &DataObjectVisitor::Visit);
|
||||
|
||||
table_.Register(kVisitSeqAsciiString, &DataObjectVisitor::Visit);
|
||||
table_.Register(kVisitSeqOneByteString, &DataObjectVisitor::Visit);
|
||||
|
||||
table_.Register(kVisitSeqTwoByteString, &DataObjectVisitor::Visit);
|
||||
|
||||
|
@ -46,7 +46,7 @@ StaticVisitorBase::VisitorId StaticVisitorBase::GetVisitorId(
|
||||
switch (instance_type & kStringRepresentationMask) {
|
||||
case kSeqStringTag:
|
||||
if ((instance_type & kStringEncodingMask) == kOneByteStringTag) {
|
||||
return kVisitSeqAsciiString;
|
||||
return kVisitSeqOneByteString;
|
||||
} else {
|
||||
return kVisitSeqTwoByteString;
|
||||
}
|
||||
|
@ -47,7 +47,7 @@ namespace internal {
|
||||
class StaticVisitorBase : public AllStatic {
|
||||
public:
|
||||
#define VISITOR_ID_LIST(V) \
|
||||
V(SeqAsciiString) \
|
||||
V(SeqOneByteString) \
|
||||
V(SeqTwoByteString) \
|
||||
V(ShortcutCandidate) \
|
||||
V(ByteArray) \
|
||||
@ -318,9 +318,9 @@ class StaticNewSpaceVisitor : public StaticVisitorBase {
|
||||
return JSObjectVisitor::Visit(map, object);
|
||||
}
|
||||
|
||||
static inline int VisitSeqAsciiString(Map* map, HeapObject* object) {
|
||||
return SeqAsciiString::cast(object)->
|
||||
SeqAsciiStringSize(map->instance_type());
|
||||
static inline int VisitSeqOneByteString(Map* map, HeapObject* object) {
|
||||
return SeqOneByteString::cast(object)->
|
||||
SeqOneByteStringSize(map->instance_type());
|
||||
}
|
||||
|
||||
static inline int VisitSeqTwoByteString(Map* map, HeapObject* object) {
|
||||
|
@ -889,7 +889,7 @@ MaybeObject* String::SlowTryFlatten(PretenureFlag pretenure) {
|
||||
result = String::cast(object);
|
||||
String* first = cs->first();
|
||||
int first_length = first->length();
|
||||
char* dest = SeqAsciiString::cast(result)->GetChars();
|
||||
char* dest = SeqOneByteString::cast(result)->GetChars();
|
||||
WriteToFlat(first, dest, 0, first_length);
|
||||
String* second = cs->second();
|
||||
WriteToFlat(second,
|
||||
@ -6512,7 +6512,7 @@ String::FlatContent String::GetFlatContent() {
|
||||
if (shape.encoding_tag() == kOneByteStringTag) {
|
||||
const char* start;
|
||||
if (shape.representation_tag() == kSeqStringTag) {
|
||||
start = SeqAsciiString::cast(string)->GetChars();
|
||||
start = SeqOneByteString::cast(string)->GetChars();
|
||||
} else {
|
||||
start = ExternalAsciiString::cast(string)->GetChars();
|
||||
}
|
||||
@ -6676,7 +6676,7 @@ void SeqTwoByteString::SeqTwoByteStringReadBlockIntoBuffer(ReadBlockBuffer* rbb,
|
||||
}
|
||||
|
||||
|
||||
const unibrow::byte* SeqAsciiString::SeqAsciiStringReadBlock(
|
||||
const unibrow::byte* SeqOneByteString::SeqOneByteStringReadBlock(
|
||||
unsigned* remaining,
|
||||
unsigned* offset_ptr,
|
||||
unsigned max_chars) {
|
||||
@ -6804,7 +6804,7 @@ void ExternalTwoByteString::ExternalTwoByteStringReadBlockIntoBuffer(
|
||||
}
|
||||
|
||||
|
||||
void SeqAsciiString::SeqAsciiStringReadBlockIntoBuffer(ReadBlockBuffer* rbb,
|
||||
void SeqOneByteString::SeqOneByteStringReadBlockIntoBuffer(ReadBlockBuffer* rbb,
|
||||
unsigned* offset_ptr,
|
||||
unsigned max_chars) {
|
||||
unsigned capacity = rbb->capacity - rbb->cursor;
|
||||
@ -6848,8 +6848,8 @@ const unibrow::byte* String::ReadBlock(String* input,
|
||||
switch (StringShape(input).representation_tag()) {
|
||||
case kSeqStringTag:
|
||||
if (input->IsAsciiRepresentation()) {
|
||||
SeqAsciiString* str = SeqAsciiString::cast(input);
|
||||
return str->SeqAsciiStringReadBlock(&rbb->remaining,
|
||||
SeqOneByteString* str = SeqOneByteString::cast(input);
|
||||
return str->SeqOneByteStringReadBlock(&rbb->remaining,
|
||||
offset_ptr,
|
||||
max_chars);
|
||||
} else {
|
||||
@ -6997,7 +6997,7 @@ void String::ReadBlockIntoBuffer(String* input,
|
||||
switch (StringShape(input).representation_tag()) {
|
||||
case kSeqStringTag:
|
||||
if (input->IsAsciiRepresentation()) {
|
||||
SeqAsciiString::cast(input)->SeqAsciiStringReadBlockIntoBuffer(rbb,
|
||||
SeqOneByteString::cast(input)->SeqOneByteStringReadBlockIntoBuffer(rbb,
|
||||
offset_ptr,
|
||||
max_chars);
|
||||
return;
|
||||
@ -7214,7 +7214,7 @@ void String::WriteToFlat(String* src,
|
||||
}
|
||||
case kOneByteStringTag | kSeqStringTag: {
|
||||
CopyChars(sink,
|
||||
SeqAsciiString::cast(source)->GetChars() + from,
|
||||
SeqOneByteString::cast(source)->GetChars() + from,
|
||||
to - from);
|
||||
return;
|
||||
}
|
||||
@ -7249,9 +7249,9 @@ void String::WriteToFlat(String* src,
|
||||
// common case of sequential ascii right child.
|
||||
if (to - boundary == 1) {
|
||||
sink[boundary - from] = static_cast<sinkchar>(second->Get(0));
|
||||
} else if (second->IsSeqAsciiString()) {
|
||||
} else if (second->IsSeqOneByteString()) {
|
||||
CopyChars(sink + boundary - from,
|
||||
SeqAsciiString::cast(second)->GetChars(),
|
||||
SeqOneByteString::cast(second)->GetChars(),
|
||||
to - boundary);
|
||||
} else {
|
||||
WriteToFlat(second,
|
||||
@ -7390,8 +7390,8 @@ bool String::SlowEquals(String* other) {
|
||||
|
||||
if (StringShape(lhs).IsSequentialAscii() &&
|
||||
StringShape(rhs).IsSequentialAscii()) {
|
||||
const char* str1 = SeqAsciiString::cast(lhs)->GetChars();
|
||||
const char* str2 = SeqAsciiString::cast(rhs)->GetChars();
|
||||
const char* str1 = SeqOneByteString::cast(lhs)->GetChars();
|
||||
const char* str2 = SeqOneByteString::cast(rhs)->GetChars();
|
||||
return CompareRawStringContents(Vector<const char>(str1, len),
|
||||
Vector<const char>(str2, len));
|
||||
}
|
||||
@ -7519,7 +7519,7 @@ uint32_t String::ComputeAndSetHash() {
|
||||
// Compute the hash code.
|
||||
uint32_t field = 0;
|
||||
if (StringShape(this).IsSequentialAscii()) {
|
||||
field = HashSequentialString(SeqAsciiString::cast(this)->GetChars(),
|
||||
field = HashSequentialString(SeqOneByteString::cast(this)->GetChars(),
|
||||
len,
|
||||
GetHeap()->HashSeed());
|
||||
} else if (StringShape(this).IsSequentialTwoByte()) {
|
||||
@ -11655,7 +11655,7 @@ class AsciiSymbolKey : public SequentialSymbolKey<char> {
|
||||
|
||||
class SubStringAsciiSymbolKey : public HashTableKey {
|
||||
public:
|
||||
explicit SubStringAsciiSymbolKey(Handle<SeqAsciiString> string,
|
||||
explicit SubStringAsciiSymbolKey(Handle<SeqOneByteString> string,
|
||||
int from,
|
||||
int length,
|
||||
uint32_t seed)
|
||||
@ -11676,7 +11676,7 @@ class SubStringAsciiSymbolKey : public HashTableKey {
|
||||
// chance this is an array index.
|
||||
while (i < length_ && hasher.is_array_index()) {
|
||||
hasher.AddCharacter(static_cast<uc32>(
|
||||
string_->SeqAsciiStringGet(i + from_)));
|
||||
string_->SeqOneByteStringGet(i + from_)));
|
||||
i++;
|
||||
}
|
||||
|
||||
@ -11684,7 +11684,7 @@ class SubStringAsciiSymbolKey : public HashTableKey {
|
||||
// index.
|
||||
while (i < length_) {
|
||||
hasher.AddCharacterNoIndex(static_cast<uc32>(
|
||||
string_->SeqAsciiStringGet(i + from_)));
|
||||
string_->SeqOneByteStringGet(i + from_)));
|
||||
i++;
|
||||
}
|
||||
hash_field_ = hasher.GetHashField();
|
||||
@ -11712,7 +11712,7 @@ class SubStringAsciiSymbolKey : public HashTableKey {
|
||||
}
|
||||
|
||||
private:
|
||||
Handle<SeqAsciiString> string_;
|
||||
Handle<SeqOneByteString> string_;
|
||||
int from_;
|
||||
int length_;
|
||||
uint32_t hash_field_;
|
||||
@ -12637,10 +12637,11 @@ MaybeObject* SymbolTable::LookupAsciiSymbol(Vector<const char> str,
|
||||
}
|
||||
|
||||
|
||||
MaybeObject* SymbolTable::LookupSubStringAsciiSymbol(Handle<SeqAsciiString> str,
|
||||
int from,
|
||||
int length,
|
||||
Object** s) {
|
||||
MaybeObject* SymbolTable::LookupSubStringAsciiSymbol(
|
||||
Handle<SeqOneByteString> str,
|
||||
int from,
|
||||
int length,
|
||||
Object** s) {
|
||||
SubStringAsciiSymbolKey key(str, from, length, GetHeap()->HashSeed());
|
||||
return LookupKey(&key, s);
|
||||
}
|
||||
|
@ -97,7 +97,7 @@
|
||||
// - ExternalFloatArray
|
||||
// - String
|
||||
// - SeqString
|
||||
// - SeqAsciiString
|
||||
// - SeqOneByteString
|
||||
// - SeqTwoByteString
|
||||
// - SlicedString
|
||||
// - ConsString
|
||||
@ -829,7 +829,7 @@ class MaybeObject BASE_EMBEDDED {
|
||||
V(ExternalTwoByteString) \
|
||||
V(ExternalAsciiString) \
|
||||
V(SeqTwoByteString) \
|
||||
V(SeqAsciiString) \
|
||||
V(SeqOneByteString) \
|
||||
\
|
||||
V(ExternalArray) \
|
||||
V(ExternalByteArray) \
|
||||
@ -3037,7 +3037,7 @@ class SymbolTableShape : public BaseShape<HashTableKey*> {
|
||||
static const int kEntrySize = 1;
|
||||
};
|
||||
|
||||
class SeqAsciiString;
|
||||
class SeqOneByteString;
|
||||
|
||||
// SymbolTable.
|
||||
//
|
||||
@ -3053,7 +3053,7 @@ class SymbolTable: public HashTable<SymbolTableShape, HashTableKey*> {
|
||||
MUST_USE_RESULT MaybeObject* LookupAsciiSymbol(Vector<const char> str,
|
||||
Object** s);
|
||||
MUST_USE_RESULT MaybeObject* LookupSubStringAsciiSymbol(
|
||||
Handle<SeqAsciiString> str,
|
||||
Handle<SeqOneByteString> str,
|
||||
int from,
|
||||
int length,
|
||||
Object** s);
|
||||
@ -7581,13 +7581,13 @@ class SeqString: public String {
|
||||
|
||||
// The AsciiString class captures sequential ASCII string objects.
|
||||
// Each character in the AsciiString is an ASCII character.
|
||||
class SeqAsciiString: public SeqString {
|
||||
class SeqOneByteString: public SeqString {
|
||||
public:
|
||||
static const bool kHasAsciiEncoding = true;
|
||||
|
||||
// Dispatched behavior.
|
||||
inline uint16_t SeqAsciiStringGet(int index);
|
||||
inline void SeqAsciiStringSet(int index, uint16_t value);
|
||||
inline uint16_t SeqOneByteStringGet(int index);
|
||||
inline void SeqOneByteStringSet(int index, uint16_t value);
|
||||
|
||||
// Get the address of the characters in this string.
|
||||
inline Address GetCharsAddress();
|
||||
@ -7595,12 +7595,12 @@ class SeqAsciiString: public SeqString {
|
||||
inline char* GetChars();
|
||||
|
||||
// Casting
|
||||
static inline SeqAsciiString* cast(Object* obj);
|
||||
static inline SeqOneByteString* cast(Object* obj);
|
||||
|
||||
// Garbage collection support. This method is called by the
|
||||
// garbage collector to compute the actual size of an AsciiString
|
||||
// instance.
|
||||
inline int SeqAsciiStringSize(InstanceType instance_type);
|
||||
inline int SeqOneByteStringSize(InstanceType instance_type);
|
||||
|
||||
// Computes the size for an AsciiString instance of a given length.
|
||||
static int SizeFor(int length) {
|
||||
@ -7614,17 +7614,17 @@ class SeqAsciiString: public SeqString {
|
||||
static const int kMaxLength = (kMaxSize - kHeaderSize);
|
||||
|
||||
// Support for StringInputBuffer.
|
||||
inline void SeqAsciiStringReadBlockIntoBuffer(ReadBlockBuffer* buffer,
|
||||
inline void SeqOneByteStringReadBlockIntoBuffer(ReadBlockBuffer* buffer,
|
||||
unsigned* offset,
|
||||
unsigned chars);
|
||||
inline const unibrow::byte* SeqAsciiStringReadBlock(unsigned* remaining,
|
||||
inline const unibrow::byte* SeqOneByteStringReadBlock(unsigned* remaining,
|
||||
unsigned* offset,
|
||||
unsigned chars);
|
||||
|
||||
DECLARE_VERIFIER(SeqAsciiString)
|
||||
DECLARE_VERIFIER(SeqOneByteString)
|
||||
|
||||
private:
|
||||
DISALLOW_IMPLICIT_CONSTRUCTORS(SeqAsciiString);
|
||||
DISALLOW_IMPLICIT_CONSTRUCTORS(SeqOneByteString);
|
||||
};
|
||||
|
||||
|
||||
|
@ -83,8 +83,8 @@ const byte* NativeRegExpMacroAssembler::StringCharacterPosition(
|
||||
const char* data = ExternalAsciiString::cast(subject)->GetChars();
|
||||
address = reinterpret_cast<const byte*>(data);
|
||||
} else {
|
||||
ASSERT(subject->IsSeqAsciiString());
|
||||
char* data = SeqAsciiString::cast(subject)->GetChars();
|
||||
ASSERT(subject->IsSeqOneByteString());
|
||||
char* data = SeqOneByteString::cast(subject)->GetChars();
|
||||
address = reinterpret_cast<const byte*>(data);
|
||||
}
|
||||
return address + start_index;
|
||||
|
@ -2515,7 +2515,7 @@ class ReplacementStringBuilder {
|
||||
|
||||
Handle<String> joined_string;
|
||||
if (is_ascii_) {
|
||||
Handle<SeqAsciiString> seq = NewRawAsciiString(character_count_);
|
||||
Handle<SeqOneByteString> seq = NewRawOneByteString(character_count_);
|
||||
AssertNoAllocation no_alloc;
|
||||
char* char_buffer = seq->GetChars();
|
||||
StringBuilderConcatHelper(*subject_,
|
||||
@ -2546,8 +2546,8 @@ class ReplacementStringBuilder {
|
||||
}
|
||||
|
||||
private:
|
||||
Handle<SeqAsciiString> NewRawAsciiString(int length) {
|
||||
return heap_->isolate()->factory()->NewRawAsciiString(length);
|
||||
Handle<SeqOneByteString> NewRawOneByteString(int length) {
|
||||
return heap_->isolate()->factory()->NewRawOneByteString(length);
|
||||
}
|
||||
|
||||
|
||||
@ -2996,7 +2996,7 @@ MUST_USE_RESULT static MaybeObject* StringReplaceAtomRegExpWithString(
|
||||
Handle<ResultSeqString> result;
|
||||
if (ResultSeqString::kHasAsciiEncoding) {
|
||||
result = Handle<ResultSeqString>::cast(
|
||||
isolate->factory()->NewRawAsciiString(result_len));
|
||||
isolate->factory()->NewRawOneByteString(result_len));
|
||||
} else {
|
||||
result = Handle<ResultSeqString>::cast(
|
||||
isolate->factory()->NewRawTwoByteString(result_len));
|
||||
@ -3065,7 +3065,7 @@ MUST_USE_RESULT static MaybeObject* StringReplaceRegExpWithString(
|
||||
regexp->TypeTag() == JSRegExp::ATOM &&
|
||||
simple_replace) {
|
||||
if (subject->HasOnlyAsciiChars() && replacement->HasOnlyAsciiChars()) {
|
||||
return StringReplaceAtomRegExpWithString<SeqAsciiString>(
|
||||
return StringReplaceAtomRegExpWithString<SeqOneByteString>(
|
||||
isolate, subject, regexp, replacement, last_match_info);
|
||||
} else {
|
||||
return StringReplaceAtomRegExpWithString<SeqTwoByteString>(
|
||||
@ -3155,7 +3155,7 @@ MUST_USE_RESULT static MaybeObject* StringReplaceRegExpWithEmptyString(
|
||||
regexp->TypeTag() == JSRegExp::ATOM) {
|
||||
Handle<String> empty_string(HEAP->empty_string());
|
||||
if (subject->HasOnlyAsciiChars()) {
|
||||
return StringReplaceAtomRegExpWithString<SeqAsciiString>(
|
||||
return StringReplaceAtomRegExpWithString<SeqOneByteString>(
|
||||
isolate,
|
||||
subject,
|
||||
regexp,
|
||||
@ -3191,7 +3191,7 @@ MUST_USE_RESULT static MaybeObject* StringReplaceRegExpWithEmptyString(
|
||||
Handle<ResultSeqString> answer;
|
||||
if (ResultSeqString::kHasAsciiEncoding) {
|
||||
answer = Handle<ResultSeqString>::cast(
|
||||
isolate->factory()->NewRawAsciiString(new_length));
|
||||
isolate->factory()->NewRawOneByteString(new_length));
|
||||
} else {
|
||||
answer = Handle<ResultSeqString>::cast(
|
||||
isolate->factory()->NewRawTwoByteString(new_length));
|
||||
@ -3283,7 +3283,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringReplaceRegExpWithString) {
|
||||
|
||||
if (replacement->length() == 0) {
|
||||
if (subject->HasOnlyAsciiChars()) {
|
||||
return StringReplaceRegExpWithEmptyString<SeqAsciiString>(
|
||||
return StringReplaceRegExpWithEmptyString<SeqOneByteString>(
|
||||
isolate, subject, regexp, last_match_info);
|
||||
} else {
|
||||
return StringReplaceRegExpWithEmptyString<SeqTwoByteString>(
|
||||
@ -5161,10 +5161,10 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringToNumber) {
|
||||
|
||||
// Fast case: short integer or some sorts of junk values.
|
||||
int len = subject->length();
|
||||
if (subject->IsSeqAsciiString()) {
|
||||
if (subject->IsSeqOneByteString()) {
|
||||
if (len == 0) return Smi::FromInt(0);
|
||||
|
||||
char const* data = SeqAsciiString::cast(subject)->GetChars();
|
||||
char const* data = SeqOneByteString::cast(subject)->GetChars();
|
||||
bool minus = (data[0] == '-');
|
||||
int start_pos = (minus ? 1 : 0);
|
||||
|
||||
@ -5531,7 +5531,7 @@ MaybeObject* AllocateRawString<SeqTwoByteString>(Isolate* isolate, int length) {
|
||||
|
||||
|
||||
template <>
|
||||
MaybeObject* AllocateRawString<SeqAsciiString>(Isolate* isolate, int length) {
|
||||
MaybeObject* AllocateRawString<SeqOneByteString>(Isolate* isolate, int length) {
|
||||
return isolate->heap()->AllocateRawAsciiString(length);
|
||||
}
|
||||
|
||||
@ -5683,7 +5683,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_QuoteJSONString) {
|
||||
return QuoteJsonString<uc16, SeqTwoByteString, false>(isolate,
|
||||
flat.ToUC16Vector());
|
||||
} else {
|
||||
return QuoteJsonString<char, SeqAsciiString, false>(isolate,
|
||||
return QuoteJsonString<char, SeqOneByteString, false>(isolate,
|
||||
flat.ToAsciiVector());
|
||||
}
|
||||
}
|
||||
@ -5706,7 +5706,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_QuoteJSONStringComma) {
|
||||
return QuoteJsonString<uc16, SeqTwoByteString, true>(isolate,
|
||||
flat.ToUC16Vector());
|
||||
} else {
|
||||
return QuoteJsonString<char, SeqAsciiString, true>(isolate,
|
||||
return QuoteJsonString<char, SeqOneByteString, true>(isolate,
|
||||
flat.ToAsciiVector());
|
||||
}
|
||||
}
|
||||
@ -5798,7 +5798,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_QuoteJSONStringArray) {
|
||||
}
|
||||
|
||||
if (ascii) {
|
||||
return QuoteJsonStringArray<char, SeqAsciiString>(isolate,
|
||||
return QuoteJsonStringArray<char, SeqOneByteString>(isolate,
|
||||
elements,
|
||||
worst_case_length);
|
||||
} else {
|
||||
@ -6095,14 +6095,14 @@ MUST_USE_RESULT static MaybeObject* ConvertCase(
|
||||
// character is also ASCII. This is currently the case, but it
|
||||
// might break in the future if we implement more context and locale
|
||||
// dependent upper/lower conversions.
|
||||
if (s->IsSeqAsciiString()) {
|
||||
if (s->IsSeqOneByteString()) {
|
||||
Object* o;
|
||||
{ MaybeObject* maybe_o = isolate->heap()->AllocateRawAsciiString(length);
|
||||
if (!maybe_o->ToObject(&o)) return maybe_o;
|
||||
}
|
||||
SeqAsciiString* result = SeqAsciiString::cast(o);
|
||||
SeqOneByteString* result = SeqOneByteString::cast(o);
|
||||
bool has_changed_character = ConvertTraits::AsciiConverter::Convert(
|
||||
result->GetChars(), SeqAsciiString::cast(s)->GetChars(), length);
|
||||
result->GetChars(), SeqOneByteString::cast(s)->GetChars(), length);
|
||||
return has_changed_character ? result : s;
|
||||
}
|
||||
|
||||
@ -6680,7 +6680,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringBuilderConcat) {
|
||||
isolate->heap()->AllocateRawAsciiString(length);
|
||||
if (!maybe_object->ToObject(&object)) return maybe_object;
|
||||
}
|
||||
SeqAsciiString* answer = SeqAsciiString::cast(object);
|
||||
SeqOneByteString* answer = SeqOneByteString::cast(object);
|
||||
StringBuilderConcatHelper(special,
|
||||
answer->GetChars(),
|
||||
fixed_array,
|
||||
@ -6842,7 +6842,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SparseJoinWithSeparator) {
|
||||
bool is_ascii = separator->IsAsciiRepresentation();
|
||||
int max_string_length;
|
||||
if (is_ascii) {
|
||||
max_string_length = SeqAsciiString::kMaxLength;
|
||||
max_string_length = SeqOneByteString::kMaxLength;
|
||||
} else {
|
||||
max_string_length = SeqTwoByteString::kMaxLength;
|
||||
}
|
||||
@ -6894,8 +6894,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SparseJoinWithSeparator) {
|
||||
MaybeObject* result_allocation =
|
||||
isolate->heap()->AllocateRawAsciiString(string_length);
|
||||
if (result_allocation->IsFailure()) return result_allocation;
|
||||
SeqAsciiString* result_string =
|
||||
SeqAsciiString::cast(result_allocation->ToObjectUnchecked());
|
||||
SeqOneByteString* result_string =
|
||||
SeqOneByteString::cast(result_allocation->ToObjectUnchecked());
|
||||
JoinSparseArrayWithSeparator<char>(elements,
|
||||
elements_length,
|
||||
array_length,
|
||||
@ -9066,7 +9066,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_ParseJson) {
|
||||
source = Handle<String>(source->TryFlattenGetString());
|
||||
// Optimized fast case where we only have ASCII characters.
|
||||
Handle<Object> result;
|
||||
if (source->IsSeqAsciiString()) {
|
||||
if (source->IsSeqOneByteString()) {
|
||||
result = JsonParser<true>::Parse(source, zone);
|
||||
} else {
|
||||
result = JsonParser<false>::Parse(source, zone);
|
||||
|
@ -84,7 +84,7 @@ double StringToDouble(UnicodeCache* unicode_cache,
|
||||
String* str, int flags, double empty_string_val) {
|
||||
StringShape shape(str);
|
||||
if (shape.IsSequentialAscii()) {
|
||||
const char* begin = SeqAsciiString::cast(str)->GetChars();
|
||||
const char* begin = SeqOneByteString::cast(str)->GetChars();
|
||||
const char* end = begin + str->length();
|
||||
return InternalStringToDouble(unicode_cache, begin, end, flags,
|
||||
empty_string_val);
|
||||
@ -109,7 +109,7 @@ double StringToInt(UnicodeCache* unicode_cache,
|
||||
int radix) {
|
||||
StringShape shape(str);
|
||||
if (shape.IsSequentialAscii()) {
|
||||
const char* begin = SeqAsciiString::cast(str)->GetChars();
|
||||
const char* begin = SeqOneByteString::cast(str)->GetChars();
|
||||
const char* end = begin + str->length();
|
||||
return InternalStringToInt(unicode_cache, begin, end, radix);
|
||||
} else if (shape.IsSequentialTwoByte()) {
|
||||
|
@ -3014,8 +3014,8 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
|
||||
// r15: original subject string
|
||||
__ testb(rcx, rcx); // Last use of rcx as encoding of subject string.
|
||||
__ j(zero, &setup_two_byte, Label::kNear);
|
||||
__ lea(arg4, FieldOperand(rdi, r14, times_1, SeqAsciiString::kHeaderSize));
|
||||
__ lea(arg3, FieldOperand(rdi, rbx, times_1, SeqAsciiString::kHeaderSize));
|
||||
__ lea(arg4, FieldOperand(rdi, r14, times_1, SeqOneByteString::kHeaderSize));
|
||||
__ lea(arg3, FieldOperand(rdi, rbx, times_1, SeqOneByteString::kHeaderSize));
|
||||
__ jmp(&setup_rest, Label::kNear);
|
||||
__ bind(&setup_two_byte);
|
||||
__ lea(arg4, FieldOperand(rdi, r14, times_2, SeqTwoByteString::kHeaderSize));
|
||||
@ -3155,7 +3155,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
|
||||
}
|
||||
__ movq(rdi, FieldOperand(rdi, ExternalString::kResourceDataOffset));
|
||||
// Move the pointer so that offset-wise, it looks like a sequential string.
|
||||
STATIC_ASSERT(SeqTwoByteString::kHeaderSize == SeqAsciiString::kHeaderSize);
|
||||
STATIC_ASSERT(SeqTwoByteString::kHeaderSize == SeqOneByteString::kHeaderSize);
|
||||
__ subq(rdi, Immediate(SeqTwoByteString::kHeaderSize - kHeapObjectTag));
|
||||
STATIC_ASSERT(kTwoByteStringTag == 0);
|
||||
__ testb(rbx, Immediate(kStringEncodingMask));
|
||||
@ -4656,8 +4656,8 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
&call_runtime);
|
||||
|
||||
// Get the two characters forming the sub string.
|
||||
__ movzxbq(rbx, FieldOperand(rax, SeqAsciiString::kHeaderSize));
|
||||
__ movzxbq(rcx, FieldOperand(rdx, SeqAsciiString::kHeaderSize));
|
||||
__ movzxbq(rbx, FieldOperand(rax, SeqOneByteString::kHeaderSize));
|
||||
__ movzxbq(rcx, FieldOperand(rdx, SeqOneByteString::kHeaderSize));
|
||||
|
||||
// Try to lookup two character string in symbol table. If it is not found
|
||||
// just allocate a new one.
|
||||
@ -4673,11 +4673,11 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
// rbx - first byte: first character
|
||||
// rbx - second byte: *maybe* second character
|
||||
// Make sure that the second byte of rbx contains the second character.
|
||||
__ movzxbq(rcx, FieldOperand(rdx, SeqAsciiString::kHeaderSize));
|
||||
__ movzxbq(rcx, FieldOperand(rdx, SeqOneByteString::kHeaderSize));
|
||||
__ shll(rcx, Immediate(kBitsPerByte));
|
||||
__ orl(rbx, rcx);
|
||||
// Write both characters to the new string.
|
||||
__ movw(FieldOperand(rax, SeqAsciiString::kHeaderSize), rbx);
|
||||
__ movw(FieldOperand(rax, SeqOneByteString::kHeaderSize), rbx);
|
||||
__ IncrementCounter(counters->string_add_native(), 1);
|
||||
__ ret(2 * kPointerSize);
|
||||
|
||||
@ -4754,8 +4754,8 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
__ movq(rcx, FieldOperand(rax, ExternalString::kResourceDataOffset));
|
||||
__ jmp(&first_prepared, Label::kNear);
|
||||
__ bind(&first_is_sequential);
|
||||
STATIC_ASSERT(SeqAsciiString::kHeaderSize == SeqTwoByteString::kHeaderSize);
|
||||
__ lea(rcx, FieldOperand(rax, SeqAsciiString::kHeaderSize));
|
||||
STATIC_ASSERT(SeqOneByteString::kHeaderSize == SeqTwoByteString::kHeaderSize);
|
||||
__ lea(rcx, FieldOperand(rax, SeqOneByteString::kHeaderSize));
|
||||
__ bind(&first_prepared);
|
||||
|
||||
// Check whether both strings have same encoding.
|
||||
@ -4775,8 +4775,8 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
__ movq(rdx, FieldOperand(rdx, ExternalString::kResourceDataOffset));
|
||||
__ jmp(&second_prepared, Label::kNear);
|
||||
__ bind(&second_is_sequential);
|
||||
STATIC_ASSERT(SeqAsciiString::kHeaderSize == SeqTwoByteString::kHeaderSize);
|
||||
__ lea(rdx, FieldOperand(rdx, SeqAsciiString::kHeaderSize));
|
||||
STATIC_ASSERT(SeqOneByteString::kHeaderSize == SeqTwoByteString::kHeaderSize);
|
||||
__ lea(rdx, FieldOperand(rdx, SeqOneByteString::kHeaderSize));
|
||||
__ bind(&second_prepared);
|
||||
|
||||
Label non_ascii_string_add_flat_result;
|
||||
@ -4792,7 +4792,7 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
||||
__ AllocateAsciiString(rax, rbx, rdi, r8, r9, &call_runtime);
|
||||
// rax: result string
|
||||
// Locate first character of result.
|
||||
__ lea(rbx, FieldOperand(rax, SeqAsciiString::kHeaderSize));
|
||||
__ lea(rbx, FieldOperand(rax, SeqOneByteString::kHeaderSize));
|
||||
// rcx: first char of first string
|
||||
// rbx: first character of result
|
||||
// r14: length of first string
|
||||
@ -5065,7 +5065,7 @@ void StringHelper::GenerateTwoCharacterSymbolTableProbe(MacroAssembler* masm,
|
||||
temp, temp, &next_probe[i]);
|
||||
|
||||
// Check if the two characters match.
|
||||
__ movl(temp, FieldOperand(candidate, SeqAsciiString::kHeaderSize));
|
||||
__ movl(temp, FieldOperand(candidate, SeqOneByteString::kHeaderSize));
|
||||
__ andl(temp, Immediate(0x0000ffff));
|
||||
__ cmpl(chars, temp);
|
||||
__ j(equal, &found_in_symbol_table);
|
||||
@ -5283,7 +5283,7 @@ void SubStringStub::Generate(MacroAssembler* masm) {
|
||||
__ j(not_zero, &runtime);
|
||||
__ movq(rdi, FieldOperand(rdi, ExternalString::kResourceDataOffset));
|
||||
// Move the pointer so that offset-wise, it looks like a sequential string.
|
||||
STATIC_ASSERT(SeqTwoByteString::kHeaderSize == SeqAsciiString::kHeaderSize);
|
||||
STATIC_ASSERT(SeqTwoByteString::kHeaderSize == SeqOneByteString::kHeaderSize);
|
||||
__ subq(rdi, Immediate(SeqTwoByteString::kHeaderSize - kHeapObjectTag));
|
||||
|
||||
__ bind(&sequential_string);
|
||||
@ -5300,10 +5300,10 @@ void SubStringStub::Generate(MacroAssembler* masm) {
|
||||
{ // Locate character of sub string start.
|
||||
SmiIndex smi_as_index = masm->SmiToIndex(rdx, rdx, times_1);
|
||||
__ lea(rsi, Operand(rdi, smi_as_index.reg, smi_as_index.scale,
|
||||
SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
}
|
||||
// Locate first character of result.
|
||||
__ lea(rdi, FieldOperand(rax, SeqAsciiString::kHeaderSize));
|
||||
__ lea(rdi, FieldOperand(rax, SeqOneByteString::kHeaderSize));
|
||||
|
||||
// rax: result string
|
||||
// rcx: result length
|
||||
@ -5325,7 +5325,7 @@ void SubStringStub::Generate(MacroAssembler* masm) {
|
||||
{ // Locate character of sub string start.
|
||||
SmiIndex smi_as_index = masm->SmiToIndex(rdx, rdx, times_2);
|
||||
__ lea(rsi, Operand(rdi, smi_as_index.reg, smi_as_index.scale,
|
||||
SeqAsciiString::kHeaderSize - kHeapObjectTag));
|
||||
SeqOneByteString::kHeaderSize - kHeapObjectTag));
|
||||
}
|
||||
// Locate first character of result.
|
||||
__ lea(rdi, FieldOperand(rax, SeqTwoByteString::kHeaderSize));
|
||||
@ -5465,9 +5465,9 @@ void StringCompareStub::GenerateAsciiCharsCompareLoop(
|
||||
// doesn't need an additional compare.
|
||||
__ SmiToInteger32(length, length);
|
||||
__ lea(left,
|
||||
FieldOperand(left, length, times_1, SeqAsciiString::kHeaderSize));
|
||||
FieldOperand(left, length, times_1, SeqOneByteString::kHeaderSize));
|
||||
__ lea(right,
|
||||
FieldOperand(right, length, times_1, SeqAsciiString::kHeaderSize));
|
||||
FieldOperand(right, length, times_1, SeqOneByteString::kHeaderSize));
|
||||
__ neg(length);
|
||||
Register index = length; // index = -length;
|
||||
|
||||
|
@ -571,7 +571,7 @@ void StringCharLoadGenerator::Generate(MacroAssembler* masm,
|
||||
__ movzxbl(result, FieldOperand(string,
|
||||
index,
|
||||
times_1,
|
||||
SeqAsciiString::kHeaderSize));
|
||||
SeqOneByteString::kHeaderSize));
|
||||
__ bind(&done);
|
||||
}
|
||||
|
||||
|
@ -3558,7 +3558,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
__ cmpb(scratch, Immediate(kStringTag | kOneByteStringTag | kSeqStringTag));
|
||||
__ j(not_equal, &bailout);
|
||||
__ AddSmiField(string_length,
|
||||
FieldOperand(string, SeqAsciiString::kLengthOffset));
|
||||
FieldOperand(string, SeqOneByteString::kLengthOffset));
|
||||
__ j(overflow, &bailout);
|
||||
__ incl(index);
|
||||
__ cmpl(index, array_length);
|
||||
@ -3605,7 +3605,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
|
||||
// Add (separator length times (array_length - 1)) to string_length.
|
||||
__ SmiToInteger32(scratch,
|
||||
FieldOperand(string, SeqAsciiString::kLengthOffset));
|
||||
FieldOperand(string, SeqOneByteString::kLengthOffset));
|
||||
__ decl(index);
|
||||
__ imull(scratch, index);
|
||||
__ j(overflow, &bailout);
|
||||
@ -3618,10 +3618,10 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
__ AllocateAsciiString(result_pos, string_length, scratch,
|
||||
index, string, &bailout);
|
||||
__ movq(result_operand, result_pos);
|
||||
__ lea(result_pos, FieldOperand(result_pos, SeqAsciiString::kHeaderSize));
|
||||
__ lea(result_pos, FieldOperand(result_pos, SeqOneByteString::kHeaderSize));
|
||||
|
||||
__ movq(string, separator_operand);
|
||||
__ SmiCompare(FieldOperand(string, SeqAsciiString::kLengthOffset),
|
||||
__ SmiCompare(FieldOperand(string, SeqOneByteString::kLengthOffset),
|
||||
Smi::FromInt(1));
|
||||
__ j(equal, &one_char_separator);
|
||||
__ j(greater, &long_separator);
|
||||
@ -3647,7 +3647,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
__ SmiToInteger32(string_length,
|
||||
FieldOperand(string, String::kLengthOffset));
|
||||
__ lea(string,
|
||||
FieldOperand(string, SeqAsciiString::kHeaderSize));
|
||||
FieldOperand(string, SeqOneByteString::kHeaderSize));
|
||||
__ CopyBytes(result_pos, string, string_length);
|
||||
__ incl(index);
|
||||
__ bind(&loop_1_condition);
|
||||
@ -3665,7 +3665,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
__ bind(&one_char_separator);
|
||||
// Get the separator ASCII character value.
|
||||
// Register "string" holds the separator.
|
||||
__ movzxbl(scratch, FieldOperand(string, SeqAsciiString::kHeaderSize));
|
||||
__ movzxbl(scratch, FieldOperand(string, SeqOneByteString::kHeaderSize));
|
||||
__ Set(index, 0);
|
||||
// Jump into the loop after the code that copies the separator, so the first
|
||||
// element is not preceded by a separator
|
||||
@ -3691,7 +3691,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
__ SmiToInteger32(string_length,
|
||||
FieldOperand(string, String::kLengthOffset));
|
||||
__ lea(string,
|
||||
FieldOperand(string, SeqAsciiString::kHeaderSize));
|
||||
FieldOperand(string, SeqOneByteString::kHeaderSize));
|
||||
__ CopyBytes(result_pos, string, string_length);
|
||||
__ incl(index);
|
||||
__ cmpl(index, array_length_operand);
|
||||
@ -3716,7 +3716,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
__ SmiToInteger32(scratch,
|
||||
FieldOperand(string, String::kLengthOffset));
|
||||
__ lea(string,
|
||||
FieldOperand(string, SeqAsciiString::kHeaderSize));
|
||||
FieldOperand(string, SeqOneByteString::kHeaderSize));
|
||||
__ movq(separator_operand, string);
|
||||
|
||||
// Jump into the loop after the code that copies the separator, so the first
|
||||
@ -3742,7 +3742,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) {
|
||||
__ SmiToInteger32(string_length,
|
||||
FieldOperand(string, String::kLengthOffset));
|
||||
__ lea(string,
|
||||
FieldOperand(string, SeqAsciiString::kHeaderSize));
|
||||
FieldOperand(string, SeqOneByteString::kHeaderSize));
|
||||
__ CopyBytes(result_pos, string, string_length);
|
||||
__ incq(index);
|
||||
__ j(not_equal, &loop_3); // Loop while (index < 0).
|
||||
|
@ -3965,7 +3965,7 @@ void MacroAssembler::AllocateAsciiString(Register result,
|
||||
Label* gc_required) {
|
||||
// Calculate the number of bytes needed for the characters in the string while
|
||||
// observing object alignment.
|
||||
const int kHeaderAlignment = SeqAsciiString::kHeaderSize &
|
||||
const int kHeaderAlignment = SeqOneByteString::kHeaderSize &
|
||||
kObjectAlignmentMask;
|
||||
movl(scratch1, length);
|
||||
ASSERT(kCharSize == 1);
|
||||
@ -3976,7 +3976,7 @@ void MacroAssembler::AllocateAsciiString(Register result,
|
||||
}
|
||||
|
||||
// Allocate ASCII string in new space.
|
||||
AllocateInNewSpace(SeqAsciiString::kHeaderSize,
|
||||
AllocateInNewSpace(SeqOneByteString::kHeaderSize,
|
||||
times_1,
|
||||
scratch1,
|
||||
result,
|
||||
|
@ -2150,7 +2150,7 @@ TEST(Regress2237) {
|
||||
v8::HandleScope inner_scope;
|
||||
const char* c = "This text is long enough to trigger sliced strings.";
|
||||
Handle<String> s = FACTORY->NewStringFromAscii(CStrVector(c));
|
||||
CHECK(s->IsSeqAsciiString());
|
||||
CHECK(s->IsSeqOneByteString());
|
||||
CHECK(HEAP->InNewSpace(*s));
|
||||
|
||||
// Generate a sliced string that is based on the above parent and
|
||||
@ -2168,9 +2168,9 @@ TEST(Regress2237) {
|
||||
*slice.location() = *t.location();
|
||||
}
|
||||
|
||||
CHECK(SlicedString::cast(*slice)->parent()->IsSeqAsciiString());
|
||||
CHECK(SlicedString::cast(*slice)->parent()->IsSeqOneByteString());
|
||||
HEAP->CollectAllGarbage(Heap::kNoGCFlags);
|
||||
CHECK(SlicedString::cast(*slice)->parent()->IsSeqAsciiString());
|
||||
CHECK(SlicedString::cast(*slice)->parent()->IsSeqOneByteString());
|
||||
}
|
||||
|
||||
|
||||
|
@ -759,7 +759,7 @@ TEST(MacroAssemblerNativeSuccess) {
|
||||
|
||||
int captures[4] = {42, 37, 87, 117};
|
||||
Handle<String> input = factory->NewStringFromAscii(CStrVector("foofoo"));
|
||||
Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
|
||||
Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input);
|
||||
const byte* start_adr =
|
||||
reinterpret_cast<const byte*>(seq_input->GetCharsAddress());
|
||||
|
||||
@ -805,7 +805,7 @@ TEST(MacroAssemblerNativeSimple) {
|
||||
|
||||
int captures[4] = {42, 37, 87, 117};
|
||||
Handle<String> input = factory->NewStringFromAscii(CStrVector("foofoo"));
|
||||
Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
|
||||
Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input);
|
||||
Address start_adr = seq_input->GetCharsAddress();
|
||||
|
||||
NativeRegExpMacroAssembler::Result result =
|
||||
@ -823,7 +823,7 @@ TEST(MacroAssemblerNativeSimple) {
|
||||
CHECK_EQ(-1, captures[3]);
|
||||
|
||||
input = factory->NewStringFromAscii(CStrVector("barbarbar"));
|
||||
seq_input = Handle<SeqAsciiString>::cast(input);
|
||||
seq_input = Handle<SeqOneByteString>::cast(input);
|
||||
start_adr = seq_input->GetCharsAddress();
|
||||
|
||||
result = Execute(*code,
|
||||
@ -924,7 +924,7 @@ TEST(MacroAssemblerNativeBacktrack) {
|
||||
Handle<Code> code = Handle<Code>::cast(code_object);
|
||||
|
||||
Handle<String> input = factory->NewStringFromAscii(CStrVector("foofoo"));
|
||||
Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
|
||||
Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input);
|
||||
Address start_adr = seq_input->GetCharsAddress();
|
||||
|
||||
NativeRegExpMacroAssembler::Result result =
|
||||
@ -967,7 +967,7 @@ TEST(MacroAssemblerNativeBackReferenceASCII) {
|
||||
Handle<Code> code = Handle<Code>::cast(code_object);
|
||||
|
||||
Handle<String> input = factory->NewStringFromAscii(CStrVector("fooofo"));
|
||||
Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
|
||||
Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input);
|
||||
Address start_adr = seq_input->GetCharsAddress();
|
||||
|
||||
int output[4];
|
||||
@ -1072,7 +1072,7 @@ TEST(MacroAssemblernativeAtStart) {
|
||||
Handle<Code> code = Handle<Code>::cast(code_object);
|
||||
|
||||
Handle<String> input = factory->NewStringFromAscii(CStrVector("foobar"));
|
||||
Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
|
||||
Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input);
|
||||
Address start_adr = seq_input->GetCharsAddress();
|
||||
|
||||
NativeRegExpMacroAssembler::Result result =
|
||||
@ -1133,7 +1133,7 @@ TEST(MacroAssemblerNativeBackRefNoCase) {
|
||||
|
||||
Handle<String> input =
|
||||
factory->NewStringFromAscii(CStrVector("aBcAbCABCxYzab"));
|
||||
Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
|
||||
Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input);
|
||||
Address start_adr = seq_input->GetCharsAddress();
|
||||
|
||||
int output[4];
|
||||
@ -1234,7 +1234,7 @@ TEST(MacroAssemblerNativeRegisters) {
|
||||
// String long enough for test (content doesn't matter).
|
||||
Handle<String> input =
|
||||
factory->NewStringFromAscii(CStrVector("foofoofoofoofoo"));
|
||||
Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
|
||||
Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input);
|
||||
Address start_adr = seq_input->GetCharsAddress();
|
||||
|
||||
int output[6];
|
||||
@ -1278,7 +1278,7 @@ TEST(MacroAssemblerStackOverflow) {
|
||||
// String long enough for test (content doesn't matter).
|
||||
Handle<String> input =
|
||||
factory->NewStringFromAscii(CStrVector("dummy"));
|
||||
Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
|
||||
Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input);
|
||||
Address start_adr = seq_input->GetCharsAddress();
|
||||
|
||||
NativeRegExpMacroAssembler::Result result =
|
||||
@ -1325,7 +1325,7 @@ TEST(MacroAssemblerNativeLotsOfRegisters) {
|
||||
// String long enough for test (content doesn't matter).
|
||||
Handle<String> input =
|
||||
factory->NewStringFromAscii(CStrVector("sample text"));
|
||||
Handle<SeqAsciiString> seq_input = Handle<SeqAsciiString>::cast(input);
|
||||
Handle<SeqOneByteString> seq_input = Handle<SeqOneByteString>::cast(input);
|
||||
Address start_adr = seq_input->GetCharsAddress();
|
||||
|
||||
int captures[2];
|
||||
|
@ -114,7 +114,7 @@ extras_accessors = [
|
||||
'ConsString, first, String, kFirstOffset',
|
||||
'ConsString, second, String, kSecondOffset',
|
||||
'ExternalString, resource, Object, kResourceOffset',
|
||||
'SeqAsciiString, chars, char, kHeaderSize',
|
||||
'SeqOneByteString, chars, char, kHeaderSize',
|
||||
'SharedFunctionInfo, code, Code, kCodeOffset',
|
||||
'Code, instruction_start, uintptr_t, kHeaderSize',
|
||||
'Code, instruction_size, int, kInstructionSizeOffset',
|
||||
@ -128,7 +128,7 @@ extras_accessors = [
|
||||
expected_classes = [
|
||||
'ConsString', 'FixedArray', 'HeapNumber', 'JSArray', 'JSFunction',
|
||||
'JSObject', 'JSRegExp', 'JSValue', 'Map', 'Oddball', 'Script',
|
||||
'SeqAsciiString', 'SharedFunctionInfo'
|
||||
'SeqOneByteString', 'SharedFunctionInfo'
|
||||
];
|
||||
|
||||
|
||||
@ -293,7 +293,7 @@ def load_objects():
|
||||
cctype.find('Sliced') == -1):
|
||||
if (cctype.find('Ascii') != -1):
|
||||
cctype = re.sub('AsciiString$',
|
||||
'SeqAsciiString', cctype);
|
||||
'SeqOneByteString', cctype);
|
||||
else:
|
||||
cctype = re.sub('String$',
|
||||
'SeqString', cctype);
|
||||
|
Loading…
Reference in New Issue
Block a user