Commit 6768703d authored by sgjesse@chromium.org's avatar sgjesse@chromium.org

Derive string size constants

* The maximum length of short and medium sized strings is now derived from other constants.
* Remove the redundant String part of their names.
Review URL: http://codereview.chromium.org/347002

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3162 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 97de363e
......@@ -1810,10 +1810,10 @@ Object* Heap::AllocateConsString(String* first, String* second) {
}
Map* map;
if (length <= String::kMaxShortStringSize) {
if (length <= String::kMaxShortSize) {
map = is_ascii ? short_cons_ascii_string_map()
: short_cons_string_map();
} else if (length <= String::kMaxMediumStringSize) {
} else if (length <= String::kMaxMediumSize) {
map = is_ascii ? medium_cons_ascii_string_map()
: medium_cons_string_map();
} else {
......@@ -1843,11 +1843,11 @@ Object* Heap::AllocateSlicedString(String* buffer,
}
Map* map;
if (length <= String::kMaxShortStringSize) {
if (length <= String::kMaxShortSize) {
map = buffer->IsAsciiRepresentation() ?
short_sliced_ascii_string_map() :
short_sliced_string_map();
} else if (length <= String::kMaxMediumStringSize) {
} else if (length <= String::kMaxMediumSize) {
map = buffer->IsAsciiRepresentation() ?
medium_sliced_ascii_string_map() :
medium_sliced_string_map();
......@@ -1912,9 +1912,9 @@ Object* Heap::AllocateExternalStringFromAscii(
ExternalAsciiString::Resource* resource) {
Map* map;
int length = resource->length();
if (length <= String::kMaxShortStringSize) {
if (length <= String::kMaxShortSize) {
map = short_external_ascii_string_map();
} else if (length <= String::kMaxMediumStringSize) {
} else if (length <= String::kMaxMediumSize) {
map = medium_external_ascii_string_map();
} else {
map = long_external_ascii_string_map();
......@@ -2659,18 +2659,18 @@ Object* Heap::AllocateInternalSymbol(unibrow::CharacterStream* buffer,
Map* map;
if (is_ascii) {
if (chars <= String::kMaxShortStringSize) {
if (chars <= String::kMaxShortSize) {
map = short_ascii_symbol_map();
} else if (chars <= String::kMaxMediumStringSize) {
} else if (chars <= String::kMaxMediumSize) {
map = medium_ascii_symbol_map();
} else {
map = long_ascii_symbol_map();
}
size = SeqAsciiString::SizeFor(chars);
} else {
if (chars <= String::kMaxShortStringSize) {
if (chars <= String::kMaxShortSize) {
map = short_symbol_map();
} else if (chars <= String::kMaxMediumStringSize) {
} else if (chars <= String::kMaxMediumSize) {
map = medium_symbol_map();
} else {
map = long_symbol_map();
......@@ -2720,9 +2720,9 @@ Object* Heap::AllocateRawAsciiString(int length, PretenureFlag pretenure) {
// Determine the map based on the string's length.
Map* map;
if (length <= String::kMaxShortStringSize) {
if (length <= String::kMaxShortSize) {
map = short_ascii_string_map();
} else if (length <= String::kMaxMediumStringSize) {
} else if (length <= String::kMaxMediumSize) {
map = medium_ascii_string_map();
} else {
map = long_ascii_string_map();
......@@ -2757,9 +2757,9 @@ Object* Heap::AllocateRawTwoByteString(int length, PretenureFlag pretenure) {
// Determine the map based on the string's length.
Map* map;
if (length <= String::kMaxShortStringSize) {
if (length <= String::kMaxShortSize) {
map = short_string_map();
} else if (length <= String::kMaxMediumStringSize) {
} else if (length <= String::kMaxMediumSize) {
map = medium_string_map();
} else {
map = long_string_map();
......
......@@ -1907,9 +1907,9 @@ void ExternalAsciiString::set_resource(
Map* ExternalAsciiString::StringMap(int length) {
Map* map;
// Number of characters: determines the map.
if (length <= String::kMaxShortStringSize) {
if (length <= String::kMaxShortSize) {
map = Heap::short_external_ascii_string_map();
} else if (length <= String::kMaxMediumStringSize) {
} else if (length <= String::kMaxMediumSize) {
map = Heap::medium_external_ascii_string_map();
} else {
map = Heap::long_external_ascii_string_map();
......@@ -1921,9 +1921,9 @@ Map* ExternalAsciiString::StringMap(int length) {
Map* ExternalAsciiString::SymbolMap(int length) {
Map* map;
// Number of characters: determines the map.
if (length <= String::kMaxShortStringSize) {
if (length <= String::kMaxShortSize) {
map = Heap::short_external_ascii_symbol_map();
} else if (length <= String::kMaxMediumStringSize) {
} else if (length <= String::kMaxMediumSize) {
map = Heap::medium_external_ascii_symbol_map();
} else {
map = Heap::long_external_ascii_symbol_map();
......@@ -1946,9 +1946,9 @@ void ExternalTwoByteString::set_resource(
Map* ExternalTwoByteString::StringMap(int length) {
Map* map;
// Number of characters: determines the map.
if (length <= String::kMaxShortStringSize) {
if (length <= String::kMaxShortSize) {
map = Heap::short_external_string_map();
} else if (length <= String::kMaxMediumStringSize) {
} else if (length <= String::kMaxMediumSize) {
map = Heap::medium_external_string_map();
} else {
map = Heap::long_external_string_map();
......@@ -1960,9 +1960,9 @@ Map* ExternalTwoByteString::StringMap(int length) {
Map* ExternalTwoByteString::SymbolMap(int length) {
Map* map;
// Number of characters: determines the map.
if (length <= String::kMaxShortStringSize) {
if (length <= String::kMaxShortSize) {
map = Heap::short_external_symbol_map();
} else if (length <= String::kMaxMediumStringSize) {
} else if (length <= String::kMaxMediumSize) {
map = Heap::medium_external_symbol_map();
} else {
map = Heap::long_external_symbol_map();
......@@ -2976,7 +2976,7 @@ StringHasher::StringHasher(int length)
bool StringHasher::has_trivial_hash() {
return length_ > String::kMaxMediumStringSize;
return length_ > String::kMaxMediumSize;
}
......
......@@ -839,7 +839,7 @@ bool String::MakeExternal(v8::String::ExternalAsciiStringResource* resource) {
void String::StringShortPrint(StringStream* accumulator) {
int len = length();
if (len > kMaxMediumStringSize) {
if (len > kMaxMediumSize) {
accumulator->Add("<Very long string[%u]>", len);
return;
}
......@@ -4660,7 +4660,7 @@ static inline uint32_t HashField(uint32_t hash, bool is_array_index) {
uint32_t StringHasher::GetHashField() {
ASSERT(is_valid());
if (length_ <= String::kMaxShortStringSize) {
if (length_ <= String::kMaxShortSize) {
uint32_t payload;
if (is_array_index()) {
payload = v8::internal::HashField(array_index(), true);
......@@ -4669,7 +4669,7 @@ uint32_t StringHasher::GetHashField() {
}
return (payload & ((1 << String::kShortLengthShift) - 1)) |
(length_ << String::kShortLengthShift);
} else if (length_ <= String::kMaxMediumStringSize) {
} else if (length_ <= String::kMaxMediumSize) {
uint32_t payload = v8::internal::HashField(GetHash(), false);
return (payload & ((1 << String::kMediumLengthShift) - 1)) |
(length_ << String::kMediumLengthShift);
......
......@@ -4070,10 +4070,8 @@ class String: public HeapObject {
static const int kSize = kLengthOffset + kIntSize;
// Notice: kSize is not pointer-size aligned if pointers are 64-bit.
// Limits on sizes of different types of strings.
static const int kMaxShortStringSize = 63;
static const int kMaxMediumStringSize = 16383;
// Maximum number of characters to consider when trying to convert a string
// value into an array index.
static const int kMaxArrayIndexSize = 10;
// Max ascii char code.
......@@ -4097,13 +4095,17 @@ class String: public HeapObject {
// field.
static const int kMaxCachedArrayIndexLength = 7;
// Shift constants for retriving length and hash code from
// Shift constants for retrieving length and hash code from
// length/hash field.
static const int kHashShift = kNofLengthBitFields;
static const int kShortLengthShift = kHashShift + kShortStringTag;
static const int kMediumLengthShift = kHashShift + kMediumStringTag;
static const int kLongLengthShift = kHashShift + kLongStringTag;
// Maximal string length that can be stored in the hash/length field.
// Maximal string length that can be stored in the hash/length field for
// different types of strings.
static const int kMaxShortSize = (1 << (32 - kShortLengthShift)) - 1;
static const int kMaxMediumSize = (1 << (32 - kMediumLengthShift)) - 1;
static const int kMaxLength = (1 << (32 - kLongLengthShift)) - 1;
// Limit for truncation in short printing.
......
......@@ -188,7 +188,7 @@ void StringStream::Add(Vector<const char> format, Vector<FmtElm> elms) {
void StringStream::PrintObject(Object* o) {
o->ShortPrint(this);
if (o->IsString()) {
if (String::cast(o)->length() <= String::kMaxMediumStringSize) {
if (String::cast(o)->length() <= String::kMaxMediumSize) {
return;
}
} else if (o->IsNumber() || o->IsOddball()) {
......
......@@ -6958,7 +6958,7 @@ static void MorphAString(i::String* string,
CHECK(string->map() == i::Heap::short_external_ascii_string_map() ||
string->map() == i::Heap::medium_external_ascii_string_map());
// Morph external string to be TwoByte string.
if (string->length() <= i::String::kMaxShortStringSize) {
if (string->length() <= i::String::kMaxShortSize) {
string->set_map(i::Heap::short_external_string_map());
} else {
string->set_map(i::Heap::medium_external_string_map());
......@@ -6971,7 +6971,7 @@ static void MorphAString(i::String* string,
CHECK(string->map() == i::Heap::short_external_string_map() ||
string->map() == i::Heap::medium_external_string_map());
// Morph external string to be ASCII string.
if (string->length() <= i::String::kMaxShortStringSize) {
if (string->length() <= i::String::kMaxShortSize) {
string->set_map(i::Heap::short_external_ascii_string_map());
} else {
string->set_map(i::Heap::medium_external_ascii_string_map());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment