// Copyright 2015 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef V8_INIT_HEAP_SYMBOLS_H_
#define V8_INIT_HEAP_SYMBOLS_H_

#ifdef V8_INTL_SUPPORT
#define INTERNALIZED_STRING_LIST_GENERATOR_INTL(V, _)               \
  V(_, adoptText_string, "adoptText")                               \
  V(_, approximatelySign_string, "approximatelySign")               \
  V(_, baseName_string, "baseName")                                 \
  V(_, accounting_string, "accounting")                             \
  V(_, breakType_string, "breakType")                               \
  V(_, calendars_string, "calendars")                               \
  V(_, cardinal_string, "cardinal")                                 \
  V(_, caseFirst_string, "caseFirst")                               \
  V(_, ceil_string, "ceil")                                         \
  V(_, compare_string, "compare")                                   \
  V(_, collation_string, "collation")                               \
  V(_, collations_string, "collations")                             \
  V(_, compact_string, "compact")                                   \
  V(_, compactDisplay_string, "compactDisplay")                     \
  V(_, currency_string, "currency")                                 \
  V(_, currencyDisplay_string, "currencyDisplay")                   \
  V(_, currencySign_string, "currencySign")                         \
  V(_, dateStyle_string, "dateStyle")                               \
  V(_, dateTimeField_string, "dateTimeField")                       \
  V(_, dayPeriod_string, "dayPeriod")                               \
  V(_, daysDisplay_string, "daysDisplay")                           \
  V(_, decimal_string, "decimal")                                   \
  V(_, dialect_string, "dialect")                                   \
  V(_, digital_string, "digital")                                   \
  V(_, direction_string, "direction")                               \
  V(_, endRange_string, "endRange")                                 \
  V(_, engineering_string, "engineering")                           \
  V(_, exceptZero_string, "exceptZero")                             \
  V(_, expand_string, "expand")                                     \
  V(_, exponentInteger_string, "exponentInteger")                   \
  V(_, exponentMinusSign_string, "exponentMinusSign")               \
  V(_, exponentSeparator_string, "exponentSeparator")               \
  V(_, fallback_string, "fallback")                                 \
  V(_, first_string, "first")                                       \
  V(_, firstDay_string, "firstDay")                                 \
  V(_, firstDayOfWeek_string, "firstDayOfWeek")                     \
  V(_, floor_string, "floor")                                       \
  V(_, format_string, "format")                                     \
  V(_, fraction_string, "fraction")                                 \
  V(_, fractionalDigits_string, "fractionalDigits")                 \
  V(_, fractionalSecond_string, "fractionalSecond")                 \
  V(_, full_string, "full")                                         \
  V(_, granularity_string, "granularity")                           \
  V(_, grapheme_string, "grapheme")                                 \
  V(_, group_string, "group")                                       \
  V(_, h11_string, "h11")                                           \
  V(_, h12_string, "h12")                                           \
  V(_, h23_string, "h23")                                           \
  V(_, h24_string, "h24")                                           \
  V(_, halfCeil_string, "halfCeil")                                 \
  V(_, halfEven_string, "halfEven")                                 \
  V(_, halfExpand_string, "halfExpand")                             \
  V(_, halfFloor_string, "halfFloor")                               \
  V(_, halfTrunc_string, "halfTrunc")                               \
  V(_, hour12_string, "hour12")                                     \
  V(_, hourCycle_string, "hourCycle")                               \
  V(_, hourCycles_string, "hourCycles")                             \
  V(_, hoursDisplay_string, "hoursDisplay")                         \
  V(_, ideo_string, "ideo")                                         \
  V(_, ignorePunctuation_string, "ignorePunctuation")               \
  V(_, Invalid_Date_string, "Invalid Date")                         \
  V(_, integer_string, "integer")                                   \
  V(_, isWordLike_string, "isWordLike")                             \
  V(_, kana_string, "kana")                                         \
  V(_, language_string, "language")                                 \
  V(_, languageDisplay_string, "languageDisplay")                   \
  V(_, lessPrecision_string, "lessPrecision")                       \
  V(_, letter_string, "letter")                                     \
  V(_, list_string, "list")                                         \
  V(_, literal_string, "literal")                                   \
  V(_, locale_string, "locale")                                     \
  V(_, loose_string, "loose")                                       \
  V(_, lower_string, "lower")                                       \
  V(_, ltr_string, "ltr")                                           \
  V(_, maximumFractionDigits_string, "maximumFractionDigits")       \
  V(_, maximumSignificantDigits_string, "maximumSignificantDigits") \
  V(_, microsecondsDisplay_string, "microsecondsDisplay")           \
  V(_, millisecondsDisplay_string, "millisecondsDisplay")           \
  V(_, min2_string, "min2")                                         \
  V(_, minimalDays_string, "minimalDays")                           \
  V(_, minimumFractionDigits_string, "minimumFractionDigits")       \
  V(_, minimumIntegerDigits_string, "minimumIntegerDigits")         \
  V(_, minimumSignificantDigits_string, "minimumSignificantDigits") \
  V(_, minus_0, "-0")                                               \
  V(_, minusSign_string, "minusSign")                               \
  V(_, minutesDisplay_string, "minutesDisplay")                     \
  V(_, monthsDisplay_string, "monthsDisplay")                       \
  V(_, morePrecision_string, "morePrecision")                       \
  V(_, nan_string, "nan")                                           \
  V(_, nanosecondsDisplay_string, "nanosecondsDisplay")             \
  V(_, narrowSymbol_string, "narrowSymbol")                         \
  V(_, negative_string, "negative")                                 \
  V(_, never_string, "never")                                       \
  V(_, none_string, "none")                                         \
  V(_, notation_string, "notation")                                 \
  V(_, normal_string, "normal")                                     \
  V(_, numberingSystem_string, "numberingSystem")                   \
  V(_, numberingSystems_string, "numberingSystems")                 \
  V(_, numeric_string, "numeric")                                   \
  V(_, ordinal_string, "ordinal")                                   \
  V(_, percentSign_string, "percentSign")                           \
  V(_, plusSign_string, "plusSign")                                 \
  V(_, quarter_string, "quarter")                                   \
  V(_, region_string, "region")                                     \
  V(_, relatedYear_string, "relatedYear")                           \
  V(_, roundingMode_string, "roundingMode")                         \
  V(_, roundingPriority_string, "roundingPriority")                 \
  V(_, rtl_string, "rtl")                                           \
  V(_, scientific_string, "scientific")                             \
  V(_, secondsDisplay_string, "secondsDisplay")                     \
  V(_, segment_string, "segment")                                   \
  V(_, SegmentIterator_string, "Segment Iterator")                  \
  V(_, Segments_string, "Segments")                                 \
  V(_, sensitivity_string, "sensitivity")                           \
  V(_, sep_string, "sep")                                           \
  V(_, shared_string, "shared")                                     \
  V(_, signDisplay_string, "signDisplay")                           \
  V(_, standard_string, "standard")                                 \
  V(_, startRange_string, "startRange")                             \
  V(_, strict_string, "strict")                                     \
  V(_, stripIfInteger_string, "stripIfInteger")                     \
  V(_, style_string, "style")                                       \
  V(_, term_string, "term")                                         \
  V(_, textInfo_string, "textInfo")                                 \
  V(_, timeStyle_string, "timeStyle")                               \
  V(_, timeZones_string, "timeZones")                               \
  V(_, timeZoneName_string, "timeZoneName")                         \
  V(_, trailingZeroDisplay_string, "trailingZeroDisplay")           \
  V(_, trunc_string, "trunc")                                       \
  V(_, two_digit_string, "2-digit")                                 \
  V(_, type_string, "type")                                         \
  V(_, unknown_string, "unknown")                                   \
  V(_, upper_string, "upper")                                       \
  V(_, usage_string, "usage")                                       \
  V(_, useGrouping_string, "useGrouping")                           \
  V(_, unitDisplay_string, "unitDisplay")                           \
  V(_, weekday_string, "weekday")                                   \
  V(_, weekend_string, "weekend")                                   \
  V(_, weeksDisplay_string, "weeksDisplay")                         \
  V(_, weekInfo_string, "weekInfo")                                 \
  V(_, yearName_string, "yearName")                                 \
  V(_, yearsDisplay_string, "yearsDisplay")
