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