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