#else  // V8_INTL_SUPPORT
#define INTERNALIZED_STRING_LIST_GENERATOR_INTL(V, _)
#endif  // V8_INTL_SUPPORT

// Internalized strings to be allocated early on the read only heap and early in
// the roots table. Used to give this string a RootIndex < 32.
#define EXTRA_IMPORTANT_INTERNALIZED_STRING_LIST_GENERATOR(V, _) \
  V(_, empty_string, "")

// Internalized strings to be allocated early on the read only heap
#define IMPORTANT_INTERNALIZED_STRING_LIST_GENERATOR(V, _) \
  V(_, prototype_string, "prototype")                      \
  V(_, name_string, "name")                                \
  V(_, enumerable_string, "enumerable")                    \
  V(_, configurable_string, "configurable")                \
  V(_, value_string, "value")                              \
  V(_, writable_string, "writable")

// Generated with the following Python script:
// ```
// named_chars = {
//     # Punctuation
//     '!': 'exclamation_mark',
//     '"': 'double_quotes',
//     '#': 'hash',
//     '$': 'dollar',
//     '%': 'percent_sign',
//     '&': 'ampersand',
//     "'": 'single_quote',
//     '(': 'open_parenthesis',
//     ')': 'close_parenthesis',
//     '*': 'asterisk',
//     '+': 'plus',
//     ',': 'comma',
//     '-': 'minus',
//     '.': 'dot',
//     '/': 'slash',
//     ':': 'colon',
//     ';': 'semicolon',
//     '<': 'less_than',
//     '=': 'equals',
//     '>': 'greater_than',
//     '?': 'question_mark',
//     '[': 'open_bracket',
//     '\\': 'backslash',
//     ']': 'close_bracket',
//     '^': 'caret',
//     '_': 'underscore',
//     '`': 'backtick',
//     '{': 'open_brace',
//     '|': 'pipe',
//     '}': 'close_brace',
//     '~': 'tilde',
//     '@': 'at_sign',
//     ' ': 'space',
//     # Numbers
//     '0': 'zero',
//     '1': 'one',
//     '2': 'two',
//     '3': 'three',
//     '4': 'four',
//     '5': 'five',
//     '6': 'six',
//     '7': 'seven',
//     '8': 'eight',
//     '9': 'nine',
//     # Control Characters
//     '\x00': 'ascii_nul',  # Null character
//     '\x01': 'ascii_soh',  # Start of Heading
//     '\x02': 'ascii_stx',  # Start of Text
//     '\x03': 'ascii_etx',  # End of Text
//     '\x04': 'ascii_eot',  # End of Transmission
//     '\x05': 'ascii_enq',  # Enquiry
//     '\x06': 'ascii_ack',  # Acknowledge
//     '\x07': 'ascii_bel',  # Bell
//     '\x08': 'ascii_bs',  # Backspace
//     '\t': 'ascii_ht',  # Horizontal Tab
//     '\n': 'ascii_lf',  # Line Feed
//     '\x0b': 'ascii_vt',  # Vertical Tab
//     '\x0c': 'ascii_ff',  # Form Feed
//     '\r': 'ascii_cr',  # Carriage Return
//     '\x0e': 'ascii_so',  # Shift Out
//     '\x0f': 'ascii_si',  # Shift In
//     '\x10': 'ascii_dle',  # Data Link Escape
//     '\x11': 'ascii_dc1',  # Device Control 1
//     '\x12': 'ascii_dc2',  # Device Control 2
//     '\x13': 'ascii_dc3',  # Device Control 3
//     '\x14': 'ascii_dc4',  # Device Control 4
//     '\x15': 'ascii_nak',  # Negative Acknowledge
//     '\x16': 'ascii_syn',  # Synchronous Idle
//     '\x17': 'ascii_etb',  # End of Transmission Block
//     '\x18': 'ascii_can',  # Cancel
//     '\x19': 'ascii_em',  # End of Medium
//     '\x1a': 'ascii_sub',  # Substitute
//     '\x1b': 'ascii_esc',  # Escape
//     '\x1c': 'ascii_fs',  # File Separator
//     '\x1d': 'ascii_gs',  # Group Separator
//     '\x1e': 'ascii_rs',  # Record Separator
//     '\x1f': 'ascii_us',  # Unit Separator
//     '\x7f': 'ascii_del',  # Delete
// }
//
// def escape(c):
//     if c == '\0':
//         return "\\0"
//     elif c == '\\':
//         return "\\\\"
//     elif c == '\n':
//         return "\\n"
//     elif c == '\t':
//         return "\\t"
//     elif c == '\r':
//         return "\\r"
//     elif c == '\v':
//         return "\\v"
//     elif c == '\b':
//         return "\\b"
//     elif c == '\f':
//         return "\\f"
//     elif c == '\a':
//         return "\\a"
//     elif c == '"':
//         return '\\"'
//     elif c == '\'':
//         return "\\'"
//     elif not c.isprintable():
//         return f'\\x{ord(c):02x}'
//     else:
//         return c
//
// for i in range(128):
//   c = chr(i)
//   if c.isascii() and c.isalpha():
//     name = c
//   elif c in named_chars:
//     name = named_chars[c]
//   else:
//     raise f"No name for 0x{i:02x}"
//
//   print(f"V_(_, {name}_string, \"{escape(c)}\") \\")
// ```
#define SINGLE_CHARACTER_ASCII_INTERNALIZED_STRING_LIST_GENERATOR(V_, _) \
  V_(_, ascii_nul_string, "\0")                                          \
  V_(_, ascii_soh_string, "\x01")                                        \
  V_(_, ascii_stx_string, "\x02")                                        \
  V_(_, ascii_etx_string, "\x03")                                        \
  V_(_, ascii_eot_string, "\x04")                                        \
  V_(_, ascii_enq_string, "\x05")                                        \
  V_(_, ascii_ack_string, "\x06")                                        \
  V_(_, ascii_bel_string, "\a")                                          \
  V_(_, ascii_bs_string, "\b")                                           \
  V_(_, ascii_ht_string, "\t")                                           \
  V_(_, ascii_lf_string, "\n")                                           \
  V_(_, ascii_vt_string, "\v")                                           \
  V_(_, ascii_ff_string, "\f")                                           \
  V_(_, ascii_cr_string, "\r")                                           \
  V_(_, ascii_so_string, "\x0e")                                         \
  V_(_, ascii_si_string, "\x0f")                                         \
  V_(_, ascii_dle_string, "\x10")                                        \
  V_(_, ascii_dc1_string, "\x11")                                        \
  V_(_, ascii_dc2_string, "\x12")                                        \
  V_(_, ascii_dc3_string, "\x13")                                        \
  V_(_, ascii_dc4_string, "\x14")                                        \
  V_(_, ascii_nak_string, "\x15")                                        \
  V_(_, ascii_syn_string, "\x16")                                        \
  V_(_, ascii_etb_string, "\x17")                                        \
  V_(_, ascii_can_string, "\x18")                                        \
  V_(_, ascii_em_string, "\x19")                                         \
  V_(_, ascii_sub_string, "\x1a")                                        \
  V_(_, ascii_esc_string, "\x1b")                                        \
  V_(_, ascii_fs_string, "\x1c")                                         \
  V_(_, ascii_gs_string, "\x1d")                                         \
  V_(_, ascii_rs_string, "\x1e")                                         \
  V_(_, ascii_us_string, "\x1f")                                         \
  V_(_, space_string, " ")                                               \
  V_(_, exclamation_mark_string, "!")                                    \
  V_(_, double_quotes_string, "\"")                                      \
  V_(_, hash_string, "#")                                                \
  V_(_, dollar_string, "$")                                              \
  V_(_, percent_sign_string, "%")                                        \
  V_(_, ampersand_string, "&")                                           \
  V_(_, single_quote_string, "\'")                                       \
  V_(_, open_parenthesis_string, "(")                                    \
  V_(_, close_parenthesis_string, ")")                                   \
  V_(_, asterisk_string, "*")                                            \
  V_(_, plus_string, "+")                                                \
  V_(_, comma_string, ",")                                               \
  V_(_, minus_string, "-")                                               \
  V_(_, dot_string, ".")                                                 \
  V_(_, slash_string, "/")                                               \
  V_(_, zero_string, "0")                                                \
  V_(_, one_string, "1")                                                 \
  V_(_, two_string, "2")                                                 \
  V_(_, three_string, "3")                                               \
  V_(_, four_string, "4")                                                \
  V_(_, five_string, "5")                                                \
  V_(_, six_string, "6")                                                 \
  V_(_, seven_string, "7")                                               \
  V_(_, eight_string, "8")                                               \
  V_(_, nine_string, "9")                                                \
  V_(_, colon_string, ":")                                               \
  V_(_, semicolon_string, ";")                                           \
  V_(_, less_than_string, "<")                                           \
  V_(_, equals_string, "=")                                              \
  V_(_, greater_than_string, ">")                                        \
  V_(_, question_mark_string, "?")                                       \
  V_(_, at_sign_string, "@")                                             \
  V_(_, A_string, "A")                                                   \
  V_(_, B_string, "B")                                                   \
  V_(_, C_string, "C")                                                   \
  V_(_, D_string, "D")                                                   \
  V_(_, E_string, "E")                                                   \
  V_(_, F_string, "F")                                                   \
  V_(_, G_string, "G")                                                   \
  V_(_, H_string, "H")                                                   \
  V_(_, I_string, "I")                                                   \
  V_(_, J_string, "J")                                                   \
  V_(_, K_string, "K")                                                   \
  V_(_, L_string, "L")                                                   \
  V_(_, M_string, "M")                                                   \
  V_(_, N_string, "N")                                                   \
  V_(_, O_string, "O")                                                   \
  V_(_, P_string, "P")                                                   \
  V_(_, Q_string, "Q")                                                   \
  V_(_, R_string, "R")                                                   \
  V_(_, S_string, "S")                                                   \
  V_(_, T_string, "T")                                                   \
  V_(_, U_string, "U")                                                   \
  V_(_, V_string, "V")                                                   \
  V_(_, W_string, "W")                                                   \
  V_(_, X_string, "X")                                                   \
  V_(_, Y_string, "Y")                                                   \
  V_(_, Z_string, "Z")                                                   \
  V_(_, open_bracket_string, "[")                                        \
  V_(_, backslash_string, "\\")                                          \
  V_(_, close_bracket_string, "]")                                       \
  V_(_, caret_string, "^")                                               \
  V_(_, underscore_string, "_")                                          \
  V_(_, backtick_string, "`")                                            \
  V_(_, a_string, "a")                                                   \
  V_(_, b_string, "b")                                                   \
  V_(_, c_string, "c")                                                   \
  V_(_, d_string, "d")                                                   \
  V_(_, e_string, "e")                                                   \
  V_(_, f_string, "f")                                                   \
  V_(_, g_string, "g")                                                   \
  V_(_, h_string, "h")                                                   \
  V_(_, i_string, "i")                                                   \
  V_(_, j_string, "j")                                                   \
  V_(_, k_string, "k")                                                   \
  V_(_, l_string, "l")                                                   \
  V_(_, m_string, "m")                                                   \
  V_(_, n_string, "n")                                                   \
  V_(_, o_string, "o")                                                   \
  V_(_, p_string, "p")                                                   \
  V_(_, q_string, "q")                                                   \
  V_(_, r_string, "r")                                                   \
  V_(_, s_string, "s")                                                   \
  V_(_, t_string, "t")                                                   \
  V_(_, u_string, "u")                                                   \
  V_(_, v_string, "v")                                                   \
  V_(_, w_string, "w")                                                   \
  V_(_, x_string, "x")                                                   \
  V_(_, y_string, "y")                                                   \
  V_(_, z_string, "z")                                                   \
  V_(_, open_brace_string, "{")                                          \
  V_(_, pipe_string, "|")                                                \
  V_(_, close_brace_string, "}")                                         \
  V_(_, tilde_string, "~")                                               \
  V_(_, ascii_del_string, "\x7f")

