meriyah 5.0.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +79 -0
- package/README.md +38 -14
- package/dist/meriyah.cjs +2356 -2070
- package/dist/meriyah.min.mjs +1 -0
- package/dist/{meriyah.esm.js → meriyah.mjs} +2356 -2070
- package/dist/meriyah.umd.js +2356 -2070
- package/dist/meriyah.umd.min.js +1 -1
- package/dist/src/common.d.ts +71 -47
- package/dist/src/common.d.ts.map +1 -1
- package/dist/src/errors.d.ts +186 -177
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/estree.d.ts +15 -6
- package/dist/src/estree.d.ts.map +1 -1
- package/dist/src/lexer/charClassifier.d.ts +2 -2
- package/dist/src/lexer/charClassifier.d.ts.map +1 -1
- package/dist/src/lexer/common.d.ts +1 -2
- package/dist/src/lexer/common.d.ts.map +1 -1
- package/dist/src/lexer/identifier.d.ts.map +1 -1
- package/dist/src/lexer/index.d.ts +1 -1
- package/dist/src/lexer/index.d.ts.map +1 -1
- package/dist/src/lexer/jsx.d.ts +2 -2
- package/dist/src/lexer/jsx.d.ts.map +1 -1
- package/dist/src/lexer/numeric.d.ts.map +1 -1
- package/dist/src/lexer/regexp.d.ts.map +1 -1
- package/dist/src/lexer/scan.d.ts.map +1 -1
- package/dist/src/lexer/string.d.ts +1 -1
- package/dist/src/lexer/string.d.ts.map +1 -1
- package/dist/src/lexer/template.d.ts.map +1 -1
- package/dist/src/parser.d.ts +72 -72
- package/dist/src/parser.d.ts.map +1 -1
- package/dist/src/token.d.ts +115 -115
- package/dist/src/token.d.ts.map +1 -1
- package/package.json +25 -34
- package/dist/meriyah.amd.js +0 -8964
- package/dist/meriyah.amd.min.js +0 -1
- package/dist/meriyah.cjs.js +0 -8962
- package/dist/meriyah.cjs.min.js +0 -1
- package/dist/meriyah.esm.min.js +0 -1
- package/dist/meriyah.esm.min.mjs +0 -1
- package/dist/meriyah.esm.mjs +0 -8956
- package/dist/meriyah.iife.js +0 -8967
- package/dist/meriyah.iife.min.js +0 -1
- package/dist/meriyah.min.cjs +0 -1
- package/dist/meriyah.system.js +0 -8970
- package/dist/meriyah.system.min.js +0 -1
- package/dist/meriyah.umd.cjs +0 -8968
- package/dist/meriyah.umd.es5.js +0 -9022
- package/dist/meriyah.umd.es5.min.js +0 -1
- package/dist/meriyah.umd.min.cjs +0 -1
- package/src/chars.ts +0 -155
- package/src/common.ts +0 -834
- package/src/errors.ts +0 -421
- package/src/estree.ts +0 -827
- package/src/lexer/charClassifier.ts +0 -449
- package/src/lexer/comments.ts +0 -178
- package/src/lexer/common.ts +0 -140
- package/src/lexer/decodeHTML.ts +0 -2184
- package/src/lexer/identifier.ts +0 -196
- package/src/lexer/index.ts +0 -32
- package/src/lexer/jsx.ts +0 -127
- package/src/lexer/numeric.ts +0 -259
- package/src/lexer/regexp.ts +0 -156
- package/src/lexer/scan.ts +0 -657
- package/src/lexer/string.ts +0 -242
- package/src/lexer/template.ts +0 -108
- package/src/meriyah.ts +0 -28
- package/src/parser.ts +0 -9358
- package/src/token.ts +0 -307
- package/src/unicode.ts +0 -36
package/src/lexer/regexp.ts
DELETED
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
import { Chars } from '../chars';
|
|
2
|
-
import { Context, ParserState } from '../common';
|
|
3
|
-
import { Token } from '../token';
|
|
4
|
-
import { advanceChar } from './common';
|
|
5
|
-
import { isIdentifierPart } from './charClassifier';
|
|
6
|
-
import { report, Errors } from '../errors';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Scans regular expression
|
|
10
|
-
*
|
|
11
|
-
* @param parser Parser object
|
|
12
|
-
* @param context Context masks
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
export function scanRegularExpression(parser: ParserState, context: Context): Token {
|
|
16
|
-
const enum RegexState {
|
|
17
|
-
Empty = 0,
|
|
18
|
-
Escape = 0x1,
|
|
19
|
-
Class = 0x2
|
|
20
|
-
}
|
|
21
|
-
const bodyStart = parser.index;
|
|
22
|
-
// Scan: ('/' | '/=') RegularExpressionBody '/' RegularExpressionFlags
|
|
23
|
-
let preparseState = RegexState.Empty;
|
|
24
|
-
|
|
25
|
-
loop: while (true) {
|
|
26
|
-
const ch = parser.currentChar;
|
|
27
|
-
advanceChar(parser);
|
|
28
|
-
|
|
29
|
-
if (preparseState & RegexState.Escape) {
|
|
30
|
-
preparseState &= ~RegexState.Escape;
|
|
31
|
-
} else {
|
|
32
|
-
switch (ch) {
|
|
33
|
-
case Chars.Slash:
|
|
34
|
-
if (!preparseState) break loop;
|
|
35
|
-
else break;
|
|
36
|
-
case Chars.Backslash:
|
|
37
|
-
preparseState |= RegexState.Escape;
|
|
38
|
-
break;
|
|
39
|
-
case Chars.LeftBracket:
|
|
40
|
-
preparseState |= RegexState.Class;
|
|
41
|
-
break;
|
|
42
|
-
case Chars.RightBracket:
|
|
43
|
-
preparseState &= RegexState.Escape;
|
|
44
|
-
break;
|
|
45
|
-
case Chars.CarriageReturn:
|
|
46
|
-
case Chars.LineFeed:
|
|
47
|
-
case Chars.LineSeparator:
|
|
48
|
-
case Chars.ParagraphSeparator:
|
|
49
|
-
report(parser, Errors.UnterminatedRegExp);
|
|
50
|
-
// No default
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
if (parser.index >= parser.source.length) {
|
|
55
|
-
return report(parser, Errors.UnterminatedRegExp);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const bodyEnd = parser.index - 1;
|
|
60
|
-
|
|
61
|
-
const enum RegexFlags {
|
|
62
|
-
Empty = 0b0000000,
|
|
63
|
-
IgnoreCase = 0b0000001,
|
|
64
|
-
Global = 0b0000010,
|
|
65
|
-
Multiline = 0b0000100,
|
|
66
|
-
Unicode = 0b0010000,
|
|
67
|
-
Sticky = 0b0001000,
|
|
68
|
-
DotAll = 0b0100000,
|
|
69
|
-
Indices = 0b1000000
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
let mask = RegexFlags.Empty;
|
|
73
|
-
let char = parser.currentChar;
|
|
74
|
-
|
|
75
|
-
const { index: flagStart } = parser;
|
|
76
|
-
|
|
77
|
-
while (isIdentifierPart(char)) {
|
|
78
|
-
switch (char) {
|
|
79
|
-
case Chars.LowerG:
|
|
80
|
-
if (mask & RegexFlags.Global) report(parser, Errors.DuplicateRegExpFlag, 'g');
|
|
81
|
-
mask |= RegexFlags.Global;
|
|
82
|
-
break;
|
|
83
|
-
|
|
84
|
-
case Chars.LowerI:
|
|
85
|
-
if (mask & RegexFlags.IgnoreCase) report(parser, Errors.DuplicateRegExpFlag, 'i');
|
|
86
|
-
mask |= RegexFlags.IgnoreCase;
|
|
87
|
-
break;
|
|
88
|
-
|
|
89
|
-
case Chars.LowerM:
|
|
90
|
-
if (mask & RegexFlags.Multiline) report(parser, Errors.DuplicateRegExpFlag, 'm');
|
|
91
|
-
mask |= RegexFlags.Multiline;
|
|
92
|
-
break;
|
|
93
|
-
|
|
94
|
-
case Chars.LowerU:
|
|
95
|
-
if (mask & RegexFlags.Unicode) report(parser, Errors.DuplicateRegExpFlag, 'u');
|
|
96
|
-
mask |= RegexFlags.Unicode;
|
|
97
|
-
break;
|
|
98
|
-
|
|
99
|
-
case Chars.LowerY:
|
|
100
|
-
if (mask & RegexFlags.Sticky) report(parser, Errors.DuplicateRegExpFlag, 'y');
|
|
101
|
-
mask |= RegexFlags.Sticky;
|
|
102
|
-
break;
|
|
103
|
-
|
|
104
|
-
case Chars.LowerS:
|
|
105
|
-
if (mask & RegexFlags.DotAll) report(parser, Errors.DuplicateRegExpFlag, 's');
|
|
106
|
-
mask |= RegexFlags.DotAll;
|
|
107
|
-
break;
|
|
108
|
-
|
|
109
|
-
case Chars.LowerD:
|
|
110
|
-
if (mask & RegexFlags.Indices) report(parser, Errors.DuplicateRegExpFlag, 'd');
|
|
111
|
-
mask |= RegexFlags.Indices;
|
|
112
|
-
break;
|
|
113
|
-
|
|
114
|
-
default:
|
|
115
|
-
report(parser, Errors.UnexpectedTokenRegExpFlag);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
char = advanceChar(parser);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
const flags = parser.source.slice(flagStart, parser.index);
|
|
122
|
-
|
|
123
|
-
const pattern = parser.source.slice(bodyStart, bodyEnd);
|
|
124
|
-
|
|
125
|
-
parser.tokenRegExp = { pattern, flags };
|
|
126
|
-
|
|
127
|
-
if (context & Context.OptionsRaw) parser.tokenRaw = parser.source.slice(parser.tokenPos, parser.index);
|
|
128
|
-
|
|
129
|
-
parser.tokenValue = validate(parser, pattern, flags);
|
|
130
|
-
|
|
131
|
-
return Token.RegularExpression;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Validates regular expressions
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
* @param state Parser instance
|
|
139
|
-
* @param context Context masks
|
|
140
|
-
* @param pattern Regexp body
|
|
141
|
-
* @param flags Regexp flags
|
|
142
|
-
*/
|
|
143
|
-
function validate(parser: ParserState, pattern: string, flags: string): RegExp | null | Token {
|
|
144
|
-
try {
|
|
145
|
-
return new RegExp(pattern, flags);
|
|
146
|
-
} catch {
|
|
147
|
-
try {
|
|
148
|
-
// Some JavaScript engine has not supported flag "d".
|
|
149
|
-
new RegExp(pattern, flags.replace('d', ''));
|
|
150
|
-
// Use null as tokenValue according to ESTree spec
|
|
151
|
-
return null;
|
|
152
|
-
} catch {
|
|
153
|
-
report(parser, Errors.UnterminatedRegExp);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|