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