28#ifndef V8_AST_AST_VALUE_FACTORY_H_
29#define V8_AST_AST_VALUE_FACTORY_H_
31#include <forward_list>
70 template <
typename IsolateT>
121 DCHECK(!
string.is_null());
141 bool has_string_ =
false;
153 if (s->IsEmpty())
return this;
170 template <
typename IsolateT>
178 template <
typename IsolateT>
192 template <
typename IsolateT>
238#define AST_STRING_CONSTANTS_INTERNALIZED_STRING_LIST_ADAPTER(F, name, \
241#define SINGLE_CHARACTER_ASCII_AST_STRING_CONSTANTS(F) \
242 SINGLE_CHARACTER_ASCII_INTERNALIZED_STRING_LIST_GENERATOR( \
243 AST_STRING_CONSTANTS_INTERNALIZED_STRING_LIST_ADAPTER, F)
244#define AST_STRING_CONSTANTS(F) \
245 SINGLE_CHARACTER_ASCII_AST_STRING_CONSTANTS(F) \
246 F(anonymous_string, "anonymous") \
247 F(arguments_string, "arguments") \
249 F(assert_string, "assert") \
250 F(async_string, "async") \
251 F(bigint_string, "bigint") \
252 F(boolean_string, "boolean") \
253 F(computed_string, "<computed>") \
254 F(dot_brand_string, ".brand") \
255 F(constructor_string, "constructor") \
256 F(default_string, "default") \
257 F(done_string, "done") \
258 F(dot_default_string, ".default") \
259 F(dot_for_string, ".for") \
260 F(dot_generator_object_string, ".generator_object") \
261 F(dot_home_object_string, ".home_object") \
262 F(dot_result_string, ".result") \
263 F(dot_repl_result_string, ".repl_result") \
264 F(dot_static_home_object_string, ".static_home_object") \
265 F(dot_switch_tag_string, ".switch_tag") \
266 F(dot_catch_string, ".catch") \
267 F(empty_string, "") \
268 F(eval_string, "eval") \
269 F(from_string, "from") \
270 F(function_string, "function") \
271 F(get_space_string, "get ") \
272 F(length_string, "length") \
273 F(let_string, "let") \
274 F(meta_string, "meta") \
275 F(native_string, "native") \
276 F(new_target_string, ".new.target") \
277 F(next_string, "next") \
278 F(number_string, "number") \
279 F(object_string, "object") \
280 F(private_constructor_string, "#constructor") \
281 F(proto_string, "__proto__") \
282 F(prototype_string, "prototype") \
283 F(return_string, "return") \
284 F(set_space_string, "set ") \
285 F(source_string, "source") \
286 F(string_string, "string") \
287 F(symbol_string, "symbol") \
288 F(target_string, "target") \
289 F(this_string, "this") \
290 F(this_function_string, ".this_function") \
291 F(throw_string, "throw") \
292 F(undefined_string, "undefined") \
293 F(value_string, "value")
297#define F(name, str) +1
306#define F(name, str) \
307 const AstRawString* name() const { return name##_; }
319#define F(name, str) \
320 static_assert(offsetof(AstStringConstants, name##_) == \
321 offsetof(AstStringConstants, ascii_nul_string_) + \
322 str[0] * sizeof(AstRawString*));
326 return (&ascii_nul_string_)[c];
334#define F(name, str) AstRawString* name##_;
396 template <
typename IsolateT>
399#define F(name, str) \
400 const AstRawString* name() const { return string_constants_->name(); }
#define AST_STRING_CONSTANTS(F)
#define SINGLE_CHARACTER_ASCII_AST_STRING_CONSTANTS(F)
static constexpr T decode(U value)
constexpr T * begin() const
AstBigInt(const char *bigint)
const char * c_str() const
AstConsString * AddString(Zone *zone, const AstRawString *s)
IndirectHandle< String > string_
IndirectHandle< String > GetString(IsolateT *isolate)
AstRawString(bool is_one_byte, base::Vector< const uint8_t > literal_bytes, uint32_t raw_hash_field)
V8_EXPORT_PRIVATE bool IsOneByteEqualTo(const char *data) const
base::Vector< const uint8_t > literal_bytes_
void Internalize(IsolateT *isolate)
bool IsPrivateName() const
const unsigned char * raw_data() const
V8_INLINE IndirectHandle< String > string() const
IndirectHandle< String > string_
static bool Equal(const AstRawString *lhs, const AstRawString *rhs)
bool IsIntegerIndex() const
bool AsArrayIndex(uint32_t *index) const
friend class AstRawStringInternalizationKey
static int Compare(const AstRawString *lhs, const AstRawString *rhs)
void set_string(IndirectHandle< String > string)
uint16_t FirstCharacter() const
uint32_t raw_hash_field() const
AstRawString ** next_location()
AstStringConstants(const AstStringConstants &)=delete
const AstRawString * one_character_string(int c) const
static constexpr int kMaxOneCharStringValue
AstRawStringMap string_table_
const AstRawStringMap * string_table() const
AstStringConstants & operator=(const AstStringConstants &)=delete
AstStringConstants(Isolate *isolate, uint64_t hash_seed)
uint64_t hash_seed() const
V8_EXPORT_PRIVATE const AstRawString * GetOneByteStringInternal(base::Vector< const uint8_t > literal)
AstConsString * empty_cons_string() const
const AstRawString * GetOneByteString(const char *string)
const AstRawString * GetString(uint32_t raw_hash_field, bool is_one_byte, base::Vector< const uint8_t > literal_bytes)
const AstStringConstants * string_constants_
const AstRawString * GetString(Tagged< String > literal, const SharedStringAccessGuardIfNeeded &)
const AstRawString * GetOneByteString(base::Vector< const uint8_t > literal)
AstRawStringMap string_table_
Zone * ast_raw_string_zone_
void Internalize(IsolateT *isolate)
AstValueFactory(Zone *ast_raw_string_zone, Zone *single_parse_zone, const AstStringConstants *string_constants, uint64_t hash_seed)
const AstRawString * GetTwoByteString(base::Vector< const uint16_t > literal)
Zone * ast_raw_string_zone() const
Zone * single_parse_zone() const
AstConsString * empty_cons_string_
const AstRawString * GetTwoByteStringInternal(base::Vector< const uint16_t > literal)
AstRawString ** strings_end_
AstValueFactory(Zone *zone, const AstStringConstants *string_constants, uint64_t hash_seed)
Zone * single_parse_zone_
AstRawString * AddString(AstRawString *string)
V8_EXPORT_PRIVATE AstConsString * NewConsString()
static constexpr int kHashNotComputedMask
DirectHandle< String > string_
#define EXPORT_TEMPLATE_DECLARE(export)
FunctionLiteral * literal
Vector< const uint8_t > OneByteVector(const char *data, size_t length)
void Print(Tagged< Object > obj)
template const char * string
ReadOnlySegmentForSerialization *const segment_
#define DCHECK_NOT_NULL(val)
#define DCHECK_IMPLIES(v1, v2)
#define DCHECK_GE(v1, v2)
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
#define DCHECK_EQ(v1, v2)
#define V8_EXPORT_PRIVATE
const AstRawString * string
AstConsString::Segment * next
bool operator()(uint32_t hash1, uint32_t hash2, const AstRawString *lookup_key, const AstRawString *entry_key) const