// Generated with the following Python script:
// ```
// def escape(c):
//     # Values outside of the ASCII range have to be embedded with
//     # raw \x encoding, so that we embed them as single latin1 bytes
//     # rather than two utf8 bytes.
//     return f'\\x{ord(c):02x}'
//
// for i in range(128,256):
//   name = f'latin1_{i:02x}'
//   print(f"V_(_, {name}_string, \"{escape(c)}\") \\")
// ```
#define SINGLE_CHARACTER_INTERNALIZED_STRING_LIST_GENERATOR(V_, _) \
  SINGLE_CHARACTER_ASCII_INTERNALIZED_STRING_LIST_GENERATOR(V_, _) \
  V_(_, latin1_80_string, "\x80")                                  \
  V_(_, latin1_81_string, "\x81")                                  \
  V_(_, latin1_82_string, "\x82")                                  \
  V_(_, latin1_83_string, "\x83")                                  \
  V_(_, latin1_84_string, "\x84")                                  \
  V_(_, latin1_85_string, "\x85")                                  \
  V_(_, latin1_86_string, "\x86")                                  \
  V_(_, latin1_87_string, "\x87")                                  \
  V_(_, latin1_88_string, "\x88")                                  \
  V_(_, latin1_89_string, "\x89")                                  \
  V_(_, latin1_8a_string, "\x8a")                                  \
  V_(_, latin1_8b_string, "\x8b")                                  \
  V_(_, latin1_8c_string, "\x8c")                                  \
  V_(_, latin1_8d_string, "\x8d")                                  \
  V_(_, latin1_8e_string, "\x8e")                                  \
  V_(_, latin1_8f_string, "\x8f")                                  \
  V_(_, latin1_90_string, "\x90")                                  \
  V_(_, latin1_91_string, "\x91")                                  \
  V_(_, latin1_92_string, "\x92")                                  \
  V_(_, latin1_93_string, "\x93")                                  \
  V_(_, latin1_94_string, "\x94")                                  \
  V_(_, latin1_95_string, "\x95")                                  \
  V_(_, latin1_96_string, "\x96")                                  \
  V_(_, latin1_97_string, "\x97")                                  \
  V_(_, latin1_98_string, "\x98")                                  \
  V_(_, latin1_99_string, "\x99")                                  \
  V_(_, latin1_9a_string, "\x9a")                                  \
  V_(_, latin1_9b_string, "\x9b")                                  \
  V_(_, latin1_9c_string, "\x9c")                                  \
  V_(_, latin1_9d_string, "\x9d")                                  \
  V_(_, latin1_9e_string, "\x9e")                                  \
  V_(_, latin1_9f_string, "\x9f")                                  \
  V_(_, latin1_a0_string, "\xa0")                                  \
  V_(_, latin1_a1_string, "\xa1")                                  \
  V_(_, latin1_a2_string, "\xa2")                                  \
  V_(_, latin1_a3_string, "\xa3")                                  \
  V_(_, latin1_a4_string, "\xa4")                                  \
  V_(_, latin1_a5_string, "\xa5")                                  \
  V_(_, latin1_a6_string, "\xa6")                                  \
  V_(_, latin1_a7_string, "\xa7")                                  \
  V_(_, latin1_a8_string, "\xa8")                                  \
  V_(_, latin1_a9_string, "\xa9")                                  \
  V_(_, latin1_aa_string, "\xaa")                                  \
  V_(_, latin1_ab_string, "\xab")                                  \
  V_(_, latin1_ac_string, "\xac")                                  \
  V_(_, latin1_ad_string, "\xad")                                  \
  V_(_, latin1_ae_string, "\xae")                                  \
  V_(_, latin1_af_string, "\xaf")                                  \
  V_(_, latin1_b0_string, "\xb0")                                  \
  V_(_, latin1_b1_string, "\xb1")                                  \
  V_(_, latin1_b2_string, "\xb2")                                  \
  V_(_, latin1_b3_string, "\xb3")                                  \
  V_(_, latin1_b4_string, "\xb4")                                  \
  V_(_, latin1_b5_string, "\xb5")                                  \
  V_(_, latin1_b6_string, "\xb6")                                  \
  V_(_, latin1_b7_string, "\xb7")                                  \
  V_(_, latin1_b8_string, "\xb8")                                  \
  V_(_, latin1_b9_string, "\xb9")                                  \
  V_(_, latin1_ba_string, "\xba")                                  \
  V_(_, latin1_bb_string, "\xbb")                                  \
  V_(_, latin1_bc_string, "\xbc")                                  \
  V_(_, latin1_bd_string, "\xbd")                                  \
  V_(_, latin1_be_string, "\xbe")                                  \
  V_(_, latin1_bf_string, "\xbf")                                  \
  V_(_, latin1_c0_string, "\xc0")                                  \
  V_(_, latin1_c1_string, "\xc1")                                  \
  V_(_, latin1_c2_string, "\xc2")                                  \
  V_(_, latin1_c3_string, "\xc3")                                  \
  V_(_, latin1_c4_string, "\xc4")                                  \
  V_(_, latin1_c5_string, "\xc5")                                  \
  V_(_, latin1_c6_string, "\xc6")                                  \
  V_(_, latin1_c7_string, "\xc7")                                  \
  V_(_, latin1_c8_string, "\xc8")                                  \
  V_(_, latin1_c9_string, "\xc9")                                  \
  V_(_, latin1_ca_string, "\xca")                                  \
  V_(_, latin1_cb_string, "\xcb")                                  \
  V_(_, latin1_cc_string, "\xcc")                                  \
  V_(_, latin1_cd_string, "\xcd")                                  \
  V_(_, latin1_ce_string, "\xce")                                  \
  V_(_, latin1_cf_string, "\xcf")                                  \
  V_(_, latin1_d0_string, "\xd0")                                  \
  V_(_, latin1_d1_string, "\xd1")                                  \
  V_(_, latin1_d2_string, "\xd2")                                  \
  V_(_, latin1_d3_string, "\xd3")                                  \
  V_(_, latin1_d4_string, "\xd4")                                  \
  V_(_, latin1_d5_string, "\xd5")                                  \
  V_(_, latin1_d6_string, "\xd6")                                  \
  V_(_, latin1_d7_string, "\xd7")                                  \
  V_(_, latin1_d8_string, "\xd8")                                  \
  V_(_, latin1_d9_string, "\xd9")                                  \
  V_(_, latin1_da_string, "\xda")                                  \
  V_(_, latin1_db_string, "\xdb")                                  \
  V_(_, latin1_dc_string, "\xdc")                                  \
  V_(_, latin1_dd_string, "\xdd")                                  \
  V_(_, latin1_de_string, "\xde")                                  \
  V_(_, latin1_df_string, "\xdf")                                  \
  V_(_, latin1_e0_string, "\xe0")                                  \
  V_(_, latin1_e1_string, "\xe1")                                  \
  V_(_, latin1_e2_string, "\xe2")                                  \
  V_(_, latin1_e3_string, "\xe3")                                  \
  V_(_, latin1_e4_string, "\xe4")                                  \
  V_(_, latin1_e5_string, "\xe5")                                  \
  V_(_, latin1_e6_string, "\xe6")                                  \
  V_(_, latin1_e7_string, "\xe7")                                  \
  V_(_, latin1_e8_string, "\xe8")                                  \
  V_(_, latin1_e9_string, "\xe9")                                  \
  V_(_, latin1_ea_string, "\xea")                                  \
  V_(_, latin1_eb_string, "\xeb")                                  \
  V_(_, latin1_ec_string, "\xec")                                  \
  V_(_, latin1_ed_string, "\xed")                                  \
  V_(_, latin1_ee_string, "\xee")                                  \
  V_(_, latin1_ef_string, "\xef")                                  \
  V_(_, latin1_f0_string, "\xf0")                                  \
  V_(_, latin1_f1_string, "\xf1")                                  \
  V_(_, latin1_f2_string, "\xf2")                                  \
  V_(_, latin1_f3_string, "\xf3")                                  \
  V_(_, latin1_f4_string, "\xf4")                                  \
  V_(_, latin1_f5_string, "\xf5")                                  \
  V_(_, latin1_f6_string, "\xf6")                                  \
  V_(_, latin1_f7_string, "\xf7")                                  \
  V_(_, latin1_f8_string, "\xf8")                                  \
  V_(_, latin1_f9_string, "\xf9")                                  \
  V_(_, latin1_fa_string, "\xfa")                                  \
  V_(_, latin1_fb_string, "\xfb")                                  \
  V_(_, latin1_fc_string, "\xfc")                                  \
  V_(_, latin1_fd_string, "\xfd")                                  \
  V_(_, latin1_fe_string, "\xfe")                                  \
  V_(_, latin1_ff_string, "\xff")

