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