• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 //
5 // This file was generated at 2014-10-08 15:25:47.940335
6 
7 #include "src/unicode.h"
8 #include "src/unicode-inl.h"
9 #include <stdio.h>
10 #include <stdlib.h>
11 
12 namespace unibrow {
13 
14 static const int kStartBit = (1 << 30);
15 static const int kChunkBits = (1 << 13);
16 static const uchar kSentinel = static_cast<uchar>(-1);
17 
18 /**
19  * \file
20  * Implementations of functions for working with unicode.
21  */
22 
23 typedef signed short int16_t;  // NOLINT
24 typedef unsigned short uint16_t;  // NOLINT
25 typedef int int32_t;  // NOLINT
26 
27 
28 // All access to the character table should go through this function.
29 template <int D>
TableGet(const int32_t * table,int index)30 static inline uchar TableGet(const int32_t* table, int index) {
31   return table[D * index];
32 }
33 
34 
GetEntry(int32_t entry)35 static inline uchar GetEntry(int32_t entry) {
36   return entry & (kStartBit - 1);
37 }
38 
39 
IsStart(int32_t entry)40 static inline bool IsStart(int32_t entry) {
41   return (entry & kStartBit) != 0;
42 }
43 
44 
45 /**
46  * Look up a character in the unicode table using a mix of binary and
47  * interpolation search.  For a uniformly distributed array
48  * interpolation search beats binary search by a wide margin.  However,
49  * in this case interpolation search degenerates because of some very
50  * high values in the lower end of the table so this function uses a
51  * combination.  The average number of steps to look up the information
52  * about a character is around 10, slightly higher if there is no
53  * information available about the character.
54  */
LookupPredicate(const int32_t * table,uint16_t size,uchar chr)55 static bool LookupPredicate(const int32_t* table, uint16_t size, uchar chr) {
56   static const int kEntryDist = 1;
57   uint16_t value = chr & (kChunkBits - 1);
58   unsigned int low = 0;
59   unsigned int high = size - 1;
60   while (high != low) {
61     unsigned int mid = low + ((high - low) >> 1);
62     uchar current_value = GetEntry(TableGet<kEntryDist>(table, mid));
63     // If we've found an entry less than or equal to this one, and the
64     // next one is not also less than this one, we've arrived.
65     if ((current_value <= value) &&
66         (mid + 1 == size ||
67          GetEntry(TableGet<kEntryDist>(table, mid + 1)) > value)) {
68       low = mid;
69       break;
70     } else if (current_value < value) {
71       low = mid + 1;
72     } else if (current_value > value) {
73       // If we've just checked the bottom-most value and it's not
74       // the one we're looking for, we're done.
75       if (mid == 0) break;
76       high = mid - 1;
77     }
78   }
79   int32_t field = TableGet<kEntryDist>(table, low);
80   uchar entry = GetEntry(field);
81   bool is_start = IsStart(field);
82   return (entry == value) || (entry < value && is_start);
83 }
84 
85 template <int kW>
86 struct MultiCharacterSpecialCase {
87   static const uchar kEndOfEncoding = kSentinel;
88   uchar chars[kW];
89 };
90 
91 
92 // Look up the mapping for the given character in the specified table,
93 // which is of the specified length and uses the specified special case
94 // mapping for multi-char mappings.  The next parameter is the character
95 // following the one to map.  The result will be written in to the result
96 // buffer and the number of characters written will be returned.  Finally,
97 // if the allow_caching_ptr is non-null then false will be stored in
98 // it if the result contains multiple characters or depends on the
99 // context.
100 // If ranges are linear, a match between a start and end point is
101 // offset by the distance between the match and the start. Otherwise
102 // the result is the same as for the start point on the entire range.
103 template <bool ranges_are_linear, int kW>
LookupMapping(const int32_t * table,uint16_t size,const MultiCharacterSpecialCase<kW> * multi_chars,uchar chr,uchar next,uchar * result,bool * allow_caching_ptr)104 static int LookupMapping(const int32_t* table,
105                          uint16_t size,
106                          const MultiCharacterSpecialCase<kW>* multi_chars,
107                          uchar chr,
108                          uchar next,
109                          uchar* result,
110                          bool* allow_caching_ptr) {
111   static const int kEntryDist = 2;
112   uint16_t key = chr & (kChunkBits - 1);
113   uint16_t chunk_start = chr - key;
114   unsigned int low = 0;
115   unsigned int high = size - 1;
116   while (high != low) {
117     unsigned int mid = low + ((high - low) >> 1);
118     uchar current_value = GetEntry(TableGet<kEntryDist>(table, mid));
119     // If we've found an entry less than or equal to this one, and the next one
120     // is not also less than this one, we've arrived.
121     if ((current_value <= key) &&
122         (mid + 1 == size ||
123          GetEntry(TableGet<kEntryDist>(table, mid + 1)) > key)) {
124       low = mid;
125       break;
126     } else if (current_value < key) {
127       low = mid + 1;
128     } else if (current_value > key) {
129       // If we've just checked the bottom-most value and it's not
130       // the one we're looking for, we're done.
131       if (mid == 0) break;
132       high = mid - 1;
133     }
134   }
135   int32_t field = TableGet<kEntryDist>(table, low);
136   uchar entry = GetEntry(field);
137   bool is_start = IsStart(field);
138   bool found = (entry == key) || (entry < key && is_start);
139   if (found) {
140     int32_t value = table[2 * low + 1];
141     if (value == 0) {
142       // 0 means not present
143       return 0;
144     } else if ((value & 3) == 0) {
145       // Low bits 0 means a constant offset from the given character.
146       if (ranges_are_linear) {
147         result[0] = chr + (value >> 2);
148       } else {
149         result[0] = entry + chunk_start + (value >> 2);
150       }
151       return 1;
152     } else if ((value & 3) == 1) {
153       // Low bits 1 means a special case mapping
154       if (allow_caching_ptr) *allow_caching_ptr = false;
155       const MultiCharacterSpecialCase<kW>& mapping = multi_chars[value >> 2];
156       int length = 0;
157       for (length = 0; length < kW; length++) {
158         uchar mapped = mapping.chars[length];
159         if (mapped == MultiCharacterSpecialCase<kW>::kEndOfEncoding) break;
160         if (ranges_are_linear) {
161           result[length] = mapped + (key - entry);
162         } else {
163           result[length] = mapped;
164         }
165       }
166       return length;
167     } else {
168       // Low bits 2 means a really really special case
169       if (allow_caching_ptr) *allow_caching_ptr = false;
170       // The cases of this switch are defined in unicode.py in the
171       // really_special_cases mapping.
172       switch (value >> 2) {
173         case 1:
174           // Really special case 1: upper case sigma.  This letter
175           // converts to two different lower case sigmas depending on
176           // whether or not it occurs at the end of a word.
177           if (next != 0 && Letter::Is(next)) {
178             result[0] = 0x03C3;
179           } else {
180             result[0] = 0x03C2;
181           }
182           return 1;
183         default:
184           return 0;
185       }
186       return -1;
187     }
188   } else {
189     return 0;
190   }
191 }
192 
193 
NonASCIISequenceLength(byte first)194 static inline size_t NonASCIISequenceLength(byte first) {
195   // clang-format off
196   static const uint8_t lengths[256] = {
197       // The first 128 entries correspond to ASCII characters.
198       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
199       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
200       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
201       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
202       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
203       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
204       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
205       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
206       // The following 64 entries correspond to continuation bytes.
207       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
208       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
209       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
210       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
211       // The next are two invalid overlong encodings and 30 two-byte sequences.
212       0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
213       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
214       // 16 three-byte sequences.
215       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
216       // 5 four-byte sequences, followed by sequences that could only encode
217       // code points outside of the unicode range.
218       4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
219   // clang-format on
220   return lengths[first];
221 }
222 
223 
IsContinuationCharacter(byte chr)224 static inline bool IsContinuationCharacter(byte chr) {
225   return chr >= 0x80 && chr <= 0xBF;
226 }
227 
228 
229 // This method decodes an UTF-8 value according to RFC 3629.
CalculateValue(const byte * str,size_t max_length,size_t * cursor)230 uchar Utf8::CalculateValue(const byte* str, size_t max_length, size_t* cursor) {
231   size_t length = NonASCIISequenceLength(str[0]);
232   if (length == 0 || max_length < length) {
233     *cursor += 1;
234     return kBadChar;
235   }
236   if (length == 2) {
237     if (!IsContinuationCharacter(str[1])) {
238       *cursor += 1;
239       return kBadChar;
240     }
241     *cursor += 2;
242     return ((str[0] << 6) + str[1]) - 0x00003080;
243   }
244   if (length == 3) {
245     switch (str[0]) {
246       case 0xE0:
247         // Overlong three-byte sequence.
248         if (str[1] < 0xA0 || str[1] > 0xBF) {
249           *cursor += 1;
250           return kBadChar;
251         }
252         break;
253       case 0xED:
254         // High and low surrogate halves.
255         if (str[1] < 0x80 || str[1] > 0x9F) {
256           *cursor += 1;
257           return kBadChar;
258         }
259         break;
260       default:
261         if (!IsContinuationCharacter(str[1])) {
262           *cursor += 1;
263           return kBadChar;
264         }
265     }
266     if (!IsContinuationCharacter(str[2])) {
267       *cursor += 1;
268       return kBadChar;
269     }
270     *cursor += 3;
271     return ((str[0] << 12) + (str[1] << 6) + str[2]) - 0x000E2080;
272   }
273   DCHECK(length == 4);
274   switch (str[0]) {
275     case 0xF0:
276       // Overlong four-byte sequence.
277       if (str[1] < 0x90 || str[1] > 0xBF) {
278         *cursor += 1;
279         return kBadChar;
280       }
281       break;
282     case 0xF4:
283       // Code points outside of the unicode range.
284       if (str[1] < 0x80 || str[1] > 0x8F) {
285         *cursor += 1;
286         return kBadChar;
287       }
288       break;
289     default:
290       if (!IsContinuationCharacter(str[1])) {
291         *cursor += 1;
292         return kBadChar;
293       }
294   }
295   if (!IsContinuationCharacter(str[2])) {
296     *cursor += 1;
297     return kBadChar;
298   }
299   if (!IsContinuationCharacter(str[3])) {
300     *cursor += 1;
301     return kBadChar;
302   }
303   *cursor += 4;
304   return ((str[0] << 18) + (str[1] << 12) + (str[2] << 6) + str[3]) -
305          0x03C82080;
306 }
307 
Validate(const byte * bytes,size_t length)308 bool Utf8::Validate(const byte* bytes, size_t length) {
309   size_t cursor = 0;
310 
311   // Performance optimization: Skip over single-byte values first.
312   while (cursor < length && bytes[cursor] <= kMaxOneByteChar) {
313     ++cursor;
314   }
315 
316   while (cursor < length) {
317     uchar c = ValueOf(bytes + cursor, length - cursor, &cursor);
318     if (!IsValidCharacter(c)) return false;
319   }
320   return true;
321 }
322 
323 // Uppercase:            point.category == 'Lu'
324 
325 static const uint16_t kUppercaseTable0Size = 455;
326 static const int32_t kUppercaseTable0[455] = {
327     1073741889, 90,         1073742016, 214,
328     1073742040, 222,        256,        258,  // NOLINT
329     260,        262,        264,        266,
330     268,        270,        272,        274,  // NOLINT
331     276,        278,        280,        282,
332     284,        286,        288,        290,  // NOLINT
333     292,        294,        296,        298,
334     300,        302,        304,        306,  // NOLINT
335     308,        310,        313,        315,
336     317,        319,        321,        323,  // NOLINT
337     325,        327,        330,        332,
338     334,        336,        338,        340,  // NOLINT
339     342,        344,        346,        348,
340     350,        352,        354,        356,  // NOLINT
341     358,        360,        362,        364,
342     366,        368,        370,        372,  // NOLINT
343     374,        1073742200, 377,        379,
344     381,        1073742209, 386,        388,  // NOLINT
345     1073742214, 391,        1073742217, 395,
346     1073742222, 401,        1073742227, 404,  // NOLINT
347     1073742230, 408,        1073742236, 413,
348     1073742239, 416,        418,        420,  // NOLINT
349     1073742246, 423,        425,        428,
350     1073742254, 431,        1073742257, 435,  // NOLINT
351     437,        1073742263, 440,        444,
352     452,        455,        458,        461,  // NOLINT
353     463,        465,        467,        469,
354     471,        473,        475,        478,  // NOLINT
355     480,        482,        484,        486,
356     488,        490,        492,        494,  // NOLINT
357     497,        500,        1073742326, 504,
358     506,        508,        510,        512,  // NOLINT
359     514,        516,        518,        520,
360     522,        524,        526,        528,  // NOLINT
361     530,        532,        534,        536,
362     538,        540,        542,        544,  // NOLINT
363     546,        548,        550,        552,
364     554,        556,        558,        560,  // NOLINT
365     562,        1073742394, 571,        1073742397,
366     574,        577,        1073742403, 582,  // NOLINT
367     584,        586,        588,        590,
368     880,        882,        886,        895,  // NOLINT
369     902,        1073742728, 906,        908,
370     1073742734, 911,        1073742737, 929,  // NOLINT
371     1073742755, 939,        975,        1073742802,
372     980,        984,        986,        988,  // NOLINT
373     990,        992,        994,        996,
374     998,        1000,       1002,       1004,  // NOLINT
375     1006,       1012,       1015,       1073742841,
376     1018,       1073742845, 1071,       1120,  // NOLINT
377     1122,       1124,       1126,       1128,
378     1130,       1132,       1134,       1136,  // NOLINT
379     1138,       1140,       1142,       1144,
380     1146,       1148,       1150,       1152,  // NOLINT
381     1162,       1164,       1166,       1168,
382     1170,       1172,       1174,       1176,  // NOLINT
383     1178,       1180,       1182,       1184,
384     1186,       1188,       1190,       1192,  // NOLINT
385     1194,       1196,       1198,       1200,
386     1202,       1204,       1206,       1208,  // NOLINT
387     1210,       1212,       1214,       1073743040,
388     1217,       1219,       1221,       1223,  // NOLINT
389     1225,       1227,       1229,       1232,
390     1234,       1236,       1238,       1240,  // NOLINT
391     1242,       1244,       1246,       1248,
392     1250,       1252,       1254,       1256,  // NOLINT
393     1258,       1260,       1262,       1264,
394     1266,       1268,       1270,       1272,  // NOLINT
395     1274,       1276,       1278,       1280,
396     1282,       1284,       1286,       1288,  // NOLINT
397     1290,       1292,       1294,       1296,
398     1298,       1300,       1302,       1304,  // NOLINT
399     1306,       1308,       1310,       1312,
400     1314,       1316,       1318,       1320,  // NOLINT
401     1322,       1324,       1326,       1073743153,
402     1366,       1073746080, 4293,       4295,  // NOLINT
403     4301,       7680,       7682,       7684,
404     7686,       7688,       7690,       7692,  // NOLINT
405     7694,       7696,       7698,       7700,
406     7702,       7704,       7706,       7708,  // NOLINT
407     7710,       7712,       7714,       7716,
408     7718,       7720,       7722,       7724,  // NOLINT
409     7726,       7728,       7730,       7732,
410     7734,       7736,       7738,       7740,  // NOLINT
411     7742,       7744,       7746,       7748,
412     7750,       7752,       7754,       7756,  // NOLINT
413     7758,       7760,       7762,       7764,
414     7766,       7768,       7770,       7772,  // NOLINT
415     7774,       7776,       7778,       7780,
416     7782,       7784,       7786,       7788,  // NOLINT
417     7790,       7792,       7794,       7796,
418     7798,       7800,       7802,       7804,  // NOLINT
419     7806,       7808,       7810,       7812,
420     7814,       7816,       7818,       7820,  // NOLINT
421     7822,       7824,       7826,       7828,
422     7838,       7840,       7842,       7844,  // NOLINT
423     7846,       7848,       7850,       7852,
424     7854,       7856,       7858,       7860,  // NOLINT
425     7862,       7864,       7866,       7868,
426     7870,       7872,       7874,       7876,  // NOLINT
427     7878,       7880,       7882,       7884,
428     7886,       7888,       7890,       7892,  // NOLINT
429     7894,       7896,       7898,       7900,
430     7902,       7904,       7906,       7908,  // NOLINT
431     7910,       7912,       7914,       7916,
432     7918,       7920,       7922,       7924,  // NOLINT
433     7926,       7928,       7930,       7932,
434     7934,       1073749768, 7951,       1073749784,  // NOLINT
435     7965,       1073749800, 7983,       1073749816,
436     7999,       1073749832, 8013,       8025,  // NOLINT
437     8027,       8029,       8031,       1073749864,
438     8047,       1073749944, 8123,       1073749960,  // NOLINT
439     8139,       1073749976, 8155,       1073749992,
440     8172,       1073750008, 8187};  // NOLINT
441 static const uint16_t kUppercaseTable1Size = 86;
442 static const int32_t kUppercaseTable1[86] = {
443   258, 263, 1073742091, 269, 1073742096, 274, 277, 1073742105,  // NOLINT
444   285, 292, 294, 296, 1073742122, 301, 1073742128, 307,  // NOLINT
445   1073742142, 319, 325, 387, 1073744896, 3118, 3168, 1073744994,  // NOLINT
446   3172, 3175, 3177, 3179, 1073745005, 3184, 3186, 3189,  // NOLINT
447   1073745022, 3200, 3202, 3204, 3206, 3208, 3210, 3212,  // NOLINT
448   3214, 3216, 3218, 3220, 3222, 3224, 3226, 3228,  // NOLINT
449   3230, 3232, 3234, 3236, 3238, 3240, 3242, 3244,  // NOLINT
450   3246, 3248, 3250, 3252, 3254, 3256, 3258, 3260,  // NOLINT
451   3262, 3264, 3266, 3268, 3270, 3272, 3274, 3276,  // NOLINT
452   3278, 3280, 3282, 3284, 3286, 3288, 3290, 3292,  // NOLINT
453   3294, 3296, 3298, 3307, 3309, 3314 };  // NOLINT
454 static const uint16_t kUppercaseTable5Size = 101;
455 static const int32_t kUppercaseTable5[101] = {
456     1600, 1602,       1604, 1606,       1608, 1610,       1612, 1614,  // NOLINT
457     1616, 1618,       1620, 1622,       1624, 1626,       1628, 1630,  // NOLINT
458     1632, 1634,       1636, 1638,       1640, 1642,       1644, 1664,  // NOLINT
459     1666, 1668,       1670, 1672,       1674, 1676,       1678, 1680,  // NOLINT
460     1682, 1684,       1686, 1688,       1690, 1826,       1828, 1830,  // NOLINT
461     1832, 1834,       1836, 1838,       1842, 1844,       1846, 1848,  // NOLINT
462     1850, 1852,       1854, 1856,       1858, 1860,       1862, 1864,  // NOLINT
463     1866, 1868,       1870, 1872,       1874, 1876,       1878, 1880,  // NOLINT
464     1882, 1884,       1886, 1888,       1890, 1892,       1894, 1896,  // NOLINT
465     1898, 1900,       1902, 1913,       1915, 1073743741, 1918, 1920,  // NOLINT
466     1922, 1924,       1926, 1931,       1933, 1936,       1938, 1942,  // NOLINT
467     1944, 1946,       1948, 1950,       1952, 1954,       1956, 1958,  // NOLINT
468     1960, 1073743786, 1965, 1073743792, 1969};                         // NOLINT
469 static const uint16_t kUppercaseTable7Size = 2;
470 static const int32_t kUppercaseTable7[2] = {
471   1073749793, 7994 };  // NOLINT
Is(uchar c)472 bool Uppercase::Is(uchar c) {
473   int chunk_index = c >> 13;
474   switch (chunk_index) {
475     case 0: return LookupPredicate(kUppercaseTable0,
476                                        kUppercaseTable0Size,
477                                        c);
478     case 1: return LookupPredicate(kUppercaseTable1,
479                                        kUppercaseTable1Size,
480                                        c);
481     case 5: return LookupPredicate(kUppercaseTable5,
482                                        kUppercaseTable5Size,
483                                        c);
484     case 7: return LookupPredicate(kUppercaseTable7,
485                                        kUppercaseTable7Size,
486                                        c);
487     default: return false;
488   }
489 }
490 
491 
492 // Lowercase:            point.category == 'Ll'
493 
494 static const uint16_t kLowercaseTable0Size = 467;
495 static const int32_t kLowercaseTable0[467] = {
496     1073741921, 122,        181,        1073742047,
497     246,        1073742072, 255,        257,  // NOLINT
498     259,        261,        263,        265,
499     267,        269,        271,        273,  // NOLINT
500     275,        277,        279,        281,
501     283,        285,        287,        289,  // NOLINT
502     291,        293,        295,        297,
503     299,        301,        303,        305,  // NOLINT
504     307,        309,        1073742135, 312,
505     314,        316,        318,        320,  // NOLINT
506     322,        324,        326,        1073742152,
507     329,        331,        333,        335,  // NOLINT
508     337,        339,        341,        343,
509     345,        347,        349,        351,  // NOLINT
510     353,        355,        357,        359,
511     361,        363,        365,        367,  // NOLINT
512     369,        371,        373,        375,
513     378,        380,        1073742206, 384,  // NOLINT
514     387,        389,        392,        1073742220,
515     397,        402,        405,        1073742233,  // NOLINT
516     411,        414,        417,        419,
517     421,        424,        1073742250, 427,  // NOLINT
518     429,        432,        436,        438,
519     1073742265, 442,        1073742269, 447,  // NOLINT
520     454,        457,        460,        462,
521     464,        466,        468,        470,  // NOLINT
522     472,        474,        1073742300, 477,
523     479,        481,        483,        485,  // NOLINT
524     487,        489,        491,        493,
525     1073742319, 496,        499,        501,  // NOLINT
526     505,        507,        509,        511,
527     513,        515,        517,        519,  // NOLINT
528     521,        523,        525,        527,
529     529,        531,        533,        535,  // NOLINT
530     537,        539,        541,        543,
531     545,        547,        549,        551,  // NOLINT
532     553,        555,        557,        559,
533     561,        1073742387, 569,        572,  // NOLINT
534     1073742399, 576,        578,        583,
535     585,        587,        589,        1073742415,  // NOLINT
536     659,        1073742485, 687,        881,
537     883,        887,        1073742715, 893,  // NOLINT
538     912,        1073742764, 974,        1073742800,
539     977,        1073742805, 983,        985,  // NOLINT
540     987,        989,        991,        993,
541     995,        997,        999,        1001,  // NOLINT
542     1003,       1005,       1073742831, 1011,
543     1013,       1016,       1073742843, 1020,  // NOLINT
544     1073742896, 1119,       1121,       1123,
545     1125,       1127,       1129,       1131,  // NOLINT
546     1133,       1135,       1137,       1139,
547     1141,       1143,       1145,       1147,  // NOLINT
548     1149,       1151,       1153,       1163,
549     1165,       1167,       1169,       1171,  // NOLINT
550     1173,       1175,       1177,       1179,
551     1181,       1183,       1185,       1187,  // NOLINT
552     1189,       1191,       1193,       1195,
553     1197,       1199,       1201,       1203,  // NOLINT
554     1205,       1207,       1209,       1211,
555     1213,       1215,       1218,       1220,  // NOLINT
556     1222,       1224,       1226,       1228,
557     1073743054, 1231,       1233,       1235,  // NOLINT
558     1237,       1239,       1241,       1243,
559     1245,       1247,       1249,       1251,  // NOLINT
560     1253,       1255,       1257,       1259,
561     1261,       1263,       1265,       1267,  // NOLINT
562     1269,       1271,       1273,       1275,
563     1277,       1279,       1281,       1283,  // NOLINT
564     1285,       1287,       1289,       1291,
565     1293,       1295,       1297,       1299,  // NOLINT
566     1301,       1303,       1305,       1307,
567     1309,       1311,       1313,       1315,  // NOLINT
568     1317,       1319,       1321,       1323,
569     1325,       1327,       1073743201, 1415,  // NOLINT
570     1073749248, 7467,       1073749355, 7543,
571     1073749369, 7578,       7681,       7683,  // NOLINT
572     7685,       7687,       7689,       7691,
573     7693,       7695,       7697,       7699,  // NOLINT
574     7701,       7703,       7705,       7707,
575     7709,       7711,       7713,       7715,  // NOLINT
576     7717,       7719,       7721,       7723,
577     7725,       7727,       7729,       7731,  // NOLINT
578     7733,       7735,       7737,       7739,
579     7741,       7743,       7745,       7747,  // NOLINT
580     7749,       7751,       7753,       7755,
581     7757,       7759,       7761,       7763,  // NOLINT
582     7765,       7767,       7769,       7771,
583     7773,       7775,       7777,       7779,  // NOLINT
584     7781,       7783,       7785,       7787,
585     7789,       7791,       7793,       7795,  // NOLINT
586     7797,       7799,       7801,       7803,
587     7805,       7807,       7809,       7811,  // NOLINT
588     7813,       7815,       7817,       7819,
589     7821,       7823,       7825,       7827,  // NOLINT
590     1073749653, 7837,       7839,       7841,
591     7843,       7845,       7847,       7849,  // NOLINT
592     7851,       7853,       7855,       7857,
593     7859,       7861,       7863,       7865,  // NOLINT
594     7867,       7869,       7871,       7873,
595     7875,       7877,       7879,       7881,  // NOLINT
596     7883,       7885,       7887,       7889,
597     7891,       7893,       7895,       7897,  // NOLINT
598     7899,       7901,       7903,       7905,
599     7907,       7909,       7911,       7913,  // NOLINT
600     7915,       7917,       7919,       7921,
601     7923,       7925,       7927,       7929,  // NOLINT
602     7931,       7933,       1073749759, 7943,
603     1073749776, 7957,       1073749792, 7975,  // NOLINT
604     1073749808, 7991,       1073749824, 8005,
605     1073749840, 8023,       1073749856, 8039,  // NOLINT
606     1073749872, 8061,       1073749888, 8071,
607     1073749904, 8087,       1073749920, 8103,  // NOLINT
608     1073749936, 8116,       1073749942, 8119,
609     8126,       1073749954, 8132,       1073749958,  // NOLINT
610     8135,       1073749968, 8147,       1073749974,
611     8151,       1073749984, 8167,       1073750002,  // NOLINT
612     8180,       1073750006, 8183};                   // NOLINT
613 static const uint16_t kLowercaseTable1Size = 84;
614 static const int32_t kLowercaseTable1[84] = {
615   266, 1073742094, 271, 275, 303, 308, 313, 1073742140,  // NOLINT
616   317, 1073742150, 329, 334, 388, 1073744944, 3166, 3169,  // NOLINT
617   1073744997, 3174, 3176, 3178, 3180, 3185, 1073745011, 3188,  // NOLINT
618   1073745014, 3195, 3201, 3203, 3205, 3207, 3209, 3211,  // NOLINT
619   3213, 3215, 3217, 3219, 3221, 3223, 3225, 3227,  // NOLINT
620   3229, 3231, 3233, 3235, 3237, 3239, 3241, 3243,  // NOLINT
621   3245, 3247, 3249, 3251, 3253, 3255, 3257, 3259,  // NOLINT
622   3261, 3263, 3265, 3267, 3269, 3271, 3273, 3275,  // NOLINT
623   3277, 3279, 3281, 3283, 3285, 3287, 3289, 3291,  // NOLINT
624   3293, 3295, 3297, 1073745123, 3300, 3308, 3310, 3315,  // NOLINT
625   1073745152, 3365, 3367, 3373 };  // NOLINT
626 static const uint16_t kLowercaseTable5Size = 105;
627 static const int32_t kLowercaseTable5[105] = {
628     1601,       1603,       1605, 1607,
629     1609,       1611,       1613, 1615,  // NOLINT
630     1617,       1619,       1621, 1623,
631     1625,       1627,       1629, 1631,  // NOLINT
632     1633,       1635,       1637, 1639,
633     1641,       1643,       1645, 1665,  // NOLINT
634     1667,       1669,       1671, 1673,
635     1675,       1677,       1679, 1681,  // NOLINT
636     1683,       1685,       1687, 1689,
637     1691,       1827,       1829, 1831,  // NOLINT
638     1833,       1835,       1837, 1073743663,
639     1841,       1843,       1845, 1847,  // NOLINT
640     1849,       1851,       1853, 1855,
641     1857,       1859,       1861, 1863,  // NOLINT
642     1865,       1867,       1869, 1871,
643     1873,       1875,       1877, 1879,  // NOLINT
644     1881,       1883,       1885, 1887,
645     1889,       1891,       1893, 1895,  // NOLINT
646     1897,       1899,       1901, 1903,
647     1073743729, 1912,       1914, 1916,  // NOLINT
648     1919,       1921,       1923, 1925,
649     1927,       1932,       1934, 1937,  // NOLINT
650     1073743763, 1941,       1943, 1945,
651     1947,       1949,       1951, 1953,  // NOLINT
652     1955,       1957,       1959, 1961,
653     2042,       1073744688, 2906, 1073744740,  // NOLINT
654     2917};                                     // NOLINT
655 static const uint16_t kLowercaseTable7Size = 6;
656 static const int32_t kLowercaseTable7[6] = {
657   1073748736, 6918, 1073748755, 6935, 1073749825, 8026 };  // NOLINT
Is(uchar c)658 bool Lowercase::Is(uchar c) {
659   int chunk_index = c >> 13;
660   switch (chunk_index) {
661     case 0: return LookupPredicate(kLowercaseTable0,
662                                        kLowercaseTable0Size,
663                                        c);
664     case 1: return LookupPredicate(kLowercaseTable1,
665                                        kLowercaseTable1Size,
666                                        c);
667     case 5: return LookupPredicate(kLowercaseTable5,
668                                        kLowercaseTable5Size,
669                                        c);
670     case 7: return LookupPredicate(kLowercaseTable7,
671                                        kLowercaseTable7Size,
672                                        c);
673     default: return false;
674   }
675 }
676 
677 
678 // Letter:               point.category in ['Lu', 'Ll', 'Lt', 'Lm', 'Lo', 'Nl']
679 
680 static const uint16_t kLetterTable0Size = 431;
681 static const int32_t kLetterTable0[431] = {
682     1073741889, 90,         1073741921, 122,
683     170,        181,        186,        1073742016,  // NOLINT
684     214,        1073742040, 246,        1073742072,
685     705,        1073742534, 721,        1073742560,  // NOLINT
686     740,        748,        750,        1073742704,
687     884,        1073742710, 887,        1073742714,  // NOLINT
688     893,        895,        902,        1073742728,
689     906,        908,        1073742734, 929,  // NOLINT
690     1073742755, 1013,       1073742839, 1153,
691     1073742986, 1327,       1073743153, 1366,  // NOLINT
692     1369,       1073743201, 1415,       1073743312,
693     1514,       1073743344, 1522,       1073743392,  // NOLINT
694     1610,       1073743470, 1647,       1073743473,
695     1747,       1749,       1073743589, 1766,  // NOLINT
696     1073743598, 1775,       1073743610, 1788,
697     1791,       1808,       1073743634, 1839,  // NOLINT
698     1073743693, 1957,       1969,       1073743818,
699     2026,       1073743860, 2037,       2042,  // NOLINT
700     1073743872, 2069,       2074,       2084,
701     2088,       1073743936, 2136,       1073744032,  // NOLINT
702     2226,       1073744132, 2361,       2365,
703     2384,       1073744216, 2401,       1073744241,  // NOLINT
704     2432,       1073744261, 2444,       1073744271,
705     2448,       1073744275, 2472,       1073744298,  // NOLINT
706     2480,       2482,       1073744310, 2489,
707     2493,       2510,       1073744348, 2525,  // NOLINT
708     1073744351, 2529,       1073744368, 2545,
709     1073744389, 2570,       1073744399, 2576,  // NOLINT
710     1073744403, 2600,       1073744426, 2608,
711     1073744434, 2611,       1073744437, 2614,  // NOLINT
712     1073744440, 2617,       1073744473, 2652,
713     2654,       1073744498, 2676,       1073744517,  // NOLINT
714     2701,       1073744527, 2705,       1073744531,
715     2728,       1073744554, 2736,       1073744562,  // NOLINT
716     2739,       1073744565, 2745,       2749,
717     2768,       1073744608, 2785,       1073744645,  // NOLINT
718     2828,       1073744655, 2832,       1073744659,
719     2856,       1073744682, 2864,       1073744690,  // NOLINT
720     2867,       1073744693, 2873,       2877,
721     1073744732, 2909,       1073744735, 2913,  // NOLINT
722     2929,       2947,       1073744773, 2954,
723     1073744782, 2960,       1073744786, 2965,  // NOLINT
724     1073744793, 2970,       2972,       1073744798,
725     2975,       1073744803, 2980,       1073744808,  // NOLINT
726     2986,       1073744814, 3001,       3024,
727     1073744901, 3084,       1073744910, 3088,  // NOLINT
728     1073744914, 3112,       1073744938, 3129,
729     3133,       1073744984, 3161,       1073744992,  // NOLINT
730     3169,       1073745029, 3212,       1073745038,
731     3216,       1073745042, 3240,       1073745066,  // NOLINT
732     3251,       1073745077, 3257,       3261,
733     3294,       1073745120, 3297,       1073745137,  // NOLINT
734     3314,       1073745157, 3340,       1073745166,
735     3344,       1073745170, 3386,       3389,  // NOLINT
736     3406,       1073745248, 3425,       1073745274,
737     3455,       1073745285, 3478,       1073745306,  // NOLINT
738     3505,       1073745331, 3515,       3517,
739     1073745344, 3526,       1073745409, 3632,  // NOLINT
740     1073745458, 3635,       1073745472, 3654,
741     1073745537, 3714,       3716,       1073745543,  // NOLINT
742     3720,       3722,       3725,       1073745556,
743     3735,       1073745561, 3743,       1073745569,  // NOLINT
744     3747,       3749,       3751,       1073745578,
745     3755,       1073745581, 3760,       1073745586,  // NOLINT
746     3763,       3773,       1073745600, 3780,
747     3782,       1073745628, 3807,       3840,  // NOLINT
748     1073745728, 3911,       1073745737, 3948,
749     1073745800, 3980,       1073745920, 4138,  // NOLINT
750     4159,       1073746000, 4181,       1073746010,
751     4189,       4193,       1073746021, 4198,  // NOLINT
752     1073746030, 4208,       1073746037, 4225,
753     4238,       1073746080, 4293,       4295,  // NOLINT
754     4301,       1073746128, 4346,       1073746172,
755     4680,       1073746506, 4685,       1073746512,  // NOLINT
756     4694,       4696,       1073746522, 4701,
757     1073746528, 4744,       1073746570, 4749,  // NOLINT
758     1073746576, 4784,       1073746610, 4789,
759     1073746616, 4798,       4800,       1073746626,  // NOLINT
760     4805,       1073746632, 4822,       1073746648,
761     4880,       1073746706, 4885,       1073746712,  // NOLINT
762     4954,       1073746816, 5007,       1073746848,
763     5108,       1073746945, 5740,       1073747567,  // NOLINT
764     5759,       1073747585, 5786,       1073747616,
765     5866,       1073747694, 5880,       1073747712,  // NOLINT
766     5900,       1073747726, 5905,       1073747744,
767     5937,       1073747776, 5969,       1073747808,  // NOLINT
768     5996,       1073747822, 6000,       1073747840,
769     6067,       6103,       6108,       1073748000,  // NOLINT
770     6263,       1073748096, 6312,       6314,
771     1073748144, 6389,       1073748224, 6430,  // NOLINT
772     1073748304, 6509,       1073748336, 6516,
773     1073748352, 6571,       1073748417, 6599,  // NOLINT
774     1073748480, 6678,       1073748512, 6740,
775     6823,       1073748741, 6963,       1073748805,  // NOLINT
776     6987,       1073748867, 7072,       1073748910,
777     7087,       1073748922, 7141,       1073748992,  // NOLINT
778     7203,       1073749069, 7247,       1073749082,
779     7293,       1073749225, 7404,       1073749230,  // NOLINT
780     7409,       1073749237, 7414,       1073749248,
781     7615,       1073749504, 7957,       1073749784,  // NOLINT
782     7965,       1073749792, 8005,       1073749832,
783     8013,       1073749840, 8023,       8025,  // NOLINT
784     8027,       8029,       1073749855, 8061,
785     1073749888, 8116,       1073749942, 8124,  // NOLINT
786     8126,       1073749954, 8132,       1073749958,
787     8140,       1073749968, 8147,       1073749974,  // NOLINT
788     8155,       1073749984, 8172,       1073750002,
789     8180,       1073750006, 8188};  // NOLINT
790 static const uint16_t kLetterTable1Size = 87;
791 static const int32_t kLetterTable1[87] = {
792   113, 127, 1073741968, 156, 258, 263, 1073742090, 275,  // NOLINT
793   277, 1073742105, 285, 292, 294, 296, 1073742122, 301,  // NOLINT
794   1073742127, 313, 1073742140, 319, 1073742149, 329, 334, 1073742176,  // NOLINT
795   392, 1073744896, 3118, 1073744944, 3166, 1073744992, 3300, 1073745131,  // NOLINT
796   3310, 1073745138, 3315, 1073745152, 3365, 3367, 3373, 1073745200,  // NOLINT
797   3431, 3439, 1073745280, 3478, 1073745312, 3494, 1073745320, 3502,  // NOLINT
798   1073745328, 3510, 1073745336, 3518, 1073745344, 3526, 1073745352, 3534,  // NOLINT
799   1073745360, 3542, 1073745368, 3550, 3631, 1073745925, 4103, 1073745953,  // NOLINT
800   4137, 1073745969, 4149, 1073745976, 4156, 1073745985, 4246, 1073746077,  // NOLINT
801   4255, 1073746081, 4346, 1073746172, 4351, 1073746181, 4397, 1073746225,  // NOLINT
802   4494, 1073746336, 4538, 1073746416, 4607, 1073746944, 8191 };  // NOLINT
803 static const uint16_t kLetterTable2Size = 4;
804 static const int32_t kLetterTable2[4] = {
805   1073741824, 3509, 1073745408, 8191 };  // NOLINT
806 static const uint16_t kLetterTable3Size = 2;
807 static const int32_t kLetterTable3[2] = {
808   1073741824, 8191 };  // NOLINT
809 static const uint16_t kLetterTable4Size = 2;
810 static const int32_t kLetterTable4[2] = {
811   1073741824, 8140 };  // NOLINT
812 static const uint16_t kLetterTable5Size = 100;
813 static const int32_t kLetterTable5[100] = {
814     1073741824, 1164,       1073743056, 1277,
815     1073743104, 1548,       1073743376, 1567,  // NOLINT
816     1073743402, 1579,       1073743424, 1646,
817     1073743487, 1693,       1073743520, 1775,  // NOLINT
818     1073743639, 1823,       1073743650, 1928,
819     1073743755, 1934,       1073743760, 1965,  // NOLINT
820     1073743792, 1969,       1073743863, 2049,
821     1073743875, 2053,       1073743879, 2058,  // NOLINT
822     1073743884, 2082,       1073743936, 2163,
823     1073744002, 2227,       1073744114, 2295,  // NOLINT
824     2299,       1073744138, 2341,       1073744176,
825     2374,       1073744224, 2428,       1073744260,  // NOLINT
826     2482,       2511,       1073744352, 2532,
827     1073744358, 2543,       1073744378, 2558,  // NOLINT
828     1073744384, 2600,       1073744448, 2626,
829     1073744452, 2635,       1073744480, 2678,  // NOLINT
830     2682,       1073744510, 2735,       2737,
831     1073744565, 2742,       1073744569, 2749,  // NOLINT
832     2752,       2754,       1073744603, 2781,
833     1073744608, 2794,       1073744626, 2804,  // NOLINT
834     1073744641, 2822,       1073744649, 2830,
835     1073744657, 2838,       1073744672, 2854,  // NOLINT
836     1073744680, 2862,       1073744688, 2906,
837     1073744732, 2911,       1073744740, 2917,   // NOLINT
838     1073744832, 3042,       1073744896, 8191};  // NOLINT
839 static const uint16_t kLetterTable6Size = 6;
840 static const int32_t kLetterTable6[6] = {
841   1073741824, 6051, 1073747888, 6086, 1073747915, 6139 };  // NOLINT
842 static const uint16_t kLetterTable7Size = 48;
843 static const int32_t kLetterTable7[48] = {
844   1073748224, 6765, 1073748592, 6873, 1073748736, 6918, 1073748755, 6935,  // NOLINT
845   6941, 1073748767, 6952, 1073748778, 6966, 1073748792, 6972, 6974,  // NOLINT
846   1073748800, 6977, 1073748803, 6980, 1073748806, 7089, 1073748947, 7485,  // NOLINT
847   1073749328, 7567, 1073749394, 7623, 1073749488, 7675, 1073749616, 7796,  // NOLINT
848   1073749622, 7932, 1073749793, 7994, 1073749825, 8026, 1073749862, 8126,  // NOLINT
849   1073749954, 8135, 1073749962, 8143, 1073749970, 8151, 1073749978, 8156 };  // NOLINT
Is(uchar c)850 bool Letter::Is(uchar c) {
851   int chunk_index = c >> 13;
852   switch (chunk_index) {
853     case 0: return LookupPredicate(kLetterTable0,
854                                        kLetterTable0Size,
855                                        c);
856     case 1: return LookupPredicate(kLetterTable1,
857                                        kLetterTable1Size,
858                                        c);
859     case 2: return LookupPredicate(kLetterTable2,
860                                        kLetterTable2Size,
861                                        c);
862     case 3: return LookupPredicate(kLetterTable3,
863                                        kLetterTable3Size,
864                                        c);
865     case 4: return LookupPredicate(kLetterTable4,
866                                        kLetterTable4Size,
867                                        c);
868     case 5: return LookupPredicate(kLetterTable5,
869                                        kLetterTable5Size,
870                                        c);
871     case 6: return LookupPredicate(kLetterTable6,
872                                        kLetterTable6Size,
873                                        c);
874     case 7: return LookupPredicate(kLetterTable7,
875                                        kLetterTable7Size,
876                                        c);
877     default: return false;
878   }
879 }
880 
881 
882 // ID_Start:             ((point.category in ['Lu', 'Ll', 'Lt', 'Lm', 'Lo',
883 // 'Nl'] or 'Other_ID_Start' in point.properties) and ('Pattern_Syntax' not in
884 // point.properties) and ('Pattern_White_Space' not in point.properties)) or
885 // ('JS_ID_Start' in point.properties)
886 
887 static const uint16_t kID_StartTable0Size = 434;
888 static const int32_t kID_StartTable0[434] = {
889     36,         1073741889, 90,         92,
890     95,         1073741921, 122,        170,  // NOLINT
891     181,        186,        1073742016, 214,
892     1073742040, 246,        1073742072, 705,  // NOLINT
893     1073742534, 721,        1073742560, 740,
894     748,        750,        1073742704, 884,  // NOLINT
895     1073742710, 887,        1073742714, 893,
896     895,        902,        1073742728, 906,  // NOLINT
897     908,        1073742734, 929,        1073742755,
898     1013,       1073742839, 1153,       1073742986,  // NOLINT
899     1327,       1073743153, 1366,       1369,
900     1073743201, 1415,       1073743312, 1514,  // NOLINT
901     1073743344, 1522,       1073743392, 1610,
902     1073743470, 1647,       1073743473, 1747,  // NOLINT
903     1749,       1073743589, 1766,       1073743598,
904     1775,       1073743610, 1788,       1791,  // NOLINT
905     1808,       1073743634, 1839,       1073743693,
906     1957,       1969,       1073743818, 2026,  // NOLINT
907     1073743860, 2037,       2042,       1073743872,
908     2069,       2074,       2084,       2088,  // NOLINT
909     1073743936, 2136,       1073744032, 2226,
910     1073744132, 2361,       2365,       2384,  // NOLINT
911     1073744216, 2401,       1073744241, 2432,
912     1073744261, 2444,       1073744271, 2448,  // NOLINT
913     1073744275, 2472,       1073744298, 2480,
914     2482,       1073744310, 2489,       2493,  // NOLINT
915     2510,       1073744348, 2525,       1073744351,
916     2529,       1073744368, 2545,       1073744389,  // NOLINT
917     2570,       1073744399, 2576,       1073744403,
918     2600,       1073744426, 2608,       1073744434,  // NOLINT
919     2611,       1073744437, 2614,       1073744440,
920     2617,       1073744473, 2652,       2654,  // NOLINT
921     1073744498, 2676,       1073744517, 2701,
922     1073744527, 2705,       1073744531, 2728,  // NOLINT
923     1073744554, 2736,       1073744562, 2739,
924     1073744565, 2745,       2749,       2768,  // NOLINT
925     1073744608, 2785,       1073744645, 2828,
926     1073744655, 2832,       1073744659, 2856,  // NOLINT
927     1073744682, 2864,       1073744690, 2867,
928     1073744693, 2873,       2877,       1073744732,  // NOLINT
929     2909,       1073744735, 2913,       2929,
930     2947,       1073744773, 2954,       1073744782,  // NOLINT
931     2960,       1073744786, 2965,       1073744793,
932     2970,       2972,       1073744798, 2975,  // NOLINT
933     1073744803, 2980,       1073744808, 2986,
934     1073744814, 3001,       3024,       1073744901,  // NOLINT
935     3084,       1073744910, 3088,       1073744914,
936     3112,       1073744938, 3129,       3133,  // NOLINT
937     1073744984, 3161,       1073744992, 3169,
938     1073745029, 3212,       1073745038, 3216,  // NOLINT
939     1073745042, 3240,       1073745066, 3251,
940     1073745077, 3257,       3261,       3294,  // NOLINT
941     1073745120, 3297,       1073745137, 3314,
942     1073745157, 3340,       1073745166, 3344,  // NOLINT
943     1073745170, 3386,       3389,       3406,
944     1073745248, 3425,       1073745274, 3455,  // NOLINT
945     1073745285, 3478,       1073745306, 3505,
946     1073745331, 3515,       3517,       1073745344,  // NOLINT
947     3526,       1073745409, 3632,       1073745458,
948     3635,       1073745472, 3654,       1073745537,  // NOLINT
949     3714,       3716,       1073745543, 3720,
950     3722,       3725,       1073745556, 3735,  // NOLINT
951     1073745561, 3743,       1073745569, 3747,
952     3749,       3751,       1073745578, 3755,  // NOLINT
953     1073745581, 3760,       1073745586, 3763,
954     3773,       1073745600, 3780,       3782,  // NOLINT
955     1073745628, 3807,       3840,       1073745728,
956     3911,       1073745737, 3948,       1073745800,  // NOLINT
957     3980,       1073745920, 4138,       4159,
958     1073746000, 4181,       1073746010, 4189,  // NOLINT
959     4193,       1073746021, 4198,       1073746030,
960     4208,       1073746037, 4225,       4238,  // NOLINT
961     1073746080, 4293,       4295,       4301,
962     1073746128, 4346,       1073746172, 4680,  // NOLINT
963     1073746506, 4685,       1073746512, 4694,
964     4696,       1073746522, 4701,       1073746528,  // NOLINT
965     4744,       1073746570, 4749,       1073746576,
966     4784,       1073746610, 4789,       1073746616,  // NOLINT
967     4798,       4800,       1073746626, 4805,
968     1073746632, 4822,       1073746648, 4880,  // NOLINT
969     1073746706, 4885,       1073746712, 4954,
970     1073746816, 5007,       1073746848, 5108,  // NOLINT
971     1073746945, 5740,       1073747567, 5759,
972     1073747585, 5786,       1073747616, 5866,  // NOLINT
973     1073747694, 5880,       1073747712, 5900,
974     1073747726, 5905,       1073747744, 5937,  // NOLINT
975     1073747776, 5969,       1073747808, 5996,
976     1073747822, 6000,       1073747840, 6067,  // NOLINT
977     6103,       6108,       1073748000, 6263,
978     1073748096, 6312,       6314,       1073748144,  // NOLINT
979     6389,       1073748224, 6430,       1073748304,
980     6509,       1073748336, 6516,       1073748352,  // NOLINT
981     6571,       1073748417, 6599,       1073748480,
982     6678,       1073748512, 6740,       6823,  // NOLINT
983     1073748741, 6963,       1073748805, 6987,
984     1073748867, 7072,       1073748910, 7087,  // NOLINT
985     1073748922, 7141,       1073748992, 7203,
986     1073749069, 7247,       1073749082, 7293,  // NOLINT
987     1073749225, 7404,       1073749230, 7409,
988     1073749237, 7414,       1073749248, 7615,  // NOLINT
989     1073749504, 7957,       1073749784, 7965,
990     1073749792, 8005,       1073749832, 8013,  // NOLINT
991     1073749840, 8023,       8025,       8027,
992     8029,       1073749855, 8061,       1073749888,  // NOLINT
993     8116,       1073749942, 8124,       8126,
994     1073749954, 8132,       1073749958, 8140,  // NOLINT
995     1073749968, 8147,       1073749974, 8155,
996     1073749984, 8172,       1073750002, 8180,  // NOLINT
997     1073750006, 8188};                         // NOLINT
998 static const uint16_t kID_StartTable1Size = 84;
999 static const int32_t kID_StartTable1[84] = {
1000     113,        127,        1073741968, 156,
1001     258,        263,        1073742090, 275,  // NOLINT
1002     277,        1073742104, 285,        292,
1003     294,        296,        1073742122, 313,  // NOLINT
1004     1073742140, 319,        1073742149, 329,
1005     334,        1073742176, 392,        1073744896,  // NOLINT
1006     3118,       1073744944, 3166,       1073744992,
1007     3300,       1073745131, 3310,       1073745138,  // NOLINT
1008     3315,       1073745152, 3365,       3367,
1009     3373,       1073745200, 3431,       3439,  // NOLINT
1010     1073745280, 3478,       1073745312, 3494,
1011     1073745320, 3502,       1073745328, 3510,  // NOLINT
1012     1073745336, 3518,       1073745344, 3526,
1013     1073745352, 3534,       1073745360, 3542,  // NOLINT
1014     1073745368, 3550,       1073745925, 4103,
1015     1073745953, 4137,       1073745969, 4149,  // NOLINT
1016     1073745976, 4156,       1073745985, 4246,
1017     1073746075, 4255,       1073746081, 4346,  // NOLINT
1018     1073746172, 4351,       1073746181, 4397,
1019     1073746225, 4494,       1073746336, 4538,   // NOLINT
1020     1073746416, 4607,       1073746944, 8191};  // NOLINT
1021 static const uint16_t kID_StartTable2Size = 4;
1022 static const int32_t kID_StartTable2[4] = {1073741824, 3509, 1073745408,
1023                                            8191};  // NOLINT
1024 static const uint16_t kID_StartTable3Size = 2;
1025 static const int32_t kID_StartTable3[2] = {1073741824, 8191};  // NOLINT
1026 static const uint16_t kID_StartTable4Size = 2;
1027 static const int32_t kID_StartTable4[2] = {1073741824, 8140};  // NOLINT
1028 static const uint16_t kID_StartTable5Size = 100;
1029 static const int32_t kID_StartTable5[100] = {
1030     1073741824, 1164,       1073743056, 1277,
1031     1073743104, 1548,       1073743376, 1567,  // NOLINT
1032     1073743402, 1579,       1073743424, 1646,
1033     1073743487, 1693,       1073743520, 1775,  // NOLINT
1034     1073743639, 1823,       1073743650, 1928,
1035     1073743755, 1934,       1073743760, 1965,  // NOLINT
1036     1073743792, 1969,       1073743863, 2049,
1037     1073743875, 2053,       1073743879, 2058,  // NOLINT
1038     1073743884, 2082,       1073743936, 2163,
1039     1073744002, 2227,       1073744114, 2295,  // NOLINT
1040     2299,       1073744138, 2341,       1073744176,
1041     2374,       1073744224, 2428,       1073744260,  // NOLINT
1042     2482,       2511,       1073744352, 2532,
1043     1073744358, 2543,       1073744378, 2558,  // NOLINT
1044     1073744384, 2600,       1073744448, 2626,
1045     1073744452, 2635,       1073744480, 2678,  // NOLINT
1046     2682,       1073744510, 2735,       2737,
1047     1073744565, 2742,       1073744569, 2749,  // NOLINT
1048     2752,       2754,       1073744603, 2781,
1049     1073744608, 2794,       1073744626, 2804,  // NOLINT
1050     1073744641, 2822,       1073744649, 2830,
1051     1073744657, 2838,       1073744672, 2854,  // NOLINT
1052     1073744680, 2862,       1073744688, 2906,
1053     1073744732, 2911,       1073744740, 2917,   // NOLINT
1054     1073744832, 3042,       1073744896, 8191};  // NOLINT
1055 static const uint16_t kID_StartTable6Size = 6;
1056 static const int32_t kID_StartTable6[6] = {1073741824, 6051, 1073747888, 6086,
1057                                            1073747915, 6139};  // NOLINT
1058 static const uint16_t kID_StartTable7Size = 48;
1059 static const int32_t kID_StartTable7[48] = {
1060     1073748224, 6765,       1073748592, 6873,
1061     1073748736, 6918,       1073748755, 6935,  // NOLINT
1062     6941,       1073748767, 6952,       1073748778,
1063     6966,       1073748792, 6972,       6974,  // NOLINT
1064     1073748800, 6977,       1073748803, 6980,
1065     1073748806, 7089,       1073748947, 7485,  // NOLINT
1066     1073749328, 7567,       1073749394, 7623,
1067     1073749488, 7675,       1073749616, 7796,  // NOLINT
1068     1073749622, 7932,       1073749793, 7994,
1069     1073749825, 8026,       1073749862, 8126,  // NOLINT
1070     1073749954, 8135,       1073749962, 8143,
1071     1073749970, 8151,       1073749978, 8156};  // NOLINT
Is(uchar c)1072 bool ID_Start::Is(uchar c) {
1073   int chunk_index = c >> 13;
1074   switch (chunk_index) {
1075     case 0:
1076       return LookupPredicate(kID_StartTable0, kID_StartTable0Size, c);
1077     case 1:
1078       return LookupPredicate(kID_StartTable1, kID_StartTable1Size, c);
1079     case 2:
1080       return LookupPredicate(kID_StartTable2, kID_StartTable2Size, c);
1081     case 3:
1082       return LookupPredicate(kID_StartTable3, kID_StartTable3Size, c);
1083     case 4:
1084       return LookupPredicate(kID_StartTable4, kID_StartTable4Size, c);
1085     case 5:
1086       return LookupPredicate(kID_StartTable5, kID_StartTable5Size, c);
1087     case 6:
1088       return LookupPredicate(kID_StartTable6, kID_StartTable6Size, c);
1089     case 7:
1090       return LookupPredicate(kID_StartTable7, kID_StartTable7Size, c);
1091     default:
1092       return false;
1093   }
1094 }
1095 
1096 
1097 // ID_Continue:          point.category in ['Nd', 'Mn', 'Mc', 'Pc'] or
1098 // 'Other_ID_Continue' in point.properties or 'JS_ID_Continue' in
1099 // point.properties
1100 
1101 static const uint16_t kID_ContinueTable0Size = 315;
1102 static const int32_t kID_ContinueTable0[315] = {
1103     1073741872, 57,         95,         183,
1104     1073742592, 879,        903,        1073742979,  // NOLINT
1105     1159,       1073743249, 1469,       1471,
1106     1073743297, 1474,       1073743300, 1477,  // NOLINT
1107     1479,       1073743376, 1562,       1073743435,
1108     1641,       1648,       1073743574, 1756,  // NOLINT
1109     1073743583, 1764,       1073743591, 1768,
1110     1073743594, 1773,       1073743600, 1785,  // NOLINT
1111     1809,       1073743664, 1866,       1073743782,
1112     1968,       1073743808, 1993,       1073743851,  // NOLINT
1113     2035,       1073743894, 2073,       1073743899,
1114     2083,       1073743909, 2087,       1073743913,  // NOLINT
1115     2093,       1073743961, 2139,       1073744100,
1116     2307,       1073744186, 2364,       1073744190,  // NOLINT
1117     2383,       1073744209, 2391,       1073744226,
1118     2403,       1073744230, 2415,       1073744257,  // NOLINT
1119     2435,       2492,       1073744318, 2500,
1120     1073744327, 2504,       1073744331, 2509,  // NOLINT
1121     2519,       1073744354, 2531,       1073744358,
1122     2543,       1073744385, 2563,       2620,  // NOLINT
1123     1073744446, 2626,       1073744455, 2632,
1124     1073744459, 2637,       2641,       1073744486,  // NOLINT
1125     2673,       2677,       1073744513, 2691,
1126     2748,       1073744574, 2757,       1073744583,  // NOLINT
1127     2761,       1073744587, 2765,       1073744610,
1128     2787,       1073744614, 2799,       1073744641,  // NOLINT
1129     2819,       2876,       1073744702, 2884,
1130     1073744711, 2888,       1073744715, 2893,  // NOLINT
1131     1073744726, 2903,       1073744738, 2915,
1132     1073744742, 2927,       2946,       1073744830,  // NOLINT
1133     3010,       1073744838, 3016,       1073744842,
1134     3021,       3031,       1073744870, 3055,  // NOLINT
1135     1073744896, 3075,       1073744958, 3140,
1136     1073744966, 3144,       1073744970, 3149,  // NOLINT
1137     1073744981, 3158,       1073744994, 3171,
1138     1073744998, 3183,       1073745025, 3203,  // NOLINT
1139     3260,       1073745086, 3268,       1073745094,
1140     3272,       1073745098, 3277,       1073745109,  // NOLINT
1141     3286,       1073745122, 3299,       1073745126,
1142     3311,       1073745153, 3331,       1073745214,  // NOLINT
1143     3396,       1073745222, 3400,       1073745226,
1144     3405,       3415,       1073745250, 3427,  // NOLINT
1145     1073745254, 3439,       1073745282, 3459,
1146     3530,       1073745359, 3540,       3542,  // NOLINT
1147     1073745368, 3551,       1073745382, 3567,
1148     1073745394, 3571,       3633,       1073745460,  // NOLINT
1149     3642,       1073745479, 3662,       1073745488,
1150     3673,       3761,       1073745588, 3769,  // NOLINT
1151     1073745595, 3772,       1073745608, 3789,
1152     1073745616, 3801,       1073745688, 3865,  // NOLINT
1153     1073745696, 3881,       3893,       3895,
1154     3897,       1073745726, 3903,       1073745777,  // NOLINT
1155     3972,       1073745798, 3975,       1073745805,
1156     3991,       1073745817, 4028,       4038,  // NOLINT
1157     1073745963, 4158,       1073745984, 4169,
1158     1073746006, 4185,       1073746014, 4192,  // NOLINT
1159     1073746018, 4196,       1073746023, 4205,
1160     1073746033, 4212,       1073746050, 4237,  // NOLINT
1161     1073746063, 4253,       1073746781, 4959,
1162     1073746793, 4977,       1073747730, 5908,  // NOLINT
1163     1073747762, 5940,       1073747794, 5971,
1164     1073747826, 6003,       1073747892, 6099,  // NOLINT
1165     6109,       1073747936, 6121,       1073747979,
1166     6157,       1073747984, 6169,       6313,  // NOLINT
1167     1073748256, 6443,       1073748272, 6459,
1168     1073748294, 6479,       1073748400, 6592,  // NOLINT
1169     1073748424, 6601,       1073748432, 6618,
1170     1073748503, 6683,       1073748565, 6750,  // NOLINT
1171     1073748576, 6780,       1073748607, 6793,
1172     1073748624, 6809,       1073748656, 6845,  // NOLINT
1173     1073748736, 6916,       1073748788, 6980,
1174     1073748816, 7001,       1073748843, 7027,  // NOLINT
1175     1073748864, 7042,       1073748897, 7085,
1176     1073748912, 7097,       1073748966, 7155,  // NOLINT
1177     1073749028, 7223,       1073749056, 7241,
1178     1073749072, 7257,       1073749200, 7378,  // NOLINT
1179     1073749204, 7400,       7405,       1073749234,
1180     7412,       1073749240, 7417,       1073749440,  // NOLINT
1181     7669,       1073749500, 7679};                   // NOLINT
1182 static const uint16_t kID_ContinueTable1Size = 19;
1183 static const int32_t kID_ContinueTable1[19] = {
1184     1073741836, 13,         1073741887, 64,
1185     84,         1073742032, 220,        225,  // NOLINT
1186     1073742053, 240,        1073745135, 3313,
1187     3455,       1073745376, 3583,       1073745962,  // NOLINT
1188     4143,       1073746073, 4250};                   // NOLINT
1189 static const uint16_t kID_ContinueTable5Size = 63;
1190 static const int32_t kID_ContinueTable5[63] = {
1191     1073743392, 1577,       1647,       1073743476,
1192     1661,       1695,       1073743600, 1777,  // NOLINT
1193     2050,       2054,       2059,       1073743907,
1194     2087,       1073744000, 2177,       1073744052,  // NOLINT
1195     2244,       1073744080, 2265,       1073744096,
1196     2289,       1073744128, 2313,       1073744166,  // NOLINT
1197     2349,       1073744199, 2387,       1073744256,
1198     2435,       1073744307, 2496,       1073744336,  // NOLINT
1199     2521,       2533,       1073744368, 2553,
1200     1073744425, 2614,       2627,       1073744460,  // NOLINT
1201     2637,       1073744464, 2649,       1073744507,
1202     2685,       2736,       1073744562, 2740,  // NOLINT
1203     1073744567, 2744,       1073744574, 2751,
1204     2753,       1073744619, 2799,       1073744629,  // NOLINT
1205     2806,       1073744867, 3050,       1073744876,
1206     3053,       1073744880, 3065};  // NOLINT
1207 static const uint16_t kID_ContinueTable7Size = 12;
1208 static const int32_t kID_ContinueTable7[12] = {
1209     6942, 1073749504, 7695, 1073749536,
1210     7725, 1073749555, 7732, 1073749581,  // NOLINT
1211     7759, 1073749776, 7961, 7999};       // NOLINT
Is(uchar c)1212 bool ID_Continue::Is(uchar c) {
1213   int chunk_index = c >> 13;
1214   switch (chunk_index) {
1215     case 0:
1216       return LookupPredicate(kID_ContinueTable0, kID_ContinueTable0Size, c);
1217     case 1:
1218       return LookupPredicate(kID_ContinueTable1, kID_ContinueTable1Size, c);
1219     case 5:
1220       return LookupPredicate(kID_ContinueTable5, kID_ContinueTable5Size, c);
1221     case 7:
1222       return LookupPredicate(kID_ContinueTable7, kID_ContinueTable7Size, c);
1223     default: return false;
1224   }
1225 }
1226 
1227 
1228 // WhiteSpace:           (point.category == 'Zs') or ('JS_White_Space' in
1229 // point.properties)
1230 
1231 static const uint16_t kWhiteSpaceTable0Size = 7;
1232 static const int32_t kWhiteSpaceTable0[7] = {9,   1073741835, 12,  32,
1233                                              160, 5760,       6158};  // NOLINT
1234 static const uint16_t kWhiteSpaceTable1Size = 5;
1235 static const int32_t kWhiteSpaceTable1[5] = {
1236   1073741824, 10, 47, 95, 4096 };  // NOLINT
1237 static const uint16_t kWhiteSpaceTable7Size = 1;
1238 static const int32_t kWhiteSpaceTable7[1] = {7935};  // NOLINT
Is(uchar c)1239 bool WhiteSpace::Is(uchar c) {
1240   int chunk_index = c >> 13;
1241   switch (chunk_index) {
1242     case 0: return LookupPredicate(kWhiteSpaceTable0,
1243                                        kWhiteSpaceTable0Size,
1244                                        c);
1245     case 1: return LookupPredicate(kWhiteSpaceTable1,
1246                                        kWhiteSpaceTable1Size,
1247                                        c);
1248     case 7:
1249       return LookupPredicate(kWhiteSpaceTable7, kWhiteSpaceTable7Size, c);
1250     default: return false;
1251   }
1252 }
1253 
1254 
1255 // LineTerminator:       'JS_Line_Terminator' in point.properties
1256 
1257 static const uint16_t kLineTerminatorTable0Size = 2;
1258 static const int32_t kLineTerminatorTable0[2] = {
1259   10, 13 };  // NOLINT
1260 static const uint16_t kLineTerminatorTable1Size = 2;
1261 static const int32_t kLineTerminatorTable1[2] = {
1262   1073741864, 41 };  // NOLINT
Is(uchar c)1263 bool LineTerminator::Is(uchar c) {
1264   int chunk_index = c >> 13;
1265   switch (chunk_index) {
1266     case 0: return LookupPredicate(kLineTerminatorTable0,
1267                                        kLineTerminatorTable0Size,
1268                                        c);
1269     case 1: return LookupPredicate(kLineTerminatorTable1,
1270                                        kLineTerminatorTable1Size,
1271                                        c);
1272     default: return false;
1273   }
1274 }
1275 
1276 static const MultiCharacterSpecialCase<2> kToLowercaseMultiStrings0[2] = {  // NOLINT
1277   {{105, 775}}, {{kSentinel}} }; // NOLINT
1278 static const uint16_t kToLowercaseTable0Size = 488;  // NOLINT
1279 static const int32_t kToLowercaseTable0[976] = {
1280     1073741889, 128,    90,         128,   1073742016, 128,
1281     214,        128,    1073742040, 128,   222,        128,
1282     256,        4,      258,        4,  // NOLINT
1283     260,        4,      262,        4,     264,        4,
1284     266,        4,      268,        4,     270,        4,
1285     272,        4,      274,        4,  // NOLINT
1286     276,        4,      278,        4,     280,        4,
1287     282,        4,      284,        4,     286,        4,
1288     288,        4,      290,        4,  // NOLINT
1289     292,        4,      294,        4,     296,        4,
1290     298,        4,      300,        4,     302,        4,
1291     304,        1,      306,        4,  // NOLINT
1292     308,        4,      310,        4,     313,        4,
1293     315,        4,      317,        4,     319,        4,
1294     321,        4,      323,        4,  // NOLINT
1295     325,        4,      327,        4,     330,        4,
1296     332,        4,      334,        4,     336,        4,
1297     338,        4,      340,        4,  // NOLINT
1298     342,        4,      344,        4,     346,        4,
1299     348,        4,      350,        4,     352,        4,
1300     354,        4,      356,        4,  // NOLINT
1301     358,        4,      360,        4,     362,        4,
1302     364,        4,      366,        4,     368,        4,
1303     370,        4,      372,        4,  // NOLINT
1304     374,        4,      376,        -484,  377,        4,
1305     379,        4,      381,        4,     385,        840,
1306     386,        4,      388,        4,  // NOLINT
1307     390,        824,    391,        4,     1073742217, 820,
1308     394,        820,    395,        4,     398,        316,
1309     399,        808,    400,        812,  // NOLINT
1310     401,        4,      403,        820,   404,        828,
1311     406,        844,    407,        836,   408,        4,
1312     412,        844,    413,        852,  // NOLINT
1313     415,        856,    416,        4,     418,        4,
1314     420,        4,      422,        872,   423,        4,
1315     425,        872,    428,        4,  // NOLINT
1316     430,        872,    431,        4,     1073742257, 868,
1317     434,        868,    435,        4,     437,        4,
1318     439,        876,    440,        4,  // NOLINT
1319     444,        4,      452,        8,     453,        4,
1320     455,        8,      456,        4,     458,        8,
1321     459,        4,      461,        4,  // NOLINT
1322     463,        4,      465,        4,     467,        4,
1323     469,        4,      471,        4,     473,        4,
1324     475,        4,      478,        4,  // NOLINT
1325     480,        4,      482,        4,     484,        4,
1326     486,        4,      488,        4,     490,        4,
1327     492,        4,      494,        4,  // NOLINT
1328     497,        8,      498,        4,     500,        4,
1329     502,        -388,   503,        -224,  504,        4,
1330     506,        4,      508,        4,  // NOLINT
1331     510,        4,      512,        4,     514,        4,
1332     516,        4,      518,        4,     520,        4,
1333     522,        4,      524,        4,  // NOLINT
1334     526,        4,      528,        4,     530,        4,
1335     532,        4,      534,        4,     536,        4,
1336     538,        4,      540,        4,  // NOLINT
1337     542,        4,      544,        -520,  546,        4,
1338     548,        4,      550,        4,     552,        4,
1339     554,        4,      556,        4,  // NOLINT
1340     558,        4,      560,        4,     562,        4,
1341     570,        43180,  571,        4,     573,        -652,
1342     574,        43168,  577,        4,  // NOLINT
1343     579,        -780,   580,        276,   581,        284,
1344     582,        4,      584,        4,     586,        4,
1345     588,        4,      590,        4,  // NOLINT
1346     880,        4,      882,        4,     886,        4,
1347     895,        464,    902,        152,   1073742728, 148,
1348     906,        148,    908,        256,  // NOLINT
1349     1073742734, 252,    911,        252,   1073742737, 128,
1350     929,        128,    931,        6,     1073742756, 128,
1351     939,        128,    975,        32,  // NOLINT
1352     984,        4,      986,        4,     988,        4,
1353     990,        4,      992,        4,     994,        4,
1354     996,        4,      998,        4,  // NOLINT
1355     1000,       4,      1002,       4,     1004,       4,
1356     1006,       4,      1012,       -240,  1015,       4,
1357     1017,       -28,    1018,       4,  // NOLINT
1358     1073742845, -520,   1023,       -520,  1073742848, 320,
1359     1039,       320,    1073742864, 128,   1071,       128,
1360     1120,       4,      1122,       4,  // NOLINT
1361     1124,       4,      1126,       4,     1128,       4,
1362     1130,       4,      1132,       4,     1134,       4,
1363     1136,       4,      1138,       4,  // NOLINT
1364     1140,       4,      1142,       4,     1144,       4,
1365     1146,       4,      1148,       4,     1150,       4,
1366     1152,       4,      1162,       4,  // NOLINT
1367     1164,       4,      1166,       4,     1168,       4,
1368     1170,       4,      1172,       4,     1174,       4,
1369     1176,       4,      1178,       4,  // NOLINT
1370     1180,       4,      1182,       4,     1184,       4,
1371     1186,       4,      1188,       4,     1190,       4,
1372     1192,       4,      1194,       4,  // NOLINT
1373     1196,       4,      1198,       4,     1200,       4,
1374     1202,       4,      1204,       4,     1206,       4,
1375     1208,       4,      1210,       4,  // NOLINT
1376     1212,       4,      1214,       4,     1216,       60,
1377     1217,       4,      1219,       4,     1221,       4,
1378     1223,       4,      1225,       4,  // NOLINT
1379     1227,       4,      1229,       4,     1232,       4,
1380     1234,       4,      1236,       4,     1238,       4,
1381     1240,       4,      1242,       4,  // NOLINT
1382     1244,       4,      1246,       4,     1248,       4,
1383     1250,       4,      1252,       4,     1254,       4,
1384     1256,       4,      1258,       4,  // NOLINT
1385     1260,       4,      1262,       4,     1264,       4,
1386     1266,       4,      1268,       4,     1270,       4,
1387     1272,       4,      1274,       4,  // NOLINT
1388     1276,       4,      1278,       4,     1280,       4,
1389     1282,       4,      1284,       4,     1286,       4,
1390     1288,       4,      1290,       4,  // NOLINT
1391     1292,       4,      1294,       4,     1296,       4,
1392     1298,       4,      1300,       4,     1302,       4,
1393     1304,       4,      1306,       4,  // NOLINT
1394     1308,       4,      1310,       4,     1312,       4,
1395     1314,       4,      1316,       4,     1318,       4,
1396     1320,       4,      1322,       4,  // NOLINT
1397     1324,       4,      1326,       4,     1073743153, 192,
1398     1366,       192,    1073746080, 29056, 4293,       29056,
1399     4295,       29056,  4301,       29056,  // NOLINT
1400     7680,       4,      7682,       4,     7684,       4,
1401     7686,       4,      7688,       4,     7690,       4,
1402     7692,       4,      7694,       4,  // NOLINT
1403     7696,       4,      7698,       4,     7700,       4,
1404     7702,       4,      7704,       4,     7706,       4,
1405     7708,       4,      7710,       4,  // NOLINT
1406     7712,       4,      7714,       4,     7716,       4,
1407     7718,       4,      7720,       4,     7722,       4,
1408     7724,       4,      7726,       4,  // NOLINT
1409     7728,       4,      7730,       4,     7732,       4,
1410     7734,       4,      7736,       4,     7738,       4,
1411     7740,       4,      7742,       4,  // NOLINT
1412     7744,       4,      7746,       4,     7748,       4,
1413     7750,       4,      7752,       4,     7754,       4,
1414     7756,       4,      7758,       4,  // NOLINT
1415     7760,       4,      7762,       4,     7764,       4,
1416     7766,       4,      7768,       4,     7770,       4,
1417     7772,       4,      7774,       4,  // NOLINT
1418     7776,       4,      7778,       4,     7780,       4,
1419     7782,       4,      7784,       4,     7786,       4,
1420     7788,       4,      7790,       4,  // NOLINT
1421     7792,       4,      7794,       4,     7796,       4,
1422     7798,       4,      7800,       4,     7802,       4,
1423     7804,       4,      7806,       4,  // NOLINT
1424     7808,       4,      7810,       4,     7812,       4,
1425     7814,       4,      7816,       4,     7818,       4,
1426     7820,       4,      7822,       4,  // NOLINT
1427     7824,       4,      7826,       4,     7828,       4,
1428     7838,       -30460, 7840,       4,     7842,       4,
1429     7844,       4,      7846,       4,  // NOLINT
1430     7848,       4,      7850,       4,     7852,       4,
1431     7854,       4,      7856,       4,     7858,       4,
1432     7860,       4,      7862,       4,  // NOLINT
1433     7864,       4,      7866,       4,     7868,       4,
1434     7870,       4,      7872,       4,     7874,       4,
1435     7876,       4,      7878,       4,  // NOLINT
1436     7880,       4,      7882,       4,     7884,       4,
1437     7886,       4,      7888,       4,     7890,       4,
1438     7892,       4,      7894,       4,  // NOLINT
1439     7896,       4,      7898,       4,     7900,       4,
1440     7902,       4,      7904,       4,     7906,       4,
1441     7908,       4,      7910,       4,  // NOLINT
1442     7912,       4,      7914,       4,     7916,       4,
1443     7918,       4,      7920,       4,     7922,       4,
1444     7924,       4,      7926,       4,  // NOLINT
1445     7928,       4,      7930,       4,     7932,       4,
1446     7934,       4,      1073749768, -32,   7951,       -32,
1447     1073749784, -32,    7965,       -32,  // NOLINT
1448     1073749800, -32,    7983,       -32,   1073749816, -32,
1449     7999,       -32,    1073749832, -32,   8013,       -32,
1450     8025,       -32,    8027,       -32,  // NOLINT
1451     8029,       -32,    8031,       -32,   1073749864, -32,
1452     8047,       -32,    1073749896, -32,   8079,       -32,
1453     1073749912, -32,    8095,       -32,  // NOLINT
1454     1073749928, -32,    8111,       -32,   1073749944, -32,
1455     8121,       -32,    1073749946, -296,  8123,       -296,
1456     8124,       -36,    1073749960, -344,  // NOLINT
1457     8139,       -344,   8140,       -36,   1073749976, -32,
1458     8153,       -32,    1073749978, -400,  8155,       -400,
1459     1073749992, -32,    8169,       -32,  // NOLINT
1460     1073749994, -448,   8171,       -448,  8172,       -28,
1461     1073750008, -512,   8185,       -512,  1073750010, -504,
1462     8187,       -504,   8188,       -36};                 // NOLINT
1463 static const uint16_t kToLowercaseMultiStrings0Size = 2;  // NOLINT
1464 static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings1[1] = {  // NOLINT
1465   {{kSentinel}} }; // NOLINT
1466 static const uint16_t kToLowercaseTable1Size = 79;  // NOLINT
1467 static const int32_t kToLowercaseTable1[158] = {
1468   294, -30068, 298, -33532, 299, -33048, 306, 112, 1073742176, 64, 367, 64, 387, 4, 1073743030, 104,  // NOLINT
1469   1231, 104, 1073744896, 192, 3118, 192, 3168, 4, 3170, -42972, 3171, -15256, 3172, -42908, 3175, 4,  // NOLINT
1470   3177, 4, 3179, 4, 3181, -43120, 3182, -42996, 3183, -43132, 3184, -43128, 3186, 4, 3189, 4,  // NOLINT
1471   1073745022, -43260, 3199, -43260, 3200, 4, 3202, 4, 3204, 4, 3206, 4, 3208, 4, 3210, 4,  // NOLINT
1472   3212, 4, 3214, 4, 3216, 4, 3218, 4, 3220, 4, 3222, 4, 3224, 4, 3226, 4,  // NOLINT
1473   3228, 4, 3230, 4, 3232, 4, 3234, 4, 3236, 4, 3238, 4, 3240, 4, 3242, 4,  // NOLINT
1474   3244, 4, 3246, 4, 3248, 4, 3250, 4, 3252, 4, 3254, 4, 3256, 4, 3258, 4,  // NOLINT
1475   3260, 4, 3262, 4, 3264, 4, 3266, 4, 3268, 4, 3270, 4, 3272, 4, 3274, 4,  // NOLINT
1476   3276, 4, 3278, 4, 3280, 4, 3282, 4, 3284, 4, 3286, 4, 3288, 4, 3290, 4,  // NOLINT
1477   3292, 4, 3294, 4, 3296, 4, 3298, 4, 3307, 4, 3309, 4, 3314, 4 };  // NOLINT
1478 static const uint16_t kToLowercaseMultiStrings1Size = 1;  // NOLINT
1479 static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings5[1] = {  // NOLINT
1480   {{kSentinel}} }; // NOLINT
1481 static const uint16_t kToLowercaseTable5Size = 103;  // NOLINT
1482 static const int32_t kToLowercaseTable5[206] = {
1483     1600, 4,       1602, 4,       1604, 4,       1606, 4,
1484     1608, 4,       1610, 4,       1612, 4,       1614, 4,  // NOLINT
1485     1616, 4,       1618, 4,       1620, 4,       1622, 4,
1486     1624, 4,       1626, 4,       1628, 4,       1630, 4,  // NOLINT
1487     1632, 4,       1634, 4,       1636, 4,       1638, 4,
1488     1640, 4,       1642, 4,       1644, 4,       1664, 4,  // NOLINT
1489     1666, 4,       1668, 4,       1670, 4,       1672, 4,
1490     1674, 4,       1676, 4,       1678, 4,       1680, 4,  // NOLINT
1491     1682, 4,       1684, 4,       1686, 4,       1688, 4,
1492     1690, 4,       1826, 4,       1828, 4,       1830, 4,  // NOLINT
1493     1832, 4,       1834, 4,       1836, 4,       1838, 4,
1494     1842, 4,       1844, 4,       1846, 4,       1848, 4,  // NOLINT
1495     1850, 4,       1852, 4,       1854, 4,       1856, 4,
1496     1858, 4,       1860, 4,       1862, 4,       1864, 4,  // NOLINT
1497     1866, 4,       1868, 4,       1870, 4,       1872, 4,
1498     1874, 4,       1876, 4,       1878, 4,       1880, 4,  // NOLINT
1499     1882, 4,       1884, 4,       1886, 4,       1888, 4,
1500     1890, 4,       1892, 4,       1894, 4,       1896, 4,  // NOLINT
1501     1898, 4,       1900, 4,       1902, 4,       1913, 4,
1502     1915, 4,       1917, -141328, 1918, 4,       1920, 4,  // NOLINT
1503     1922, 4,       1924, 4,       1926, 4,       1931, 4,
1504     1933, -169120, 1936, 4,       1938, 4,       1942, 4,  // NOLINT
1505     1944, 4,       1946, 4,       1948, 4,       1950, 4,
1506     1952, 4,       1954, 4,       1956, 4,       1958, 4,  // NOLINT
1507     1960, 4,       1962, -169232, 1963, -169276, 1964, -169260,
1508     1965, -169220, 1968, -169032, 1969, -169128};         // NOLINT
1509 static const uint16_t kToLowercaseMultiStrings5Size = 1;  // NOLINT
1510 static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings7[1] = {  // NOLINT
1511   {{kSentinel}} }; // NOLINT
1512 static const uint16_t kToLowercaseTable7Size = 2;  // NOLINT
1513 static const int32_t kToLowercaseTable7[4] = {
1514   1073749793, 128, 7994, 128 };  // NOLINT
1515 static const uint16_t kToLowercaseMultiStrings7Size = 1;  // NOLINT
Convert(uchar c,uchar n,uchar * result,bool * allow_caching_ptr)1516 int ToLowercase::Convert(uchar c,
1517                       uchar n,
1518                       uchar* result,
1519                       bool* allow_caching_ptr) {
1520   int chunk_index = c >> 13;
1521   switch (chunk_index) {
1522     case 0: return LookupMapping<true>(kToLowercaseTable0,
1523                                            kToLowercaseTable0Size,
1524                                            kToLowercaseMultiStrings0,
1525                                            c,
1526                                            n,
1527                                            result,
1528                                            allow_caching_ptr);
1529     case 1: return LookupMapping<true>(kToLowercaseTable1,
1530                                            kToLowercaseTable1Size,
1531                                            kToLowercaseMultiStrings1,
1532                                            c,
1533                                            n,
1534                                            result,
1535                                            allow_caching_ptr);
1536     case 5: return LookupMapping<true>(kToLowercaseTable5,
1537                                            kToLowercaseTable5Size,
1538                                            kToLowercaseMultiStrings5,
1539                                            c,
1540                                            n,
1541                                            result,
1542                                            allow_caching_ptr);
1543     case 7: return LookupMapping<true>(kToLowercaseTable7,
1544                                            kToLowercaseTable7Size,
1545                                            kToLowercaseMultiStrings7,
1546                                            c,
1547                                            n,
1548                                            result,
1549                                            allow_caching_ptr);
1550     default: return 0;
1551   }
1552 }
1553 
1554 static const MultiCharacterSpecialCase<3> kToUppercaseMultiStrings0[62] = {  // NOLINT
1555   {{83, 83, kSentinel}}, {{700, 78, kSentinel}}, {{74, 780, kSentinel}}, {{921, 776, 769}},  // NOLINT
1556   {{933, 776, 769}}, {{1333, 1362, kSentinel}}, {{72, 817, kSentinel}}, {{84, 776, kSentinel}},  // NOLINT
1557   {{87, 778, kSentinel}}, {{89, 778, kSentinel}}, {{65, 702, kSentinel}}, {{933, 787, kSentinel}},  // NOLINT
1558   {{933, 787, 768}}, {{933, 787, 769}}, {{933, 787, 834}}, {{7944, 921, kSentinel}},  // NOLINT
1559   {{7945, 921, kSentinel}}, {{7946, 921, kSentinel}}, {{7947, 921, kSentinel}}, {{7948, 921, kSentinel}},  // NOLINT
1560   {{7949, 921, kSentinel}}, {{7950, 921, kSentinel}}, {{7951, 921, kSentinel}}, {{7976, 921, kSentinel}},  // NOLINT
1561   {{7977, 921, kSentinel}}, {{7978, 921, kSentinel}}, {{7979, 921, kSentinel}}, {{7980, 921, kSentinel}},  // NOLINT
1562   {{7981, 921, kSentinel}}, {{7982, 921, kSentinel}}, {{7983, 921, kSentinel}}, {{8040, 921, kSentinel}},  // NOLINT
1563   {{8041, 921, kSentinel}}, {{8042, 921, kSentinel}}, {{8043, 921, kSentinel}}, {{8044, 921, kSentinel}},  // NOLINT
1564   {{8045, 921, kSentinel}}, {{8046, 921, kSentinel}}, {{8047, 921, kSentinel}}, {{8122, 921, kSentinel}},  // NOLINT
1565   {{913, 921, kSentinel}}, {{902, 921, kSentinel}}, {{913, 834, kSentinel}}, {{913, 834, 921}},  // NOLINT
1566   {{8138, 921, kSentinel}}, {{919, 921, kSentinel}}, {{905, 921, kSentinel}}, {{919, 834, kSentinel}},  // NOLINT
1567   {{919, 834, 921}}, {{921, 776, 768}}, {{921, 834, kSentinel}}, {{921, 776, 834}},  // NOLINT
1568   {{933, 776, 768}}, {{929, 787, kSentinel}}, {{933, 834, kSentinel}}, {{933, 776, 834}},  // NOLINT
1569   {{8186, 921, kSentinel}}, {{937, 921, kSentinel}}, {{911, 921, kSentinel}}, {{937, 834, kSentinel}},  // NOLINT
1570   {{937, 834, 921}}, {{kSentinel}} }; // NOLINT
1571 static const uint16_t kToUppercaseTable0Size = 590;  // NOLINT
1572 static const int32_t kToUppercaseTable0[1180] = {
1573     1073741921, -128,   122,        -128,   181,        2972,
1574     223,        1,      1073742048, -128,   246,        -128,
1575     1073742072, -128,   254,        -128,  // NOLINT
1576     255,        484,    257,        -4,     259,        -4,
1577     261,        -4,     263,        -4,     265,        -4,
1578     267,        -4,     269,        -4,  // NOLINT
1579     271,        -4,     273,        -4,     275,        -4,
1580     277,        -4,     279,        -4,     281,        -4,
1581     283,        -4,     285,        -4,  // NOLINT
1582     287,        -4,     289,        -4,     291,        -4,
1583     293,        -4,     295,        -4,     297,        -4,
1584     299,        -4,     301,        -4,  // NOLINT
1585     303,        -4,     305,        -928,   307,        -4,
1586     309,        -4,     311,        -4,     314,        -4,
1587     316,        -4,     318,        -4,  // NOLINT
1588     320,        -4,     322,        -4,     324,        -4,
1589     326,        -4,     328,        -4,     329,        5,
1590     331,        -4,     333,        -4,  // NOLINT
1591     335,        -4,     337,        -4,     339,        -4,
1592     341,        -4,     343,        -4,     345,        -4,
1593     347,        -4,     349,        -4,  // NOLINT
1594     351,        -4,     353,        -4,     355,        -4,
1595     357,        -4,     359,        -4,     361,        -4,
1596     363,        -4,     365,        -4,  // NOLINT
1597     367,        -4,     369,        -4,     371,        -4,
1598     373,        -4,     375,        -4,     378,        -4,
1599     380,        -4,     382,        -4,  // NOLINT
1600     383,        -1200,  384,        780,    387,        -4,
1601     389,        -4,     392,        -4,     396,        -4,
1602     402,        -4,     405,        388,  // NOLINT
1603     409,        -4,     410,        652,    414,        520,
1604     417,        -4,     419,        -4,     421,        -4,
1605     424,        -4,     429,        -4,  // NOLINT
1606     432,        -4,     436,        -4,     438,        -4,
1607     441,        -4,     445,        -4,     447,        224,
1608     453,        -4,     454,        -8,  // NOLINT
1609     456,        -4,     457,        -8,     459,        -4,
1610     460,        -8,     462,        -4,     464,        -4,
1611     466,        -4,     468,        -4,  // NOLINT
1612     470,        -4,     472,        -4,     474,        -4,
1613     476,        -4,     477,        -316,   479,        -4,
1614     481,        -4,     483,        -4,  // NOLINT
1615     485,        -4,     487,        -4,     489,        -4,
1616     491,        -4,     493,        -4,     495,        -4,
1617     496,        9,      498,        -4,  // NOLINT
1618     499,        -8,     501,        -4,     505,        -4,
1619     507,        -4,     509,        -4,     511,        -4,
1620     513,        -4,     515,        -4,  // NOLINT
1621     517,        -4,     519,        -4,     521,        -4,
1622     523,        -4,     525,        -4,     527,        -4,
1623     529,        -4,     531,        -4,  // NOLINT
1624     533,        -4,     535,        -4,     537,        -4,
1625     539,        -4,     541,        -4,     543,        -4,
1626     547,        -4,     549,        -4,  // NOLINT
1627     551,        -4,     553,        -4,     555,        -4,
1628     557,        -4,     559,        -4,     561,        -4,
1629     563,        -4,     572,        -4,  // NOLINT
1630     1073742399, 43260,  576,        43260,  578,        -4,
1631     583,        -4,     585,        -4,     587,        -4,
1632     589,        -4,     591,        -4,  // NOLINT
1633     592,        43132,  593,        43120,  594,        43128,
1634     595,        -840,   596,        -824,   1073742422, -820,
1635     599,        -820,   601,        -808,  // NOLINT
1636     603,        -812,   604,        169276, 608,        -820,
1637     609,        169260, 611,        -828,   613,        169120,
1638     614,        169232, 616,        -836,  // NOLINT
1639     617,        -844,   619,        42972,  620,        169220,
1640     623,        -844,   625,        42996,  626,        -852,
1641     629,        -856,   637,        42908,  // NOLINT
1642     640,        -872,   643,        -872,   647,        169128,
1643     648,        -872,   649,        -276,   1073742474, -868,
1644     651,        -868,   652,        -284,  // NOLINT
1645     658,        -876,   670,        169032, 837,        336,
1646     881,        -4,     883,        -4,     887,        -4,
1647     1073742715, 520,    893,        520,  // NOLINT
1648     912,        13,     940,        -152,   1073742765, -148,
1649     943,        -148,   944,        17,     1073742769, -128,
1650     961,        -128,   962,        -124,  // NOLINT
1651     1073742787, -128,   971,        -128,   972,        -256,
1652     1073742797, -252,   974,        -252,   976,        -248,
1653     977,        -228,   981,        -188,  // NOLINT
1654     982,        -216,   983,        -32,    985,        -4,
1655     987,        -4,     989,        -4,     991,        -4,
1656     993,        -4,     995,        -4,  // NOLINT
1657     997,        -4,     999,        -4,     1001,       -4,
1658     1003,       -4,     1005,       -4,     1007,       -4,
1659     1008,       -344,   1009,       -320,  // NOLINT
1660     1010,       28,     1011,       -464,   1013,       -384,
1661     1016,       -4,     1019,       -4,     1073742896, -128,
1662     1103,       -128,   1073742928, -320,  // NOLINT
1663     1119,       -320,   1121,       -4,     1123,       -4,
1664     1125,       -4,     1127,       -4,     1129,       -4,
1665     1131,       -4,     1133,       -4,  // NOLINT
1666     1135,       -4,     1137,       -4,     1139,       -4,
1667     1141,       -4,     1143,       -4,     1145,       -4,
1668     1147,       -4,     1149,       -4,  // NOLINT
1669     1151,       -4,     1153,       -4,     1163,       -4,
1670     1165,       -4,     1167,       -4,     1169,       -4,
1671     1171,       -4,     1173,       -4,  // NOLINT
1672     1175,       -4,     1177,       -4,     1179,       -4,
1673     1181,       -4,     1183,       -4,     1185,       -4,
1674     1187,       -4,     1189,       -4,  // NOLINT
1675     1191,       -4,     1193,       -4,     1195,       -4,
1676     1197,       -4,     1199,       -4,     1201,       -4,
1677     1203,       -4,     1205,       -4,  // NOLINT
1678     1207,       -4,     1209,       -4,     1211,       -4,
1679     1213,       -4,     1215,       -4,     1218,       -4,
1680     1220,       -4,     1222,       -4,  // NOLINT
1681     1224,       -4,     1226,       -4,     1228,       -4,
1682     1230,       -4,     1231,       -60,    1233,       -4,
1683     1235,       -4,     1237,       -4,  // NOLINT
1684     1239,       -4,     1241,       -4,     1243,       -4,
1685     1245,       -4,     1247,       -4,     1249,       -4,
1686     1251,       -4,     1253,       -4,  // NOLINT
1687     1255,       -4,     1257,       -4,     1259,       -4,
1688     1261,       -4,     1263,       -4,     1265,       -4,
1689     1267,       -4,     1269,       -4,  // NOLINT
1690     1271,       -4,     1273,       -4,     1275,       -4,
1691     1277,       -4,     1279,       -4,     1281,       -4,
1692     1283,       -4,     1285,       -4,  // NOLINT
1693     1287,       -4,     1289,       -4,     1291,       -4,
1694     1293,       -4,     1295,       -4,     1297,       -4,
1695     1299,       -4,     1301,       -4,  // NOLINT
1696     1303,       -4,     1305,       -4,     1307,       -4,
1697     1309,       -4,     1311,       -4,     1313,       -4,
1698     1315,       -4,     1317,       -4,  // NOLINT
1699     1319,       -4,     1321,       -4,     1323,       -4,
1700     1325,       -4,     1327,       -4,     1073743201, -192,
1701     1414,       -192,   1415,       21,  // NOLINT
1702     7545,       141328, 7549,       15256,  7681,       -4,
1703     7683,       -4,     7685,       -4,     7687,       -4,
1704     7689,       -4,     7691,       -4,  // NOLINT
1705     7693,       -4,     7695,       -4,     7697,       -4,
1706     7699,       -4,     7701,       -4,     7703,       -4,
1707     7705,       -4,     7707,       -4,  // NOLINT
1708     7709,       -4,     7711,       -4,     7713,       -4,
1709     7715,       -4,     7717,       -4,     7719,       -4,
1710     7721,       -4,     7723,       -4,  // NOLINT
1711     7725,       -4,     7727,       -4,     7729,       -4,
1712     7731,       -4,     7733,       -4,     7735,       -4,
1713     7737,       -4,     7739,       -4,  // NOLINT
1714     7741,       -4,     7743,       -4,     7745,       -4,
1715     7747,       -4,     7749,       -4,     7751,       -4,
1716     7753,       -4,     7755,       -4,  // NOLINT
1717     7757,       -4,     7759,       -4,     7761,       -4,
1718     7763,       -4,     7765,       -4,     7767,       -4,
1719     7769,       -4,     7771,       -4,  // NOLINT
1720     7773,       -4,     7775,       -4,     7777,       -4,
1721     7779,       -4,     7781,       -4,     7783,       -4,
1722     7785,       -4,     7787,       -4,  // NOLINT
1723     7789,       -4,     7791,       -4,     7793,       -4,
1724     7795,       -4,     7797,       -4,     7799,       -4,
1725     7801,       -4,     7803,       -4,  // NOLINT
1726     7805,       -4,     7807,       -4,     7809,       -4,
1727     7811,       -4,     7813,       -4,     7815,       -4,
1728     7817,       -4,     7819,       -4,  // NOLINT
1729     7821,       -4,     7823,       -4,     7825,       -4,
1730     7827,       -4,     7829,       -4,     7830,       25,
1731     7831,       29,     7832,       33,  // NOLINT
1732     7833,       37,     7834,       41,     7835,       -236,
1733     7841,       -4,     7843,       -4,     7845,       -4,
1734     7847,       -4,     7849,       -4,  // NOLINT
1735     7851,       -4,     7853,       -4,     7855,       -4,
1736     7857,       -4,     7859,       -4,     7861,       -4,
1737     7863,       -4,     7865,       -4,  // NOLINT
1738     7867,       -4,     7869,       -4,     7871,       -4,
1739     7873,       -4,     7875,       -4,     7877,       -4,
1740     7879,       -4,     7881,       -4,  // NOLINT
1741     7883,       -4,     7885,       -4,     7887,       -4,
1742     7889,       -4,     7891,       -4,     7893,       -4,
1743     7895,       -4,     7897,       -4,  // NOLINT
1744     7899,       -4,     7901,       -4,     7903,       -4,
1745     7905,       -4,     7907,       -4,     7909,       -4,
1746     7911,       -4,     7913,       -4,  // NOLINT
1747     7915,       -4,     7917,       -4,     7919,       -4,
1748     7921,       -4,     7923,       -4,     7925,       -4,
1749     7927,       -4,     7929,       -4,  // NOLINT
1750     7931,       -4,     7933,       -4,     7935,       -4,
1751     1073749760, 32,     7943,       32,     1073749776, 32,
1752     7957,       32,     1073749792, 32,  // NOLINT
1753     7975,       32,     1073749808, 32,     7991,       32,
1754     1073749824, 32,     8005,       32,     8016,       45,
1755     8017,       32,     8018,       49,  // NOLINT
1756     8019,       32,     8020,       53,     8021,       32,
1757     8022,       57,     8023,       32,     1073749856, 32,
1758     8039,       32,     1073749872, 296,  // NOLINT
1759     8049,       296,    1073749874, 344,    8053,       344,
1760     1073749878, 400,    8055,       400,    1073749880, 512,
1761     8057,       512,    1073749882, 448,  // NOLINT
1762     8059,       448,    1073749884, 504,    8061,       504,
1763     8064,       61,     8065,       65,     8066,       69,
1764     8067,       73,     8068,       77,  // NOLINT
1765     8069,       81,     8070,       85,     8071,       89,
1766     8072,       61,     8073,       65,     8074,       69,
1767     8075,       73,     8076,       77,  // NOLINT
1768     8077,       81,     8078,       85,     8079,       89,
1769     8080,       93,     8081,       97,     8082,       101,
1770     8083,       105,    8084,       109,  // NOLINT
1771     8085,       113,    8086,       117,    8087,       121,
1772     8088,       93,     8089,       97,     8090,       101,
1773     8091,       105,    8092,       109,  // NOLINT
1774     8093,       113,    8094,       117,    8095,       121,
1775     8096,       125,    8097,       129,    8098,       133,
1776     8099,       137,    8100,       141,  // NOLINT
1777     8101,       145,    8102,       149,    8103,       153,
1778     8104,       125,    8105,       129,    8106,       133,
1779     8107,       137,    8108,       141,  // NOLINT
1780     8109,       145,    8110,       149,    8111,       153,
1781     1073749936, 32,     8113,       32,     8114,       157,
1782     8115,       161,    8116,       165,  // NOLINT
1783     8118,       169,    8119,       173,    8124,       161,
1784     8126,       -28820, 8130,       177,    8131,       181,
1785     8132,       185,    8134,       189,  // NOLINT
1786     8135,       193,    8140,       181,    1073749968, 32,
1787     8145,       32,     8146,       197,    8147,       13,
1788     8150,       201,    8151,       205,  // NOLINT
1789     1073749984, 32,     8161,       32,     8162,       209,
1790     8163,       17,     8164,       213,    8165,       28,
1791     8166,       217,    8167,       221,  // NOLINT
1792     8178,       225,    8179,       229,    8180,       233,
1793     8182,       237,    8183,       241,    8188,       229};  // NOLINT
1794 static const uint16_t kToUppercaseMultiStrings0Size = 62;  // NOLINT
1795 static const MultiCharacterSpecialCase<1> kToUppercaseMultiStrings1[1] = {  // NOLINT
1796   {{kSentinel}} }; // NOLINT
1797 static const uint16_t kToUppercaseTable1Size = 73;  // NOLINT
1798 static const int32_t kToUppercaseTable1[146] = {
1799   334, -112, 1073742192, -64, 383, -64, 388, -4, 1073743056, -104, 1257, -104, 1073744944, -192, 3166, -192,  // NOLINT
1800   3169, -4, 3173, -43180, 3174, -43168, 3176, -4, 3178, -4, 3180, -4, 3187, -4, 3190, -4,  // NOLINT
1801   3201, -4, 3203, -4, 3205, -4, 3207, -4, 3209, -4, 3211, -4, 3213, -4, 3215, -4,  // NOLINT
1802   3217, -4, 3219, -4, 3221, -4, 3223, -4, 3225, -4, 3227, -4, 3229, -4, 3231, -4,  // NOLINT
1803   3233, -4, 3235, -4, 3237, -4, 3239, -4, 3241, -4, 3243, -4, 3245, -4, 3247, -4,  // NOLINT
1804   3249, -4, 3251, -4, 3253, -4, 3255, -4, 3257, -4, 3259, -4, 3261, -4, 3263, -4,  // NOLINT
1805   3265, -4, 3267, -4, 3269, -4, 3271, -4, 3273, -4, 3275, -4, 3277, -4, 3279, -4,  // NOLINT
1806   3281, -4, 3283, -4, 3285, -4, 3287, -4, 3289, -4, 3291, -4, 3293, -4, 3295, -4,  // NOLINT
1807   3297, -4, 3299, -4, 3308, -4, 3310, -4, 3315, -4, 1073745152, -29056, 3365, -29056, 3367, -29056,  // NOLINT
1808   3373, -29056 };  // NOLINT
1809 static const uint16_t kToUppercaseMultiStrings1Size = 1;  // NOLINT
1810 static const MultiCharacterSpecialCase<1> kToUppercaseMultiStrings5[1] = {  // NOLINT
1811   {{kSentinel}} }; // NOLINT
1812 static const uint16_t kToUppercaseTable5Size = 95;  // NOLINT
1813 static const int32_t
1814     kToUppercaseTable5[190] = {1601, -4, 1603, -4, 1605, -4, 1607, -4, 1609, -4,
1815                                1611, -4, 1613, -4, 1615, -4,  // NOLINT
1816                                1617, -4, 1619, -4, 1621, -4, 1623, -4, 1625, -4,
1817                                1627, -4, 1629, -4, 1631, -4,  // NOLINT
1818                                1633, -4, 1635, -4, 1637, -4, 1639, -4, 1641, -4,
1819                                1643, -4, 1645, -4, 1665, -4,  // NOLINT
1820                                1667, -4, 1669, -4, 1671, -4, 1673, -4, 1675, -4,
1821                                1677, -4, 1679, -4, 1681, -4,  // NOLINT
1822                                1683, -4, 1685, -4, 1687, -4, 1689, -4, 1691, -4,
1823                                1827, -4, 1829, -4, 1831, -4,  // NOLINT
1824                                1833, -4, 1835, -4, 1837, -4, 1839, -4, 1843, -4,
1825                                1845, -4, 1847, -4, 1849, -4,  // NOLINT
1826                                1851, -4, 1853, -4, 1855, -4, 1857, -4, 1859, -4,
1827                                1861, -4, 1863, -4, 1865, -4,  // NOLINT
1828                                1867, -4, 1869, -4, 1871, -4, 1873, -4, 1875, -4,
1829                                1877, -4, 1879, -4, 1881, -4,  // NOLINT
1830                                1883, -4, 1885, -4, 1887, -4, 1889, -4, 1891, -4,
1831                                1893, -4, 1895, -4, 1897, -4,  // NOLINT
1832                                1899, -4, 1901, -4, 1903, -4, 1914, -4, 1916, -4,
1833                                1919, -4, 1921, -4, 1923, -4,  // NOLINT
1834                                1925, -4, 1927, -4, 1932, -4, 1937, -4, 1939, -4,
1835                                1943, -4, 1945, -4, 1947, -4,  // NOLINT
1836                                1949, -4, 1951, -4, 1953, -4, 1955, -4, 1957, -4,
1837                                1959, -4, 1961, -4};       // NOLINT
1838 static const uint16_t kToUppercaseMultiStrings5Size = 1;  // NOLINT
1839 static const MultiCharacterSpecialCase<3> kToUppercaseMultiStrings7[12] = {  // NOLINT
1840   {{70, 70, kSentinel}}, {{70, 73, kSentinel}}, {{70, 76, kSentinel}}, {{70, 70, 73}},  // NOLINT
1841   {{70, 70, 76}}, {{83, 84, kSentinel}}, {{1348, 1350, kSentinel}}, {{1348, 1333, kSentinel}},  // NOLINT
1842   {{1348, 1339, kSentinel}}, {{1358, 1350, kSentinel}}, {{1348, 1341, kSentinel}}, {{kSentinel}} }; // NOLINT
1843 static const uint16_t kToUppercaseTable7Size = 14;  // NOLINT
1844 static const int32_t kToUppercaseTable7[28] = {
1845   6912, 1, 6913, 5, 6914, 9, 6915, 13, 6916, 17, 6917, 21, 6918, 21, 6931, 25,  // NOLINT
1846   6932, 29, 6933, 33, 6934, 37, 6935, 41, 1073749825, -128, 8026, -128 };  // NOLINT
1847 static const uint16_t kToUppercaseMultiStrings7Size = 12;  // NOLINT
Convert(uchar c,uchar n,uchar * result,bool * allow_caching_ptr)1848 int ToUppercase::Convert(uchar c,
1849                       uchar n,
1850                       uchar* result,
1851                       bool* allow_caching_ptr) {
1852   int chunk_index = c >> 13;
1853   switch (chunk_index) {
1854     case 0: return LookupMapping<true>(kToUppercaseTable0,
1855                                            kToUppercaseTable0Size,
1856                                            kToUppercaseMultiStrings0,
1857                                            c,
1858                                            n,
1859                                            result,
1860                                            allow_caching_ptr);
1861     case 1: return LookupMapping<true>(kToUppercaseTable1,
1862                                            kToUppercaseTable1Size,
1863                                            kToUppercaseMultiStrings1,
1864                                            c,
1865                                            n,
1866                                            result,
1867                                            allow_caching_ptr);
1868     case 5: return LookupMapping<true>(kToUppercaseTable5,
1869                                            kToUppercaseTable5Size,
1870                                            kToUppercaseMultiStrings5,
1871                                            c,
1872                                            n,
1873                                            result,
1874                                            allow_caching_ptr);
1875     case 7: return LookupMapping<true>(kToUppercaseTable7,
1876                                            kToUppercaseTable7Size,
1877                                            kToUppercaseMultiStrings7,
1878                                            c,
1879                                            n,
1880                                            result,
1881                                            allow_caching_ptr);
1882     default: return 0;
1883   }
1884 }
1885 
1886 static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings0[1] = {  // NOLINT
1887   {{kSentinel}} }; // NOLINT
1888 static const uint16_t kEcma262CanonicalizeTable0Size = 498;  // NOLINT
1889 static const int32_t kEcma262CanonicalizeTable0[996] = {
1890     1073741921, -128,   122,        -128,   181,        2972,
1891     1073742048, -128,   246,        -128,   1073742072, -128,
1892     254,        -128,   255,        484,  // NOLINT
1893     257,        -4,     259,        -4,     261,        -4,
1894     263,        -4,     265,        -4,     267,        -4,
1895     269,        -4,     271,        -4,  // NOLINT
1896     273,        -4,     275,        -4,     277,        -4,
1897     279,        -4,     281,        -4,     283,        -4,
1898     285,        -4,     287,        -4,  // NOLINT
1899     289,        -4,     291,        -4,     293,        -4,
1900     295,        -4,     297,        -4,     299,        -4,
1901     301,        -4,     303,        -4,  // NOLINT
1902     307,        -4,     309,        -4,     311,        -4,
1903     314,        -4,     316,        -4,     318,        -4,
1904     320,        -4,     322,        -4,  // NOLINT
1905     324,        -4,     326,        -4,     328,        -4,
1906     331,        -4,     333,        -4,     335,        -4,
1907     337,        -4,     339,        -4,  // NOLINT
1908     341,        -4,     343,        -4,     345,        -4,
1909     347,        -4,     349,        -4,     351,        -4,
1910     353,        -4,     355,        -4,  // NOLINT
1911     357,        -4,     359,        -4,     361,        -4,
1912     363,        -4,     365,        -4,     367,        -4,
1913     369,        -4,     371,        -4,  // NOLINT
1914     373,        -4,     375,        -4,     378,        -4,
1915     380,        -4,     382,        -4,     384,        780,
1916     387,        -4,     389,        -4,  // NOLINT
1917     392,        -4,     396,        -4,     402,        -4,
1918     405,        388,    409,        -4,     410,        652,
1919     414,        520,    417,        -4,  // NOLINT
1920     419,        -4,     421,        -4,     424,        -4,
1921     429,        -4,     432,        -4,     436,        -4,
1922     438,        -4,     441,        -4,  // NOLINT
1923     445,        -4,     447,        224,    453,        -4,
1924     454,        -8,     456,        -4,     457,        -8,
1925     459,        -4,     460,        -8,  // NOLINT
1926     462,        -4,     464,        -4,     466,        -4,
1927     468,        -4,     470,        -4,     472,        -4,
1928     474,        -4,     476,        -4,  // NOLINT
1929     477,        -316,   479,        -4,     481,        -4,
1930     483,        -4,     485,        -4,     487,        -4,
1931     489,        -4,     491,        -4,  // NOLINT
1932     493,        -4,     495,        -4,     498,        -4,
1933     499,        -8,     501,        -4,     505,        -4,
1934     507,        -4,     509,        -4,  // NOLINT
1935     511,        -4,     513,        -4,     515,        -4,
1936     517,        -4,     519,        -4,     521,        -4,
1937     523,        -4,     525,        -4,  // NOLINT
1938     527,        -4,     529,        -4,     531,        -4,
1939     533,        -4,     535,        -4,     537,        -4,
1940     539,        -4,     541,        -4,  // NOLINT
1941     543,        -4,     547,        -4,     549,        -4,
1942     551,        -4,     553,        -4,     555,        -4,
1943     557,        -4,     559,        -4,  // NOLINT
1944     561,        -4,     563,        -4,     572,        -4,
1945     1073742399, 43260,  576,        43260,  578,        -4,
1946     583,        -4,     585,        -4,  // NOLINT
1947     587,        -4,     589,        -4,     591,        -4,
1948     592,        43132,  593,        43120,  594,        43128,
1949     595,        -840,   596,        -824,  // NOLINT
1950     1073742422, -820,   599,        -820,   601,        -808,
1951     603,        -812,   604,        169276, 608,        -820,
1952     609,        169260, 611,        -828,  // NOLINT
1953     613,        169120, 614,        169232, 616,        -836,
1954     617,        -844,   619,        42972,  620,        169220,
1955     623,        -844,   625,        42996,  // NOLINT
1956     626,        -852,   629,        -856,   637,        42908,
1957     640,        -872,   643,        -872,   647,        169128,
1958     648,        -872,   649,        -276,  // NOLINT
1959     1073742474, -868,   651,        -868,   652,        -284,
1960     658,        -876,   670,        169032, 837,        336,
1961     881,        -4,     883,        -4,  // NOLINT
1962     887,        -4,     1073742715, 520,    893,        520,
1963     940,        -152,   1073742765, -148,   943,        -148,
1964     1073742769, -128,   961,        -128,  // NOLINT
1965     962,        -124,   1073742787, -128,   971,        -128,
1966     972,        -256,   1073742797, -252,   974,        -252,
1967     976,        -248,   977,        -228,  // NOLINT
1968     981,        -188,   982,        -216,   983,        -32,
1969     985,        -4,     987,        -4,     989,        -4,
1970     991,        -4,     993,        -4,  // NOLINT
1971     995,        -4,     997,        -4,     999,        -4,
1972     1001,       -4,     1003,       -4,     1005,       -4,
1973     1007,       -4,     1008,       -344,  // NOLINT
1974     1009,       -320,   1010,       28,     1011,       -464,
1975     1013,       -384,   1016,       -4,     1019,       -4,
1976     1073742896, -128,   1103,       -128,  // NOLINT
1977     1073742928, -320,   1119,       -320,   1121,       -4,
1978     1123,       -4,     1125,       -4,     1127,       -4,
1979     1129,       -4,     1131,       -4,  // NOLINT
1980     1133,       -4,     1135,       -4,     1137,       -4,
1981     1139,       -4,     1141,       -4,     1143,       -4,
1982     1145,       -4,     1147,       -4,  // NOLINT
1983     1149,       -4,     1151,       -4,     1153,       -4,
1984     1163,       -4,     1165,       -4,     1167,       -4,
1985     1169,       -4,     1171,       -4,  // NOLINT
1986     1173,       -4,     1175,       -4,     1177,       -4,
1987     1179,       -4,     1181,       -4,     1183,       -4,
1988     1185,       -4,     1187,       -4,  // NOLINT
1989     1189,       -4,     1191,       -4,     1193,       -4,
1990     1195,       -4,     1197,       -4,     1199,       -4,
1991     1201,       -4,     1203,       -4,  // NOLINT
1992     1205,       -4,     1207,       -4,     1209,       -4,
1993     1211,       -4,     1213,       -4,     1215,       -4,
1994     1218,       -4,     1220,       -4,  // NOLINT
1995     1222,       -4,     1224,       -4,     1226,       -4,
1996     1228,       -4,     1230,       -4,     1231,       -60,
1997     1233,       -4,     1235,       -4,  // NOLINT
1998     1237,       -4,     1239,       -4,     1241,       -4,
1999     1243,       -4,     1245,       -4,     1247,       -4,
2000     1249,       -4,     1251,       -4,  // NOLINT
2001     1253,       -4,     1255,       -4,     1257,       -4,
2002     1259,       -4,     1261,       -4,     1263,       -4,
2003     1265,       -4,     1267,       -4,  // NOLINT
2004     1269,       -4,     1271,       -4,     1273,       -4,
2005     1275,       -4,     1277,       -4,     1279,       -4,
2006     1281,       -4,     1283,       -4,  // NOLINT
2007     1285,       -4,     1287,       -4,     1289,       -4,
2008     1291,       -4,     1293,       -4,     1295,       -4,
2009     1297,       -4,     1299,       -4,  // NOLINT
2010     1301,       -4,     1303,       -4,     1305,       -4,
2011     1307,       -4,     1309,       -4,     1311,       -4,
2012     1313,       -4,     1315,       -4,  // NOLINT
2013     1317,       -4,     1319,       -4,     1321,       -4,
2014     1323,       -4,     1325,       -4,     1327,       -4,
2015     1073743201, -192,   1414,       -192,  // NOLINT
2016     7545,       141328, 7549,       15256,  7681,       -4,
2017     7683,       -4,     7685,       -4,     7687,       -4,
2018     7689,       -4,     7691,       -4,  // NOLINT
2019     7693,       -4,     7695,       -4,     7697,       -4,
2020     7699,       -4,     7701,       -4,     7703,       -4,
2021     7705,       -4,     7707,       -4,  // NOLINT
2022     7709,       -4,     7711,       -4,     7713,       -4,
2023     7715,       -4,     7717,       -4,     7719,       -4,
2024     7721,       -4,     7723,       -4,  // NOLINT
2025     7725,       -4,     7727,       -4,     7729,       -4,
2026     7731,       -4,     7733,       -4,     7735,       -4,
2027     7737,       -4,     7739,       -4,  // NOLINT
2028     7741,       -4,     7743,       -4,     7745,       -4,
2029     7747,       -4,     7749,       -4,     7751,       -4,
2030     7753,       -4,     7755,       -4,  // NOLINT
2031     7757,       -4,     7759,       -4,     7761,       -4,
2032     7763,       -4,     7765,       -4,     7767,       -4,
2033     7769,       -4,     7771,       -4,  // NOLINT
2034     7773,       -4,     7775,       -4,     7777,       -4,
2035     7779,       -4,     7781,       -4,     7783,       -4,
2036     7785,       -4,     7787,       -4,  // NOLINT
2037     7789,       -4,     7791,       -4,     7793,       -4,
2038     7795,       -4,     7797,       -4,     7799,       -4,
2039     7801,       -4,     7803,       -4,  // NOLINT
2040     7805,       -4,     7807,       -4,     7809,       -4,
2041     7811,       -4,     7813,       -4,     7815,       -4,
2042     7817,       -4,     7819,       -4,  // NOLINT
2043     7821,       -4,     7823,       -4,     7825,       -4,
2044     7827,       -4,     7829,       -4,     7835,       -236,
2045     7841,       -4,     7843,       -4,  // NOLINT
2046     7845,       -4,     7847,       -4,     7849,       -4,
2047     7851,       -4,     7853,       -4,     7855,       -4,
2048     7857,       -4,     7859,       -4,  // NOLINT
2049     7861,       -4,     7863,       -4,     7865,       -4,
2050     7867,       -4,     7869,       -4,     7871,       -4,
2051     7873,       -4,     7875,       -4,  // NOLINT
2052     7877,       -4,     7879,       -4,     7881,       -4,
2053     7883,       -4,     7885,       -4,     7887,       -4,
2054     7889,       -4,     7891,       -4,  // NOLINT
2055     7893,       -4,     7895,       -4,     7897,       -4,
2056     7899,       -4,     7901,       -4,     7903,       -4,
2057     7905,       -4,     7907,       -4,  // NOLINT
2058     7909,       -4,     7911,       -4,     7913,       -4,
2059     7915,       -4,     7917,       -4,     7919,       -4,
2060     7921,       -4,     7923,       -4,  // NOLINT
2061     7925,       -4,     7927,       -4,     7929,       -4,
2062     7931,       -4,     7933,       -4,     7935,       -4,
2063     1073749760, 32,     7943,       32,  // NOLINT
2064     1073749776, 32,     7957,       32,     1073749792, 32,
2065     7975,       32,     1073749808, 32,     7991,       32,
2066     1073749824, 32,     8005,       32,  // NOLINT
2067     8017,       32,     8019,       32,     8021,       32,
2068     8023,       32,     1073749856, 32,     8039,       32,
2069     1073749872, 296,    8049,       296,  // NOLINT
2070     1073749874, 344,    8053,       344,    1073749878, 400,
2071     8055,       400,    1073749880, 512,    8057,       512,
2072     1073749882, 448,    8059,       448,  // NOLINT
2073     1073749884, 504,    8061,       504,    1073749936, 32,
2074     8113,       32,     8126,       -28820, 1073749968, 32,
2075     8145,       32,     1073749984, 32,                           // NOLINT
2076     8161,       32,     8165,       28};                          // NOLINT
2077 static const uint16_t kEcma262CanonicalizeMultiStrings0Size = 1;  // NOLINT
2078 static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings1[1] = {  // NOLINT
2079   {{kSentinel}} }; // NOLINT
2080 static const uint16_t kEcma262CanonicalizeTable1Size = 73;  // NOLINT
2081 static const int32_t kEcma262CanonicalizeTable1[146] = {
2082   334, -112, 1073742192, -64, 383, -64, 388, -4, 1073743056, -104, 1257, -104, 1073744944, -192, 3166, -192,  // NOLINT
2083   3169, -4, 3173, -43180, 3174, -43168, 3176, -4, 3178, -4, 3180, -4, 3187, -4, 3190, -4,  // NOLINT
2084   3201, -4, 3203, -4, 3205, -4, 3207, -4, 3209, -4, 3211, -4, 3213, -4, 3215, -4,  // NOLINT
2085   3217, -4, 3219, -4, 3221, -4, 3223, -4, 3225, -4, 3227, -4, 3229, -4, 3231, -4,  // NOLINT
2086   3233, -4, 3235, -4, 3237, -4, 3239, -4, 3241, -4, 3243, -4, 3245, -4, 3247, -4,  // NOLINT
2087   3249, -4, 3251, -4, 3253, -4, 3255, -4, 3257, -4, 3259, -4, 3261, -4, 3263, -4,  // NOLINT
2088   3265, -4, 3267, -4, 3269, -4, 3271, -4, 3273, -4, 3275, -4, 3277, -4, 3279, -4,  // NOLINT
2089   3281, -4, 3283, -4, 3285, -4, 3287, -4, 3289, -4, 3291, -4, 3293, -4, 3295, -4,  // NOLINT
2090   3297, -4, 3299, -4, 3308, -4, 3310, -4, 3315, -4, 1073745152, -29056, 3365, -29056, 3367, -29056,  // NOLINT
2091   3373, -29056 };  // NOLINT
2092 static const uint16_t kEcma262CanonicalizeMultiStrings1Size = 1;  // NOLINT
2093 static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings5[1] = {  // NOLINT
2094   {{kSentinel}} }; // NOLINT
2095 static const uint16_t kEcma262CanonicalizeTable5Size = 95;  // NOLINT
2096 static const int32_t kEcma262CanonicalizeTable5
2097     [190] = {1601, -4, 1603, -4, 1605, -4, 1607, -4,
2098              1609, -4, 1611, -4, 1613, -4, 1615, -4,  // NOLINT
2099              1617, -4, 1619, -4, 1621, -4, 1623, -4,
2100              1625, -4, 1627, -4, 1629, -4, 1631, -4,  // NOLINT
2101              1633, -4, 1635, -4, 1637, -4, 1639, -4,
2102              1641, -4, 1643, -4, 1645, -4, 1665, -4,  // NOLINT
2103              1667, -4, 1669, -4, 1671, -4, 1673, -4,
2104              1675, -4, 1677, -4, 1679, -4, 1681, -4,  // NOLINT
2105              1683, -4, 1685, -4, 1687, -4, 1689, -4,
2106              1691, -4, 1827, -4, 1829, -4, 1831, -4,  // NOLINT
2107              1833, -4, 1835, -4, 1837, -4, 1839, -4,
2108              1843, -4, 1845, -4, 1847, -4, 1849, -4,  // NOLINT
2109              1851, -4, 1853, -4, 1855, -4, 1857, -4,
2110              1859, -4, 1861, -4, 1863, -4, 1865, -4,  // NOLINT
2111              1867, -4, 1869, -4, 1871, -4, 1873, -4,
2112              1875, -4, 1877, -4, 1879, -4, 1881, -4,  // NOLINT
2113              1883, -4, 1885, -4, 1887, -4, 1889, -4,
2114              1891, -4, 1893, -4, 1895, -4, 1897, -4,  // NOLINT
2115              1899, -4, 1901, -4, 1903, -4, 1914, -4,
2116              1916, -4, 1919, -4, 1921, -4, 1923, -4,  // NOLINT
2117              1925, -4, 1927, -4, 1932, -4, 1937, -4,
2118              1939, -4, 1943, -4, 1945, -4, 1947, -4,  // NOLINT
2119              1949, -4, 1951, -4, 1953, -4, 1955, -4,
2120              1957, -4, 1959, -4, 1961, -4};                       // NOLINT
2121 static const uint16_t kEcma262CanonicalizeMultiStrings5Size = 1;  // NOLINT
2122 static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings7[1] = {  // NOLINT
2123   {{kSentinel}} }; // NOLINT
2124 static const uint16_t kEcma262CanonicalizeTable7Size = 2;  // NOLINT
2125 static const int32_t kEcma262CanonicalizeTable7[4] = {
2126   1073749825, -128, 8026, -128 };  // NOLINT
2127 static const uint16_t kEcma262CanonicalizeMultiStrings7Size = 1;  // NOLINT
Convert(uchar c,uchar n,uchar * result,bool * allow_caching_ptr)2128 int Ecma262Canonicalize::Convert(uchar c,
2129                       uchar n,
2130                       uchar* result,
2131                       bool* allow_caching_ptr) {
2132   int chunk_index = c >> 13;
2133   switch (chunk_index) {
2134     case 0: return LookupMapping<true>(kEcma262CanonicalizeTable0,
2135                                            kEcma262CanonicalizeTable0Size,
2136                                            kEcma262CanonicalizeMultiStrings0,
2137                                            c,
2138                                            n,
2139                                            result,
2140                                            allow_caching_ptr);
2141     case 1: return LookupMapping<true>(kEcma262CanonicalizeTable1,
2142                                            kEcma262CanonicalizeTable1Size,
2143                                            kEcma262CanonicalizeMultiStrings1,
2144                                            c,
2145                                            n,
2146                                            result,
2147                                            allow_caching_ptr);
2148     case 5: return LookupMapping<true>(kEcma262CanonicalizeTable5,
2149                                            kEcma262CanonicalizeTable5Size,
2150                                            kEcma262CanonicalizeMultiStrings5,
2151                                            c,
2152                                            n,
2153                                            result,
2154                                            allow_caching_ptr);
2155     case 7: return LookupMapping<true>(kEcma262CanonicalizeTable7,
2156                                            kEcma262CanonicalizeTable7Size,
2157                                            kEcma262CanonicalizeMultiStrings7,
2158                                            c,
2159                                            n,
2160                                            result,
2161                                            allow_caching_ptr);
2162     default: return 0;
2163   }
2164 }
2165 
2166 static const MultiCharacterSpecialCase<4>
2167     kEcma262UnCanonicalizeMultiStrings0[507] = {  // NOLINT
2168         {{65, 97, kSentinel}},
2169         {{90, 122, kSentinel}},
2170         {{181, 924, 956, kSentinel}},
2171         {{192, 224, kSentinel}},  // NOLINT
2172         {{214, 246, kSentinel}},
2173         {{216, 248, kSentinel}},
2174         {{222, 254, kSentinel}},
2175         {{255, 376, kSentinel}},  // NOLINT
2176         {{256, 257, kSentinel}},
2177         {{258, 259, kSentinel}},
2178         {{260, 261, kSentinel}},
2179         {{262, 263, kSentinel}},  // NOLINT
2180         {{264, 265, kSentinel}},
2181         {{266, 267, kSentinel}},
2182         {{268, 269, kSentinel}},
2183         {{270, 271, kSentinel}},  // NOLINT
2184         {{272, 273, kSentinel}},
2185         {{274, 275, kSentinel}},
2186         {{276, 277, kSentinel}},
2187         {{278, 279, kSentinel}},  // NOLINT
2188         {{280, 281, kSentinel}},
2189         {{282, 283, kSentinel}},
2190         {{284, 285, kSentinel}},
2191         {{286, 287, kSentinel}},  // NOLINT
2192         {{288, 289, kSentinel}},
2193         {{290, 291, kSentinel}},
2194         {{292, 293, kSentinel}},
2195         {{294, 295, kSentinel}},  // NOLINT
2196         {{296, 297, kSentinel}},
2197         {{298, 299, kSentinel}},
2198         {{300, 301, kSentinel}},
2199         {{302, 303, kSentinel}},  // NOLINT
2200         {{306, 307, kSentinel}},
2201         {{308, 309, kSentinel}},
2202         {{310, 311, kSentinel}},
2203         {{313, 314, kSentinel}},  // NOLINT
2204         {{315, 316, kSentinel}},
2205         {{317, 318, kSentinel}},
2206         {{319, 320, kSentinel}},
2207         {{321, 322, kSentinel}},  // NOLINT
2208         {{323, 324, kSentinel}},
2209         {{325, 326, kSentinel}},
2210         {{327, 328, kSentinel}},
2211         {{330, 331, kSentinel}},  // NOLINT
2212         {{332, 333, kSentinel}},
2213         {{334, 335, kSentinel}},
2214         {{336, 337, kSentinel}},
2215         {{338, 339, kSentinel}},  // NOLINT
2216         {{340, 341, kSentinel}},
2217         {{342, 343, kSentinel}},
2218         {{344, 345, kSentinel}},
2219         {{346, 347, kSentinel}},  // NOLINT
2220         {{348, 349, kSentinel}},
2221         {{350, 351, kSentinel}},
2222         {{352, 353, kSentinel}},
2223         {{354, 355, kSentinel}},  // NOLINT
2224         {{356, 357, kSentinel}},
2225         {{358, 359, kSentinel}},
2226         {{360, 361, kSentinel}},
2227         {{362, 363, kSentinel}},  // NOLINT
2228         {{364, 365, kSentinel}},
2229         {{366, 367, kSentinel}},
2230         {{368, 369, kSentinel}},
2231         {{370, 371, kSentinel}},  // NOLINT
2232         {{372, 373, kSentinel}},
2233         {{374, 375, kSentinel}},
2234         {{377, 378, kSentinel}},
2235         {{379, 380, kSentinel}},  // NOLINT
2236         {{381, 382, kSentinel}},
2237         {{384, 579, kSentinel}},
2238         {{385, 595, kSentinel}},
2239         {{386, 387, kSentinel}},  // NOLINT
2240         {{388, 389, kSentinel}},
2241         {{390, 596, kSentinel}},
2242         {{391, 392, kSentinel}},
2243         {{393, 598, kSentinel}},  // NOLINT
2244         {{394, 599, kSentinel}},
2245         {{395, 396, kSentinel}},
2246         {{398, 477, kSentinel}},
2247         {{399, 601, kSentinel}},  // NOLINT
2248         {{400, 603, kSentinel}},
2249         {{401, 402, kSentinel}},
2250         {{403, 608, kSentinel}},
2251         {{404, 611, kSentinel}},  // NOLINT
2252         {{405, 502, kSentinel}},
2253         {{406, 617, kSentinel}},
2254         {{407, 616, kSentinel}},
2255         {{408, 409, kSentinel}},  // NOLINT
2256         {{410, 573, kSentinel}},
2257         {{412, 623, kSentinel}},
2258         {{413, 626, kSentinel}},
2259         {{414, 544, kSentinel}},  // NOLINT
2260         {{415, 629, kSentinel}},
2261         {{416, 417, kSentinel}},
2262         {{418, 419, kSentinel}},
2263         {{420, 421, kSentinel}},  // NOLINT
2264         {{422, 640, kSentinel}},
2265         {{423, 424, kSentinel}},
2266         {{425, 643, kSentinel}},
2267         {{428, 429, kSentinel}},  // NOLINT
2268         {{430, 648, kSentinel}},
2269         {{431, 432, kSentinel}},
2270         {{433, 650, kSentinel}},
2271         {{434, 651, kSentinel}},  // NOLINT
2272         {{435, 436, kSentinel}},
2273         {{437, 438, kSentinel}},
2274         {{439, 658, kSentinel}},
2275         {{440, 441, kSentinel}},  // NOLINT
2276         {{444, 445, kSentinel}},
2277         {{447, 503, kSentinel}},
2278         {{452, 453, 454, kSentinel}},
2279         {{455, 456, 457, kSentinel}},  // NOLINT
2280         {{458, 459, 460, kSentinel}},
2281         {{461, 462, kSentinel}},
2282         {{463, 464, kSentinel}},
2283         {{465, 466, kSentinel}},  // NOLINT
2284         {{467, 468, kSentinel}},
2285         {{469, 470, kSentinel}},
2286         {{471, 472, kSentinel}},
2287         {{473, 474, kSentinel}},  // NOLINT
2288         {{475, 476, kSentinel}},
2289         {{478, 479, kSentinel}},
2290         {{480, 481, kSentinel}},
2291         {{482, 483, kSentinel}},  // NOLINT
2292         {{484, 485, kSentinel}},
2293         {{486, 487, kSentinel}},
2294         {{488, 489, kSentinel}},
2295         {{490, 491, kSentinel}},  // NOLINT
2296         {{492, 493, kSentinel}},
2297         {{494, 495, kSentinel}},
2298         {{497, 498, 499, kSentinel}},
2299         {{500, 501, kSentinel}},  // NOLINT
2300         {{504, 505, kSentinel}},
2301         {{506, 507, kSentinel}},
2302         {{508, 509, kSentinel}},
2303         {{510, 511, kSentinel}},  // NOLINT
2304         {{512, 513, kSentinel}},
2305         {{514, 515, kSentinel}},
2306         {{516, 517, kSentinel}},
2307         {{518, 519, kSentinel}},  // NOLINT
2308         {{520, 521, kSentinel}},
2309         {{522, 523, kSentinel}},
2310         {{524, 525, kSentinel}},
2311         {{526, 527, kSentinel}},  // NOLINT
2312         {{528, 529, kSentinel}},
2313         {{530, 531, kSentinel}},
2314         {{532, 533, kSentinel}},
2315         {{534, 535, kSentinel}},  // NOLINT
2316         {{536, 537, kSentinel}},
2317         {{538, 539, kSentinel}},
2318         {{540, 541, kSentinel}},
2319         {{542, 543, kSentinel}},  // NOLINT
2320         {{546, 547, kSentinel}},
2321         {{548, 549, kSentinel}},
2322         {{550, 551, kSentinel}},
2323         {{552, 553, kSentinel}},  // NOLINT
2324         {{554, 555, kSentinel}},
2325         {{556, 557, kSentinel}},
2326         {{558, 559, kSentinel}},
2327         {{560, 561, kSentinel}},  // NOLINT
2328         {{562, 563, kSentinel}},
2329         {{570, 11365, kSentinel}},
2330         {{571, 572, kSentinel}},
2331         {{574, 11366, kSentinel}},  // NOLINT
2332         {{575, 11390, kSentinel}},
2333         {{576, 11391, kSentinel}},
2334         {{577, 578, kSentinel}},
2335         {{580, 649, kSentinel}},  // NOLINT
2336         {{581, 652, kSentinel}},
2337         {{582, 583, kSentinel}},
2338         {{584, 585, kSentinel}},
2339         {{586, 587, kSentinel}},  // NOLINT
2340         {{588, 589, kSentinel}},
2341         {{590, 591, kSentinel}},
2342         {{592, 11375, kSentinel}},
2343         {{593, 11373, kSentinel}},  // NOLINT
2344         {{594, 11376, kSentinel}},
2345         {{604, 42923, kSentinel}},
2346         {{609, 42924, kSentinel}},
2347         {{613, 42893, kSentinel}},  // NOLINT
2348         {{614, 42922, kSentinel}},
2349         {{619, 11362, kSentinel}},
2350         {{620, 42925, kSentinel}},
2351         {{625, 11374, kSentinel}},  // NOLINT
2352         {{637, 11364, kSentinel}},
2353         {{647, 42929, kSentinel}},
2354         {{670, 42928, kSentinel}},
2355         {{837, 921, 953, 8126}},  // NOLINT
2356         {{880, 881, kSentinel}},
2357         {{882, 883, kSentinel}},
2358         {{886, 887, kSentinel}},
2359         {{891, 1021, kSentinel}},  // NOLINT
2360         {{893, 1023, kSentinel}},
2361         {{895, 1011, kSentinel}},
2362         {{902, 940, kSentinel}},
2363         {{904, 941, kSentinel}},  // NOLINT
2364         {{906, 943, kSentinel}},
2365         {{908, 972, kSentinel}},
2366         {{910, 973, kSentinel}},
2367         {{911, 974, kSentinel}},  // NOLINT
2368         {{913, 945, kSentinel}},
2369         {{914, 946, 976, kSentinel}},
2370         {{915, 947, kSentinel}},
2371         {{916, 948, kSentinel}},  // NOLINT
2372         {{917, 949, 1013, kSentinel}},
2373         {{918, 950, kSentinel}},
2374         {{919, 951, kSentinel}},
2375         {{920, 952, 977, kSentinel}},  // NOLINT
2376         {{922, 954, 1008, kSentinel}},
2377         {{923, 955, kSentinel}},
2378         {{925, 957, kSentinel}},
2379         {{927, 959, kSentinel}},  // NOLINT
2380         {{928, 960, 982, kSentinel}},
2381         {{929, 961, 1009, kSentinel}},
2382         {{931, 962, 963, kSentinel}},
2383         {{932, 964, kSentinel}},  // NOLINT
2384         {{933, 965, kSentinel}},
2385         {{934, 966, 981, kSentinel}},
2386         {{935, 967, kSentinel}},
2387         {{939, 971, kSentinel}},  // NOLINT
2388         {{975, 983, kSentinel}},
2389         {{984, 985, kSentinel}},
2390         {{986, 987, kSentinel}},
2391         {{988, 989, kSentinel}},  // NOLINT
2392         {{990, 991, kSentinel}},
2393         {{992, 993, kSentinel}},
2394         {{994, 995, kSentinel}},
2395         {{996, 997, kSentinel}},  // NOLINT
2396         {{998, 999, kSentinel}},
2397         {{1000, 1001, kSentinel}},
2398         {{1002, 1003, kSentinel}},
2399         {{1004, 1005, kSentinel}},  // NOLINT
2400         {{1006, 1007, kSentinel}},
2401         {{1010, 1017, kSentinel}},
2402         {{1015, 1016, kSentinel}},
2403         {{1018, 1019, kSentinel}},  // NOLINT
2404         {{1024, 1104, kSentinel}},
2405         {{1039, 1119, kSentinel}},
2406         {{1040, 1072, kSentinel}},
2407         {{1071, 1103, kSentinel}},  // NOLINT
2408         {{1120, 1121, kSentinel}},
2409         {{1122, 1123, kSentinel}},
2410         {{1124, 1125, kSentinel}},
2411         {{1126, 1127, kSentinel}},  // NOLINT
2412         {{1128, 1129, kSentinel}},
2413         {{1130, 1131, kSentinel}},
2414         {{1132, 1133, kSentinel}},
2415         {{1134, 1135, kSentinel}},  // NOLINT
2416         {{1136, 1137, kSentinel}},
2417         {{1138, 1139, kSentinel}},
2418         {{1140, 1141, kSentinel}},
2419         {{1142, 1143, kSentinel}},  // NOLINT
2420         {{1144, 1145, kSentinel}},
2421         {{1146, 1147, kSentinel}},
2422         {{1148, 1149, kSentinel}},
2423         {{1150, 1151, kSentinel}},  // NOLINT
2424         {{1152, 1153, kSentinel}},
2425         {{1162, 1163, kSentinel}},
2426         {{1164, 1165, kSentinel}},
2427         {{1166, 1167, kSentinel}},  // NOLINT
2428         {{1168, 1169, kSentinel}},
2429         {{1170, 1171, kSentinel}},
2430         {{1172, 1173, kSentinel}},
2431         {{1174, 1175, kSentinel}},  // NOLINT
2432         {{1176, 1177, kSentinel}},
2433         {{1178, 1179, kSentinel}},
2434         {{1180, 1181, kSentinel}},
2435         {{1182, 1183, kSentinel}},  // NOLINT
2436         {{1184, 1185, kSentinel}},
2437         {{1186, 1187, kSentinel}},
2438         {{1188, 1189, kSentinel}},
2439         {{1190, 1191, kSentinel}},  // NOLINT
2440         {{1192, 1193, kSentinel}},
2441         {{1194, 1195, kSentinel}},
2442         {{1196, 1197, kSentinel}},
2443         {{1198, 1199, kSentinel}},  // NOLINT
2444         {{1200, 1201, kSentinel}},
2445         {{1202, 1203, kSentinel}},
2446         {{1204, 1205, kSentinel}},
2447         {{1206, 1207, kSentinel}},  // NOLINT
2448         {{1208, 1209, kSentinel}},
2449         {{1210, 1211, kSentinel}},
2450         {{1212, 1213, kSentinel}},
2451         {{1214, 1215, kSentinel}},  // NOLINT
2452         {{1216, 1231, kSentinel}},
2453         {{1217, 1218, kSentinel}},
2454         {{1219, 1220, kSentinel}},
2455         {{1221, 1222, kSentinel}},  // NOLINT
2456         {{1223, 1224, kSentinel}},
2457         {{1225, 1226, kSentinel}},
2458         {{1227, 1228, kSentinel}},
2459         {{1229, 1230, kSentinel}},  // NOLINT
2460         {{1232, 1233, kSentinel}},
2461         {{1234, 1235, kSentinel}},
2462         {{1236, 1237, kSentinel}},
2463         {{1238, 1239, kSentinel}},  // NOLINT
2464         {{1240, 1241, kSentinel}},
2465         {{1242, 1243, kSentinel}},
2466         {{1244, 1245, kSentinel}},
2467         {{1246, 1247, kSentinel}},  // NOLINT
2468         {{1248, 1249, kSentinel}},
2469         {{1250, 1251, kSentinel}},
2470         {{1252, 1253, kSentinel}},
2471         {{1254, 1255, kSentinel}},  // NOLINT
2472         {{1256, 1257, kSentinel}},
2473         {{1258, 1259, kSentinel}},
2474         {{1260, 1261, kSentinel}},
2475         {{1262, 1263, kSentinel}},  // NOLINT
2476         {{1264, 1265, kSentinel}},
2477         {{1266, 1267, kSentinel}},
2478         {{1268, 1269, kSentinel}},
2479         {{1270, 1271, kSentinel}},  // NOLINT
2480         {{1272, 1273, kSentinel}},
2481         {{1274, 1275, kSentinel}},
2482         {{1276, 1277, kSentinel}},
2483         {{1278, 1279, kSentinel}},  // NOLINT
2484         {{1280, 1281, kSentinel}},
2485         {{1282, 1283, kSentinel}},
2486         {{1284, 1285, kSentinel}},
2487         {{1286, 1287, kSentinel}},  // NOLINT
2488         {{1288, 1289, kSentinel}},
2489         {{1290, 1291, kSentinel}},
2490         {{1292, 1293, kSentinel}},
2491         {{1294, 1295, kSentinel}},  // NOLINT
2492         {{1296, 1297, kSentinel}},
2493         {{1298, 1299, kSentinel}},
2494         {{1300, 1301, kSentinel}},
2495         {{1302, 1303, kSentinel}},  // NOLINT
2496         {{1304, 1305, kSentinel}},
2497         {{1306, 1307, kSentinel}},
2498         {{1308, 1309, kSentinel}},
2499         {{1310, 1311, kSentinel}},  // NOLINT
2500         {{1312, 1313, kSentinel}},
2501         {{1314, 1315, kSentinel}},
2502         {{1316, 1317, kSentinel}},
2503         {{1318, 1319, kSentinel}},  // NOLINT
2504         {{1320, 1321, kSentinel}},
2505         {{1322, 1323, kSentinel}},
2506         {{1324, 1325, kSentinel}},
2507         {{1326, 1327, kSentinel}},  // NOLINT
2508         {{1329, 1377, kSentinel}},
2509         {{1366, 1414, kSentinel}},
2510         {{4256, 11520, kSentinel}},
2511         {{4293, 11557, kSentinel}},  // NOLINT
2512         {{4295, 11559, kSentinel}},
2513         {{4301, 11565, kSentinel}},
2514         {{7545, 42877, kSentinel}},
2515         {{7549, 11363, kSentinel}},  // NOLINT
2516         {{7680, 7681, kSentinel}},
2517         {{7682, 7683, kSentinel}},
2518         {{7684, 7685, kSentinel}},
2519         {{7686, 7687, kSentinel}},  // NOLINT
2520         {{7688, 7689, kSentinel}},
2521         {{7690, 7691, kSentinel}},
2522         {{7692, 7693, kSentinel}},
2523         {{7694, 7695, kSentinel}},  // NOLINT
2524         {{7696, 7697, kSentinel}},
2525         {{7698, 7699, kSentinel}},
2526         {{7700, 7701, kSentinel}},
2527         {{7702, 7703, kSentinel}},  // NOLINT
2528         {{7704, 7705, kSentinel}},
2529         {{7706, 7707, kSentinel}},
2530         {{7708, 7709, kSentinel}},
2531         {{7710, 7711, kSentinel}},  // NOLINT
2532         {{7712, 7713, kSentinel}},
2533         {{7714, 7715, kSentinel}},
2534         {{7716, 7717, kSentinel}},
2535         {{7718, 7719, kSentinel}},  // NOLINT
2536         {{7720, 7721, kSentinel}},
2537         {{7722, 7723, kSentinel}},
2538         {{7724, 7725, kSentinel}},
2539         {{7726, 7727, kSentinel}},  // NOLINT
2540         {{7728, 7729, kSentinel}},
2541         {{7730, 7731, kSentinel}},
2542         {{7732, 7733, kSentinel}},
2543         {{7734, 7735, kSentinel}},  // NOLINT
2544         {{7736, 7737, kSentinel}},
2545         {{7738, 7739, kSentinel}},
2546         {{7740, 7741, kSentinel}},
2547         {{7742, 7743, kSentinel}},  // NOLINT
2548         {{7744, 7745, kSentinel}},
2549         {{7746, 7747, kSentinel}},
2550         {{7748, 7749, kSentinel}},
2551         {{7750, 7751, kSentinel}},  // NOLINT
2552         {{7752, 7753, kSentinel}},
2553         {{7754, 7755, kSentinel}},
2554         {{7756, 7757, kSentinel}},
2555         {{7758, 7759, kSentinel}},  // NOLINT
2556         {{7760, 7761, kSentinel}},
2557         {{7762, 7763, kSentinel}},
2558         {{7764, 7765, kSentinel}},
2559         {{7766, 7767, kSentinel}},  // NOLINT
2560         {{7768, 7769, kSentinel}},
2561         {{7770, 7771, kSentinel}},
2562         {{7772, 7773, kSentinel}},
2563         {{7774, 7775, kSentinel}},  // NOLINT
2564         {{7776, 7777, 7835, kSentinel}},
2565         {{7778, 7779, kSentinel}},
2566         {{7780, 7781, kSentinel}},
2567         {{7782, 7783, kSentinel}},  // NOLINT
2568         {{7784, 7785, kSentinel}},
2569         {{7786, 7787, kSentinel}},
2570         {{7788, 7789, kSentinel}},
2571         {{7790, 7791, kSentinel}},  // NOLINT
2572         {{7792, 7793, kSentinel}},
2573         {{7794, 7795, kSentinel}},
2574         {{7796, 7797, kSentinel}},
2575         {{7798, 7799, kSentinel}},  // NOLINT
2576         {{7800, 7801, kSentinel}},
2577         {{7802, 7803, kSentinel}},
2578         {{7804, 7805, kSentinel}},
2579         {{7806, 7807, kSentinel}},  // NOLINT
2580         {{7808, 7809, kSentinel}},
2581         {{7810, 7811, kSentinel}},
2582         {{7812, 7813, kSentinel}},
2583         {{7814, 7815, kSentinel}},  // NOLINT
2584         {{7816, 7817, kSentinel}},
2585         {{7818, 7819, kSentinel}},
2586         {{7820, 7821, kSentinel}},
2587         {{7822, 7823, kSentinel}},  // NOLINT
2588         {{7824, 7825, kSentinel}},
2589         {{7826, 7827, kSentinel}},
2590         {{7828, 7829, kSentinel}},
2591         {{7840, 7841, kSentinel}},  // NOLINT
2592         {{7842, 7843, kSentinel}},
2593         {{7844, 7845, kSentinel}},
2594         {{7846, 7847, kSentinel}},
2595         {{7848, 7849, kSentinel}},  // NOLINT
2596         {{7850, 7851, kSentinel}},
2597         {{7852, 7853, kSentinel}},
2598         {{7854, 7855, kSentinel}},
2599         {{7856, 7857, kSentinel}},  // NOLINT
2600         {{7858, 7859, kSentinel}},
2601         {{7860, 7861, kSentinel}},
2602         {{7862, 7863, kSentinel}},
2603         {{7864, 7865, kSentinel}},  // NOLINT
2604         {{7866, 7867, kSentinel}},
2605         {{7868, 7869, kSentinel}},
2606         {{7870, 7871, kSentinel}},
2607         {{7872, 7873, kSentinel}},  // NOLINT
2608         {{7874, 7875, kSentinel}},
2609         {{7876, 7877, kSentinel}},
2610         {{7878, 7879, kSentinel}},
2611         {{7880, 7881, kSentinel}},  // NOLINT
2612         {{7882, 7883, kSentinel}},
2613         {{7884, 7885, kSentinel}},
2614         {{7886, 7887, kSentinel}},
2615         {{7888, 7889, kSentinel}},  // NOLINT
2616         {{7890, 7891, kSentinel}},
2617         {{7892, 7893, kSentinel}},
2618         {{7894, 7895, kSentinel}},
2619         {{7896, 7897, kSentinel}},  // NOLINT
2620         {{7898, 7899, kSentinel}},
2621         {{7900, 7901, kSentinel}},
2622         {{7902, 7903, kSentinel}},
2623         {{7904, 7905, kSentinel}},  // NOLINT
2624         {{7906, 7907, kSentinel}},
2625         {{7908, 7909, kSentinel}},
2626         {{7910, 7911, kSentinel}},
2627         {{7912, 7913, kSentinel}},  // NOLINT
2628         {{7914, 7915, kSentinel}},
2629         {{7916, 7917, kSentinel}},
2630         {{7918, 7919, kSentinel}},
2631         {{7920, 7921, kSentinel}},  // NOLINT
2632         {{7922, 7923, kSentinel}},
2633         {{7924, 7925, kSentinel}},
2634         {{7926, 7927, kSentinel}},
2635         {{7928, 7929, kSentinel}},  // NOLINT
2636         {{7930, 7931, kSentinel}},
2637         {{7932, 7933, kSentinel}},
2638         {{7934, 7935, kSentinel}},
2639         {{7936, 7944, kSentinel}},  // NOLINT
2640         {{7943, 7951, kSentinel}},
2641         {{7952, 7960, kSentinel}},
2642         {{7957, 7965, kSentinel}},
2643         {{7968, 7976, kSentinel}},  // NOLINT
2644         {{7975, 7983, kSentinel}},
2645         {{7984, 7992, kSentinel}},
2646         {{7991, 7999, kSentinel}},
2647         {{8000, 8008, kSentinel}},  // NOLINT
2648         {{8005, 8013, kSentinel}},
2649         {{8017, 8025, kSentinel}},
2650         {{8019, 8027, kSentinel}},
2651         {{8021, 8029, kSentinel}},  // NOLINT
2652         {{8023, 8031, kSentinel}},
2653         {{8032, 8040, kSentinel}},
2654         {{8039, 8047, kSentinel}},
2655         {{8048, 8122, kSentinel}},  // NOLINT
2656         {{8049, 8123, kSentinel}},
2657         {{8050, 8136, kSentinel}},
2658         {{8053, 8139, kSentinel}},
2659         {{8054, 8154, kSentinel}},  // NOLINT
2660         {{8055, 8155, kSentinel}},
2661         {{8056, 8184, kSentinel}},
2662         {{8057, 8185, kSentinel}},
2663         {{8058, 8170, kSentinel}},  // NOLINT
2664         {{8059, 8171, kSentinel}},
2665         {{8060, 8186, kSentinel}},
2666         {{8061, 8187, kSentinel}},
2667         {{8112, 8120, kSentinel}},  // NOLINT
2668         {{8113, 8121, kSentinel}},
2669         {{8144, 8152, kSentinel}},
2670         {{8145, 8153, kSentinel}},
2671         {{8160, 8168, kSentinel}},  // NOLINT
2672         {{8161, 8169, kSentinel}},
2673         {{8165, 8172, kSentinel}},
2674         {{kSentinel}}};                                         // NOLINT
2675 static const uint16_t kEcma262UnCanonicalizeTable0Size = 1005;  // NOLINT
2676 static const int32_t kEcma262UnCanonicalizeTable0[2010] = {
2677     1073741889, 1,    90,         5,    1073741921, 1,
2678     122,        5,    181,        9,    1073742016, 13,
2679     214,        17,   1073742040, 21,  // NOLINT
2680     222,        25,   1073742048, 13,   246,        17,
2681     1073742072, 21,   254,        25,   255,        29,
2682     256,        33,   257,        33,  // NOLINT
2683     258,        37,   259,        37,   260,        41,
2684     261,        41,   262,        45,   263,        45,
2685     264,        49,   265,        49,  // NOLINT
2686     266,        53,   267,        53,   268,        57,
2687     269,        57,   270,        61,   271,        61,
2688     272,        65,   273,        65,  // NOLINT
2689     274,        69,   275,        69,   276,        73,
2690     277,        73,   278,        77,   279,        77,
2691     280,        81,   281,        81,  // NOLINT
2692     282,        85,   283,        85,   284,        89,
2693     285,        89,   286,        93,   287,        93,
2694     288,        97,   289,        97,  // NOLINT
2695     290,        101,  291,        101,  292,        105,
2696     293,        105,  294,        109,  295,        109,
2697     296,        113,  297,        113,  // NOLINT
2698     298,        117,  299,        117,  300,        121,
2699     301,        121,  302,        125,  303,        125,
2700     306,        129,  307,        129,  // NOLINT
2701     308,        133,  309,        133,  310,        137,
2702     311,        137,  313,        141,  314,        141,
2703     315,        145,  316,        145,  // NOLINT
2704     317,        149,  318,        149,  319,        153,
2705     320,        153,  321,        157,  322,        157,
2706     323,        161,  324,        161,  // NOLINT
2707     325,        165,  326,        165,  327,        169,
2708     328,        169,  330,        173,  331,        173,
2709     332,        177,  333,        177,  // NOLINT
2710     334,        181,  335,        181,  336,        185,
2711     337,        185,  338,        189,  339,        189,
2712     340,        193,  341,        193,  // NOLINT
2713     342,        197,  343,        197,  344,        201,
2714     345,        201,  346,        205,  347,        205,
2715     348,        209,  349,        209,  // NOLINT
2716     350,        213,  351,        213,  352,        217,
2717     353,        217,  354,        221,  355,        221,
2718     356,        225,  357,        225,  // NOLINT
2719     358,        229,  359,        229,  360,        233,
2720     361,        233,  362,        237,  363,        237,
2721     364,        241,  365,        241,  // NOLINT
2722     366,        245,  367,        245,  368,        249,
2723     369,        249,  370,        253,  371,        253,
2724     372,        257,  373,        257,  // NOLINT
2725     374,        261,  375,        261,  376,        29,
2726     377,        265,  378,        265,  379,        269,
2727     380,        269,  381,        273,  // NOLINT
2728     382,        273,  384,        277,  385,        281,
2729     386,        285,  387,        285,  388,        289,
2730     389,        289,  390,        293,  // NOLINT
2731     391,        297,  392,        297,  1073742217, 301,
2732     394,        305,  395,        309,  396,        309,
2733     398,        313,  399,        317,  // NOLINT
2734     400,        321,  401,        325,  402,        325,
2735     403,        329,  404,        333,  405,        337,
2736     406,        341,  407,        345,  // NOLINT
2737     408,        349,  409,        349,  410,        353,
2738     412,        357,  413,        361,  414,        365,
2739     415,        369,  416,        373,  // NOLINT
2740     417,        373,  418,        377,  419,        377,
2741     420,        381,  421,        381,  422,        385,
2742     423,        389,  424,        389,  // NOLINT
2743     425,        393,  428,        397,  429,        397,
2744     430,        401,  431,        405,  432,        405,
2745     1073742257, 409,  434,        413,  // NOLINT
2746     435,        417,  436,        417,  437,        421,
2747     438,        421,  439,        425,  440,        429,
2748     441,        429,  444,        433,  // NOLINT
2749     445,        433,  447,        437,  452,        441,
2750     453,        441,  454,        441,  455,        445,
2751     456,        445,  457,        445,  // NOLINT
2752     458,        449,  459,        449,  460,        449,
2753     461,        453,  462,        453,  463,        457,
2754     464,        457,  465,        461,  // NOLINT
2755     466,        461,  467,        465,  468,        465,
2756     469,        469,  470,        469,  471,        473,
2757     472,        473,  473,        477,  // NOLINT
2758     474,        477,  475,        481,  476,        481,
2759     477,        313,  478,        485,  479,        485,
2760     480,        489,  481,        489,  // NOLINT
2761     482,        493,  483,        493,  484,        497,
2762     485,        497,  486,        501,  487,        501,
2763     488,        505,  489,        505,  // NOLINT
2764     490,        509,  491,        509,  492,        513,
2765     493,        513,  494,        517,  495,        517,
2766     497,        521,  498,        521,  // NOLINT
2767     499,        521,  500,        525,  501,        525,
2768     502,        337,  503,        437,  504,        529,
2769     505,        529,  506,        533,  // NOLINT
2770     507,        533,  508,        537,  509,        537,
2771     510,        541,  511,        541,  512,        545,
2772     513,        545,  514,        549,  // NOLINT
2773     515,        549,  516,        553,  517,        553,
2774     518,        557,  519,        557,  520,        561,
2775     521,        561,  522,        565,  // NOLINT
2776     523,        565,  524,        569,  525,        569,
2777     526,        573,  527,        573,  528,        577,
2778     529,        577,  530,        581,  // NOLINT
2779     531,        581,  532,        585,  533,        585,
2780     534,        589,  535,        589,  536,        593,
2781     537,        593,  538,        597,  // NOLINT
2782     539,        597,  540,        601,  541,        601,
2783     542,        605,  543,        605,  544,        365,
2784     546,        609,  547,        609,  // NOLINT
2785     548,        613,  549,        613,  550,        617,
2786     551,        617,  552,        621,  553,        621,
2787     554,        625,  555,        625,  // NOLINT
2788     556,        629,  557,        629,  558,        633,
2789     559,        633,  560,        637,  561,        637,
2790     562,        641,  563,        641,  // NOLINT
2791     570,        645,  571,        649,  572,        649,
2792     573,        353,  574,        653,  1073742399, 657,
2793     576,        661,  577,        665,  // NOLINT
2794     578,        665,  579,        277,  580,        669,
2795     581,        673,  582,        677,  583,        677,
2796     584,        681,  585,        681,  // NOLINT
2797     586,        685,  587,        685,  588,        689,
2798     589,        689,  590,        693,  591,        693,
2799     592,        697,  593,        701,  // NOLINT
2800     594,        705,  595,        281,  596,        293,
2801     1073742422, 301,  599,        305,  601,        317,
2802     603,        321,  604,        709,  // NOLINT
2803     608,        329,  609,        713,  611,        333,
2804     613,        717,  614,        721,  616,        345,
2805     617,        341,  619,        725,  // NOLINT
2806     620,        729,  623,        357,  625,        733,
2807     626,        361,  629,        369,  637,        737,
2808     640,        385,  643,        393,  // NOLINT
2809     647,        741,  648,        401,  649,        669,
2810     1073742474, 409,  651,        413,  652,        673,
2811     658,        425,  670,        745,  // NOLINT
2812     837,        749,  880,        753,  881,        753,
2813     882,        757,  883,        757,  886,        761,
2814     887,        761,  1073742715, 765,  // NOLINT
2815     893,        769,  895,        773,  902,        777,
2816     1073742728, 781,  906,        785,  908,        789,
2817     1073742734, 793,  911,        797,  // NOLINT
2818     913,        801,  914,        805,  1073742739, 809,
2819     916,        813,  917,        817,  1073742742, 821,
2820     919,        825,  920,        829,  // NOLINT
2821     921,        749,  922,        833,  923,        837,
2822     924,        9,    1073742749, 841,  927,        845,
2823     928,        849,  929,        853,  // NOLINT
2824     931,        857,  1073742756, 861,  933,        865,
2825     934,        869,  1073742759, 873,  939,        877,
2826     940,        777,  1073742765, 781,  // NOLINT
2827     943,        785,  945,        801,  946,        805,
2828     1073742771, 809,  948,        813,  949,        817,
2829     1073742774, 821,  951,        825,  // NOLINT
2830     952,        829,  953,        749,  954,        833,
2831     955,        837,  956,        9,    1073742781, 841,
2832     959,        845,  960,        849,  // NOLINT
2833     961,        853,  962,        857,  963,        857,
2834     1073742788, 861,  965,        865,  966,        869,
2835     1073742791, 873,  971,        877,  // NOLINT
2836     972,        789,  1073742797, 793,  974,        797,
2837     975,        881,  976,        805,  977,        829,
2838     981,        869,  982,        849,  // NOLINT
2839     983,        881,  984,        885,  985,        885,
2840     986,        889,  987,        889,  988,        893,
2841     989,        893,  990,        897,  // NOLINT
2842     991,        897,  992,        901,  993,        901,
2843     994,        905,  995,        905,  996,        909,
2844     997,        909,  998,        913,  // NOLINT
2845     999,        913,  1000,       917,  1001,       917,
2846     1002,       921,  1003,       921,  1004,       925,
2847     1005,       925,  1006,       929,  // NOLINT
2848     1007,       929,  1008,       833,  1009,       853,
2849     1010,       933,  1011,       773,  1013,       817,
2850     1015,       937,  1016,       937,  // NOLINT
2851     1017,       933,  1018,       941,  1019,       941,
2852     1073742845, 765,  1023,       769,  1073742848, 945,
2853     1039,       949,  1073742864, 953,  // NOLINT
2854     1071,       957,  1073742896, 953,  1103,       957,
2855     1073742928, 945,  1119,       949,  1120,       961,
2856     1121,       961,  1122,       965,  // NOLINT
2857     1123,       965,  1124,       969,  1125,       969,
2858     1126,       973,  1127,       973,  1128,       977,
2859     1129,       977,  1130,       981,  // NOLINT
2860     1131,       981,  1132,       985,  1133,       985,
2861     1134,       989,  1135,       989,  1136,       993,
2862     1137,       993,  1138,       997,  // NOLINT
2863     1139,       997,  1140,       1001, 1141,       1001,
2864     1142,       1005, 1143,       1005, 1144,       1009,
2865     1145,       1009, 1146,       1013,  // NOLINT
2866     1147,       1013, 1148,       1017, 1149,       1017,
2867     1150,       1021, 1151,       1021, 1152,       1025,
2868     1153,       1025, 1162,       1029,  // NOLINT
2869     1163,       1029, 1164,       1033, 1165,       1033,
2870     1166,       1037, 1167,       1037, 1168,       1041,
2871     1169,       1041, 1170,       1045,  // NOLINT
2872     1171,       1045, 1172,       1049, 1173,       1049,
2873     1174,       1053, 1175,       1053, 1176,       1057,
2874     1177,       1057, 1178,       1061,  // NOLINT
2875     1179,       1061, 1180,       1065, 1181,       1065,
2876     1182,       1069, 1183,       1069, 1184,       1073,
2877     1185,       1073, 1186,       1077,  // NOLINT
2878     1187,       1077, 1188,       1081, 1189,       1081,
2879     1190,       1085, 1191,       1085, 1192,       1089,
2880     1193,       1089, 1194,       1093,  // NOLINT
2881     1195,       1093, 1196,       1097, 1197,       1097,
2882     1198,       1101, 1199,       1101, 1200,       1105,
2883     1201,       1105, 1202,       1109,  // NOLINT
2884     1203,       1109, 1204,       1113, 1205,       1113,
2885     1206,       1117, 1207,       1117, 1208,       1121,
2886     1209,       1121, 1210,       1125,  // NOLINT
2887     1211,       1125, 1212,       1129, 1213,       1129,
2888     1214,       1133, 1215,       1133, 1216,       1137,
2889     1217,       1141, 1218,       1141,  // NOLINT
2890     1219,       1145, 1220,       1145, 1221,       1149,
2891     1222,       1149, 1223,       1153, 1224,       1153,
2892     1225,       1157, 1226,       1157,  // NOLINT
2893     1227,       1161, 1228,       1161, 1229,       1165,
2894     1230,       1165, 1231,       1137, 1232,       1169,
2895     1233,       1169, 1234,       1173,  // NOLINT
2896     1235,       1173, 1236,       1177, 1237,       1177,
2897     1238,       1181, 1239,       1181, 1240,       1185,
2898     1241,       1185, 1242,       1189,  // NOLINT
2899     1243,       1189, 1244,       1193, 1245,       1193,
2900     1246,       1197, 1247,       1197, 1248,       1201,
2901     1249,       1201, 1250,       1205,  // NOLINT
2902     1251,       1205, 1252,       1209, 1253,       1209,
2903     1254,       1213, 1255,       1213, 1256,       1217,
2904     1257,       1217, 1258,       1221,  // NOLINT
2905     1259,       1221, 1260,       1225, 1261,       1225,
2906     1262,       1229, 1263,       1229, 1264,       1233,
2907     1265,       1233, 1266,       1237,  // NOLINT
2908     1267,       1237, 1268,       1241, 1269,       1241,
2909     1270,       1245, 1271,       1245, 1272,       1249,
2910     1273,       1249, 1274,       1253,  // NOLINT
2911     1275,       1253, 1276,       1257, 1277,       1257,
2912     1278,       1261, 1279,       1261, 1280,       1265,
2913     1281,       1265, 1282,       1269,  // NOLINT
2914     1283,       1269, 1284,       1273, 1285,       1273,
2915     1286,       1277, 1287,       1277, 1288,       1281,
2916     1289,       1281, 1290,       1285,  // NOLINT
2917     1291,       1285, 1292,       1289, 1293,       1289,
2918     1294,       1293, 1295,       1293, 1296,       1297,
2919     1297,       1297, 1298,       1301,  // NOLINT
2920     1299,       1301, 1300,       1305, 1301,       1305,
2921     1302,       1309, 1303,       1309, 1304,       1313,
2922     1305,       1313, 1306,       1317,  // NOLINT
2923     1307,       1317, 1308,       1321, 1309,       1321,
2924     1310,       1325, 1311,       1325, 1312,       1329,
2925     1313,       1329, 1314,       1333,  // NOLINT
2926     1315,       1333, 1316,       1337, 1317,       1337,
2927     1318,       1341, 1319,       1341, 1320,       1345,
2928     1321,       1345, 1322,       1349,  // NOLINT
2929     1323,       1349, 1324,       1353, 1325,       1353,
2930     1326,       1357, 1327,       1357, 1073743153, 1361,
2931     1366,       1365, 1073743201, 1361,  // NOLINT
2932     1414,       1365, 1073746080, 1369, 4293,       1373,
2933     4295,       1377, 4301,       1381, 7545,       1385,
2934     7549,       1389, 7680,       1393,  // NOLINT
2935     7681,       1393, 7682,       1397, 7683,       1397,
2936     7684,       1401, 7685,       1401, 7686,       1405,
2937     7687,       1405, 7688,       1409,  // NOLINT
2938     7689,       1409, 7690,       1413, 7691,       1413,
2939     7692,       1417, 7693,       1417, 7694,       1421,
2940     7695,       1421, 7696,       1425,  // NOLINT
2941     7697,       1425, 7698,       1429, 7699,       1429,
2942     7700,       1433, 7701,       1433, 7702,       1437,
2943     7703,       1437, 7704,       1441,  // NOLINT
2944     7705,       1441, 7706,       1445, 7707,       1445,
2945     7708,       1449, 7709,       1449, 7710,       1453,
2946     7711,       1453, 7712,       1457,  // NOLINT
2947     7713,       1457, 7714,       1461, 7715,       1461,
2948     7716,       1465, 7717,       1465, 7718,       1469,
2949     7719,       1469, 7720,       1473,  // NOLINT
2950     7721,       1473, 7722,       1477, 7723,       1477,
2951     7724,       1481, 7725,       1481, 7726,       1485,
2952     7727,       1485, 7728,       1489,  // NOLINT
2953     7729,       1489, 7730,       1493, 7731,       1493,
2954     7732,       1497, 7733,       1497, 7734,       1501,
2955     7735,       1501, 7736,       1505,  // NOLINT
2956     7737,       1505, 7738,       1509, 7739,       1509,
2957     7740,       1513, 7741,       1513, 7742,       1517,
2958     7743,       1517, 7744,       1521,  // NOLINT
2959     7745,       1521, 7746,       1525, 7747,       1525,
2960     7748,       1529, 7749,       1529, 7750,       1533,
2961     7751,       1533, 7752,       1537,  // NOLINT
2962     7753,       1537, 7754,       1541, 7755,       1541,
2963     7756,       1545, 7757,       1545, 7758,       1549,
2964     7759,       1549, 7760,       1553,  // NOLINT
2965     7761,       1553, 7762,       1557, 7763,       1557,
2966     7764,       1561, 7765,       1561, 7766,       1565,
2967     7767,       1565, 7768,       1569,  // NOLINT
2968     7769,       1569, 7770,       1573, 7771,       1573,
2969     7772,       1577, 7773,       1577, 7774,       1581,
2970     7775,       1581, 7776,       1585,  // NOLINT
2971     7777,       1585, 7778,       1589, 7779,       1589,
2972     7780,       1593, 7781,       1593, 7782,       1597,
2973     7783,       1597, 7784,       1601,  // NOLINT
2974     7785,       1601, 7786,       1605, 7787,       1605,
2975     7788,       1609, 7789,       1609, 7790,       1613,
2976     7791,       1613, 7792,       1617,  // NOLINT
2977     7793,       1617, 7794,       1621, 7795,       1621,
2978     7796,       1625, 7797,       1625, 7798,       1629,
2979     7799,       1629, 7800,       1633,  // NOLINT
2980     7801,       1633, 7802,       1637, 7803,       1637,
2981     7804,       1641, 7805,       1641, 7806,       1645,
2982     7807,       1645, 7808,       1649,  // NOLINT
2983     7809,       1649, 7810,       1653, 7811,       1653,
2984     7812,       1657, 7813,       1657, 7814,       1661,
2985     7815,       1661, 7816,       1665,  // NOLINT
2986     7817,       1665, 7818,       1669, 7819,       1669,
2987     7820,       1673, 7821,       1673, 7822,       1677,
2988     7823,       1677, 7824,       1681,  // NOLINT
2989     7825,       1681, 7826,       1685, 7827,       1685,
2990     7828,       1689, 7829,       1689, 7835,       1585,
2991     7840,       1693, 7841,       1693,  // NOLINT
2992     7842,       1697, 7843,       1697, 7844,       1701,
2993     7845,       1701, 7846,       1705, 7847,       1705,
2994     7848,       1709, 7849,       1709,  // NOLINT
2995     7850,       1713, 7851,       1713, 7852,       1717,
2996     7853,       1717, 7854,       1721, 7855,       1721,
2997     7856,       1725, 7857,       1725,  // NOLINT
2998     7858,       1729, 7859,       1729, 7860,       1733,
2999     7861,       1733, 7862,       1737, 7863,       1737,
3000     7864,       1741, 7865,       1741,  // NOLINT
3001     7866,       1745, 7867,       1745, 7868,       1749,
3002     7869,       1749, 7870,       1753, 7871,       1753,
3003     7872,       1757, 7873,       1757,  // NOLINT
3004     7874,       1761, 7875,       1761, 7876,       1765,
3005     7877,       1765, 7878,       1769, 7879,       1769,
3006     7880,       1773, 7881,       1773,  // NOLINT
3007     7882,       1777, 7883,       1777, 7884,       1781,
3008     7885,       1781, 7886,       1785, 7887,       1785,
3009     7888,       1789, 7889,       1789,  // NOLINT
3010     7890,       1793, 7891,       1793, 7892,       1797,
3011     7893,       1797, 7894,       1801, 7895,       1801,
3012     7896,       1805, 7897,       1805,  // NOLINT
3013     7898,       1809, 7899,       1809, 7900,       1813,
3014     7901,       1813, 7902,       1817, 7903,       1817,
3015     7904,       1821, 7905,       1821,  // NOLINT
3016     7906,       1825, 7907,       1825, 7908,       1829,
3017     7909,       1829, 7910,       1833, 7911,       1833,
3018     7912,       1837, 7913,       1837,  // NOLINT
3019     7914,       1841, 7915,       1841, 7916,       1845,
3020     7917,       1845, 7918,       1849, 7919,       1849,
3021     7920,       1853, 7921,       1853,  // NOLINT
3022     7922,       1857, 7923,       1857, 7924,       1861,
3023     7925,       1861, 7926,       1865, 7927,       1865,
3024     7928,       1869, 7929,       1869,  // NOLINT
3025     7930,       1873, 7931,       1873, 7932,       1877,
3026     7933,       1877, 7934,       1881, 7935,       1881,
3027     1073749760, 1885, 7943,       1889,  // NOLINT
3028     1073749768, 1885, 7951,       1889, 1073749776, 1893,
3029     7957,       1897, 1073749784, 1893, 7965,       1897,
3030     1073749792, 1901, 7975,       1905,  // NOLINT
3031     1073749800, 1901, 7983,       1905, 1073749808, 1909,
3032     7991,       1913, 1073749816, 1909, 7999,       1913,
3033     1073749824, 1917, 8005,       1921,  // NOLINT
3034     1073749832, 1917, 8013,       1921, 8017,       1925,
3035     8019,       1929, 8021,       1933, 8023,       1937,
3036     8025,       1925, 8027,       1929,  // NOLINT
3037     8029,       1933, 8031,       1937, 1073749856, 1941,
3038     8039,       1945, 1073749864, 1941, 8047,       1945,
3039     1073749872, 1949, 8049,       1953,  // NOLINT
3040     1073749874, 1957, 8053,       1961, 1073749878, 1965,
3041     8055,       1969, 1073749880, 1973, 8057,       1977,
3042     1073749882, 1981, 8059,       1985,  // NOLINT
3043     1073749884, 1989, 8061,       1993, 1073749936, 1997,
3044     8113,       2001, 1073749944, 1997, 8121,       2001,
3045     1073749946, 1949, 8123,       1953,  // NOLINT
3046     8126,       749,  1073749960, 1957, 8139,       1961,
3047     1073749968, 2005, 8145,       2009, 1073749976, 2005,
3048     8153,       2009, 1073749978, 1965,  // NOLINT
3049     8155,       1969, 1073749984, 2013, 8161,       2017,
3050     8165,       2021, 1073749992, 2013, 8169,       2017,
3051     1073749994, 1981, 8171,       1985,  // NOLINT
3052     8172,       2021, 1073750008, 1973, 8185,       1977,
3053     1073750010, 1989, 8187,       1993};                              // NOLINT
3054 static const uint16_t kEcma262UnCanonicalizeMultiStrings0Size = 507;  // NOLINT
3055 static const MultiCharacterSpecialCase<2> kEcma262UnCanonicalizeMultiStrings1[83] = {  // NOLINT
3056   {{8498, 8526}}, {{8544, 8560}}, {{8559, 8575}}, {{8579, 8580}},  // NOLINT
3057   {{9398, 9424}}, {{9423, 9449}}, {{11264, 11312}}, {{11310, 11358}},  // NOLINT
3058   {{11360, 11361}}, {{619, 11362}}, {{7549, 11363}}, {{637, 11364}},  // NOLINT
3059   {{570, 11365}}, {{574, 11366}}, {{11367, 11368}}, {{11369, 11370}},  // NOLINT
3060   {{11371, 11372}}, {{593, 11373}}, {{625, 11374}}, {{592, 11375}},  // NOLINT
3061   {{594, 11376}}, {{11378, 11379}}, {{11381, 11382}}, {{575, 11390}},  // NOLINT
3062   {{576, 11391}}, {{11392, 11393}}, {{11394, 11395}}, {{11396, 11397}},  // NOLINT
3063   {{11398, 11399}}, {{11400, 11401}}, {{11402, 11403}}, {{11404, 11405}},  // NOLINT
3064   {{11406, 11407}}, {{11408, 11409}}, {{11410, 11411}}, {{11412, 11413}},  // NOLINT
3065   {{11414, 11415}}, {{11416, 11417}}, {{11418, 11419}}, {{11420, 11421}},  // NOLINT
3066   {{11422, 11423}}, {{11424, 11425}}, {{11426, 11427}}, {{11428, 11429}},  // NOLINT
3067   {{11430, 11431}}, {{11432, 11433}}, {{11434, 11435}}, {{11436, 11437}},  // NOLINT
3068   {{11438, 11439}}, {{11440, 11441}}, {{11442, 11443}}, {{11444, 11445}},  // NOLINT
3069   {{11446, 11447}}, {{11448, 11449}}, {{11450, 11451}}, {{11452, 11453}},  // NOLINT
3070   {{11454, 11455}}, {{11456, 11457}}, {{11458, 11459}}, {{11460, 11461}},  // NOLINT
3071   {{11462, 11463}}, {{11464, 11465}}, {{11466, 11467}}, {{11468, 11469}},  // NOLINT
3072   {{11470, 11471}}, {{11472, 11473}}, {{11474, 11475}}, {{11476, 11477}},  // NOLINT
3073   {{11478, 11479}}, {{11480, 11481}}, {{11482, 11483}}, {{11484, 11485}},  // NOLINT
3074   {{11486, 11487}}, {{11488, 11489}}, {{11490, 11491}}, {{11499, 11500}},  // NOLINT
3075   {{11501, 11502}}, {{11506, 11507}}, {{4256, 11520}}, {{4293, 11557}},  // NOLINT
3076   {{4295, 11559}}, {{4301, 11565}}, {{kSentinel}} }; // NOLINT
3077 static const uint16_t kEcma262UnCanonicalizeTable1Size = 149;  // NOLINT
3078 static const int32_t kEcma262UnCanonicalizeTable1[298] = {
3079   306, 1, 334, 1, 1073742176, 5, 367, 9, 1073742192, 5, 383, 9, 387, 13, 388, 13,  // NOLINT
3080   1073743030, 17, 1231, 21, 1073743056, 17, 1257, 21, 1073744896, 25, 3118, 29, 1073744944, 25, 3166, 29,  // NOLINT
3081   3168, 33, 3169, 33, 3170, 37, 3171, 41, 3172, 45, 3173, 49, 3174, 53, 3175, 57,  // NOLINT
3082   3176, 57, 3177, 61, 3178, 61, 3179, 65, 3180, 65, 3181, 69, 3182, 73, 3183, 77,  // NOLINT
3083   3184, 81, 3186, 85, 3187, 85, 3189, 89, 3190, 89, 1073745022, 93, 3199, 97, 3200, 101,  // NOLINT
3084   3201, 101, 3202, 105, 3203, 105, 3204, 109, 3205, 109, 3206, 113, 3207, 113, 3208, 117,  // NOLINT
3085   3209, 117, 3210, 121, 3211, 121, 3212, 125, 3213, 125, 3214, 129, 3215, 129, 3216, 133,  // NOLINT
3086   3217, 133, 3218, 137, 3219, 137, 3220, 141, 3221, 141, 3222, 145, 3223, 145, 3224, 149,  // NOLINT
3087   3225, 149, 3226, 153, 3227, 153, 3228, 157, 3229, 157, 3230, 161, 3231, 161, 3232, 165,  // NOLINT
3088   3233, 165, 3234, 169, 3235, 169, 3236, 173, 3237, 173, 3238, 177, 3239, 177, 3240, 181,  // NOLINT
3089   3241, 181, 3242, 185, 3243, 185, 3244, 189, 3245, 189, 3246, 193, 3247, 193, 3248, 197,  // NOLINT
3090   3249, 197, 3250, 201, 3251, 201, 3252, 205, 3253, 205, 3254, 209, 3255, 209, 3256, 213,  // NOLINT
3091   3257, 213, 3258, 217, 3259, 217, 3260, 221, 3261, 221, 3262, 225, 3263, 225, 3264, 229,  // NOLINT
3092   3265, 229, 3266, 233, 3267, 233, 3268, 237, 3269, 237, 3270, 241, 3271, 241, 3272, 245,  // NOLINT
3093   3273, 245, 3274, 249, 3275, 249, 3276, 253, 3277, 253, 3278, 257, 3279, 257, 3280, 261,  // NOLINT
3094   3281, 261, 3282, 265, 3283, 265, 3284, 269, 3285, 269, 3286, 273, 3287, 273, 3288, 277,  // NOLINT
3095   3289, 277, 3290, 281, 3291, 281, 3292, 285, 3293, 285, 3294, 289, 3295, 289, 3296, 293,  // NOLINT
3096   3297, 293, 3298, 297, 3299, 297, 3307, 301, 3308, 301, 3309, 305, 3310, 305, 3314, 309,  // NOLINT
3097   3315, 309, 1073745152, 313, 3365, 317, 3367, 321, 3373, 325 };  // NOLINT
3098 static const uint16_t kEcma262UnCanonicalizeMultiStrings1Size = 83;  // NOLINT
3099 static const MultiCharacterSpecialCase<2>
3100     kEcma262UnCanonicalizeMultiStrings5[104] = {  // NOLINT
3101         {{42560, 42561}},
3102         {{42562, 42563}},
3103         {{42564, 42565}},
3104         {{42566, 42567}},  // NOLINT
3105         {{42568, 42569}},
3106         {{42570, 42571}},
3107         {{42572, 42573}},
3108         {{42574, 42575}},  // NOLINT
3109         {{42576, 42577}},
3110         {{42578, 42579}},
3111         {{42580, 42581}},
3112         {{42582, 42583}},  // NOLINT
3113         {{42584, 42585}},
3114         {{42586, 42587}},
3115         {{42588, 42589}},
3116         {{42590, 42591}},  // NOLINT
3117         {{42592, 42593}},
3118         {{42594, 42595}},
3119         {{42596, 42597}},
3120         {{42598, 42599}},  // NOLINT
3121         {{42600, 42601}},
3122         {{42602, 42603}},
3123         {{42604, 42605}},
3124         {{42624, 42625}},  // NOLINT
3125         {{42626, 42627}},
3126         {{42628, 42629}},
3127         {{42630, 42631}},
3128         {{42632, 42633}},  // NOLINT
3129         {{42634, 42635}},
3130         {{42636, 42637}},
3131         {{42638, 42639}},
3132         {{42640, 42641}},  // NOLINT
3133         {{42642, 42643}},
3134         {{42644, 42645}},
3135         {{42646, 42647}},
3136         {{42648, 42649}},  // NOLINT
3137         {{42650, 42651}},
3138         {{42786, 42787}},
3139         {{42788, 42789}},
3140         {{42790, 42791}},  // NOLINT
3141         {{42792, 42793}},
3142         {{42794, 42795}},
3143         {{42796, 42797}},
3144         {{42798, 42799}},  // NOLINT
3145         {{42802, 42803}},
3146         {{42804, 42805}},
3147         {{42806, 42807}},
3148         {{42808, 42809}},  // NOLINT
3149         {{42810, 42811}},
3150         {{42812, 42813}},
3151         {{42814, 42815}},
3152         {{42816, 42817}},  // NOLINT
3153         {{42818, 42819}},
3154         {{42820, 42821}},
3155         {{42822, 42823}},
3156         {{42824, 42825}},  // NOLINT
3157         {{42826, 42827}},
3158         {{42828, 42829}},
3159         {{42830, 42831}},
3160         {{42832, 42833}},  // NOLINT
3161         {{42834, 42835}},
3162         {{42836, 42837}},
3163         {{42838, 42839}},
3164         {{42840, 42841}},  // NOLINT
3165         {{42842, 42843}},
3166         {{42844, 42845}},
3167         {{42846, 42847}},
3168         {{42848, 42849}},  // NOLINT
3169         {{42850, 42851}},
3170         {{42852, 42853}},
3171         {{42854, 42855}},
3172         {{42856, 42857}},  // NOLINT
3173         {{42858, 42859}},
3174         {{42860, 42861}},
3175         {{42862, 42863}},
3176         {{42873, 42874}},  // NOLINT
3177         {{42875, 42876}},
3178         {{7545, 42877}},
3179         {{42878, 42879}},
3180         {{42880, 42881}},  // NOLINT
3181         {{42882, 42883}},
3182         {{42884, 42885}},
3183         {{42886, 42887}},
3184         {{42891, 42892}},  // NOLINT
3185         {{613, 42893}},
3186         {{42896, 42897}},
3187         {{42898, 42899}},
3188         {{42902, 42903}},  // NOLINT
3189         {{42904, 42905}},
3190         {{42906, 42907}},
3191         {{42908, 42909}},
3192         {{42910, 42911}},  // NOLINT
3193         {{42912, 42913}},
3194         {{42914, 42915}},
3195         {{42916, 42917}},
3196         {{42918, 42919}},  // NOLINT
3197         {{42920, 42921}},
3198         {{614, 42922}},
3199         {{604, 42923}},
3200         {{609, 42924}},  // NOLINT
3201         {{620, 42925}},
3202         {{670, 42928}},
3203         {{647, 42929}},
3204         {{kSentinel}}};                                        // NOLINT
3205 static const uint16_t kEcma262UnCanonicalizeTable5Size = 198;  // NOLINT
3206 static const int32_t kEcma262UnCanonicalizeTable5
3207     [396] = {1600, 1,   1601, 1,   1602, 5,   1603, 5,
3208              1604, 9,   1605, 9,   1606, 13,  1607, 13,  // NOLINT
3209              1608, 17,  1609, 17,  1610, 21,  1611, 21,
3210              1612, 25,  1613, 25,  1614, 29,  1615, 29,  // NOLINT
3211              1616, 33,  1617, 33,  1618, 37,  1619, 37,
3212              1620, 41,  1621, 41,  1622, 45,  1623, 45,  // NOLINT
3213              1624, 49,  1625, 49,  1626, 53,  1627, 53,
3214              1628, 57,  1629, 57,  1630, 61,  1631, 61,  // NOLINT
3215              1632, 65,  1633, 65,  1634, 69,  1635, 69,
3216              1636, 73,  1637, 73,  1638, 77,  1639, 77,  // NOLINT
3217              1640, 81,  1641, 81,  1642, 85,  1643, 85,
3218              1644, 89,  1645, 89,  1664, 93,  1665, 93,  // NOLINT
3219              1666, 97,  1667, 97,  1668, 101, 1669, 101,
3220              1670, 105, 1671, 105, 1672, 109, 1673, 109,  // NOLINT
3221              1674, 113, 1675, 113, 1676, 117, 1677, 117,
3222              1678, 121, 1679, 121, 1680, 125, 1681, 125,  // NOLINT
3223              1682, 129, 1683, 129, 1684, 133, 1685, 133,
3224              1686, 137, 1687, 137, 1688, 141, 1689, 141,  // NOLINT
3225              1690, 145, 1691, 145, 1826, 149, 1827, 149,
3226              1828, 153, 1829, 153, 1830, 157, 1831, 157,  // NOLINT
3227              1832, 161, 1833, 161, 1834, 165, 1835, 165,
3228              1836, 169, 1837, 169, 1838, 173, 1839, 173,  // NOLINT
3229              1842, 177, 1843, 177, 1844, 181, 1845, 181,
3230              1846, 185, 1847, 185, 1848, 189, 1849, 189,  // NOLINT
3231              1850, 193, 1851, 193, 1852, 197, 1853, 197,
3232              1854, 201, 1855, 201, 1856, 205, 1857, 205,  // NOLINT
3233              1858, 209, 1859, 209, 1860, 213, 1861, 213,
3234              1862, 217, 1863, 217, 1864, 221, 1865, 221,  // NOLINT
3235              1866, 225, 1867, 225, 1868, 229, 1869, 229,
3236              1870, 233, 1871, 233, 1872, 237, 1873, 237,  // NOLINT
3237              1874, 241, 1875, 241, 1876, 245, 1877, 245,
3238              1878, 249, 1879, 249, 1880, 253, 1881, 253,  // NOLINT
3239              1882, 257, 1883, 257, 1884, 261, 1885, 261,
3240              1886, 265, 1887, 265, 1888, 269, 1889, 269,  // NOLINT
3241              1890, 273, 1891, 273, 1892, 277, 1893, 277,
3242              1894, 281, 1895, 281, 1896, 285, 1897, 285,  // NOLINT
3243              1898, 289, 1899, 289, 1900, 293, 1901, 293,
3244              1902, 297, 1903, 297, 1913, 301, 1914, 301,  // NOLINT
3245              1915, 305, 1916, 305, 1917, 309, 1918, 313,
3246              1919, 313, 1920, 317, 1921, 317, 1922, 321,  // NOLINT
3247              1923, 321, 1924, 325, 1925, 325, 1926, 329,
3248              1927, 329, 1931, 333, 1932, 333, 1933, 337,  // NOLINT
3249              1936, 341, 1937, 341, 1938, 345, 1939, 345,
3250              1942, 349, 1943, 349, 1944, 353, 1945, 353,  // NOLINT
3251              1946, 357, 1947, 357, 1948, 361, 1949, 361,
3252              1950, 365, 1951, 365, 1952, 369, 1953, 369,  // NOLINT
3253              1954, 373, 1955, 373, 1956, 377, 1957, 377,
3254              1958, 381, 1959, 381, 1960, 385, 1961, 385,  // NOLINT
3255              1962, 389, 1963, 393, 1964, 397, 1965, 401,
3256              1968, 405, 1969, 409};                                   // NOLINT
3257 static const uint16_t kEcma262UnCanonicalizeMultiStrings5Size = 104;  // NOLINT
3258 static const MultiCharacterSpecialCase<2> kEcma262UnCanonicalizeMultiStrings7[3] = {  // NOLINT
3259   {{65313, 65345}}, {{65338, 65370}}, {{kSentinel}} }; // NOLINT
3260 static const uint16_t kEcma262UnCanonicalizeTable7Size = 4;  // NOLINT
3261 static const int32_t kEcma262UnCanonicalizeTable7[8] = {
3262   1073749793, 1, 7994, 5, 1073749825, 1, 8026, 5 };  // NOLINT
3263 static const uint16_t kEcma262UnCanonicalizeMultiStrings7Size = 3;  // NOLINT
Convert(uchar c,uchar n,uchar * result,bool * allow_caching_ptr)3264 int Ecma262UnCanonicalize::Convert(uchar c,
3265                       uchar n,
3266                       uchar* result,
3267                       bool* allow_caching_ptr) {
3268   int chunk_index = c >> 13;
3269   switch (chunk_index) {
3270     case 0: return LookupMapping<true>(kEcma262UnCanonicalizeTable0,
3271                                            kEcma262UnCanonicalizeTable0Size,
3272                                            kEcma262UnCanonicalizeMultiStrings0,
3273                                            c,
3274                                            n,
3275                                            result,
3276                                            allow_caching_ptr);
3277     case 1: return LookupMapping<true>(kEcma262UnCanonicalizeTable1,
3278                                            kEcma262UnCanonicalizeTable1Size,
3279                                            kEcma262UnCanonicalizeMultiStrings1,
3280                                            c,
3281                                            n,
3282                                            result,
3283                                            allow_caching_ptr);
3284     case 5: return LookupMapping<true>(kEcma262UnCanonicalizeTable5,
3285                                            kEcma262UnCanonicalizeTable5Size,
3286                                            kEcma262UnCanonicalizeMultiStrings5,
3287                                            c,
3288                                            n,
3289                                            result,
3290                                            allow_caching_ptr);
3291     case 7: return LookupMapping<true>(kEcma262UnCanonicalizeTable7,
3292                                            kEcma262UnCanonicalizeTable7Size,
3293                                            kEcma262UnCanonicalizeMultiStrings7,
3294                                            c,
3295                                            n,
3296                                            result,
3297                                            allow_caching_ptr);
3298     default: return 0;
3299   }
3300 }
3301 
3302 static const MultiCharacterSpecialCase<1> kCanonicalizationRangeMultiStrings0[1] = {  // NOLINT
3303   {{kSentinel}} }; // NOLINT
3304 static const uint16_t kCanonicalizationRangeTable0Size = 70;  // NOLINT
3305 static const int32_t kCanonicalizationRangeTable0[140] = {
3306   1073741889, 100, 90, 0, 1073741921, 100, 122, 0, 1073742016, 88, 214, 0, 1073742040, 24, 222, 0,  // NOLINT
3307   1073742048, 88, 246, 0, 1073742072, 24, 254, 0, 1073742715, 8, 893, 0, 1073742728, 8, 906, 0,  // NOLINT
3308   1073742749, 8, 927, 0, 1073742759, 16, 939, 0, 1073742765, 8, 943, 0, 1073742781, 8, 959, 0,  // NOLINT
3309   1073742791, 16, 971, 0, 1073742845, 8, 1023, 0, 1073742848, 60, 1039, 0, 1073742864, 124, 1071, 0,  // NOLINT
3310   1073742896, 124, 1103, 0, 1073742928, 60, 1119, 0, 1073743153, 148, 1366, 0, 1073743201, 148, 1414, 0,  // NOLINT
3311   1073746080, 148, 4293, 0, 1073749760, 28, 7943, 0, 1073749768, 28, 7951, 0, 1073749776, 20, 7957, 0,  // NOLINT
3312   1073749784, 20, 7965, 0, 1073749792, 28, 7975, 0, 1073749800, 28, 7983, 0, 1073749808, 28, 7991, 0,  // NOLINT
3313   1073749816, 28, 7999, 0, 1073749824, 20, 8005, 0, 1073749832, 20, 8013, 0, 1073749856, 28, 8039, 0,  // NOLINT
3314   1073749864, 28, 8047, 0, 1073749874, 12, 8053, 0, 1073749960, 12, 8139, 0 };  // NOLINT
3315 static const uint16_t kCanonicalizationRangeMultiStrings0Size = 1;  // NOLINT
3316 static const MultiCharacterSpecialCase<1> kCanonicalizationRangeMultiStrings1[1] = {  // NOLINT
3317   {{kSentinel}} }; // NOLINT
3318 static const uint16_t kCanonicalizationRangeTable1Size = 14;  // NOLINT
3319 static const int32_t kCanonicalizationRangeTable1[28] = {
3320   1073742176, 60, 367, 0, 1073742192, 60, 383, 0, 1073743030, 100, 1231, 0, 1073743056, 100, 1257, 0,  // NOLINT
3321   1073744896, 184, 3118, 0, 1073744944, 184, 3166, 0, 1073745152, 148, 3365, 0 };  // NOLINT
3322 static const uint16_t kCanonicalizationRangeMultiStrings1Size = 1;  // NOLINT
3323 static const MultiCharacterSpecialCase<1> kCanonicalizationRangeMultiStrings7[1] = {  // NOLINT
3324   {{kSentinel}} }; // NOLINT
3325 static const uint16_t kCanonicalizationRangeTable7Size = 4;  // NOLINT
3326 static const int32_t kCanonicalizationRangeTable7[8] = {
3327   1073749793, 100, 7994, 0, 1073749825, 100, 8026, 0 };  // NOLINT
3328 static const uint16_t kCanonicalizationRangeMultiStrings7Size = 1;  // NOLINT
Convert(uchar c,uchar n,uchar * result,bool * allow_caching_ptr)3329 int CanonicalizationRange::Convert(uchar c,
3330                       uchar n,
3331                       uchar* result,
3332                       bool* allow_caching_ptr) {
3333   int chunk_index = c >> 13;
3334   switch (chunk_index) {
3335     case 0: return LookupMapping<false>(kCanonicalizationRangeTable0,
3336                                            kCanonicalizationRangeTable0Size,
3337                                            kCanonicalizationRangeMultiStrings0,
3338                                            c,
3339                                            n,
3340                                            result,
3341                                            allow_caching_ptr);
3342     case 1: return LookupMapping<false>(kCanonicalizationRangeTable1,
3343                                            kCanonicalizationRangeTable1Size,
3344                                            kCanonicalizationRangeMultiStrings1,
3345                                            c,
3346                                            n,
3347                                            result,
3348                                            allow_caching_ptr);
3349     case 7: return LookupMapping<false>(kCanonicalizationRangeTable7,
3350                                            kCanonicalizationRangeTable7Size,
3351                                            kCanonicalizationRangeMultiStrings7,
3352                                            c,
3353                                            n,
3354                                            result,
3355                                            allow_caching_ptr);
3356     default: return 0;
3357   }
3358 }
3359 
3360 
3361 const uchar UnicodeData::kMaxCodePoint = 65533;
3362 
GetByteCount()3363 int UnicodeData::GetByteCount() {
3364   return kUppercaseTable0Size * sizeof(int32_t)         // NOLINT
3365          + kUppercaseTable1Size * sizeof(int32_t)       // NOLINT
3366          + kUppercaseTable5Size * sizeof(int32_t)       // NOLINT
3367          + kUppercaseTable7Size * sizeof(int32_t)       // NOLINT
3368          + kLowercaseTable0Size * sizeof(int32_t)       // NOLINT
3369          + kLowercaseTable1Size * sizeof(int32_t)       // NOLINT
3370          + kLowercaseTable5Size * sizeof(int32_t)       // NOLINT
3371          + kLowercaseTable7Size * sizeof(int32_t)       // NOLINT
3372          + kLetterTable0Size * sizeof(int32_t)          // NOLINT
3373          + kLetterTable1Size * sizeof(int32_t)          // NOLINT
3374          + kLetterTable2Size * sizeof(int32_t)          // NOLINT
3375          + kLetterTable3Size * sizeof(int32_t)          // NOLINT
3376          + kLetterTable4Size * sizeof(int32_t)          // NOLINT
3377          + kLetterTable5Size * sizeof(int32_t)          // NOLINT
3378          + kLetterTable6Size * sizeof(int32_t)          // NOLINT
3379          + kLetterTable7Size * sizeof(int32_t)          // NOLINT
3380          + kID_StartTable0Size * sizeof(int32_t)        // NOLINT
3381          + kID_StartTable1Size * sizeof(int32_t)        // NOLINT
3382          + kID_StartTable2Size * sizeof(int32_t)        // NOLINT
3383          + kID_StartTable3Size * sizeof(int32_t)        // NOLINT
3384          + kID_StartTable4Size * sizeof(int32_t)        // NOLINT
3385          + kID_StartTable5Size * sizeof(int32_t)        // NOLINT
3386          + kID_StartTable6Size * sizeof(int32_t)        // NOLINT
3387          + kID_StartTable7Size * sizeof(int32_t)        // NOLINT
3388          + kID_ContinueTable0Size * sizeof(int32_t)     // NOLINT
3389          + kID_ContinueTable1Size * sizeof(int32_t)     // NOLINT
3390          + kID_ContinueTable5Size * sizeof(int32_t)     // NOLINT
3391          + kID_ContinueTable7Size * sizeof(int32_t)     // NOLINT
3392          + kWhiteSpaceTable0Size * sizeof(int32_t)      // NOLINT
3393          + kWhiteSpaceTable1Size * sizeof(int32_t)      // NOLINT
3394          + kWhiteSpaceTable7Size * sizeof(int32_t)      // NOLINT
3395          + kLineTerminatorTable0Size * sizeof(int32_t)  // NOLINT
3396          + kLineTerminatorTable1Size * sizeof(int32_t)  // NOLINT
3397          +
3398          kToLowercaseMultiStrings0Size *
3399              sizeof(MultiCharacterSpecialCase<2>)  // NOLINT
3400          +
3401          kToLowercaseMultiStrings1Size *
3402              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
3403          +
3404          kToLowercaseMultiStrings5Size *
3405              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
3406          +
3407          kToLowercaseMultiStrings7Size *
3408              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
3409          +
3410          kToUppercaseMultiStrings0Size *
3411              sizeof(MultiCharacterSpecialCase<3>)  // NOLINT
3412          +
3413          kToUppercaseMultiStrings1Size *
3414              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
3415          +
3416          kToUppercaseMultiStrings5Size *
3417              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
3418          +
3419          kToUppercaseMultiStrings7Size *
3420              sizeof(MultiCharacterSpecialCase<3>)  // NOLINT
3421          +
3422          kEcma262CanonicalizeMultiStrings0Size *
3423              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
3424          +
3425          kEcma262CanonicalizeMultiStrings1Size *
3426              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
3427          +
3428          kEcma262CanonicalizeMultiStrings5Size *
3429              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
3430          +
3431          kEcma262CanonicalizeMultiStrings7Size *
3432              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
3433          +
3434          kEcma262UnCanonicalizeMultiStrings0Size *
3435              sizeof(MultiCharacterSpecialCase<4>)  // NOLINT
3436          +
3437          kEcma262UnCanonicalizeMultiStrings1Size *
3438              sizeof(MultiCharacterSpecialCase<2>)  // NOLINT
3439          +
3440          kEcma262UnCanonicalizeMultiStrings5Size *
3441              sizeof(MultiCharacterSpecialCase<2>)  // NOLINT
3442          +
3443          kEcma262UnCanonicalizeMultiStrings7Size *
3444              sizeof(MultiCharacterSpecialCase<2>)  // NOLINT
3445          +
3446          kCanonicalizationRangeMultiStrings0Size *
3447              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
3448          +
3449          kCanonicalizationRangeMultiStrings1Size *
3450              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
3451          +
3452          kCanonicalizationRangeMultiStrings7Size *
3453              sizeof(MultiCharacterSpecialCase<1>);  // NOLINT
3454 }
3455 
3456 }  // namespace unibrow
3457