#define NOT_IMPORTANT_INTERNALIZED_STRING_LIST_GENERATOR(V, _)                \
  INTERNALIZED_STRING_LIST_GENERATOR_INTL(V, _)                               \
  SINGLE_CHARACTER_INTERNALIZED_STRING_LIST_GENERATOR(V, _)                   \
  V(_, add_string, "add")                                                     \
  V(_, AggregateError_string, "AggregateError")                               \
  V(_, alphabet_string, "alphabet")                                           \
  V(_, always_string, "always")                                               \
  V(_, anonymous_string, "anonymous")                                         \
  V(_, apply_string, "apply")                                                 \
  V(_, Arguments_string, "Arguments")                                         \
  V(_, arguments_string, "arguments")                                         \
  V(_, arguments_to_string, "[object Arguments]")                             \
  V(_, Array_string, "Array")                                                 \
  V(_, array_to_string, "[object Array]")                                     \
  V(_, ArrayBuffer_string, "ArrayBuffer")                                     \
  V(_, ArrayIterator_string, "Array Iterator")                                \
  V(_, as_string, "as")                                                       \
  V(_, assert_string, "assert")                                               \
  V(_, async_string, "async")                                                 \
  V(_, AtomicsCondition_string, "Atomics.Condition")                          \
  V(_, AtomicsMutex_string, "Atomics.Mutex")                                  \
  V(_, auto_string, "auto")                                                   \
  V(_, BigInt_string, "BigInt")                                               \
  V(_, bigint_string, "bigint")                                               \
  V(_, BigInt64Array_string, "BigInt64Array")                                 \
  V(_, BigUint64Array_string, "BigUint64Array")                               \
  V(_, bind_string, "bind")                                                   \
  V(_, blank_string, "blank")                                                 \
  V(_, Boolean_string, "Boolean")                                             \
  V(_, boolean_string, "boolean")                                             \
  V(_, boolean_to_string, "[object Boolean]")                                 \
  V(_, bound__string, "bound ")                                               \
  V(_, buffer_string, "buffer")                                               \
  V(_, byte_length_string, "byteLength")                                      \
  V(_, byte_offset_string, "byteOffset")                                      \
  V(_, CompileError_string, "CompileError")                                   \
  V(_, calendar_string, "calendar")                                           \
  V(_, callee_string, "callee")                                               \
  V(_, caller_string, "caller")                                               \
  V(_, cause_string, "cause")                                                 \
  V(_, character_string, "character")                                         \
  V(_, code_string, "code")                                                   \
  V(_, column_string, "column")                                               \
  V(_, computed_string, "<computed>")                                         \
  V(_, conjunction_string, "conjunction")                                     \
  V(_, console_string, "console")                                             \
  V(_, constrain_string, "constrain")                                         \
  V(_, construct_string, "construct")                                         \
  V(_, current_string, "current")                                             \
  V(_, Date_string, "Date")                                                   \
  V(_, date_to_string, "[object Date]")                                       \
  V(_, dateAdd_string, "dateAdd")                                             \
  V(_, dateFromFields_string, "dateFromFields")                               \
  V(_, dateUntil_string, "dateUntil")                                         \
  V(_, day_string, "day")                                                     \
  V(_, dayOfWeek_string, "dayOfWeek")                                         \
  V(_, dayOfYear_string, "dayOfYear")                                         \
  V(_, days_string, "days")                                                   \
  V(_, daysInMonth_string, "daysInMonth")                                     \
  V(_, daysInWeek_string, "daysInWeek")                                       \
  V(_, daysInYear_string, "daysInYear")                                       \
  V(_, default_string, "default")                                             \
  V(_, defineProperty_string, "defineProperty")                               \
  V(_, deleteProperty_string, "deleteProperty")                               \
  V(_, detached_string, "detached")                                           \
  V(_, disjunction_string, "disjunction")                                     \
  V(_, disposed_string, "disposed")                                           \
  V(_, done_string, "done")                                                   \
  V(_, dot_brand_string, ".brand")                                            \
  V(_, dot_catch_string, ".catch")                                            \
  V(_, dot_default_string, ".default")                                        \
  V(_, dot_for_string, ".for")                                                \
  V(_, dot_generator_object_string, ".generator_object")                      \
  V(_, dot_home_object_string, ".home_object")                                \
  V(_, dot_new_target_string, ".new.target")                                  \
  V(_, dot_result_string, ".result")                                          \
  V(_, dot_repl_result_string, ".repl_result")                                \
  V(_, dot_static_home_object_string, ".static_home_object")                  \
  V(_, dot_switch_tag_string, ".switch_tag")                                  \
  V(_, dotAll_string, "dotAll")                                               \
  V(_, Error_string, "Error")                                                 \
  V(_, EvalError_string, "EvalError")                                         \
  V(_, element_string, "element")                                             \
  V(_, epochMicroseconds_string, "epochMicroseconds")                         \
  V(_, epochMilliseconds_string, "epochMilliseconds")                         \
  V(_, epochNanoseconds_string, "epochNanoseconds")                           \
  V(_, epochSeconds_string, "epochSeconds")                                   \
  V(_, era_string, "era")                                                     \
  V(_, eraYear_string, "eraYear")                                             \
  V(_, error_string, "error")                                                 \
  V(_, errors_string, "errors")                                               \
  V(_, error_to_string, "[object Error]")                                     \
  V(_, eval_string, "eval")                                                   \
  V(_, exception_string, "exception")                                         \
  V(_, exec_string, "exec")                                                   \
  V(_, false_string, "false")                                                 \
  V(_, fields_string, "fields")                                               \
  V(_, FinalizationRegistry_string, "FinalizationRegistry")                   \
  V(_, flags_string, "flags")                                                 \
  V(_, Float16Array_string, "Float16Array")                                   \
  V(_, Float32Array_string, "Float32Array")                                   \
  V(_, Float64Array_string, "Float64Array")                                   \
  V(_, fractionalSecondDigits_string, "fractionalSecondDigits")               \
  V(_, from_string, "from")                                                   \
  V(_, Function_string, "Function")                                           \
  V(_, function_native_code_string, "function () { [native code] }")          \
  V(_, function_string, "function")                                           \
  V(_, function_to_string, "[object Function]")                               \
  V(_, Generator_string, "Generator")                                         \
  V(_, get_space_string, "get ")                                              \
  V(_, get_string, "get")                                                     \
  V(_, getOffsetNanosecondsFor_string, "getOffsetNanosecondsFor")             \
  V(_, getOwnPropertyDescriptor_string, "getOwnPropertyDescriptor")           \
  V(_, getPossibleInstantsFor_string, "getPossibleInstantsFor")               \
  V(_, getPrototypeOf_string, "getPrototypeOf")                               \
  V(_, global_string, "global")                                               \
  V(_, globalThis_string, "globalThis")                                       \
  V(_, groups_string, "groups")                                               \
  V(_, growable_string, "growable")                                           \
  V(_, has_string, "has")                                                     \
  V(_, hasIndices_string, "hasIndices")                                       \
  V(_, hour_string, "hour")                                                   \
  V(_, hours_string, "hours")                                                 \
  V(_, hoursInDay_string, "hoursInDay")                                       \
  V(_, ignoreCase_string, "ignoreCase")                                       \
  V(_, id_string, "id")                                                       \
  V(_, illegal_access_string, "illegal access")                               \
  V(_, illegal_argument_string, "illegal argument")                           \
  V(_, inLeapYear_string, "inLeapYear")                                       \
  V(_, index_string, "index")                                                 \
  V(_, indices_string, "indices")                                             \
  V(_, Infinity_string, "Infinity")                                           \
  V(_, infinity_string, "infinity")                                           \
  V(_, input_string, "input")                                                 \
  V(_, instance_members_initializer_string, "<instance_members_initializer>") \
  V(_, Int16Array_string, "Int16Array")                                       \
  V(_, Int32Array_string, "Int32Array")                                       \
  V(_, Int8Array_string, "Int8Array")                                         \
  V(_, isExtensible_string, "isExtensible")                                   \
  V(_, iso8601_string, "iso8601")                                             \
  V(_, isoDay_string, "isoDay")                                               \
  V(_, isoHour_string, "isoHour")                                             \
  V(_, isoMicrosecond_string, "isoMicrosecond")                               \
  V(_, isoMillisecond_string, "isoMillisecond")                               \
  V(_, isoMinute_string, "isoMinute")                                         \
  V(_, isoMonth_string, "isoMonth")                                           \
  V(_, isoNanosecond_string, "isoNanosecond")                                 \
  V(_, isoSecond_string, "isoSecond")                                         \
  V(_, isoYear_string, "isoYear")                                             \
  V(_, Iterator_string, "Iterator")                                           \
  V(_, jsMemoryEstimate_string, "jsMemoryEstimate")                           \
  V(_, jsMemoryRange_string, "jsMemoryRange")                                 \
  V(_, keys_string, "keys")                                                   \
  V(_, largestUnit_string, "largestUnit")                                     \
  V(_, last_chunk_handling_string, "lastChunkHandling")                       \
  V(_, lastIndex_string, "lastIndex")                                         \
  V(_, let_string, "let")                                                     \
  V(_, line_string, "line")                                                   \
  V(_, linear_string, "linear")                                               \
  V(_, LinkError_string, "LinkError")                                         \
  V(_, long_string, "long")                                                   \
  V(_, Map_string, "Map")                                                     \
  V(_, MapIterator_string, "Map Iterator")                                    \
  V(_, max_byte_length_string, "maxByteLength")                               \
  V(_, medium_string, "medium")                                               \
  V(_, mergeFields_string, "mergeFields")                                     \
  V(_, message_string, "message")                                             \
  V(_, meta_string, "meta")                                                   \
  V(_, minus_Infinity_string, "-Infinity")                                    \
  V(_, microsecond_string, "microsecond")                                     \
  V(_, microseconds_string, "microseconds")                                   \
  V(_, millisecond_string, "millisecond")                                     \
  V(_, milliseconds_string, "milliseconds")                                   \
  V(_, minute_string, "minute")                                               \
  V(_, minutes_string, "minutes")                                             \
  V(_, Module_string, "Module")                                               \
  V(_, month_string, "month")                                                 \
  V(_, monthDayFromFields_string, "monthDayFromFields")                       \
  V(_, months_string, "months")                                               \
  V(_, monthsInYear_string, "monthsInYear")                                   \
  V(_, monthCode_string, "monthCode")                                         \
  V(_, multiline_string, "multiline")                                         \
  V(_, NaN_string, "NaN")                                                     \
  V(_, nanosecond_string, "nanosecond")                                       \
  V(_, nanoseconds_string, "nanoseconds")                                     \
  V(_, narrow_string, "narrow")                                               \
  V(_, native_string, "native")                                               \
  V(_, new_target_string, ".new.target")                                      \
  V(_, NFC_string, "NFC")                                                     \
  V(_, NFD_string, "NFD")                                                     \
  V(_, NFKC_string, "NFKC")                                                   \
  V(_, NFKD_string, "NFKD")                                                   \
  V(_, not_equal_string, "not-equal")                                         \
  V(_, null_string, "null")                                                   \
  V(_, null_to_string, "[object Null]")                                       \
  V(_, Number_string, "Number")                                               \
  V(_, number_string, "number")                                               \
  V(_, number_to_string, "[object Number]")                                   \
  V(_, Object_string, "Object")                                               \
  V(_, object_string, "object")                                               \
  V(_, object_to_string, "[object Object]")                                   \
  V(_, Object_prototype_string, "Object.prototype")                           \
  V(_, offset_string, "offset")                                               \
  V(_, offsetNanoseconds_string, "offsetNanoseconds")                         \
  V(_, ok_string, "ok")                                                       \
  V(_, other_string, "other")                                                 \
  V(_, overflow_string, "overflow")                                           \
  V(_, ownKeys_string, "ownKeys")                                             \
  V(_, percent_string, "percent")                                             \
  V(_, plainDate_string, "plainDate")                                         \
  V(_, plainTime_string, "plainTime")                                         \
  V(_, position_string, "position")                                           \
  V(_, preventExtensions_string, "preventExtensions")                         \
  V(_, private_constructor_string, "#constructor")                            \
  V(_, Promise_string, "Promise")                                             \
  V(_, promise_string, "promise")                                             \
  V(_, proto_string, "__proto__")                                             \
  V(_, proxy_string, "proxy")                                                 \
  V(_, Proxy_string, "Proxy")                                                 \
  V(_, query_colon_string, "(?:)")                                            \
  V(_, RangeError_string, "RangeError")                                       \
  V(_, raw_json_string, "rawJSON")                                            \
  V(_, raw_string, "raw")                                                     \
  V(_, ReferenceError_string, "ReferenceError")                               \
  V(_, ReflectGet_string, "Reflect.get")                                      \
  V(_, ReflectHas_string, "Reflect.has")                                      \
  V(_, RegExp_string, "RegExp")                                               \
  V(_, regexp_to_string, "[object RegExp]")                                   \
  V(_, reject_string, "reject")                                               \
  V(_, relativeTo_string, "relativeTo")                                       \
  V(_, resizable_string, "resizable")                                         \
  V(_, ResizableArrayBuffer_string, "ResizableArrayBuffer")                   \
  V(_, return_string, "return")                                               \
  V(_, revoke_string, "revoke")                                               \
  V(_, roundingIncrement_string, "roundingIncrement")                         \
  V(_, RuntimeError_string, "RuntimeError")                                   \
  V(_, WebAssemblyException_string, "WebAssembly.Exception")                  \
  V(_, WebAssemblyModule_string, "WebAssembly.Module")                        \
  V(_, Script_string, "Script")                                               \
  V(_, script_string, "script")                                               \
  V(_, second_string, "second")                                               \
  V(_, seconds_string, "seconds")                                             \
  V(_, short_string, "short")                                                 \
  V(_, Set_string, "Set")                                                     \
  V(_, sentence_string, "sentence")                                           \
  V(_, set_space_string, "set ")                                              \
  V(_, set_string, "set")                                                     \
  V(_, SetIterator_string, "Set Iterator")                                    \
  V(_, setPrototypeOf_string, "setPrototypeOf")                               \
  V(_, ShadowRealm_string, "ShadowRealm")                                     \
  V(_, SharedArray_string, "SharedArray")                                     \
  V(_, SharedArrayBuffer_string, "SharedArrayBuffer")                         \
  V(_, SharedStruct_string, "SharedStruct")                                   \
  V(_, sign_string, "sign")                                                   \
  V(_, size_string, "size")                                                   \
  V(_, smallestUnit_string, "smallestUnit")                                   \
  V(_, source_string, "source")                                               \
  V(_, sourceText_string, "sourceText")                                       \
  V(_, stack_string, "stack")                                                 \
  V(_, stackTraceLimit_string, "stackTraceLimit")                             \
  V(_, static_initializer_string, "<static_initializer>")                     \
  V(_, sticky_string, "sticky")                                               \
  V(_, String_string, "String")                                               \
  V(_, string_string, "string")                                               \
  V(_, string_to_string, "[object String]")                                   \
  V(_, suppressed_string, "suppressed")                                       \
  V(_, SuppressedError_string, "SuppressedError")                             \
  V(_, SuspendError_string, "SuspendError")                                   \
  V(_, Symbol_iterator_string, "Symbol.iterator")                             \
  V(_, Symbol_match_all_string, "Symbol.matchAll")                            \
  V(_, Symbol_replace_string, "Symbol.replace")                               \
  V(_, symbol_species_string, "[Symbol.species]")                             \
  V(_, Symbol_species_string, "Symbol.species")                               \
  V(_, Symbol_split_string, "Symbol.split")                                   \
  V(_, Symbol_string, "Symbol")                                               \
  V(_, symbol_string, "symbol")                                               \
  V(_, SyntaxError_string, "SyntaxError")                                     \
  V(_, target_string, "target")                                               \
  V(_, this_function_string, ".this_function")                                \
  V(_, this_string, "this")                                                   \
  V(_, throw_string, "throw")                                                 \
  V(_, timed_out_string, "timed-out")                                         \
  V(_, timeZone_string, "timeZone")                                           \
  V(_, toJSON_string, "toJSON")                                               \
  V(_, toString_string, "toString")                                           \
  V(_, true_string, "true")                                                   \
  V(_, total_string, "total")                                                 \
  V(_, TypedArrayLength_string, "get TypedArray.prototype.length")            \
  V(_, TypeError_string, "TypeError")                                         \
  V(_, Uint16Array_string, "Uint16Array")                                     \
  V(_, Uint32Array_string, "Uint32Array")                                     \
  V(_, Uint8Array_string, "Uint8Array")                                       \
  V(_, Uint8ClampedArray_string, "Uint8ClampedArray")                         \
  V(_, undefined_string, "undefined")                                         \
  V(_, undefined_to_string, "[object Undefined]")                             \
  V(_, unicode_string, "unicode")                                             \
  V(_, unicodeSets_string, "unicodeSets")                                     \
  V(_, unit_string, "unit")                                                   \
  V(_, URIError_string, "URIError")                                           \
  V(_, UTC_string, "UTC")                                                     \
  V(_, WeakMap_string, "WeakMap")                                             \
  V(_, WeakRef_string, "WeakRef")                                             \
  V(_, WeakSet_string, "WeakSet")                                             \
  V(_, week_string, "week")                                                   \
  V(_, weeks_string, "weeks")                                                 \
  V(_, weekOfYear_string, "weekOfYear")                                       \
  V(_, with_string, "with")                                                   \
  V(_, word_string, "word")                                                   \
  V(_, yearMonthFromFields_string, "yearMonthFromFields")                     \
  V(_, year_string, "year")                                                   \
  V(_, years_string, "years")

