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