diff options
author | Minteck <nekostarfan@gmail.com> | 2021-08-24 14:41:48 +0200 |
---|---|---|
committer | Minteck <nekostarfan@gmail.com> | 2021-08-24 14:41:48 +0200 |
commit | d25e11bee6ca5ca523884da132d18e1400e077b9 (patch) | |
tree | 8af39fde19f7ed640a60fb397c7edd647dff1c4c /node_modules/meriyah/src/lexer/charClassifier.ts | |
download | kartik-iridium-d25e11bee6ca5ca523884da132d18e1400e077b9.tar.gz kartik-iridium-d25e11bee6ca5ca523884da132d18e1400e077b9.tar.bz2 kartik-iridium-d25e11bee6ca5ca523884da132d18e1400e077b9.zip |
Initial commit
Diffstat (limited to 'node_modules/meriyah/src/lexer/charClassifier.ts')
-rw-r--r-- | node_modules/meriyah/src/lexer/charClassifier.ts | 449 |
1 files changed, 449 insertions, 0 deletions
diff --git a/node_modules/meriyah/src/lexer/charClassifier.ts b/node_modules/meriyah/src/lexer/charClassifier.ts new file mode 100644 index 0000000..eb31389 --- /dev/null +++ b/node_modules/meriyah/src/lexer/charClassifier.ts @@ -0,0 +1,449 @@ +import { unicodeLookup } from '../unicode'; +import { Chars } from '../chars'; + +export const enum CharFlags { + None = 0, + IdentifierStart = 1 << 0, + IdentifierPart = 1 << 1, + KeywordCandidate = 1 << 2, + LineTerminator = 1 << 3, // ECMA-262 11.3 Line Terminators + Decimal = 1 << 4, + Octal = 1 << 5, + Hex = 1 << 6, + Binary = 1 << 7, + Exponent = 1 << 8, + ImplicitOctalDigits = 1 << 9, + CarriageReturn = 1 << 10, + LineFeed = 1 << 11, + Underscore = 1 << 12, + StringLiteral = 1 << 13, + JSXToken = 1 << 14, + Hyphen = 1 << 15, +} + +/** + * Lookup table for mapping a codepoint to a set of flags + */ +export const CharTypes = [ + CharFlags.None /* 0x00 */, + CharFlags.None /* 0x01 */, + CharFlags.None /* 0x02 */, + CharFlags.None /* 0x03 */, + CharFlags.None /* 0x04 */, + CharFlags.None /* 0x05 */, + CharFlags.None /* 0x06 */, + CharFlags.None /* 0x07 */, + CharFlags.None /* 0x08 */, + CharFlags.None /* 0x09 */, + CharFlags.LineTerminator | CharFlags.CarriageReturn /* 0x0A */, + CharFlags.None /* 0x0B */, + CharFlags.None /* 0x0C */, + CharFlags.LineTerminator | CharFlags.LineFeed /* 0x0D */, + CharFlags.None /* 0x0E */, + CharFlags.None /* 0x0F */, + CharFlags.None /* 0x10 */, + CharFlags.None /* 0x11 */, + CharFlags.None /* 0x12 */, + CharFlags.None /* 0x13 */, + CharFlags.None /* 0x14 */, + CharFlags.None /* 0x15 */, + CharFlags.None /* 0x16 */, + CharFlags.None /* 0x17 */, + CharFlags.None /* 0x18 */, + CharFlags.None /* 0x19 */, + CharFlags.None /* 0x1A */, + CharFlags.None /* 0x1B */, + CharFlags.None /* 0x1C */, + CharFlags.None /* 0x1D */, + CharFlags.None /* 0x1E */, + CharFlags.None /* 0x1F */, + CharFlags.None /* 0x20 */, + CharFlags.None /* 0x21 ! */, + CharFlags.StringLiteral /* 0x22 */, + CharFlags.None /* 0x23 # */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x24 $ */, + CharFlags.None /* 0x25 % */, + CharFlags.None /* 0x26 & */, + CharFlags.StringLiteral /* 0x27 */, + CharFlags.None /* 0x28 */, + CharFlags.None /* 0x29 */, + CharFlags.None /* 0x2A */, + CharFlags.Exponent /* 0x2B */, + CharFlags.None /* 0x2C */, + CharFlags.Exponent | CharFlags.Hyphen /* 0x2D */, + CharFlags.None /* 0x2E */, + CharFlags.None /* 0x2F */, + CharFlags.IdentifierPart | CharFlags.Decimal | CharFlags.Binary | CharFlags.Octal | CharFlags.Hex /* 0x30 0 */, + CharFlags.IdentifierPart | CharFlags.Decimal | CharFlags.Binary | CharFlags.Octal | CharFlags.Hex /* 0x31 1 */, + CharFlags.IdentifierPart | CharFlags.Decimal | CharFlags.Octal | CharFlags.Hex /* 0x32 2 */, + CharFlags.IdentifierPart | CharFlags.Decimal | CharFlags.Octal | CharFlags.Hex /* 0x33 3 */, + CharFlags.IdentifierPart | CharFlags.Decimal | CharFlags.Octal | CharFlags.Hex /* 0x34 4 */, + CharFlags.IdentifierPart | CharFlags.Decimal | CharFlags.Octal | CharFlags.Hex /* 0x35 5 */, + CharFlags.IdentifierPart | CharFlags.Decimal | CharFlags.Octal | CharFlags.Hex /* 0x36 6 */, + CharFlags.IdentifierPart | CharFlags.Decimal | CharFlags.Octal | CharFlags.Hex /* 0x37 7 */, + CharFlags.IdentifierPart | CharFlags.Decimal | CharFlags.ImplicitOctalDigits | CharFlags.Hex /* 0x38 8 */, + CharFlags.IdentifierPart | CharFlags.Decimal | CharFlags.ImplicitOctalDigits | CharFlags.Hex /* 0x39 9 */, + CharFlags.None /* 0x3A */, + CharFlags.None /* 0x3B */, + CharFlags.JSXToken /* 0x3C < */, + CharFlags.None /* 0x3D = */, + CharFlags.None /* 0x3E > */, + CharFlags.None /* 0x3F */, + CharFlags.None /* 0x40 @ */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.Hex /* 0x41 A */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.Hex /* 0x42 B */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.Hex /* 0x43 C */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.Hex /* 0x44 D */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.Hex /* 0x45 E */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.Hex /* 0x46 F */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x47 G */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x48 H */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x49 I */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x4A J */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x4B K */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x4C L */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x4D M */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x4E N */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x4F O */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x50 P */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x51 Q */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x52 R */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x53 S */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x54 T */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x55 U */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x56 V */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x57 W */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x58 X */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x59 Y */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart /* 0x5A Z */, + CharFlags.None /* 0x5B */, + CharFlags.IdentifierStart /* 0x5C */, + CharFlags.None /* 0x5D */, + CharFlags.None /* 0x5E */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.Underscore/* 0x5F _ */, + CharFlags.None /* 0x60 */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate | CharFlags.Hex /* 0x61 a */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate | CharFlags.Hex /* 0x62 b */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate | CharFlags.Hex /* 0x63 c */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate | CharFlags.Hex /* 0x64 d */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate | CharFlags.Hex /* 0x65 e */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate | CharFlags.Hex /* 0x66 f */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate /* 0x67 g */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate /* 0x68 h */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate /* 0x69 i */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate /* 0x6A j */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate /* 0x6B k */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate /* 0x6C l */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate /* 0x6D m */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate /* 0x6E n */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate /* 0x6F o */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate /* 0x70 p */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate /* 0x71 q */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate /* 0x72 r */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate /* 0x73 s */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate /* 0x74 t */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate /* 0x75 u */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate /* 0x76 v */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate /* 0x77 w */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate /* 0x78 x */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate /* 0x79 y */, + CharFlags.IdentifierStart | CharFlags.IdentifierPart | CharFlags.KeywordCandidate /* 0x7A z */, + CharFlags.JSXToken /* 0x7B */, + CharFlags.None /* 0x7C */, + CharFlags.None /* 0x7D */, + CharFlags.None /* 0x7E */, + CharFlags.None /* 0x7F */ +]; + +export const isIdStart = [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0 +]; + +export const isIdPart = [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0 +]; + + +export function isIdentifierStart(code: number): number { + /* + * ES2020 11.6 IdentifierStart + * $ (dollar sign) + * _ (underscore) + * or any character with the Unicode property «ID_Start». + * + * We use a lookup table for small and thus common characters for speed. + */ + return code <= 0x7F + ? isIdStart[code] + : (unicodeLookup[(code >>> 5) + 34816] >>> code) & 31 & 1; +} + +export function isIdentifierPart(code: number): any { + /* + * ES2020 11.6 IdentifierPart + * $ (dollar sign) + * _ (underscore) + * <ZWNJ> + * <ZWJ> + * or any character with the Unicode property «ID_Continue». + * + * We use a lookup table for small and thus common characters for speed. + */ + return code <= 0x7F + ? isIdPart[code] + : (unicodeLookup[(code >>> 5) + 0] >>> code) & 31 & 1 || (code === Chars.ZeroWidthJoiner || code === Chars.ZeroWidthNonJoiner); +} |