#define INTERNALIZED_STRING_LIST_GENERATOR(V, _)           \
  EXTRA_IMPORTANT_INTERNALIZED_STRING_LIST_GENERATOR(V, _) \
  IMPORTANT_INTERNALIZED_STRING_LIST_GENERATOR(V, _)       \
  NOT_IMPORTANT_INTERNALIZED_STRING_LIST_GENERATOR(V, _)

// Symbols to be allocated early on the read only heap
#define IMPORTANT_PRIVATE_SYMBOL_LIST_GENERATOR(V, _) \
  V(_, not_mapped_symbol)                             \
  V(_, uninitialized_symbol)                          \
  V(_, megamorphic_symbol)                            \
  V(_, elements_transition_symbol)                    \
  V(_, mega_dom_symbol)

#define NOT_IMPORTANT_PRIVATE_SYMBOL_LIST_GENERATOR(V, _) \
  V(_, array_buffer_wasm_memory_symbol)                   \
  V(_, call_site_info_symbol)                             \
  V(_, class_fields_symbol)                               \
  V(_, class_positions_symbol)                            \
  V(_, error_end_pos_symbol)                              \
  V(_, error_message_symbol)                              \
  V(_, error_script_symbol)                               \
  V(_, error_stack_symbol)                                \
  V(_, error_start_pos_symbol)                            \
  V(_, frozen_symbol)                                     \
  V(_, interpreter_trampoline_symbol)                     \
  V(_, native_context_index_symbol)                       \
  V(_, nonextensible_symbol)                              \
  V(_, promise_debug_message_symbol)                      \
  V(_, promise_forwarding_handler_symbol)                 \
  V(_, promise_handled_by_symbol)                         \
  V(_, promise_awaited_by_symbol)                         \
  V(_, regexp_result_names_symbol)                        \
  V(_, regexp_result_regexp_input_symbol)                 \
  V(_, regexp_result_regexp_last_index_symbol)            \
  V(_, sealed_symbol)                                     \
  V(_, shared_struct_map_elements_template_symbol)        \
  V(_, shared_struct_map_registry_key_symbol)             \
  V(_, strict_function_transition_symbol)                 \
  V(_, template_literal_function_literal_id_symbol)       \
  V(_, template_literal_slot_id_symbol)                   \
  V(_, wasm_cross_instance_call_symbol)                   \
  V(_, wasm_exception_tag_symbol)                         \
  V(_, wasm_exception_values_symbol)                      \
  V(_, wasm_uncatchable_symbol)                           \
  V(_, wasm_debug_proxy_cache_symbol)                     \
  V(_, wasm_debug_proxy_names_symbol)

