Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/js/src/irregexp/util/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 86 kB image not shown  

Quelle  UnicodeShim.cpp

  Sprache: C
 

// Copyright 2012 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// This file is a subset of:
//  https://github.com/v8/v8/blob/master/src/strings/unicode.cc

#include "irregexp/RegExpShim.h"

#ifdef V8_INTL_SUPPORT
#  include "unicode/uchar.h"
#endif

namespace v8 {
namespace unibrow {

#ifndef V8_INTL_SUPPORT
static const int kStartBit = (1 << 30);
static const int kChunkBits = (1 << 13);
#endif  // !V8_INTL_SUPPORT

static const uchar kSentinel = static_cast<uchar>(-1);

/**
 * \file
 * Implementations of functions for working with Unicode.
 */


using int16_t = signed short;     // NOLINT
using uint16_t = unsigned short;  // NOLINT
using int32_t = int;              // NOLINT

#ifndef V8_INTL_SUPPORT
// All access to the character table should go through this function.
template <int D>
static inline uchar TableGet(const int32_t* table, int index) {
  return table[D * index];
}

static inline uchar GetEntry(int32_t entry) { return entry & (kStartBit - 1); }

static inline bool IsStart(int32_t entry) { return (entry & kStartBit) != 0; }

/**
 * Look up a character in the Unicode table using a mix of binary and
 * interpolation search.  For a uniformly distributed array
 * interpolation search beats binary search by a wide margin.  However,
 * in this case interpolation search degenerates because of some very
 * high values in the lower end of the table so this function uses a
 * combination.  The average number of steps to look up the information
 * about a character is around 10, slightly higher if there is no
 * information available about the character.
 */

static bool LookupPredicate(const int32_t* table, uint16_t size, uchar chr) {
  static const int kEntryDist = 1;
  uint16_t value = chr & (kChunkBits - 1);
  unsigned int low = 0;
  unsigned int high = size - 1;
  while (high != low) {
    unsigned int mid = low + ((high - low) >> 1);
    uchar current_value = GetEntry(TableGet<kEntryDist>(table, mid));
    // If we've found an entry less than or equal to this one, and the
    // next one is not also less than this one, we've arrived.
    if ((current_value <= value) &&
        (mid + 1 == size ||
         GetEntry(TableGet<kEntryDist>(table, mid + 1)) > value)) {
      low = mid;
      break;
    } else if (current_value < value) {
      low = mid + 1;
    } else if (current_value > value) {
      // If we've just checked the bottom-most value and it's not
      // the one we're looking for, we're done.
      if (mid == 0break;
      high = mid - 1;
    }
  }
  int32_t field = TableGet<kEntryDist>(table, low);
  uchar entry = GetEntry(field);
  bool is_start = IsStart(field);
  return (entry == value) || (entry < value && is_start);
}
#endif  // !V8_INTL_SUPPORT

template <int kW>
struct MultiCharacterSpecialCase {
  static const uchar kEndOfEncoding = kSentinel;
  uchar chars[kW];
};

#ifndef V8_INTL_SUPPORT
// Look up the mapping for the given character in the specified table,
// which is of the specified length and uses the specified special case
// mapping for multi-char mappings.  The next parameter is the character
// following the one to map.  The result will be written in to the result
// buffer and the number of characters written will be returned.  Finally,
// if the allow_caching_ptr is non-null then false will be stored in
// it if the result contains multiple characters or depends on the
// context.
// If ranges are linear, a match between a start and end point is
// offset by the distance between the match and the start. Otherwise
// the result is the same as for the start point on the entire range.
template <bool ranges_are_linear, int kW>
static int LookupMapping(const int32_t* table, uint16_t size,
                         const MultiCharacterSpecialCase<kW>* multi_chars,
                         uchar chr, uchar next, uchar* result,
                         bool* allow_caching_ptr) {
  static const int kEntryDist = 2;
  uint16_t key = chr & (kChunkBits - 1);
  uint16_t chunk_start = chr - key;
  unsigned int low = 0;
  unsigned int high = size - 1;
  while (high != low) {
    unsigned int mid = low + ((high - low) >> 1);
    uchar current_value = GetEntry(TableGet<kEntryDist>(table, mid));
    // If we've found an entry less than or equal to this one, and the next one
    // is not also less than this one, we've arrived.
    if ((current_value <= key) &&
        (mid + 1 == size ||
         GetEntry(TableGet<kEntryDist>(table, mid + 1)) > key)) {
      low = mid;
      break;
    } else if (current_value < key) {
      low = mid + 1;
    } else if (current_value > key) {
      // If we've just checked the bottom-most value and it's not
      // the one we're looking for, we're done.
      if (mid == 0break;
      high = mid - 1;
    }
  }
  int32_t field = TableGet<kEntryDist>(table, low);
  uchar entry = GetEntry(field);
  bool is_start = IsStart(field);
  bool found = (entry == key) || (entry < key && is_start);
  if (found) {
    int32_t value = table[2 * low + 1];
    if (value == 0) {
      // 0 means not present
      return 0;
    } else if ((value & 3) == 0) {
      // Low bits 0 means a constant offset from the given character.
      if (ranges_are_linear) {
        result[0] = chr + (value >> 2);
      } else {
        result[0] = entry + chunk_start + (value >> 2);
      }
      return 1;
    } else if ((value & 3) == 1) {
      // Low bits 1 means a special case mapping
      if (allow_caching_ptr) *allow_caching_ptr = false;
      const MultiCharacterSpecialCase<kW>& mapping = multi_chars[value >> 2];
      int length = 0;
      for (length = 0; length < kW; length++) {
        uchar mapped = mapping.chars[length];
        if (mapped == MultiCharacterSpecialCase<kW>::kEndOfEncoding) break;
        if (ranges_are_linear) {
          result[length] = mapped + (key - entry);
        } else {
          result[length] = mapped;
        }
      }
      return length;
    } else {
      // Low bits 2 means a really really special case
      if (allow_caching_ptr) *allow_caching_ptr = false;
      // The cases of this switch are defined in unicode.py in the
      // really_special_cases mapping.
      switch (value >> 2) {
        case 1:
          // Really special case 1: upper case sigma.  This letter
          // converts to two different lower case sigmas depending on
          // whether or not it occurs at the end of a word.
          if (next != 0 && Letter::Is(next)) {
            result[0] = 0x03C3;
          } else {
            result[0] = 0x03C2;
          }
          return 1;
        default:
          return 0;
      }
      return -1;
    }
  } else {
    return 0;
  }
}
#endif  // !V8_INTL_SUPPORT

// Letter:               point.category in ['Lu', 'Ll', 'Lt', 'Lm', 'Lo', 'Nl']
#ifdef V8_INTL_SUPPORT
bool Letter::Is(uchar c) { return static_cast<bool>(u_isalpha(c)); }
#else
static const uint16_t kLetterTable0Size = 431;
static const int32_t kLetterTable0[431] = {
    107374188990,         1073741921122,
    170,        181,        186,        1073742016,  // NOLINT
    214,        1073742040246,        1073742072,
    705,        1073742534721,        1073742560,  // NOLINT
    740,        748,        750,        1073742704,
    884,        1073742710887,        1073742714,  // NOLINT
    893,        895,        902,        1073742728,
    906,        908,        1073742734929,  // NOLINT
    10737427551013,       10737428391153,
    10737429861327,       10737431531366,  // NOLINT
    1369,       10737432011415,       1073743312,
    1514,       10737433441522,       1073743392,  // NOLINT
    1610,       10737434701647,       1073743473,
    1747,       1749,       10737435891766,  // NOLINT
    10737435981775,       10737436101788,
    1791,       1808,       10737436341839,  // NOLINT
    10737436931957,       1969,       1073743818,
    2026,       10737438602037,       2042,  // NOLINT
    10737438722069,       2074,       2084,
    2088,       10737439362136,       1073744032,  // NOLINT
    2226,       10737441322361,       2365,
    2384,       10737442162401,       1073744241,  // NOLINT
    2432,       10737442612444,       1073744271,
    2448,       10737442752472,       1073744298,  // NOLINT
    2480,       2482,       10737443102489,
    2493,       2510,       10737443482525,  // NOLINT
    10737443512529,       10737443682545,
    10737443892570,       10737443992576,  // NOLINT
    10737444032600,       10737444262608,
    10737444342611,       10737444372614,  // NOLINT
    10737444402617,       10737444732652,
    2654,       10737444982676,       1073744517,  // NOLINT
    2701,       10737445272705,       1073744531,
    2728,       10737445542736,       1073744562,  // NOLINT
    2739,       10737445652745,       2749,
    2768,       10737446082785,       1073744645,  // NOLINT
    2828,       10737446552832,       1073744659,
    2856,       10737446822864,       1073744690,  // NOLINT
    2867,       10737446932873,       2877,
    10737447322909,       10737447352913,  // NOLINT
    2929,       2947,       10737447732954,
    10737447822960,       10737447862965,  // NOLINT
    10737447932970,       2972,       1073744798,
    2975,       10737448032980,       1073744808,  // NOLINT
    2986,       10737448143001,       3024,
    10737449013084,       10737449103088,  // NOLINT
    10737449143112,       10737449383129,
    3133,       10737449843161,       1073744992,  // NOLINT
    3169,       10737450293212,       1073745038,
    3216,       10737450423240,       1073745066,  // NOLINT
    3251,       10737450773257,       3261,
    3294,       10737451203297,       1073745137,  // NOLINT
    3314,       10737451573340,       1073745166,
    3344,       10737451703386,       3389,  // NOLINT
    3406,       10737452483425,       1073745274,
    3455,       10737452853478,       1073745306,  // NOLINT
    3505,       10737453313515,       3517,
    10737453443526,       10737454093632,  // NOLINT
    10737454583635,       10737454723654,
    10737455373714,       3716,       1073745543,  // NOLINT
    3720,       3722,       3725,       1073745556,
    3735,       10737455613743,       1073745569,  // NOLINT
    3747,       3749,       3751,       1073745578,
    3755,       10737455813760,       1073745586,  // NOLINT
    3763,       3773,       10737456003780,
    3782,       10737456283807,       3840,  // NOLINT
    10737457283911,       10737457373948,
    10737458003980,       10737459204138,  // NOLINT
    4159,       10737460004181,       1073746010,
    4189,       4193,       10737460214198,  // NOLINT
    10737460304208,       10737460374225,
    4238,       10737460804293,       4295,  // NOLINT
    4301,       10737461284346,       1073746172,
    4680,       10737465064685,       1073746512,  // NOLINT
    4694,       4696,       10737465224701,
    10737465284744,       10737465704749,  // NOLINT
    10737465764784,       10737466104789,
    10737466164798,       4800,       1073746626,  // NOLINT
    4805,       10737466324822,       1073746648,
    4880,       10737467064885,       1073746712,  // NOLINT
    4954,       10737468165007,       1073746848,
    5108,       10737469455740,       1073747567,  // NOLINT
    5759,       10737475855786,       1073747616,
    5866,       10737476945880,       1073747712,  // NOLINT
    5900,       10737477265905,       1073747744,
    5937,       10737477765969,       1073747808,  // NOLINT
    5996,       10737478226000,       1073747840,
    6067,       6103,       6108,       1073748000,  // NOLINT
    6263,       10737480966312,       6314,
    10737481446389,       10737482246430,  // NOLINT
    10737483046509,       10737483366516,
    10737483526571,       10737484176599,  // NOLINT
    10737484806678,       10737485126740,
    6823,       10737487416963,       1073748805,  // NOLINT
    6987,       10737488677072,       1073748910,
    7087,       10737489227141,       1073748992,  // NOLINT
    7203,       10737490697247,       1073749082,
    7293,       10737492257404,       1073749230,  // NOLINT
    7409,       10737492377414,       1073749248,
    7615,       10737495047957,       1073749784,  // NOLINT
    7965,       10737497928005,       1073749832,
    8013,       10737498408023,       8025,  // NOLINT
    8027,       8029,       10737498558061,
    10737498888116,       10737499428124,  // NOLINT
    8126,       10737499548132,       1073749958,
    8140,       10737499688147,       1073749974,  // NOLINT
    8155,       10737499848172,       1073750002,
    8180,       10737500068188};  // NOLINT
static const uint16_t kLetterTable1Size = 87;
static const int32_t kLetterTable1[87] = {
    113,        127,        1073741968156,
    258,        263,        1073742090275,  // NOLINT
    277,        1073742105285,        292,
    294,        296,        1073742122301,  // NOLINT
    1073742127313,        1073742140319,
    1073742149329,        334,        1073742176,  // NOLINT
    392,        10737448963118,       1073744944,
    3166,       10737449923300,       1073745131,  // NOLINT
    3310,       10737451383315,       1073745152,
    3365,       3367,       3373,       1073745200,  // NOLINT
    3431,       3439,       10737452803478,
    10737453123494,       10737453203502,  // NOLINT
    10737453283510,       10737453363518,
    10737453443526,       10737453523534,  // NOLINT
    10737453603542,       10737453683550,
    3631,       10737459254103,       1073745953,  // NOLINT
    4137,       10737459694149,       1073745976,
    4156,       10737459854246,       1073746077,  // NOLINT
    4255,       10737460814346,       1073746172,
    4351,       10737461814397,       1073746225,  // NOLINT
    4494,       10737463364538,       1073746416,
    4607,       10737469448191};  // NOLINT
static const uint16_t kLetterTable2Size = 4;
static const int32_t kLetterTable2[4] = {107374182435091073745408,
                                         8191};  // NOLINT
static const uint16_t kLetterTable3Size = 2;
static const int32_t kLetterTable3[2] = {10737418248191};  // NOLINT
static const uint16_t kLetterTable4Size = 2;
static const int32_t kLetterTable4[2] = {10737418248140};  // NOLINT
static const uint16_t kLetterTable5Size = 100;
static const int32_t kLetterTable5[100] = {
    10737418241164,       10737430561277,
    10737431041548,       10737433761567,  // NOLINT
    10737434021579,       10737434241646,
    10737434871693,       10737435201775,  // NOLINT
    10737436391823,       10737436501928,
    10737437551934,       10737437601965,  // NOLINT
    10737437921969,       10737438632049,
    10737438752053,       10737438792058,  // NOLINT
    10737438842082,       10737439362163,
    10737440022227,       10737441142295,  // NOLINT
    2299,       10737441382341,       1073744176,
    2374,       10737442242428,       1073744260,  // NOLINT
    2482,       2511,       10737443522532,
    10737443582543,       10737443782558,  // NOLINT
    10737443842600,       10737444482626,
    10737444522635,       10737444802678,  // NOLINT
    2682,       10737445102735,       2737,
    10737445652742,       10737445692749,  // NOLINT
    2752,       2754,       10737446032781,
    10737446082794,       10737446262804,  // NOLINT
    10737446412822,       10737446492830,
    10737446572838,       10737446722854,  // NOLINT
    10737446802862,       10737446882906,
    10737447322911,       10737447402917,   // NOLINT
    10737448323042,       10737448968191};  // NOLINT
static const uint16_t kLetterTable6Size = 6;
static const int32_t kLetterTable6[6] = {1073741824605110737478886086,
                                         10737479156139};  // NOLINT
static const uint16_t kLetterTable7Size = 48;
static const int32_t kLetterTable7[48] = {
    10737482246765,       10737485926873,
    10737487366918,       10737487556935,  // NOLINT
    6941,       10737487676952,       1073748778,
    6966,       10737487926972,       6974,  // NOLINT
    10737488006977,       10737488036980,
    10737488067089,       10737489477485,  // NOLINT
    10737493287567,       10737493947623,
    10737494887675,       10737496167796,  // NOLINT
    10737496227932,       10737497937994,
    10737498258026,       10737498628126,  // NOLINT
    10737499548135,       10737499628143,
    10737499708151,       10737499788156};  // NOLINT
bool Letter::Is(uchar c) {
  int chunk_index = c >> 13;
  switch (chunk_index) {
    case 0:
      return LookupPredicate(kLetterTable0, kLetterTable0Size, c);
    case 1:
      return LookupPredicate(kLetterTable1, kLetterTable1Size, c);
    case 2:
      return LookupPredicate(kLetterTable2, kLetterTable2Size, c);
    case 3:
      return LookupPredicate(kLetterTable3, kLetterTable3Size, c);
    case 4:
      return LookupPredicate(kLetterTable4, kLetterTable4Size, c);
    case 5:
      return LookupPredicate(kLetterTable5, kLetterTable5Size, c);
    case 6:
      return LookupPredicate(kLetterTable6, kLetterTable6Size, c);
    case 7:
      return LookupPredicate(kLetterTable7, kLetterTable7Size, c);
    default:
      return false;
  }
}
#endif

#ifndef V8_INTL_SUPPORT

static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings0[1] =
    {                                                        // NOLINT
        {{kSentinel}}};                                      // NOLINT
static const uint16_t kEcma262CanonicalizeTable0Size = 498;  // NOLINT
static const int32_t kEcma262CanonicalizeTable0[996] = {
    1073741921, -128,   122,        -128,   181,        2972,
    1073742048, -128,   246,        -128,   1073742072, -128,
    254,        -128,   255,        484,  // NOLINT
    257,        -4,     259,        -4,     261,        -4,
    263,        -4,     265,        -4,     267,        -4,
    269,        -4,     271,        -4,  // NOLINT
    273,        -4,     275,        -4,     277,        -4,
    279,        -4,     281,        -4,     283,        -4,
    285,        -4,     287,        -4,  // NOLINT
    289,        -4,     291,        -4,     293,        -4,
    295,        -4,     297,        -4,     299,        -4,
    301,        -4,     303,        -4,  // NOLINT
    307,        -4,     309,        -4,     311,        -4,
    314,        -4,     316,        -4,     318,        -4,
    320,        -4,     322,        -4,  // NOLINT
    324,        -4,     326,        -4,     328,        -4,
    331,        -4,     333,        -4,     335,        -4,
    337,        -4,     339,        -4,  // NOLINT
    341,        -4,     343,        -4,     345,        -4,
    347,        -4,     349,        -4,     351,        -4,
    353,        -4,     355,        -4,  // NOLINT
    357,        -4,     359,        -4,     361,        -4,
    363,        -4,     365,        -4,     367,        -4,
    369,        -4,     371,        -4,  // NOLINT
    373,        -4,     375,        -4,     378,        -4,
    380,        -4,     382,        -4,     384,        780,
    387,        -4,     389,        -4,  // NOLINT
    392,        -4,     396,        -4,     402,        -4,
    405,        388,    409,        -4,     410,        652,
    414,        520,    417,        -4,  // NOLINT
    419,        -4,     421,        -4,     424,        -4,
    429,        -4,     432,        -4,     436,        -4,
    438,        -4,     441,        -4,  // NOLINT
    445,        -4,     447,        224,    453,        -4,
    454,        -8,     456,        -4,     457,        -8,
    459,        -4,     460,        -8,  // NOLINT
    462,        -4,     464,        -4,     466,        -4,
    468,        -4,     470,        -4,     472,        -4,
    474,        -4,     476,        -4,  // NOLINT
    477,        -316,   479,        -4,     481,        -4,
    483,        -4,     485,        -4,     487,        -4,
    489,        -4,     491,        -4,  // NOLINT
    493,        -4,     495,        -4,     498,        -4,
    499,        -8,     501,        -4,     505,        -4,
    507,        -4,     509,        -4,  // NOLINT
    511,        -4,     513,        -4,     515,        -4,
    517,        -4,     519,        -4,     521,        -4,
    523,        -4,     525,        -4,  // NOLINT
    527,        -4,     529,        -4,     531,        -4,
    533,        -4,     535,        -4,     537,        -4,
    539,        -4,     541,        -4,  // NOLINT
    543,        -4,     547,        -4,     549,        -4,
    551,        -4,     553,        -4,     555,        -4,
    557,        -4,     559,        -4,  // NOLINT
    561,        -4,     563,        -4,     572,        -4,
    107374239943260,  576,        43260,  578,        -4,
    583,        -4,     585,        -4,  // NOLINT
    587,        -4,     589,        -4,     591,        -4,
    592,        43132,  593,        43120,  594,        43128,
    595,        -840,   596,        -824,  // NOLINT
    1073742422, -820,   599,        -820,   601,        -808,
    603,        -812,   604,        169276608,        -820,
    609,        169260611,        -828,  // NOLINT
    613,        169120614,        169232616,        -836,
    617,        -844,   619,        42972,  620,        169220,
    623,        -844,   625,        42996,  // NOLINT
    626,        -852,   629,        -856,   637,        42908,
    640,        -872,   643,        -872,   647,        169128,
    648,        -872,   649,        -276,  // NOLINT
    1073742474, -868,   651,        -868,   652,        -284,
    658,        -876,   670,        169032837,        336,
    881,        -4,     883,        -4,  // NOLINT
    887,        -4,     1073742715520,    893,        520,
    940,        -152,   1073742765, -148,   943,        -148,
    1073742769, -128,   961,        -128,  // NOLINT
    962,        -124,   1073742787, -128,   971,        -128,
    972,        -256,   1073742797, -252,   974,        -252,
    976,        -248,   977,        -228,  // NOLINT
    981,        -188,   982,        -216,   983,        -32,
    985,        -4,     987,        -4,     989,        -4,
    991,        -4,     993,        -4,  // NOLINT
    995,        -4,     997,        -4,     999,        -4,
    1001,       -4,     1003,       -4,     1005,       -4,
    1007,       -4,     1008,       -344,  // NOLINT
    1009,       -320,   1010,       28,     1011,       -464,
    1013,       -384,   1016,       -4,     1019,       -4,
    1073742896, -128,   1103,       -128,  // NOLINT
    1073742928, -320,   1119,       -320,   1121,       -4,
    1123,       -4,     1125,       -4,     1127,       -4,
    1129,       -4,     1131,       -4,  // NOLINT
    1133,       -4,     1135,       -4,     1137,       -4,
    1139,       -4,     1141,       -4,     1143,       -4,
    1145,       -4,     1147,       -4,  // NOLINT
    1149,       -4,     1151,       -4,     1153,       -4,
    1163,       -4,     1165,       -4,     1167,       -4,
    1169,       -4,     1171,       -4,  // NOLINT
    1173,       -4,     1175,       -4,     1177,       -4,
    1179,       -4,     1181,       -4,     1183,       -4,
    1185,       -4,     1187,       -4,  // NOLINT
    1189,       -4,     1191,       -4,     1193,       -4,
    1195,       -4,     1197,       -4,     1199,       -4,
    1201,       -4,     1203,       -4,  // NOLINT
    1205,       -4,     1207,       -4,     1209,       -4,
    1211,       -4,     1213,       -4,     1215,       -4,
    1218,       -4,     1220,       -4,  // NOLINT
    1222,       -4,     1224,       -4,     1226,       -4,
    1228,       -4,     1230,       -4,     1231,       -60,
    1233,       -4,     1235,       -4,  // NOLINT
    1237,       -4,     1239,       -4,     1241,       -4,
    1243,       -4,     1245,       -4,     1247,       -4,
    1249,       -4,     1251,       -4,  // NOLINT
    1253,       -4,     1255,       -4,     1257,       -4,
    1259,       -4,     1261,       -4,     1263,       -4,
    1265,       -4,     1267,       -4,  // NOLINT
    1269,       -4,     1271,       -4,     1273,       -4,
    1275,       -4,     1277,       -4,     1279,       -4,
    1281,       -4,     1283,       -4,  // NOLINT
    1285,       -4,     1287,       -4,     1289,       -4,
    1291,       -4,     1293,       -4,     1295,       -4,
    1297,       -4,     1299,       -4,  // NOLINT
    1301,       -4,     1303,       -4,     1305,       -4,
    1307,       -4,     1309,       -4,     1311,       -4,
    1313,       -4,     1315,       -4,  // NOLINT
    1317,       -4,     1319,       -4,     1321,       -4,
    1323,       -4,     1325,       -4,     1327,       -4,
    1073743201, -192,   1414,       -192,  // NOLINT
    7545,       1413287549,       15256,  7681,       -4,
    7683,       -4,     7685,       -4,     7687,       -4,
    7689,       -4,     7691,       -4,  // NOLINT
    7693,       -4,     7695,       -4,     7697,       -4,
    7699,       -4,     7701,       -4,     7703,       -4,
    7705,       -4,     7707,       -4,  // NOLINT
    7709,       -4,     7711,       -4,     7713,       -4,
    7715,       -4,     7717,       -4,     7719,       -4,
    7721,       -4,     7723,       -4,  // NOLINT
    7725,       -4,     7727,       -4,     7729,       -4,
    7731,       -4,     7733,       -4,     7735,       -4,
    7737,       -4,     7739,       -4,  // NOLINT
    7741,       -4,     7743,       -4,     7745,       -4,
    7747,       -4,     7749,       -4,     7751,       -4,
    7753,       -4,     7755,       -4,  // NOLINT
    7757,       -4,     7759,       -4,     7761,       -4,
    7763,       -4,     7765,       -4,     7767,       -4,
    7769,       -4,     7771,       -4,  // NOLINT
    7773,       -4,     7775,       -4,     7777,       -4,
    7779,       -4,     7781,       -4,     7783,       -4,
    7785,       -4,     7787,       -4,  // NOLINT
    7789,       -4,     7791,       -4,     7793,       -4,
    7795,       -4,     7797,       -4,     7799,       -4,
    7801,       -4,     7803,       -4,  // NOLINT
    7805,       -4,     7807,       -4,     7809,       -4,
    7811,       -4,     7813,       -4,     7815,       -4,
    7817,       -4,     7819,       -4,  // NOLINT
    7821,       -4,     7823,       -4,     7825,       -4,
    7827,       -4,     7829,       -4,     7835,       -236,
    7841,       -4,     7843,       -4,  // NOLINT
    7845,       -4,     7847,       -4,     7849,       -4,
    7851,       -4,     7853,       -4,     7855,       -4,
    7857,       -4,     7859,       -4,  // NOLINT
    7861,       -4,     7863,       -4,     7865,       -4,
    7867,       -4,     7869,       -4,     7871,       -4,
    7873,       -4,     7875,       -4,  // NOLINT
    7877,       -4,     7879,       -4,     7881,       -4,
    7883,       -4,     7885,       -4,     7887,       -4,
    7889,       -4,     7891,       -4,  // NOLINT
    7893,       -4,     7895,       -4,     7897,       -4,
    7899,       -4,     7901,       -4,     7903,       -4,
    7905,       -4,     7907,       -4,  // NOLINT
    7909,       -4,     7911,       -4,     7913,       -4,
    7915,       -4,     7917,       -4,     7919,       -4,
    7921,       -4,     7923,       -4,  // NOLINT
    7925,       -4,     7927,       -4,     7929,       -4,
    7931,       -4,     7933,       -4,     7935,       -4,
    107374976032,     7943,       32,  // NOLINT
    107374977632,     7957,       32,     107374979232,
    7975,       32,     107374980832,     7991,       32,
    107374982432,     8005,       32,  // NOLINT
    8017,       32,     8019,       32,     8021,       32,
    8023,       32,     107374985632,     8039,       32,
    1073749872296,    8049,       296,  // NOLINT
    1073749874344,    8053,       344,    1073749878400,
    8055,       400,    1073749880512,    8057,       512,
    1073749882448,    8059,       448,  // NOLINT
    1073749884504,    8061,       504,    107374993632,
    8113,       32,     8126,       -28820107374996832,
    8145,       32,     107374998432,   // NOLINT
    8161,       32,     8165,       28};  // NOLINT
static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings1[1] =
    {                                                       // NOLINT
        {{kSentinel}}};                                     // NOLINT
static const uint16_t kEcma262CanonicalizeTable1Size = 73;  // NOLINT
static const int32_t kEcma262CanonicalizeTable1[146] = {
    334,        -112,   1073742192, -64,    383,        -64,
    388,        -4,     1073743056, -104,   1257,       -104,
    1073744944, -192,   3166,       -192,  // NOLINT
    3169,       -4,     3173,       -431803174,       -43168,
    3176,       -4,     3178,       -4,     3180,       -4,
    3187,       -4,     3190,       -4,  // NOLINT
    3201,       -4,     3203,       -4,     3205,       -4,
    3207,       -4,     3209,       -4,     3211,       -4,
    3213,       -4,     3215,       -4,  // NOLINT
    3217,       -4,     3219,       -4,     3221,       -4,
    3223,       -4,     3225,       -4,     3227,       -4,
    3229,       -4,     3231,       -4,  // NOLINT
    3233,       -4,     3235,       -4,     3237,       -4,
    3239,       -4,     3241,       -4,     3243,       -4,
    3245,       -4,     3247,       -4,  // NOLINT
    3249,       -4,     3251,       -4,     3253,       -4,
    3255,       -4,     3257,       -4,     3259,       -4,
    3261,       -4,     3263,       -4,  // NOLINT
    3265,       -4,     3267,       -4,     3269,       -4,
    3271,       -4,     3273,       -4,     3275,       -4,
    3277,       -4,     3279,       -4,  // NOLINT
    3281,       -4,     3283,       -4,     3285,       -4,
    3287,       -4,     3289,       -4,     3291,       -4,
    3293,       -4,     3295,       -4,  // NOLINT
    3297,       -4,     3299,       -4,     3308,       -4,
    3310,       -4,     3315,       -4,     1073745152, -29056,
    3365,       -290563367,       -29056,  // NOLINT
    3373,       -29056};                     // NOLINT
static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings5[1] =
    {                                                       // NOLINT
        {{kSentinel}}};                                     // NOLINT
static const uint16_t kEcma262CanonicalizeTable5Size = 95;  // NOLINT
static const int32_t kEcma262CanonicalizeTable5[190] =
    {
        1601, -41603, -41605, -41607, -4,
        1609, -41611, -41613, -41615, -4,  // NOLINT
        1617, -41619, -41621, -41623, -4,
        1625, -41627, -41629, -41631, -4,  // NOLINT
        1633, -41635, -41637, -41639, -4,
        1641, -41643, -41645, -41665, -4,  // NOLINT
        1667, -41669, -41671, -41673, -4,
        1675, -41677, -41679, -41681, -4,  // NOLINT
        1683, -41685, -41687, -41689, -4,
        1691, -41827, -41829, -41831, -4,  // NOLINT
        1833, -41835, -41837, -41839, -4,
        1843, -41845, -41847, -41849, -4,  // NOLINT
        1851, -41853, -41855, -41857, -4,
        1859, -41861, -41863, -41865, -4,  // NOLINT
        1867, -41869, -41871, -41873, -4,
        1875, -41877, -41879, -41881, -4,  // NOLINT
        1883, -41885, -41887, -41889, -4,
        1891, -41893, -41895, -41897, -4,  // NOLINT
        1899, -41901, -41903, -41914, -4,
        1916, -41919, -41921, -41923, -4,  // NOLINT
        1925, -41927, -41932, -41937, -4,
        1939, -41943, -41945, -41947, -4,  // NOLINT
        1949, -41951, -41953, -41955, -4,
        1957, -41959, -41961, -4};  // NOLINT
static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings7[1] =
    {                                                      // NOLINT
        {{kSentinel}}};                                    // NOLINT
static const uint16_t kEcma262CanonicalizeTable7Size = 2;  // NOLINT
static const int32_t kEcma262CanonicalizeTable7[4] = {1073749825, -1288026,
                                                      -128};  // NOLINT
int Ecma262Canonicalize::Convert(uchar c, uchar n, uchar* result,
                                 bool* allow_caching_ptr) {
  int chunk_index = c >> 13;
  switch (chunk_index) {
    case 0:
      return LookupMapping<true>(
          kEcma262CanonicalizeTable0, kEcma262CanonicalizeTable0Size,
          kEcma262CanonicalizeMultiStrings0, c, n, result, allow_caching_ptr);
    case 1:
      return LookupMapping<true>(
          kEcma262CanonicalizeTable1, kEcma262CanonicalizeTable1Size,
          kEcma262CanonicalizeMultiStrings1, c, n, result, allow_caching_ptr);
    case 5:
      return LookupMapping<true>(
          kEcma262CanonicalizeTable5, kEcma262CanonicalizeTable5Size,
          kEcma262CanonicalizeMultiStrings5, c, n, result, allow_caching_ptr);
    case 7:
      return LookupMapping<true>(
          kEcma262CanonicalizeTable7, kEcma262CanonicalizeTable7Size,
          kEcma262CanonicalizeMultiStrings7, c, n, result, allow_caching_ptr);
    default:
      return 0;
  }
}

static const MultiCharacterSpecialCase<4>
    kEcma262UnCanonicalizeMultiStrings0[507] = {  // NOLINT
        {{6597, kSentinel}},
        {{90122, kSentinel}},
        {{181924956, kSentinel}},
        {{192224, kSentinel}},  // NOLINT
        {{214246, kSentinel}},
        {{216248, kSentinel}},
        {{222254, kSentinel}},
        {{255376, kSentinel}},  // NOLINT
        {{256257, kSentinel}},
        {{258259, kSentinel}},
        {{260261, kSentinel}},
        {{262263, kSentinel}},  // NOLINT
        {{264265, kSentinel}},
        {{266267, kSentinel}},
        {{268269, kSentinel}},
        {{270271, kSentinel}},  // NOLINT
        {{272273, kSentinel}},
        {{274275, kSentinel}},
        {{276277, kSentinel}},
        {{278279, kSentinel}},  // NOLINT
        {{280281, kSentinel}},
        {{282283, kSentinel}},
        {{284285, kSentinel}},
        {{286287, kSentinel}},  // NOLINT
        {{288289, kSentinel}},
        {{290291, kSentinel}},
        {{292293, kSentinel}},
        {{294295, kSentinel}},  // NOLINT
        {{296297, kSentinel}},
        {{298299, kSentinel}},
        {{300301, kSentinel}},
        {{302303, kSentinel}},  // NOLINT
        {{306307, kSentinel}},
        {{308309, kSentinel}},
        {{310311, kSentinel}},
        {{313314, kSentinel}},  // NOLINT
        {{315316, kSentinel}},
        {{317318, kSentinel}},
        {{319320, kSentinel}},
        {{321322, kSentinel}},  // NOLINT
        {{323324, kSentinel}},
        {{325326, kSentinel}},
        {{327328, kSentinel}},
        {{330331, kSentinel}},  // NOLINT
        {{332333, kSentinel}},
        {{334335, kSentinel}},
        {{336337, kSentinel}},
        {{338339, kSentinel}},  // NOLINT
        {{340341, kSentinel}},
        {{342343, kSentinel}},
        {{344345, kSentinel}},
        {{346347, kSentinel}},  // NOLINT
        {{348349, kSentinel}},
        {{350351, kSentinel}},
        {{352353, kSentinel}},
        {{354355, kSentinel}},  // NOLINT
        {{356357, kSentinel}},
        {{358359, kSentinel}},
        {{360361, kSentinel}},
        {{362363, kSentinel}},  // NOLINT
        {{364365, kSentinel}},
        {{366367, kSentinel}},
        {{368369, kSentinel}},
        {{370371, kSentinel}},  // NOLINT
        {{372373, kSentinel}},
        {{374375, kSentinel}},
        {{377378, kSentinel}},
        {{379380, kSentinel}},  // NOLINT
        {{381382, kSentinel}},
        {{384579, kSentinel}},
        {{385595, kSentinel}},
        {{386387, kSentinel}},  // NOLINT
        {{388389, kSentinel}},
        {{390596, kSentinel}},
        {{391392, kSentinel}},
        {{393598, kSentinel}},  // NOLINT
        {{394599, kSentinel}},
        {{395396, kSentinel}},
        {{398477, kSentinel}},
        {{399601, kSentinel}},  // NOLINT
        {{400603, kSentinel}},
        {{401402, kSentinel}},
        {{403608, kSentinel}},
        {{404611, kSentinel}},  // NOLINT
        {{405502, kSentinel}},
        {{406617, kSentinel}},
        {{407616, kSentinel}},
        {{408409, kSentinel}},  // NOLINT
        {{410573, kSentinel}},
        {{412623, kSentinel}},
        {{413626, kSentinel}},
        {{414544, kSentinel}},  // NOLINT
        {{415629, kSentinel}},
        {{416417, kSentinel}},
        {{418419, kSentinel}},
        {{420421, kSentinel}},  // NOLINT
        {{422640, kSentinel}},
        {{423424, kSentinel}},
        {{425643, kSentinel}},
        {{428429, kSentinel}},  // NOLINT
        {{430648, kSentinel}},
        {{431432, kSentinel}},
        {{433650, kSentinel}},
        {{434651, kSentinel}},  // NOLINT
        {{435436, kSentinel}},
        {{437438, kSentinel}},
        {{439658, kSentinel}},
        {{440441, kSentinel}},  // NOLINT
        {{444445, kSentinel}},
        {{447503, kSentinel}},
        {{452453454, kSentinel}},
        {{455456457, kSentinel}},  // NOLINT
        {{458459460, kSentinel}},
        {{461462, kSentinel}},
        {{463464, kSentinel}},
        {{465466, kSentinel}},  // NOLINT
        {{467468, kSentinel}},
        {{469470, kSentinel}},
        {{471472, kSentinel}},
        {{473474, kSentinel}},  // NOLINT
        {{475476, kSentinel}},
        {{478479, kSentinel}},
        {{480481, kSentinel}},
        {{482483, kSentinel}},  // NOLINT
        {{484485, kSentinel}},
        {{486487, kSentinel}},
        {{488489, kSentinel}},
        {{490491, kSentinel}},  // NOLINT
        {{492493, kSentinel}},
        {{494495, kSentinel}},
        {{497498499, kSentinel}},
        {{500501, kSentinel}},  // NOLINT
        {{504505, kSentinel}},
        {{506507, kSentinel}},
        {{508509, kSentinel}},
        {{510511, kSentinel}},  // NOLINT
        {{512513, kSentinel}},
        {{514515, kSentinel}},
        {{516517, kSentinel}},
        {{518519, kSentinel}},  // NOLINT
        {{520521, kSentinel}},
        {{522523, kSentinel}},
        {{524525, kSentinel}},
        {{526527, kSentinel}},  // NOLINT
        {{528529, kSentinel}},
        {{530531, kSentinel}},
        {{532533, kSentinel}},
        {{534535, kSentinel}},  // NOLINT
        {{536537, kSentinel}},
        {{538539, kSentinel}},
        {{540541, kSentinel}},
        {{542543, kSentinel}},  // NOLINT
        {{546547, kSentinel}},
        {{548549, kSentinel}},
        {{550551, kSentinel}},
        {{552553, kSentinel}},  // NOLINT
        {{554555, kSentinel}},
        {{556557, kSentinel}},
        {{558559, kSentinel}},
        {{560561, kSentinel}},  // NOLINT
        {{562563, kSentinel}},
        {{57011365, kSentinel}},
        {{571572, kSentinel}},
        {{57411366, kSentinel}},  // NOLINT
        {{57511390, kSentinel}},
        {{57611391, kSentinel}},
        {{577578, kSentinel}},
        {{580649, kSentinel}},  // NOLINT
        {{581652, kSentinel}},
        {{582583, kSentinel}},
        {{584585, kSentinel}},
        {{586587, kSentinel}},  // NOLINT
        {{588589, kSentinel}},
        {{590591, kSentinel}},
        {{59211375, kSentinel}},
        {{59311373, kSentinel}},  // NOLINT
        {{59411376, kSentinel}},
        {{60442923, kSentinel}},
        {{60942924, kSentinel}},
        {{61342893, kSentinel}},  // NOLINT
        {{61442922, kSentinel}},
        {{61911362, kSentinel}},
        {{62042925, kSentinel}},
        {{62511374, kSentinel}},  // NOLINT
        {{63711364, kSentinel}},
        {{64742929, kSentinel}},
        {{67042928, kSentinel}},
        {{8379219538126}},  // NOLINT
        {{880881, kSentinel}},
        {{882883, kSentinel}},
        {{886887, kSentinel}},
        {{8911021, kSentinel}},  // NOLINT
        {{8931023, kSentinel}},
        {{8951011, kSentinel}},
        {{902940, kSentinel}},
        {{904941, kSentinel}},  // NOLINT
        {{906943, kSentinel}},
        {{908972, kSentinel}},
        {{910973, kSentinel}},
        {{911974, kSentinel}},  // NOLINT
        {{913945, kSentinel}},
        {{914946976, kSentinel}},
        {{915947, kSentinel}},
        {{916948, kSentinel}},  // NOLINT
        {{9179491013, kSentinel}},
        {{918950, kSentinel}},
        {{919951, kSentinel}},
        {{920952977, kSentinel}},  // NOLINT
        {{9229541008, kSentinel}},
        {{923955, kSentinel}},
        {{925957, kSentinel}},
        {{927959, kSentinel}},  // NOLINT
        {{928960982, kSentinel}},
        {{9299611009, kSentinel}},
        {{931962963, kSentinel}},
        {{932964, kSentinel}},  // NOLINT
        {{933965, kSentinel}},
        {{934966981, kSentinel}},
        {{935967, kSentinel}},
        {{939971, kSentinel}},  // NOLINT
        {{975983, kSentinel}},
        {{984985, kSentinel}},
        {{986987, kSentinel}},
        {{988989, kSentinel}},  // NOLINT
        {{990991, kSentinel}},
        {{992993, kSentinel}},
        {{994995, kSentinel}},
        {{996997, kSentinel}},  // NOLINT
        {{998999, kSentinel}},
        {{10001001, kSentinel}},
        {{10021003, kSentinel}},
        {{10041005, kSentinel}},  // NOLINT
        {{10061007, kSentinel}},
        {{10101017, kSentinel}},
        {{10151016, kSentinel}},
        {{10181019, kSentinel}},  // NOLINT
        {{10241104, kSentinel}},
        {{10391119, kSentinel}},
        {{10401072, kSentinel}},
        {{10711103, kSentinel}},  // NOLINT
        {{11201121, kSentinel}},
        {{11221123, kSentinel}},
        {{11241125, kSentinel}},
        {{11261127, kSentinel}},  // NOLINT
        {{11281129, kSentinel}},
        {{11301131, kSentinel}},
        {{11321133, kSentinel}},
        {{11341135, kSentinel}},  // NOLINT
        {{11361137, kSentinel}},
        {{11381139, kSentinel}},
        {{11401141, kSentinel}},
        {{11421143, kSentinel}},  // NOLINT
        {{11441145, kSentinel}},
        {{11461147, kSentinel}},
        {{11481149, kSentinel}},
        {{11501151, kSentinel}},  // NOLINT
        {{11521153, kSentinel}},
        {{11621163, kSentinel}},
        {{11641165, kSentinel}},
        {{11661167, kSentinel}},  // NOLINT
        {{11681169, kSentinel}},
        {{11701171, kSentinel}},
        {{11721173, kSentinel}},
        {{11741175, kSentinel}},  // NOLINT
        {{11761177, kSentinel}},
        {{11781179, kSentinel}},
        {{11801181, kSentinel}},
        {{11821183, kSentinel}},  // NOLINT
        {{11841185, kSentinel}},
        {{11861187, kSentinel}},
        {{11881189, kSentinel}},
        {{11901191, kSentinel}},  // NOLINT
        {{11921193, kSentinel}},
        {{11941195, kSentinel}},
        {{11961197, kSentinel}},
        {{11981199, kSentinel}},  // NOLINT
        {{12001201, kSentinel}},
        {{12021203, kSentinel}},
        {{12041205, kSentinel}},
        {{12061207, kSentinel}},  // NOLINT
        {{12081209, kSentinel}},
        {{12101211, kSentinel}},
        {{12121213, kSentinel}},
        {{12141215, kSentinel}},  // NOLINT
        {{12161231, kSentinel}},
        {{12171218, kSentinel}},
        {{12191220, kSentinel}},
        {{12211222, kSentinel}},  // NOLINT
        {{12231224, kSentinel}},
        {{12251226, kSentinel}},
        {{12271228, kSentinel}},
        {{12291230, kSentinel}},  // NOLINT
        {{12321233, kSentinel}},
        {{12341235, kSentinel}},
        {{12361237, kSentinel}},
        {{12381239, kSentinel}},  // NOLINT
        {{12401241, kSentinel}},
        {{12421243, kSentinel}},
        {{12441245, kSentinel}},
        {{12461247, kSentinel}},  // NOLINT
        {{12481249, kSentinel}},
        {{12501251, kSentinel}},
        {{12521253, kSentinel}},
        {{12541255, kSentinel}},  // NOLINT
        {{12561257, kSentinel}},
        {{12581259, kSentinel}},
        {{12601261, kSentinel}},
        {{12621263, kSentinel}},  // NOLINT
        {{12641265, kSentinel}},
        {{12661267, kSentinel}},
        {{12681269, kSentinel}},
        {{12701271, kSentinel}},  // NOLINT
        {{12721273, kSentinel}},
        {{12741275, kSentinel}},
        {{12761277, kSentinel}},
        {{12781279, kSentinel}},  // NOLINT
        {{12801281, kSentinel}},
        {{12821283, kSentinel}},
        {{12841285, kSentinel}},
        {{12861287, kSentinel}},  // NOLINT
        {{12881289, kSentinel}},
        {{12901291, kSentinel}},
        {{12921293, kSentinel}},
        {{12941295, kSentinel}},  // NOLINT
        {{12961297, kSentinel}},
        {{12981299, kSentinel}},
        {{13001301, kSentinel}},
        {{13021303, kSentinel}},  // NOLINT
        {{13041305, kSentinel}},
        {{13061307, kSentinel}},
        {{13081309, kSentinel}},
        {{13101311, kSentinel}},  // NOLINT
        {{13121313, kSentinel}},
        {{13141315, kSentinel}},
        {{13161317, kSentinel}},
        {{13181319, kSentinel}},  // NOLINT
        {{13201321, kSentinel}},
        {{13221323, kSentinel}},
        {{13241325, kSentinel}},
        {{13261327, kSentinel}},  // NOLINT
        {{13291377, kSentinel}},
        {{13661414, kSentinel}},
        {{425611520, kSentinel}},
        {{429311557, kSentinel}},  // NOLINT
        {{429511559, kSentinel}},
        {{430111565, kSentinel}},
        {{754542877, kSentinel}},
        {{754911363, kSentinel}},  // NOLINT
        {{76807681, kSentinel}},
        {{76827683, kSentinel}},
        {{76847685, kSentinel}},
        {{76867687, kSentinel}},  // NOLINT
        {{76887689, kSentinel}},
        {{76907691, kSentinel}},
        {{76927693, kSentinel}},
        {{76947695, kSentinel}},  // NOLINT
        {{76967697, kSentinel}},
        {{76987699, kSentinel}},
        {{77007701, kSentinel}},
        {{77027703, kSentinel}},  // NOLINT
        {{77047705, kSentinel}},
        {{77067707, kSentinel}},
        {{77087709, kSentinel}},
        {{77107711, kSentinel}},  // NOLINT
        {{77127713, kSentinel}},
        {{77147715, kSentinel}},
        {{77167717, kSentinel}},
        {{77187719, kSentinel}},  // NOLINT
        {{77207721, kSentinel}},
        {{77227723, kSentinel}},
        {{77247725, kSentinel}},
        {{77267727, kSentinel}},  // NOLINT
        {{77287729, kSentinel}},
        {{77307731, kSentinel}},
        {{77327733, kSentinel}},
        {{77347735, kSentinel}},  // NOLINT
        {{77367737, kSentinel}},
        {{77387739, kSentinel}},
        {{77407741, kSentinel}},
        {{77427743, kSentinel}},  // NOLINT
        {{77447745, kSentinel}},
        {{77467747, kSentinel}},
        {{77487749, kSentinel}},
        {{77507751, kSentinel}},  // NOLINT
        {{77527753, kSentinel}},
        {{77547755, kSentinel}},
        {{77567757, kSentinel}},
        {{77587759, kSentinel}},  // NOLINT
        {{77607761, kSentinel}},
        {{77627763, kSentinel}},
        {{77647765, kSentinel}},
        {{77667767, kSentinel}},  // NOLINT
        {{77687769, kSentinel}},
        {{77707771, kSentinel}},
        {{77727773, kSentinel}},
        {{77747775, kSentinel}},  // NOLINT
        {{777677777835, kSentinel}},
        {{77787779, kSentinel}},
        {{77807781, kSentinel}},
        {{77827783, kSentinel}},  // NOLINT
        {{77847785, kSentinel}},
        {{77867787, kSentinel}},
        {{77887789, kSentinel}},
        {{77907791, kSentinel}},  // NOLINT
        {{77927793, kSentinel}},
        {{77947795, kSentinel}},
        {{77967797, kSentinel}},
        {{77987799, kSentinel}},  // NOLINT
        {{78007801, kSentinel}},
        {{78027803, kSentinel}},
        {{78047805, kSentinel}},
        {{78067807, kSentinel}},  // NOLINT
        {{78087809, kSentinel}},
        {{78107811, kSentinel}},
        {{78127813, kSentinel}},
        {{78147815, kSentinel}},  // NOLINT
        {{78167817, kSentinel}},
        {{78187819, kSentinel}},
        {{78207821, kSentinel}},
        {{78227823, kSentinel}},  // NOLINT
        {{78247825, kSentinel}},
        {{78267827, kSentinel}},
        {{78287829, kSentinel}},
        {{78407841, kSentinel}},  // NOLINT
        {{78427843, kSentinel}},
        {{78447845, kSentinel}},
        {{78467847, kSentinel}},
        {{78487849, kSentinel}},  // NOLINT
        {{78507851, kSentinel}},
        {{78527853, kSentinel}},
        {{78547855, kSentinel}},
        {{78567857, kSentinel}},  // NOLINT
        {{78587859, kSentinel}},
        {{78607861, kSentinel}},
        {{78627863, kSentinel}},
        {{78647865, kSentinel}},  // NOLINT
        {{78667867, kSentinel}},
        {{78687869, kSentinel}},
        {{78707871, kSentinel}},
        {{78727873, kSentinel}},  // NOLINT
        {{78747875, kSentinel}},
        {{78767877, kSentinel}},
        {{78787879, kSentinel}},
        {{78807881, kSentinel}},  // NOLINT
        {{78827883, kSentinel}},
        {{78847885, kSentinel}},
        {{78867887, kSentinel}},
        {{78887889, kSentinel}},  // NOLINT
        {{78907891, kSentinel}},
        {{78927893, kSentinel}},
        {{78947895, kSentinel}},
        {{78967897, kSentinel}},  // NOLINT
        {{78987899, kSentinel}},
        {{79007901, kSentinel}},
        {{79027903, kSentinel}},
        {{79047905, kSentinel}},  // NOLINT
        {{79067907, kSentinel}},
        {{79087909, kSentinel}},
        {{79107911, kSentinel}},
        {{79127913, kSentinel}},  // NOLINT
        {{79147915, kSentinel}},
        {{79167917, kSentinel}},
        {{79187919, kSentinel}},
        {{79207921, kSentinel}},  // NOLINT
        {{79227923, kSentinel}},
        {{79247925, kSentinel}},
        {{79267927, kSentinel}},
        {{79287929, kSentinel}},  // NOLINT
        {{79307931, kSentinel}},
        {{79327933, kSentinel}},
        {{79347935, kSentinel}},
        {{79367944, kSentinel}},  // NOLINT
        {{79437951, kSentinel}},
        {{79527960, kSentinel}},
        {{79577965, kSentinel}},
        {{79687976, kSentinel}},  // NOLINT
        {{79757983, kSentinel}},
        {{79847992, kSentinel}},
        {{79917999, kSentinel}},
        {{80008008, kSentinel}},  // NOLINT
        {{80058013, kSentinel}},
        {{80178025, kSentinel}},
        {{80198027, kSentinel}},
        {{80218029, kSentinel}},  // NOLINT
        {{80238031, kSentinel}},
        {{80328040, kSentinel}},
        {{80398047, kSentinel}},
        {{80488122, kSentinel}},  // NOLINT
        {{80498123, kSentinel}},
        {{80508136, kSentinel}},
        {{80538139, kSentinel}},
        {{80548154, kSentinel}},  // NOLINT
        {{80558155, kSentinel}},
        {{80568184, kSentinel}},
        {{80578185, kSentinel}},
        {{80588170, kSentinel}},  // NOLINT
        {{80598171, kSentinel}},
        {{80608186, kSentinel}},
        {{80618187, kSentinel}},
        {{81128120, kSentinel}},  // NOLINT
        {{81138121, kSentinel}},
        {{81448152, kSentinel}},
        {{81458153, kSentinel}},
        {{81608168, kSentinel}},  // NOLINT
        {{81618169, kSentinel}},
        {{81658172, kSentinel}},
        {{kSentinel}}};                                         // NOLINT
static const uint16_t kEcma262UnCanonicalizeTable0Size = 1005;  // NOLINT
static const int32_t kEcma262UnCanonicalizeTable0[2010] = {
    10737418891,    90,         5,    10737419211,
    122,        5,    181,        9,    107374201613,
    214,        17,   107374204021,  // NOLINT
    222,        25,   107374204813,   246,        17,
    107374207221,   254,        25,   255,        29,
    256,        33,   257,        33,  // NOLINT
    258,        37,   259,        37,   260,        41,
    261,        41,   262,        45,   263,        45,
    264,        49,   265,        49,  // NOLINT
    266,        53,   267,        53,   268,        57,
    269,        57,   270,        61,   271,        61,
    272,        65,   273,        65,  // NOLINT
    274,        69,   275,        69,   276,        73,
    277,        73,   278,        77,   279,        77,
    280,        81,   281,        81,  // NOLINT
    282,        85,   283,        85,   284,        89,
    285,        89,   286,        93,   287,        93,
    288,        97,   289,        97,  // NOLINT
    290,        101,  291,        101,  292,        105,
    293,        105,  294,        109,  295,        109,
    296,        113,  297,        113,  // NOLINT
    298,        117,  299,        117,  300,        121,
    301,        121,  302,        125,  303,        125,
    306,        129,  307,        129,  // NOLINT
    308,        133,  309,        133,  310,        137,
    311,        137,  313,        141,  314,        141,
    315,        145,  316,        145,  // NOLINT
    317,        149,  318,        149,  319,        153,
    320,        153,  321,        157,  322,        157,
    323,        161,  324,        161,  // NOLINT
    325,        165,  326,        165,  327,        169,
    328,        169,  330,        173,  331,        173,
    332,        177,  333,        177,  // NOLINT
    334,        181,  335,        181,  336,        185,
    337,        185,  338,        189,  339,        189,
    340,        193,  341,        193,  // NOLINT
    342,        197,  343,        197,  344,        201,
    345,        201,  346,        205,  347,        205,
    348,        209,  349,        209,  // NOLINT
    350,        213,  351,        213,  352,        217,
    353,        217,  354,        221,  355,        221,
    356,        225,  357,        225,  // NOLINT
    358,        229,  359,        229,  360,        233,
    361,        233,  362,        237,  363,        237,
    364,        241,  365,        241,  // NOLINT
    366,        245,  367,        245,  368,        249,
    369,        249,  370,        253,  371,        253,
    372,        257,  373,        257,  // NOLINT
    374,        261,  375,        261,  376,        29,
    377,        265,  378,        265,  379,        269,
    380,        269,  381,        273,  // NOLINT
    382,        273,  384,        277,  385,        281,
    386,        285,  387,        285,  388,        289,
    389,        289,  390,        293,  // NOLINT
    391,        297,  392,        297,  1073742217301,
    394,        305,  395,        309,  396,        309,
    398,        313,  399,        317,  // NOLINT
    400,        321,  401,        325,  402,        325,
    403,        329,  404,        333,  405,        337,
    406,        341,  407,        345,  // NOLINT
    408,        349,  409,        349,  410,        353,
    412,        357,  413,        361,  414,        365,
    415,        369,  416,        373,  // NOLINT
    417,        373,  418,        377,  419,        377,
    420,        381,  421,        381,  422,        385,
    423,        389,  424,        389,  // NOLINT
    425,        393,  428,        397,  429,        397,
    430,        401,  431,        405,  432,        405,
    1073742257409,  434,        413,  // NOLINT
    435,        417,  436,        417,  437,        421,
    438,        421,  439,        425,  440,        429,
    441,        429,  444,        433,  // NOLINT
    445,        433,  447,        437,  452,        441,
    453,        441,  454,        441,  455,        445,
    456,        445,  457,        445,  // NOLINT
    458,        449,  459,        449,  460,        449,
    461,        453,  462,        453,  463,        457,
    464,        457,  465,        461,  // NOLINT
    466,        461,  467,        465,  468,        465,
    469,        469,  470,        469,  471,        473,
    472,        473,  473,        477,  // NOLINT
    474,        477,  475,        481,  476,        481,
    477,        313,  478,        485,  479,        485,
    480,        489,  481,        489,  // NOLINT
    482,        493,  483,        493,  484,        497,
    485,        497,  486,        501,  487,        501,
    488,        505,  489,        505,  // NOLINT
    490,        509,  491,        509,  492,        513,
    493,        513,  494,        517,  495,        517,
    497,        521,  498,        521,  // NOLINT
    499,        521,  500,        525,  501,        525,
    502,        337,  503,        437,  504,        529,
    505,        529,  506,        533,  // NOLINT
    507,        533,  508,        537,  509,        537,
    510,        541,  511,        541,  512,        545,
    513,        545,  514,        549,  // NOLINT
    515,        549,  516,        553,  517,        553,
    518,        557,  519,        557,  520,        561,
    521,        561,  522,        565,  // NOLINT
    523,        565,  524,        569,  525,        569,
    526,        573,  527,        573,  528,        577,
    529,        577,  530,        581,  // NOLINT
    531,        581,  532,        585,  533,        585,
    534,        589,  535,        589,  536,        593,
    537,        593,  538,        597,  // NOLINT
    539,        597,  540,        601,  541,        601,
    542,        605,  543,        605,  544,        365,
    546,        609,  547,        609,  // NOLINT
    548,        613,  549,        613,  550,        617,
    551,        617,  552,        621,  553,        621,
    554,        625,  555,        625,  // NOLINT
    556,        629,  557,        629,  558,        633,
    559,        633,  560,        637,  561,        637,
    562,        641,  563,        641,  // NOLINT
    570,        645,  571,        649,  572,        649,
    573,        353,  574,        653,  1073742399657,
    576,        661,  577,        665,  // NOLINT
    578,        665,  579,        277,  580,        669,
    581,        673,  582,        677,  583,        677,
    584,        681,  585,        681,  // NOLINT
    586,        685,  587,        685,  588,        689,
    589,        689,  590,        693,  591,        693,
    592,        697,  593,        701,  // NOLINT
    594,        705,  595,        281,  596,        293,
    1073742422301,  599,        305,  601,        317,
    603,        321,  604,        709,  // NOLINT
    608,        329,  609,        713,  611,        333,
    613,        717,  614,        721,  616,        345,
    617,        341,  619,        725,  // NOLINT
    620,        729,  623,        357,  625,        733,
    626,        361,  629,        369,  637,        737,
    640,        385,  643,        393,  // NOLINT
    647,        741,  648,        401,  649,        669,
    1073742474409,  651,        413,  652,        673,
    658,        425,  670,        745,  // NOLINT
    837,        749,  880,        753,  881,        753,
    882,        757,  883,        757,  886,        761,
    887,        761,  1073742715765,  // NOLINT
    893,        769,  895,        773,  902,        777,
    1073742728781,  906,        785,  908,        789,
    1073742734793,  911,        797,  // NOLINT
    913,        801,  914,        805,  1073742739809,
    916,        813,  917,        817,  1073742742821,
    919,        825,  920,        829,  // NOLINT
    921,        749,  922,        833,  923,        837,
    924,        9,    1073742749841,  927,        845,
    928,        849,  929,        853,  // NOLINT
    931,        857,  1073742756861,  933,        865,
    934,        869,  1073742759873,  939,        877,
    940,        777,  1073742765781,  // NOLINT
    943,        785,  945,        801,  946,        805,
    1073742771809,  948,        813,  949,        817,
    1073742774821,  951,        825,  // NOLINT
    952,        829,  953,        749,  954,        833,
    955,        837,  956,        9,    1073742781841,
    959,        845,  960,        849,  // NOLINT
    961,        853,  962,        857,  963,        857,
    1073742788861,  965,        865,  966,        869,
    1073742791873,  971,        877,  // NOLINT
    972,        789,  1073742797793,  974,        797,
    975,        881,  976,        805,  977,        829,
    981,        869,  982,        849,  // NOLINT
    983,        881,  984,        885,  985,        885,
    986,        889,  987,        889,  988,        893,
    989,        893,  990,        897,  // NOLINT
    991,        897,  992,        901,  993,        901,
    994,        905,  995,        905,  996,        909,
    997,        909,  998,        913,  // NOLINT
    999,        913,  1000,       917,  1001,       917,
    1002,       921,  1003,       921,  1004,       925,
    1005,       925,  1006,       929,  // NOLINT
    1007,       929,  1008,       833,  1009,       853,
    1010,       933,  1011,       773,  1013,       817,
    1015,       937,  1016,       937,  // NOLINT
    1017,       933,  1018,       941,  1019,       941,
    1073742845765,  1023,       769,  1073742848945,
    1039,       949,  1073742864953,  // NOLINT
    1071,       957,  1073742896953,  1103,       957,
    1073742928945,  1119,       949,  1120,       961,
    1121,       961,  1122,       965,  // NOLINT
    1123,       965,  1124,       969,  1125,       969,
    1126,       973,  1127,       973,  1128,       977,
    1129,       977,  1130,       981,  // NOLINT
    1131,       981,  1132,       985,  1133,       985,
    1134,       989,  1135,       989,  1136,       993,
    1137,       993,  1138,       997,  // NOLINT
    1139,       997,  1140,       10011141,       1001,
    1142,       10051143,       10051144,       1009,
    1145,       10091146,       1013,  // NOLINT
    1147,       10131148,       10171149,       1017,
    1150,       10211151,       10211152,       1025,
    1153,       10251162,       1029,  // NOLINT
    1163,       10291164,       10331165,       1033,
    1166,       10371167,       10371168,       1041,
    1169,       10411170,       1045,  // NOLINT
    1171,       10451172,       10491173,       1049,
    1174,       10531175,       10531176,       1057,
    1177,       10571178,       1061,  // NOLINT
    1179,       10611180,       10651181,       1065,
    1182,       10691183,       10691184,       1073,
    1185,       10731186,       1077,  // NOLINT
    1187,       10771188,       10811189,       1081,
    1190,       10851191,       10851192,       1089,
    1193,       10891194,       1093,  // NOLINT
    1195,       10931196,       10971197,       1097,
    1198,       11011199,       11011200,       1105,
    1201,       11051202,       1109,  // NOLINT
    1203,       11091204,       11131205,       1113,
    1206,       11171207,       11171208,       1121,
    1209,       11211210,       1125,  // NOLINT
    1211,       11251212,       11291213,       1129,
    1214,       11331215,       11331216,       1137,
    1217,       11411218,       1141,  // NOLINT
    1219,       11451220,       11451221,       1149,
    1222,       11491223,       11531224,       1153,
    1225,       11571226,       1157,  // NOLINT
    1227,       11611228,       11611229,       1165,
    1230,       11651231,       11371232,       1169,
    1233,       11691234,       1173,  // NOLINT
    1235,       11731236,       11771237,       1177,
    1238,       11811239,       11811240,       1185,
    1241,       11851242,       1189,  // NOLINT
    1243,       11891244,       11931245,       1193,
    1246,       11971247,       11971248,       1201,
    1249,       12011250,       1205,  // NOLINT
    1251,       12051252,       12091253,       1209,
    1254,       12131255,       12131256,       1217,
    1257,       12171258,       1221,  // NOLINT
    1259,       12211260,       12251261,       1225,
    1262,       12291263,       12291264,       1233,
    1265,       12331266,       1237,  // NOLINT
    1267,       12371268,       12411269,       1241,
    1270,       12451271,       12451272,       1249,
    1273,       12491274,       1253,  // NOLINT
    1275,       12531276,       12571277,       1257,
    1278,       12611279,       12611280,       1265,
    1281,       12651282,       1269,  // NOLINT
    1283,       12691284,       12731285,       1273,
    1286,       12771287,       12771288,       1281,
    1289,       12811290,       1285,  // NOLINT
    1291,       12851292,       12891293,       1289,
    1294,       12931295,       12931296,       1297,
    1297,       12971298,       1301,  // NOLINT
    1299,       13011300,       13051301,       1305,
    1302,       13091303,       13091304,       1313,
    1305,       13131306,       1317,  // NOLINT
    1307,       13171308,       13211309,       1321,
    1310,       13251311,       13251312,       1329,
    1313,       13291314,       1333,  // NOLINT
    1315,       13331316,       13371317,       1337,
    1318,       13411319,       13411320,       1345,
    1321,       13451322,       1349,  // NOLINT
    1323,       13491324,       13531325,       1353,
    1326,       13571327,       135710737431531361,
    1366,       136510737432011361,  // NOLINT
    1414,       1365107374608013694293,       1373,
    4295,       13774301,       13817545,       1385,
    7549,       13897680,       1393,  // NOLINT
    7681,       13937682,       13977683,       1397,
    7684,       14017685,       14017686,       1405,
    7687,       14057688,       1409,  // NOLINT
    7689,       14097690,       14137691,       1413,
    7692,       14177693,       14177694,       1421,
    7695,       14217696,       1425,  // NOLINT
    7697,       14257698,       14297699,       1429,
    7700,       14337701,       14337702,       1437,
    7703,       14377704,       1441,  // NOLINT
    7705,       14417706,       14457707,       1445,
    7708,       14497709,       14497710,       1453,
    7711,       14537712,       1457,  // NOLINT
    7713,       14577714,       14617715,       1461,
    7716,       14657717,       14657718,       1469,
    7719,       14697720,       1473,  // NOLINT
    7721,       14737722,       14777723,       1477,
    7724,       14817725,       14817726,       1485,
    7727,       14857728,       1489,  // NOLINT
    7729,       14897730,       14937731,       1493,
    7732,       14977733,       14977734,       1501,
    7735,       15017736,       1505,  // NOLINT
    7737,       15057738,       15097739,       1509,
    7740,       15137741,       15137742,       1517,
    7743,       15177744,       1521,  // NOLINT
    7745,       15217746,       15257747,       1525,
    7748,       15297749,       15297750,       1533,
    7751,       15337752,       1537,  // NOLINT
    7753,       15377754,       15417755,       1541,
    7756,       15457757,       15457758,       1549,
    7759,       15497760,       1553,  // NOLINT
    7761,       15537762,       15577763,       1557,
    7764,       15617765,       15617766,       1565,
    7767,       15657768,       1569,  // NOLINT
    7769,       15697770,       15737771,       1573,
    7772,       15777773,       15777774,       1581,
    7775,       15817776,       1585,  // NOLINT
    7777,       15857778,       15897779,       1589,
    7780,       15937781,       15937782,       1597,
    7783,       15977784,       1601,  // NOLINT
    7785,       16017786,       16057787,       1605,
    7788,       16097789,       16097790,       1613,
    7791,       16137792,       1617,  // NOLINT
    7793,       16177794,       16217795,       1621,
    7796,       16257797,       16257798,       1629,
    7799,       16297800,       1633,  // NOLINT
    7801,       16337802,       16377803,       1637,
    7804,       16417805,       16417806,       1645,
    7807,       16457808,       1649,  // NOLINT
    7809,       16497810,       16537811,       1653,
    7812,       16577813,       16577814,       1661,
    7815,       16617816,       1665,  // NOLINT
    7817,       16657818,       16697819,       1669,
    7820,       16737821,       16737822,       1677,
    7823,       16777824,       1681,  // NOLINT
    7825,       16817826,       16857827,       1685,
    7828,       16897829,       16897835,       1585,
    7840,       16937841,       1693,  // NOLINT
    7842,       16977843,       16977844,       1701,
    7845,       17017846,       17057847,       1705,
    7848,       17097849,       1709,  // NOLINT
    7850,       17137851,       17137852,       1717,
    7853,       17177854,       17217855,       1721,
    7856,       17257857,       1725,  // NOLINT
    7858,       17297859,       17297860,       1733,
    7861,       17337862,       17377863,       1737,
    7864,       17417865,       1741,  // NOLINT
    7866,       17457867,       17457868,       1749,
    7869,       17497870,       17537871,       1753,
    7872,       17577873,       1757,  // NOLINT
    7874,       17617875,       17617876,       1765,
    7877,       17657878,       17697879,       1769,
    7880,       17737881,       1773,  // NOLINT
    7882,       17777883,       17777884,       1781,
    7885,       17817886,       17857887,       1785,
    7888,       17897889,       1789,  // NOLINT
    7890,       17937891,       17937892,       1797,
    7893,       17977894,       18017895,       1801,
    7896,       18057897,       1805,  // NOLINT
    7898,       18097899,       18097900,       1813,
    7901,       18137902,       18177903,       1817,
    7904,       18217905,       1821,  // NOLINT
    7906,       18257907,       18257908,       1829,
    7909,       18297910,       18337911,       1833,
    7912,       18377913,       1837,  // NOLINT
    7914,       18417915,       18417916,       1845,
    7917,       18457918,       18497919,       1849,
    7920,       18537921,       1853,  // NOLINT
    7922,       18577923,       18577924,       1861,
    7925,       18617926,       18657927,       1865,
    7928,       18697929,       1869,  // NOLINT
    7930,       18737931,       18737932,       1877,
    7933,       18777934,       18817935,       1881,
    107374976018857943,       1889,  // NOLINT
    107374976818857951,       188910737497761893,
    7957,       1897107374978418937965,       1897,
    107374979219017975,       1905,  // NOLINT
    107374980019017983,       190510737498081909,
    7991,       1913107374981619097999,       1913,
    107374982419178005,       1921,  // NOLINT
    107374983219178013,       19218017,       1925,
    8019,       19298021,       19338023,       1937,
    8025,       19258027,       1929,  // NOLINT
    8029,       19338031,       193710737498561941,
    8039,       1945107374986419418047,       1945,
    107374987219498049,       1953,  // NOLINT
    107374987419578053,       196110737498781965,
    8055,       1969107374988019738057,       1977,
    107374988219818059,       1985,  // NOLINT
    107374988419898061,       199310737499361997,
    8113,       2001107374994419978121,       2001,
    107374994619498123,       1953,  // NOLINT
    8126,       749,  107374996019578139,       1961,
    107374996820058145,       200910737499762005,
    8153,       200910737499781965,  // NOLINT
    8155,       1969107374998420138161,       2017,
    8165,       2021107374999220138169,       2017,
    107374999419818171,       1985,  // NOLINT
    8172,       2021107375000819738185,       1977,
    107375001019898187,       1993};  // NOLINT
static const MultiCharacterSpecialCase<2>
    kEcma262UnCanonicalizeMultiStrings1[83] = {  // NOLINT
        {{84988526}},   {{85448560}},   {{85598575}},
        {{85798580}},  // NOLINT
        {{93989424}},   {{94239449}},   {{1126411312}},
        {{1131011358}},  // NOLINT
        {{1136011361}}, {{61911362}},   {{754911363}},
        {{63711364}},  // NOLINT
        {{57011365}},   {{57411366}},   {{1136711368}},
        {{1136911370}},  // NOLINT
        {{1137111372}}, {{59311373}},   {{62511374}},
        {{59211375}},  // NOLINT
        {{59411376}},   {{1137811379}}, {{1138111382}},
        {{57511390}},  // NOLINT
        {{57611391}},   {{1139211393}}, {{1139411395}},
        {{1139611397}},  // NOLINT
        {{1139811399}}, {{1140011401}}, {{1140211403}},
        {{1140411405}},  // NOLINT
        {{1140611407}}, {{1140811409}}, {{1141011411}},
        {{1141211413}},  // NOLINT
        {{1141411415}}, {{1141611417}}, {{1141811419}},
        {{1142011421}},  // NOLINT
        {{1142211423}}, {{1142411425}}, {{1142611427}},
        {{1142811429}},  // NOLINT
        {{1143011431}}, {{1143211433}}, {{1143411435}},
        {{1143611437}},  // NOLINT
        {{1143811439}}, {{1144011441}}, {{1144211443}},
        {{1144411445}},  // NOLINT
        {{1144611447}}, {{1144811449}}, {{1145011451}},
        {{1145211453}},  // NOLINT
        {{1145411455}}, {{1145611457}}, {{1145811459}},
        {{1146011461}},  // NOLINT
        {{1146211463}}, {{1146411465}}, {{1146611467}},
        {{1146811469}},  // NOLINT
        {{1147011471}}, {{1147211473}}, {{1147411475}},
        {{1147611477}},  // NOLINT
        {{1147811479}}, {{1148011481}}, {{1148211483}},
        {{1148411485}},  // NOLINT
        {{1148611487}}, {{1148811489}}, {{1149011491}},
        {{1149911500}},  // NOLINT
        {{1150111502}}, {{1150611507}}, {{425611520}},
        {{429311557}},                                       // NOLINT
        {{429511559}},  {{430111565}},  {{kSentinel}}};    // NOLINT
static const uint16_t kEcma262UnCanonicalizeTable1Size = 149;  // NOLINT
static const int32_t kEcma262UnCanonicalizeTable1[298] = {
    306,        1,   334,        1,   10737421765,   367,  9,
    10737421925,   383,        9,   387,        13,  388,  13,  // NOLINT
    107374303017,  1231,       21,  107374305617,  125721,
    107374489625,  3118,       29,  107374494425,  316629,  // NOLINT
    3168,       33,  3169,       33,  3170,       37,  317141,
    3172,       45,  3173,       49,  3174,       53,  317557,  // NOLINT
    3176,       57,  3177,       61,  3178,       61,  317965,
    3180,       65,  3181,       69,  3182,       73,  318377,  // NOLINT
    3184,       81,  3186,       85,  3187,       85,  318989,
    3190,       89,  107374502293,  3199,       97,  3200101,  // NOLINT
    3201,       1013202,       1053203,       1053204109,
    3205,       1093206,       1133207,       1133208117,  // NOLINT
    3209,       1173210,       1213211,       1213212125,
    3213,       1253214,       1293215,       1293216133,  // NOLINT
    3217,       1333218,       1373219,       1373220141,
    3221,       1413222,       1453223,       1453224149,  // NOLINT
    3225,       1493226,       1533227,       1533228157,
    3229,       1573230,       1613231,       1613232165,  // NOLINT
    3233,       1653234,       1693235,       1693236173,
    3237,       1733238,       1773239,       1773240181,  // NOLINT
    3241,       1813242,       1853243,       1853244189,
    3245,       1893246,       1933247,       1933248197,  // NOLINT
    3249,       1973250,       2013251,       2013252205,
    3253,       2053254,       2093255,       2093256213,  // NOLINT
    3257,       2133258,       2173259,       2173260221,
    3261,       2213262,       2253263,       2253264229,  // NOLINT
    3265,       2293266,       2333267,       2333268237,
    3269,       2373270,       2413271,       2413272245,  // NOLINT
    3273,       2453274,       2493275,       2493276253,
    3277,       2533278,       2573279,       2573280261,  // NOLINT
    3281,       2613282,       2653283,       2653284269,
    3285,       2693286,       2733287,       2733288277,  // NOLINT
    3289,       2773290,       2813291,       2813292285,
    3293,       2853294,       2893295,       2893296293,  // NOLINT
    3297,       2933298,       2973299,       2973307301,
    3308,       3013309,       3053310,       3053314309,  // NOLINT
    3315,       30910737451523133365,       3173367321,
    3373,       325};  // NOLINT
static const MultiCharacterSpecialCase<2>
    kEcma262UnCanonicalizeMultiStrings5[104] = {  // NOLINT
        {{4256042561}}, {{4256242563}},
        {{4256442565}}, {{4256642567}},  // NOLINT
        {{4256842569}}, {{4257042571}},
        {{4257242573}}, {{4257442575}},  // NOLINT
        {{4257642577}}, {{4257842579}},
        {{4258042581}}, {{4258242583}},  // NOLINT
        {{4258442585}}, {{4258642587}},
        {{4258842589}}, {{4259042591}},  // NOLINT
        {{4259242593}}, {{4259442595}},
        {{4259642597}}, {{4259842599}},  // NOLINT
        {{4260042601}}, {{4260242603}},
        {{4260442605}}, {{4262442625}},  // NOLINT
        {{4262642627}}, {{4262842629}},
        {{4263042631}}, {{4263242633}},  // NOLINT
        {{4263442635}}, {{4263642637}},
        {{4263842639}}, {{4264042641}},  // NOLINT
        {{4264242643}}, {{4264442645}},
        {{4264642647}}, {{4264842649}},  // NOLINT
        {{4265042651}}, {{4278642787}},
        {{4278842789}}, {{4279042791}},  // NOLINT
        {{4279242793}}, {{4279442795}},
        {{4279642797}}, {{4279842799}},  // NOLINT
        {{4280242803}}, {{4280442805}},
        {{4280642807}}, {{4280842809}},  // NOLINT
        {{4281042811}}, {{4281242813}},
        {{4281442815}}, {{4281642817}},  // NOLINT
        {{4281842819}}, {{4282042821}},
        {{4282242823}}, {{4282442825}},  // NOLINT
        {{4282642827}}, {{4282842829}},
        {{4283042831}}, {{4283242833}},  // NOLINT
        {{4283442835}}, {{4283642837}},
        {{4283842839}}, {{4284042841}},  // NOLINT
        {{4284242843}}, {{4284442845}},
        {{4284642847}}, {{4284842849}},  // NOLINT
        {{4285042851}}, {{4285242853}},
        {{4285442855}}, {{4285642857}},  // NOLINT
        {{4285842859}}, {{4286042861}},
        {{4286242863}}, {{4287342874}},  // NOLINT
        {{4287542876}}, {{754542877}},
        {{4287842879}}, {{4288042881}},  // NOLINT
        {{4288242883}}, {{4288442885}},
        {{4288642887}}, {{4289142892}},  // NOLINT
        {{61342893}},   {{4289642897}},
        {{4289842899}}, {{4290242903}},  // NOLINT
        {{4290442905}}, {{4290642907}},
        {{4290842909}}, {{4291042911}},  // NOLINT
        {{4291242913}}, {{4291442915}},
        {{4291642917}}, {{4291842919}},  // NOLINT
        {{4292042921}}, {{61442922}},
        {{60442923}},   {{60942924}},  // NOLINT
        {{62042925}},   {{67042928}},
        {{64742929}},   {{kSentinel}}};                      // NOLINT
static const uint16_t kEcma262UnCanonicalizeTable5Size = 198;  // NOLINT
static const int32_t
    kEcma262UnCanonicalizeTable5[396] =
        {16001,   16011,   16025,   16035,
         16049,   16059,   160613,  160713,  // NOLINT
         160817,  160917,  161021,  161121,
         161225,  161325,  161429,  161529,  // NOLINT
         161633,  161733,  161837,  161937,
         162041,  162141,  162245,  162345,  // NOLINT
         162449,  162549,  162653,  162753,
         162857,  162957,  163061,  163161,  // NOLINT
         163265,  163365,  163469,  163569,
         163673,  163773,  163877,  163977,  // NOLINT
         164081,  164181,  164285,  164385,
         164489,  164589,  166493,  166593,  // NOLINT
         166697,  166797,  16681011669101,
         1670105167110516721091673109,  // NOLINT
         1674113167511316761171677117,
         1678121167912116801251681125,  // NOLINT
         1682129168312916841331685133,
         1686137168713716881411689141,  // NOLINT
         1690145169114518261491827149,
         1828153182915318301571831157,  // NOLINT
         1832161183316118341651835165,
         1836169183716918381731839173,  // NOLINT
         1842177184317718441811845181,
         1846185184718518481891849189,  // NOLINT
         1850193185119318521971853197,
         1854201185520118562051857205,  // NOLINT
         1858209185920918602131861213,
         1862217186321718642211865221,  // NOLINT
         1866225186722518682291869229,
         1870233187123318722371873237,  // NOLINT
         1874241187524118762451877245,
         1878249187924918802531881253,  // NOLINT
         1882257188325718842611885261,
         1886265188726518882691889269,  // NOLINT
         1890273189127318922771893277,
         1894281189528118962851897285,  // NOLINT
         1898289189928919002931901293,
         1902297190329719133011914301,  // NOLINT
         1915305191630519173091918313,
         1919313192031719213171922321,  // NOLINT
         1923321192432519253251926329,
         1927329193133319323331933337,  // NOLINT
         1936341193734119383451939345,
         1942349194334919443531945353,  // NOLINT
         1946357194735719483611949361,
         1950365195136519523691953369,  // NOLINT
         1954373195537319563771957377,
         1958381195938119603851961385,  // NOLINT
         1962389196339319643971965401,
         19684051969409};  // NOLINT
static const MultiCharacterSpecialCase<2>
    kEcma262UnCanonicalizeMultiStrings7[3] = {  // NOLINT
        {{6531365345}},
        {{6533865370}},
        {{kSentinel}}};                                      // NOLINT
static const uint16_t kEcma262UnCanonicalizeTable7Size = 4;  // NOLINT
static const int32_t kEcma262UnCanonicalizeTable7[8] = {
    10737497931799451073749825180265};  // NOLINT
int Ecma262UnCanonicalize::Convert(uchar c, uchar n, uchar* result,
                                   bool* allow_caching_ptr) {
  int chunk_index = c >> 13;
  switch (chunk_index) {
    case 0:
      return LookupMapping<true>(
          kEcma262UnCanonicalizeTable0, kEcma262UnCanonicalizeTable0Size,
          kEcma262UnCanonicalizeMultiStrings0, c, n, result, allow_caching_ptr);
    case 1:
      return LookupMapping<true>(
          kEcma262UnCanonicalizeTable1, kEcma262UnCanonicalizeTable1Size,
          kEcma262UnCanonicalizeMultiStrings1, c, n, result, allow_caching_ptr);
    case 5:
      return LookupMapping<true>(
          kEcma262UnCanonicalizeTable5, kEcma262UnCanonicalizeTable5Size,
          kEcma262UnCanonicalizeMultiStrings5, c, n, result, allow_caching_ptr);
    case 7:
      return LookupMapping<true>(
          kEcma262UnCanonicalizeTable7, kEcma262UnCanonicalizeTable7Size,
          kEcma262UnCanonicalizeMultiStrings7, c, n, result, allow_caching_ptr);
    default:
      return 0;
  }
}

static const MultiCharacterSpecialCase<1>
    kCanonicalizationRangeMultiStrings0[1] = {                // NOLINT
        {{kSentinel}}};                                       // NOLINT
static const uint16_t kCanonicalizationRangeTable0Size = 70;  // NOLINT
static const int32_t kCanonicalizationRangeTable0[140] = {
    107374188910090,   01073741921100122,  0,
    107374201688,  214,  0107374204024,  222,  0,  // NOLINT
    107374204888,  246,  0107374207224,  254,  0,
    10737427158,   893,  010737427288,   906,  0,  // NOLINT
    10737427498,   927,  0107374275916,  939,  0,
    10737427658,   943,  010737427818,   959,  0,  // NOLINT
    107374279116,  971,  010737428458,   10230,
    107374284860,  10390107374286412410710,  // NOLINT
    107374289612411030107374292860,  11190,
    107374315314813660107374320114814140,  // NOLINT
    107374608014842930107374976028,  79430,
    107374976828,  79510107374977620,  79570,  // NOLINT
    107374978420,  79650107374979228,  79750,
    107374980028,  79830107374980828,  79910,  // NOLINT
    107374981628,  79990107374982420,  80050,
    107374983220,  80130107374985628,  80390,  // NOLINT
    107374986428,  80470107374987412,  80530,
    107374996012,  81390};  // NOLINT
static const MultiCharacterSpecialCase<1>
    kCanonicalizationRangeMultiStrings1[1] = {                // NOLINT
        {{kSentinel}}};                                       // NOLINT
static const uint16_t kCanonicalizationRangeTable1Size = 14;  // NOLINT
static const int32_t kCanonicalizationRangeTable1[28] = {
    107374217660,  367,  0107374219260,  383,  0,
    107374303010012310107374305610012570,  // NOLINT
    107374489618431180107374494418431660,
    107374515214833650};  // NOLINT
static const MultiCharacterSpecialCase<1>
    kCanonicalizationRangeMultiStrings7[1] = {               // NOLINT
        {{kSentinel}}};                                      // NOLINT
static const uint16_t kCanonicalizationRangeTable7Size = 4;  // NOLINT
static const int32_t kCanonicalizationRangeTable7[8] = {
    107374979310079940107374982510080260};  // NOLINT
int CanonicalizationRange::Convert(uchar c, uchar n, uchar* result,
                                   bool* allow_caching_ptr) {
  int chunk_index = c >> 13;
  switch (chunk_index) {
    case 0:
      return LookupMapping<false>(
          kCanonicalizationRangeTable0, kCanonicalizationRangeTable0Size,
          kCanonicalizationRangeMultiStrings0, c, n, result, allow_caching_ptr);
    case 1:
      return LookupMapping<false>(
          kCanonicalizationRangeTable1, kCanonicalizationRangeTable1Size,
          kCanonicalizationRangeMultiStrings1, c, n, result, allow_caching_ptr);
    case 7:
      return LookupMapping<false>(
          kCanonicalizationRangeTable7, kCanonicalizationRangeTable7Size,
          kCanonicalizationRangeMultiStrings7, c, n, result, allow_caching_ptr);
    default:
      return 0;
  }
}

#endif  // !V8_INTL_SUPPORT

}  // namespace unibrow
}  // namespace v8

Messung V0.5 in Prozent
C=72 H=100 G=86

¤ Dauer der Verarbeitung: 0.48 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.