46class OneByteStringStream {
48 explicit OneByteStringStream(base::Vector<const uint8_t> lb)
61template <
typename IsolateT>
65 set_string(isolate->factory()->empty_string());
68 set_string(isolate->factory()->InternalizeStringWithKey(&
key));
72 set_string(isolate->factory()->InternalizeStringWithKey(&
key));
104 if (length != strlen(data))
return false;
120 if (lhs->
length() == 0)
return true;
121 const unsigned char* l = lhs->
raw_data();
122 const unsigned char*
r = rhs->
raw_data();
123 size_t length = rhs->
length();
127 reinterpret_cast<const uint8_t*
>(
r),
131 reinterpret_cast<const uint16_t*
>(
r),
137 reinterpret_cast<const uint8_t*
>(
r),
141 reinterpret_cast<const uint16_t*
>(
r),
149 if (lhs == rhs)
return 0;
151 const unsigned char* lhs_data = lhs->
raw_data();
152 const unsigned char* rhs_data = rhs->
raw_data();
159 reinterpret_cast<const uint8_t*
>(lhs_data),
160 reinterpret_cast<const uint8_t*
>(rhs_data), length))
164 reinterpret_cast<const uint8_t*
>(lhs_data),
165 reinterpret_cast<const uint16_t*
>(rhs_data), length))
171 reinterpret_cast<const uint16_t*
>(lhs_data),
172 reinterpret_cast<const uint8_t*
>(rhs_data), length))
176 reinterpret_cast<const uint16_t*
>(lhs_data),
177 reinterpret_cast<const uint16_t*
>(rhs_data), length))
189template <
typename IsolateT>
194 return isolate->factory()->empty_string();
200 current = current->
next) {
201 tmp = isolate->factory()
202 ->NewConsString(current->string->string(), tmp,
214template <
typename IsolateT>
217 return isolate->factory()->empty_string();
223 int result_length = 0;
224 bool is_one_byte =
true;
225 for (
const AstConsString::Segment* current = &
segment_; current !=
nullptr;
226 current = current->
next) {
227 result_length += current->string->length();
228 is_one_byte = is_one_byte && current->string->is_one_byte();
240 for (
const AstConsString::Segment* current = &
segment_; current !=
nullptr;
241 current = current->
next) {
242 int length = current->string->length();
244 CopyChars(dest, current->string->raw_data(), length);
259 for (
const AstConsString::Segment* current = &
segment_; current !=
nullptr;
260 current = current->
next) {
261 int length = current->string->length();
263 if (current->string->is_one_byte()) {
264 CopyChars(dest, current->string->raw_data(), length);
267 reinterpret_cast<const uint16_t*
>(current->string->raw_data()),
279 LocalIsolate* isolate)
const;
282 std::forward_list<const AstRawString*>
result;
288 for (AstConsString::Segment* current =
segment_.
next; current !=
nullptr;
289 current = current->
next) {
290 result.emplace_front(current->string);
298 hash_seed_(hash_seed) {
300#define F(name, str) \
302 static const char data[] = str; \
303 base::Vector<const uint8_t> literal( \
304 reinterpret_cast<const uint8_t*>(data), \
305 static_cast<int>(arraysize(data) - 1)); \
306 IndirectHandle<String> handle = isolate->factory()->name(); \
307 uint32_t raw_hash_field = handle->raw_hash_field(); \
308 DCHECK_EQ(raw_hash_field, \
309 StringHasher::HashSequentialString<uint8_t>( \
310 literal.begin(), literal.length(), hash_seed_)); \
311 DCHECK_EQ(literal.length(), handle->length()); \
312 name##_ = zone_.New<AstRawString>(true, literal, raw_hash_field); \
315 name##_->set_string(handle); \
316 string_table_.InsertNew(name##_, name##_->Hash()); \
373template <
typename IsolateT>
391 uint32_t raw_hash_field,
bool is_one_byte,
402 int length = literal_bytes.length();
403 uint8_t* new_literal_bytes =
404 ast_raw_string_zone()->AllocateArray<uint8_t>(length);
405 memcpy(new_literal_bytes, literal_bytes.begin(), length);
406 AstRawString* new_string = ast_raw_string_zone()->New<AstRawString>(
407 is_one_byte, base::Vector<const uint8_t>(new_literal_bytes, length),
409 CHECK_NOT_NULL(new_string);
410 AddString(new_string);
413 [&]() { return base::NoHashMapValue(); });
base::Vector< const uint8_t > literal_bytes_
#define AST_STRING_CONSTANTS(F)
static constexpr T decode(U value)
Entry * LookupOrInsert(const Key &key, uint32_t hash)
constexpr bool empty() const
constexpr size_t size() const
constexpr T * begin() const
Handle< String > Allocate(IsolateT *isolate) const
AstConsString * AddString(Zone *zone, const AstRawString *s)
Handle< String > AllocateFlat(IsolateT *isolate) const
IndirectHandle< String > string_
std::forward_list< const AstRawString * > ToRawStrings() const
V8_EXPORT_PRIVATE bool IsOneByteEqualTo(const char *data) const
base::Vector< const uint8_t > literal_bytes_
void Internalize(IsolateT *isolate)
const unsigned char * raw_data() const
static bool Equal(const AstRawString *lhs, const AstRawString *rhs)
bool IsIntegerIndex() const
bool AsArrayIndex(uint32_t *index) const
static int Compare(const AstRawString *lhs, const AstRawString *rhs)
void set_string(IndirectHandle< String > string)
uint16_t FirstCharacter() const
static constexpr int kMaxOneCharStringValue
AstStringConstants(Isolate *isolate, uint64_t hash_seed)
V8_EXPORT_PRIVATE const AstRawString * GetOneByteStringInternal(base::Vector< const uint8_t > literal)
const AstStringConstants * string_constants_
const AstRawString * GetString(Tagged< String > literal, const SharedStringAccessGuardIfNeeded &)
AstRawStringMap string_table_
void Internalize(IsolateT *isolate)
Zone * single_parse_zone() const
const AstRawString * GetTwoByteStringInternal(base::Vector< const uint16_t > literal)
V8_EXPORT_PRIVATE AstConsString * NewConsString()
static const int kMaxCachedArrayIndexLength
static bool IsIntegerIndex(uint32_t raw_hash_field)
static SharedStringAccessGuardIfNeeded NotNeeded()
static uint32_t HashSequentialString(const char_t *chars, uint32_t length, uint64_t seed)
base::Vector< const uint8_t > ToOneByteVector() const
base::Vector< const base::uc16 > ToUC16Vector() const
static ThreadId Current()
#define EXPORT_TEMPLATE_DEFINE(export)
ZoneVector< RpoNumber > & result
FunctionLiteral * literal
PerThreadAssertScopeDebugOnly< false, SAFEPOINTS_ASSERT, HEAP_ALLOCATION_ASSERT > DisallowGarbageCollection
bool CompareCharsEqualUnsigned(const lchar *lhs, const rchar *rhs, size_t chars)
void CopyChars(DstType *dst, const SrcType *src, size_t count) V8_NONNULL(1
bool StringToIndex(Stream *stream, index_t *index)
int CompareCharsUnsigned(const lchar *lhs, const rchar *rhs, size_t chars)
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)
#define V8_EXPORT_PRIVATE
const AstRawString * string
AstConsString::Segment * next