#define PRIVATE_SYMBOL_LIST_GENERATOR(V, _)     \
  IMPORTANT_PRIVATE_SYMBOL_LIST_GENERATOR(V, _) \
  NOT_IMPORTANT_PRIVATE_SYMBOL_LIST_GENERATOR(V, _)

#define PUBLIC_SYMBOL_LIST_GENERATOR(V, _)                \
  V(_, async_iterator_symbol, Symbol.asyncIterator)       \
  V(_, intl_fallback_symbol, IntlLegacyConstructedSymbol) \
  V(_, match_symbol, Symbol.match)                        \
  V(_, search_symbol, Symbol.search)                      \
  V(_, unscopables_symbol, Symbol.unscopables)            \
  V(_, dispose_symbol, Symbol.dispose)                    \
  V(_, async_dispose_symbol, Symbol.asyncDispose)

// Well-Known Symbols are "Public" symbols, which have a bit set which causes
// them to produce an undefined value when a load results in a failed access
// check. Because this behaviour is not specified properly as of yet, it only
// applies to a subset of spec-defined Well-Known Symbols.
#define WELL_KNOWN_SYMBOL_LIST_GENERATOR(V, _)  \
  V(_, has_instance_symbol, Symbol.hasInstance) \
  V(_, to_string_tag_symbol, Symbol.toStringTag)

// Custom list of Names that can cause protector invalidations.
// These Names have to be allocated consecutively for fast checks,
#define INTERNALIZED_STRING_FOR_PROTECTOR_LIST_GENERATOR(V, _) \
  V(_, constructor_string, "constructor")                      \
  V(_, length_string, "length")                                \
  V(_, next_string, "next")                                    \
  V(_, resolve_string, "resolve")                              \
  V(_, then_string, "then")                                    \
  V(_, valueOf_string, "valueOf")

// Note that the description string should be part of the internalized
// string roots to make sure we don't accidentally end up allocating the
// description in between the symbols during deserialization.
#define SYMBOL_FOR_PROTECTOR_LIST_GENERATOR(V, _) \
  V(_, iterator_symbol, Symbol.iterator)          \
  V(_, match_all_symbol, Symbol.matchAll)         \
  V(_, replace_symbol, Symbol.replace)            \
  V(_, species_symbol, Symbol.species)            \
  V(_, split_symbol, Symbol.split)

#define PUBLIC_SYMBOL_FOR_PROTECTOR_LIST_GENERATOR(V, _) \
  V(_, to_primitive_symbol, Symbol.toPrimitive)

#define WELL_KNOWN_SYMBOL_FOR_PROTECTOR_LIST_GENERATOR(V, _) \
  V(_, is_concat_spreadable_symbol, Symbol.isConcatSpreadable)

#define MC_INCREMENTAL_SCOPES(F)                                   \
  /* MC_INCREMENTAL is the top-level incremental marking scope. */ \
  F(MC_INCREMENTAL)                                                \
  F(MC_INCREMENTAL_EMBEDDER_TRACING)                               \
  F(MC_INCREMENTAL_EXTERNAL_EPILOGUE)                              \
  F(MC_INCREMENTAL_EXTERNAL_PROLOGUE)                              \
  F(MC_INCREMENTAL_LAYOUT_CHANGE)                                  \
  F(MC_INCREMENTAL_START)                                          \
  F(MC_INCREMENTAL_SWEEPING)

#define MINOR_MS_INCREMENTAL_SCOPES(F) F(MINOR_MS_INCREMENTAL_START)

#define TOP_MC_SCOPES(F) \
  F(MC_CLEAR)            \
  F(MC_EPILOGUE)         \
  F(MC_EVACUATE)         \
  F(MC_FINISH)           \
  F(MC_MARK)             \
  F(MC_PROLOGUE)         \
  F(MC_SWEEP)

#define TOP_MINOR_MS_SCOPES(F) \
  F(MINOR_MS_CLEAR)            \
  F(MINOR_MS_FINISH)           \
  F(MINOR_MS_MARK)             \
  F(MINOR_MS_SWEEP)

#define MINOR_MS_MAIN_THREAD_SCOPES(F)      \
  F(MINOR_MARK_SWEEPER)                     \
  F(MINOR_MS)                               \
  TOP_MINOR_MS_SCOPES(F)                    \
  F(MINOR_MS_CLEAR_STRING_FORWARDING_TABLE) \
  F(MINOR_MS_CLEAR_STRING_TABLE)            \
  F(MINOR_MS_CLEAR_WEAK_GLOBAL_HANDLES)     \
  F(MINOR_MS_COMPLETE_SWEEP_ARRAY_BUFFERS)  \
  F(MINOR_MS_COMPLETE_SWEEPING)             \
  F(MINOR_MS_MARK_FINISH_INCREMENTAL)       \
  F(MINOR_MS_MARK_PARALLEL)                 \
  F(MINOR_MS_MARK_INCREMENTAL_SEED)         \
  F(MINOR_MS_MARK_SEED)                     \
  F(MINOR_MS_MARK_TRACED_HANDLES)           \
  F(MINOR_MS_MARK_CONSERVATIVE_STACK)       \
  F(MINOR_MS_MARK_CLOSURE_PARALLEL)         \
  F(MINOR_MS_MARK_CLOSURE)                  \
  F(MINOR_MS_MARK_EMBEDDER_PROLOGUE)        \
  F(MINOR_MS_MARK_EMBEDDER_TRACING)         \
  F(MINOR_MS_MARK_VERIFY)                   \
  F(MINOR_MS_INCREMENTAL_STEP)              \
  F(MINOR_MS_SWEEP_NEW)                     \
  F(MINOR_MS_SWEEP_NEW_LO)                  \
  F(MINOR_MS_SWEEP_UPDATE_STRING_TABLE)     \
  F(MINOR_MS_SWEEP_START_JOBS)              \
  F(MINOR_MS_FINISH_SWEEP_ARRAY_BUFFERS)    \
  F(MINOR_MS_FINISH_ENSURE_CAPACITY)

#define SCAVENGER_MAIN_THREAD_SCOPES(F)                 \
  F(SCAVENGER)                                          \
  F(SCAVENGER_COMPLETE_SWEEP_ARRAY_BUFFERS)             \
  F(SCAVENGER_FREE_REMEMBERED_SET)                      \
  F(SCAVENGER_RESIZE_NEW_SPACE)                         \
  F(SCAVENGER_SCAVENGE)                                 \
  F(SCAVENGER_SCAVENGE_WEAK_GLOBAL_HANDLES_IDENTIFY)    \
  F(SCAVENGER_SCAVENGE_WEAK_GLOBAL_HANDLES_PROCESS)     \
  F(SCAVENGER_SCAVENGE_PARALLEL)                        \
  F(SCAVENGER_SCAVENGE_PARALLEL_PHASE)                  \
  F(SCAVENGER_SCAVENGE_PIN_OBJECTS)                     \
  F(SCAVENGER_SCAVENGE_ROOTS)                           \
  F(SCAVENGER_SCAVENGE_STACK_ROOTS)                     \
  F(SCAVENGER_SCAVENGE_UPDATE_REFS)                     \
  F(SCAVENGER_SCAVENGE_WEAK)                            \
  F(SCAVENGER_SCAVENGE_FINALIZE)                        \
  F(SCAVENGER_SWEEP_ARRAY_BUFFERS)                      \
  F(SCAVENGER_TRACED_HANDLES_COMPUTE_WEAKNESS_PARALLEL) \
  F(SCAVENGER_TRACED_HANDLES_RESET_PARALLEL)

#define MC_MAIN_THREAD_SCOPES(F)                 \
  F(MARK_COMPACTOR)                              \
  TOP_MC_SCOPES(F)                               \
  F(MC_CLEAR_DEPENDENT_CODE)                     \
  F(MC_CLEAR_EXTERNAL_STRING_TABLE)              \
  F(MC_CLEAR_STRING_FORWARDING_TABLE)            \
  F(MC_CLEAR_FLUSHABLE_BYTECODE)                 \
  F(MC_CLEAR_FLUSHED_JS_FUNCTIONS)               \
  F(MC_CLEAR_JOIN_JOB)                           \
  F(MC_CLEAR_JS_WEAK_REFERENCES)                 \
  F(MC_CLEAR_MAPS)                               \
  F(MC_CLEAR_SLOTS_BUFFER)                       \
  F(MC_CLEAR_STRING_TABLE)                       \
  F(MC_CLEAR_WEAK_COLLECTIONS)                   \
  F(MC_CLEAR_WEAK_GLOBAL_HANDLES)                \
  F(MC_CLEAR_WEAK_LISTS)                         \
  F(MC_CLEAR_WEAK_REFERENCES_FILTER_NON_TRIVIAL) \
  F(MC_CLEAR_WEAK_REFERENCES_JOIN_FILTER_JOB)    \
  F(MC_CLEAR_WEAK_REFERENCES_NON_TRIVIAL)        \
  F(MC_CLEAR_WEAK_REFERENCES_TRIVIAL)            \
  F(MC_SWEEP_EXTERNAL_POINTER_TABLE)             \
  F(MC_SWEEP_TRUSTED_POINTER_TABLE)              \
  F(MC_SWEEP_CODE_POINTER_TABLE)                 \
  F(MC_SWEEP_WASM_CODE_POINTER_TABLE)            \
  F(MC_SWEEP_JS_DISPATCH_TABLE)                  \
  F(MC_COMPLETE_SWEEP_ARRAY_BUFFERS)             \
  F(MC_COMPLETE_SWEEPING)                        \
  F(MC_EVACUATE_CANDIDATES)                      \
  F(MC_EVACUATE_CLEAN_UP)                        \
  F(MC_EVACUATE_COPY)                            \
  F(MC_EVACUATE_COPY_PARALLEL)                   \
  F(MC_EVACUATE_EPILOGUE)                        \
  F(MC_EVACUATE_PIN_PAGES)                       \
  F(MC_EVACUATE_PROLOGUE)                        \
  F(MC_EVACUATE_REBALANCE)                       \
  F(MC_EVACUATE_UPDATE_POINTERS)                 \
  F(MC_EVACUATE_UPDATE_POINTERS_CLIENT_HEAPS)    \
  F(MC_EVACUATE_UPDATE_POINTERS_PARALLEL)        \
  F(MC_EVACUATE_UPDATE_POINTERS_SLOTS_MAIN)      \
  F(MC_EVACUATE_UPDATE_POINTERS_TO_NEW_ROOTS)    \
  F(MC_EVACUATE_UPDATE_POINTERS_WEAK)            \
  F(MC_EVACUATE_UPDATE_POINTERS_POINTER_TABLES)  \
  F(MC_FINISH_SWEEP_ARRAY_BUFFERS)               \
  F(MC_MARK_CLIENT_HEAPS)                        \
  F(MC_MARK_EMBEDDER_PROLOGUE)                   \
  F(MC_MARK_EMBEDDER_TRACING)                    \
  F(MC_MARK_FINISH_INCREMENTAL)                  \
  F(MC_MARK_FULL_CLOSURE_PARALLEL)               \
  F(MC_MARK_FULL_CLOSURE_PARALLEL_JOIN)          \
  F(MC_MARK_FULL_CLOSURE_SERIAL)                 \
  F(MC_MARK_RETAIN_MAPS)                         \
  F(MC_MARK_ROOTS)                               \
  F(MC_MARK_FULL_CLOSURE)                        \
  F(MC_MARK_WEAK_CLOSURE_EPHEMERON_MARKING)      \
  F(MC_MARK_WEAK_CLOSURE_EPHEMERON_LINEAR)       \
  F(MC_MARK_VERIFY)                              \
  F(MC_SWEEP_CODE)                               \
  F(MC_SWEEP_CODE_LO)                            \
  F(MC_SWEEP_LO)                                 \
  F(MC_SWEEP_MAP)                                \
  F(MC_SWEEP_NEW)                                \
  F(MC_SWEEP_NEW_LO)                             \
  F(MC_SWEEP_OLD)                                \
  F(MC_SWEEP_SHARED)                             \
  F(MC_SWEEP_SHARED_LO)                          \
  F(MC_SWEEP_TRUSTED)                            \
  F(MC_SWEEP_TRUSTED_LO)                         \
  F(MC_SWEEP_START_JOBS)                         \
  F(MC_WEAKNESS_HANDLING)

#define TRACER_SCOPES(F)                 \
  MC_INCREMENTAL_SCOPES(F)               \
  MINOR_MS_INCREMENTAL_SCOPES(F)         \
  F(HEAP_EMBEDDER_TRACING_EPILOGUE)      \
  F(HEAP_EPILOGUE)                       \
  F(HEAP_EPILOGUE_SAFEPOINT)             \
  F(HEAP_EXTERNAL_EPILOGUE)              \
  F(HEAP_EXTERNAL_NEAR_HEAP_LIMIT)       \
  F(HEAP_EXTERNAL_PROLOGUE)              \
  F(HEAP_EXTERNAL_SECOND_PASS_CALLBACKS) \
  F(HEAP_EXTERNAL_WEAK_GLOBAL_HANDLES)   \
  F(HEAP_PROLOGUE)                       \
  F(HEAP_PROLOGUE_SAFEPOINT)             \
  MC_MAIN_THREAD_SCOPES(F)               \
  MINOR_MS_MAIN_THREAD_SCOPES(F)         \
  F(SAFEPOINT)                           \
  SCAVENGER_MAIN_THREAD_SCOPES(F)        \
  F(TIME_TO_GLOBAL_SAFEPOINT)            \
  F(TIME_TO_SAFEPOINT)                   \
  F(UNPARK)                              \
  F(YOUNG_ARRAY_BUFFER_SWEEP)            \
  F(FULL_ARRAY_BUFFER_SWEEP)             \
  F(CONSERVATIVE_STACK_SCANNING)

#define TRACER_BACKGROUND_SCOPES(F)                     \
  /* FIRST_BACKGROUND_SCOPE = */                        \
  F(BACKGROUND_YOUNG_ARRAY_BUFFER_SWEEP)                \
  F(BACKGROUND_FULL_ARRAY_BUFFER_SWEEP)                 \
  F(BACKGROUND_COLLECTION)                              \
  F(BACKGROUND_UNPARK)                                  \
  F(BACKGROUND_SAFEPOINT)                               \
  F(MC_BACKGROUND_EVACUATE_COPY)                        \
  F(MC_BACKGROUND_EVACUATE_UPDATE_POINTERS)             \
  F(MC_BACKGROUND_MARKING)                              \
  F(MC_BACKGROUND_SWEEPING)                             \
  F(MINOR_MS_BACKGROUND_MARKING)                        \
  F(MINOR_MS_BACKGROUND_SWEEPING)                       \
  F(MINOR_MS_BACKGROUND_MARKING_CLOSURE)                \
  F(SCAVENGER_BACKGROUND_SCAVENGE_PARALLEL)             \
  F(SCAVENGER_BACKGROUND_TRACED_HANDLES_RESET_PARALLEL) \
  /* LAST_BACKGROUND_SCOPE = */                         \
  F(SCAVENGER_BACKGROUND_TRACED_HANDLES_COMPUTE_WEAKNESS_PARALLEL)

#define TRACER_YOUNG_EPOCH_SCOPES(F)                    \
  F(YOUNG_ARRAY_BUFFER_SWEEP)                           \
  F(BACKGROUND_YOUNG_ARRAY_BUFFER_SWEEP)                \
  MINOR_MS_INCREMENTAL_SCOPES(F)                        \
  MINOR_MS_MAIN_THREAD_SCOPES(F)                        \
  F(MINOR_MS_BACKGROUND_MARKING)                        \
  F(MINOR_MS_BACKGROUND_SWEEPING)                       \
  F(MINOR_MS_BACKGROUND_MARKING_CLOSURE)                \
  SCAVENGER_MAIN_THREAD_SCOPES(F)                       \
  F(SCAVENGER_BACKGROUND_SCAVENGE_PARALLEL)             \
  F(SCAVENGER_BACKGROUND_TRACED_HANDLES_RESET_PARALLEL) \
  F(SCAVENGER_BACKGROUND_TRACED_HANDLES_COMPUTE_WEAKNESS_PARALLEL)

#endif  // V8_INIT_HEAP_SYMBOLS_H_
