meriyah 7.1.2 → 7.2.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.
@@ -4,7 +4,7 @@
4
4
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.meriyah = {}));
5
5
  })(this, (function (exports) { 'use strict';
6
6
 
7
- var version$1 = "7.1.2";
7
+ var version$1 = "7.2.0";
8
8
  var packageJson = {
9
9
  version: version$1};
10
10
 
@@ -492,7 +492,7 @@
492
492
  return 'RegularExpression';
493
493
  case 67174408:
494
494
  case 67174409:
495
- case 131:
495
+ case 132:
496
496
  return 'TemplateLiteral';
497
497
  default:
498
498
  if ((t & 143360) === 143360)
@@ -800,7 +800,7 @@
800
800
  loc;
801
801
  description;
802
802
  constructor(start, end, type, ...params) {
803
- const description = errorMessages[type].replace(/%(\d+)/g, (_, i) => params[i]);
803
+ const description = errorMessages[type].replaceAll(/%(\d+)/g, (_, i) => params[i]);
804
804
  const message = '[' + start.line + ':' + start.column + '-' + end.line + ':' + end.column + ']: ' + description;
805
805
  super(message);
806
806
  this.start = start.index;
@@ -835,7 +835,7 @@
835
835
  'extends', 'finally', 'for', 'function', 'if', 'import', 'new', 'return', 'super', 'switch',
836
836
  'this', 'throw', 'try', 'while', 'with',
837
837
  'implements', 'interface', 'package', 'private', 'protected', 'public', 'static', 'yield',
838
- 'as', 'async', 'await', 'constructor', 'get', 'set', 'accessor', 'from', 'of',
838
+ 'as', 'async', 'await', 'constructor', 'get', 'set', 'accessor', 'from', 'of', 'using',
839
839
  'enum', 'eval', 'arguments', 'escaped keyword', 'escaped future reserved keyword', 'reserved if strict', '#',
840
840
  'BigIntLiteral', '??', '?.', 'WhiteSpace', 'Illegal', 'LineTerminator', 'PrivateField',
841
841
  'Template', '@', 'target', 'meta', 'LineFeed', 'Escaped', 'JSXText'
@@ -882,6 +882,7 @@
882
882
  let: 241737,
883
883
  null: 86023,
884
884
  of: 471156,
885
+ using: 209013,
885
886
  package: 36966,
886
887
  private: 36967,
887
888
  protected: 36968,
@@ -892,12 +893,12 @@
892
893
  true: 86022,
893
894
  with: 20579,
894
895
  yield: 241771,
895
- enum: 86133,
896
- eval: 537079926,
896
+ enum: 86134,
897
+ eval: 537079927,
897
898
  as: 77932,
898
- arguments: 537079927,
899
- target: 209029,
900
- meta: 209030,
899
+ arguments: 537079928,
900
+ target: 209030,
901
+ meta: 209031,
901
902
  accessor: 12402,
902
903
  };
903
904
 
@@ -959,24 +960,24 @@
959
960
  if ((context & (2 | 2048)) === 0) {
960
961
  return token | -2147483648;
961
962
  }
962
- return -2147483528;
963
+ return -2147483527;
963
964
  }
964
965
  if (context & 1) {
965
966
  if (token === 36970) {
966
- return -2147483527;
967
+ return -2147483526;
967
968
  }
968
969
  if ((token & 36864) === 36864) {
969
- return -2147483527;
970
+ return -2147483526;
970
971
  }
971
972
  if ((token & 20480) === 20480) {
972
973
  if (context & 262144 && (context & 8) === 0) {
973
974
  return token | -2147483648;
974
975
  }
975
976
  else {
976
- return -2147483528;
977
+ return -2147483527;
977
978
  }
978
979
  }
979
- return 209018 | -2147483648;
980
+ return 209019 | -2147483648;
980
981
  }
981
982
  if (context & 262144 &&
982
983
  (context & 8) === 0 &&
@@ -985,31 +986,31 @@
985
986
  }
986
987
  if (token === 241771) {
987
988
  return context & 262144
988
- ? 209018 | -2147483648
989
+ ? 209019 | -2147483648
989
990
  : context & 1024
990
- ? -2147483528
991
+ ? -2147483527
991
992
  : token | -2147483648;
992
993
  }
993
994
  if (token === 209005) {
994
- return 209018 | -2147483648;
995
+ return 209019 | -2147483648;
995
996
  }
996
997
  if ((token & 36864) === 36864) {
997
998
  return token | 12288 | -2147483648;
998
999
  }
999
- return -2147483528;
1000
+ return -2147483527;
1000
1001
  }
1001
1002
  return 208897 | (hasEscape ? -2147483648 : 0);
1002
1003
  }
1003
1004
  function scanPrivateIdentifier(parser) {
1004
1005
  let char = advanceChar(parser);
1005
1006
  if (char === 92)
1006
- return 130;
1007
+ return 131;
1007
1008
  const merged = consumePossibleSurrogatePair(parser);
1008
1009
  if (merged)
1009
1010
  char = merged;
1010
1011
  if (!isIdentifierStart(char))
1011
1012
  parser.report(96);
1012
- return 130;
1013
+ return 131;
1013
1014
  }
1014
1015
  function scanIdentifierUnicodeEscape(parser) {
1015
1016
  if (parser.source.charCodeAt(parser.index + 1) !== 117) {
@@ -1215,7 +1216,7 @@
1215
1216
  if (isBigInt) {
1216
1217
  parser.tokenRaw = parser.source.slice(parser.tokenIndex, parser.index);
1217
1218
  parser.tokenValue = BigInt(parser.tokenRaw.slice(0, -1).replaceAll('_', ''));
1218
- return 134283388;
1219
+ return 134283389;
1219
1220
  }
1220
1221
  parser.tokenValue =
1221
1222
  kind & (1 | 2 | 8 | 4)
@@ -1584,6 +1585,7 @@
1584
1585
  const { index: start } = parser;
1585
1586
  let token = 67174409;
1586
1587
  let ret = '';
1588
+ let hasCarriageReturn = false;
1587
1589
  let char = advanceChar(parser);
1588
1590
  while (char !== 96) {
1589
1591
  if (char === 36 && parser.source.charCodeAt(parser.index + 1) === 123) {
@@ -1593,6 +1595,8 @@
1593
1595
  }
1594
1596
  else if (char === 92) {
1595
1597
  char = advanceChar(parser);
1598
+ if (char === 13)
1599
+ hasCarriageReturn = true;
1596
1600
  if (char > 0x7e) {
1597
1601
  ret += String.fromCodePoint(char);
1598
1602
  }
@@ -1607,7 +1611,9 @@
1607
1611
  parser.line = line;
1608
1612
  parser.column = column;
1609
1613
  ret = null;
1610
- char = scanBadTemplate(parser, char);
1614
+ char = scanBadTemplate(parser, char, () => {
1615
+ hasCarriageReturn = true;
1616
+ });
1611
1617
  if (char < 0)
1612
1618
  token = 67174408;
1613
1619
  break;
@@ -1618,10 +1624,13 @@
1618
1624
  }
1619
1625
  }
1620
1626
  else if (parser.index < parser.end) {
1621
- if (char === 13 && parser.source.charCodeAt(parser.index) === 10) {
1622
- ret += String.fromCodePoint(char);
1627
+ if (char === 13)
1628
+ hasCarriageReturn = true;
1629
+ if (char === 13 && parser.source.charCodeAt(parser.index + 1) === 10) {
1623
1630
  parser.currentChar = parser.source.charCodeAt(++parser.index);
1624
1631
  }
1632
+ if (char === 13)
1633
+ char = 10;
1625
1634
  if (((char & 83) < 3 && char === 10) || (char ^ 8232) <= 1) {
1626
1635
  parser.column = -1;
1627
1636
  parser.line++;
@@ -1634,12 +1643,16 @@
1634
1643
  }
1635
1644
  advanceChar(parser);
1636
1645
  parser.tokenValue = ret;
1637
- parser.tokenRaw = parser.source.slice(start + 1, parser.index - (token === 67174409 ? 1 : 2));
1646
+ const tokenRaw = parser.source.slice(start + 1, parser.index - (token === 67174409 ? 1 : 2));
1647
+ parser.tokenRaw = hasCarriageReturn ? tokenRaw.replaceAll(/\r\n?/g, '\n') : tokenRaw;
1638
1648
  return token;
1639
1649
  }
1640
- function scanBadTemplate(parser, ch) {
1650
+ function scanBadTemplate(parser, ch, onCarriageReturn) {
1641
1651
  while (ch !== 96) {
1642
1652
  switch (ch) {
1653
+ case 13:
1654
+ onCarriageReturn();
1655
+ break;
1643
1656
  case 36: {
1644
1657
  const index = parser.index + 1;
1645
1658
  if (index < parser.end && parser.source.charCodeAt(index) === 123) {
@@ -1670,42 +1683,42 @@
1670
1683
  }
1671
1684
 
1672
1685
  const TokenLookup = [
1673
- 128,
1674
- 128,
1675
- 128,
1676
- 128,
1677
- 128,
1678
- 128,
1679
- 128,
1680
- 128,
1681
- 128,
1682
- 127,
1683
- 135,
1684
- 127,
1685
- 127,
1686
+ 129,
1687
+ 129,
1688
+ 129,
1689
+ 129,
1690
+ 129,
1691
+ 129,
1692
+ 129,
1693
+ 129,
1686
1694
  129,
1687
1695
  128,
1696
+ 136,
1688
1697
  128,
1689
1698
  128,
1699
+ 130,
1700
+ 129,
1701
+ 129,
1702
+ 129,
1703
+ 129,
1704
+ 129,
1705
+ 129,
1706
+ 129,
1707
+ 129,
1708
+ 129,
1709
+ 129,
1710
+ 129,
1711
+ 129,
1712
+ 129,
1713
+ 129,
1714
+ 129,
1715
+ 129,
1716
+ 129,
1717
+ 129,
1690
1718
  128,
1691
- 128,
1692
- 128,
1693
- 128,
1694
- 128,
1695
- 128,
1696
- 128,
1697
- 128,
1698
- 128,
1699
- 128,
1700
- 128,
1701
- 128,
1702
- 128,
1703
- 128,
1704
- 128,
1705
- 127,
1706
1719
  16842798,
1707
1720
  134283267,
1708
- 130,
1721
+ 131,
1709
1722
  208897,
1710
1723
  8391477,
1711
1724
  8390213,
@@ -1734,7 +1747,7 @@
1734
1747
  1077936155,
1735
1748
  8390721,
1736
1749
  22,
1737
- 132,
1750
+ 133,
1738
1751
  208897,
1739
1752
  208897,
1740
1753
  208897,
@@ -1762,11 +1775,11 @@
1762
1775
  208897,
1763
1776
  208897,
1764
1777
  69271571,
1765
- 136,
1778
+ 137,
1766
1779
  20,
1767
1780
  8389959,
1768
1781
  208897,
1769
- 131,
1782
+ 132,
1770
1783
  4096,
1771
1784
  4096,
1772
1785
  4096,
@@ -1797,7 +1810,7 @@
1797
1810
  8389702,
1798
1811
  1074790415,
1799
1812
  16842799,
1800
- 128,
1813
+ 129,
1801
1814
  ];
1802
1815
  function nextToken(parser, context) {
1803
1816
  parser.flags = (parser.flags | 1) ^ 1;
@@ -1827,8 +1840,8 @@
1827
1840
  case 1074790417:
1828
1841
  case 18:
1829
1842
  case 16842799:
1830
- case 132:
1831
- case 128:
1843
+ case 133:
1844
+ case 129:
1832
1845
  advanceChar(parser);
1833
1846
  return token;
1834
1847
  case 208897:
@@ -1839,20 +1852,20 @@
1839
1852
  return scanNumber(parser, context, 16 | 128);
1840
1853
  case 134283267:
1841
1854
  return scanString(parser, context, char);
1842
- case 131:
1855
+ case 132:
1843
1856
  return scanTemplate(parser, context);
1844
- case 136:
1857
+ case 137:
1845
1858
  return scanUnicodeIdentifier(parser, context);
1846
- case 130:
1859
+ case 131:
1847
1860
  return scanPrivateIdentifier(parser);
1848
- case 127:
1861
+ case 128:
1849
1862
  advanceChar(parser);
1850
1863
  break;
1851
- case 129:
1864
+ case 130:
1852
1865
  state |= 1 | 4;
1853
1866
  scanNewLine(parser);
1854
1867
  break;
1855
- case 135:
1868
+ case 136:
1856
1869
  consumeLineFeed(parser, state);
1857
1870
  state = (state & -5) | 1;
1858
1871
  break;
@@ -2075,7 +2088,7 @@
2075
2088
  advanceChar(parser);
2076
2089
  return 4718634;
2077
2090
  }
2078
- return 276824445;
2091
+ return 276824446;
2079
2092
  }
2080
2093
  if (ch === 46) {
2081
2094
  const index = parser.index + 1;
@@ -2083,7 +2096,7 @@
2083
2096
  ch = source.charCodeAt(index);
2084
2097
  if (!(ch >= 48 && ch <= 57)) {
2085
2098
  advanceChar(parser);
2086
- return 67108990;
2099
+ return 67108991;
2087
2100
  }
2088
2101
  }
2089
2102
  }
@@ -2191,7 +2204,7 @@
2191
2204
  parser.report(119);
2192
2205
  }
2193
2206
  }
2194
- if ((t & 20480) === 20480 || t === -2147483528) {
2207
+ if ((t & 20480) === 20480 || t === -2147483527) {
2195
2208
  parser.report(102);
2196
2209
  }
2197
2210
  if (kind & (8 | 16) && (t & 255) === (241737 & 255)) {
@@ -2212,10 +2225,10 @@
2212
2225
  if ((t & 537079808) === 537079808) {
2213
2226
  parser.report(119);
2214
2227
  }
2215
- if (t === -2147483527) {
2228
+ if (t === -2147483526) {
2216
2229
  parser.report(95);
2217
2230
  }
2218
- if (t === -2147483528) {
2231
+ if (t === -2147483527) {
2219
2232
  parser.report(95);
2220
2233
  }
2221
2234
  }
@@ -2239,7 +2252,7 @@
2239
2252
  parser.report(97, 'yield');
2240
2253
  return ((t & 20480) === 20480 ||
2241
2254
  (t & 36864) === 36864 ||
2242
- t == -2147483527);
2255
+ t == -2147483526);
2243
2256
  }
2244
2257
  function isPropertyWithPrivateFieldKey(expr) {
2245
2258
  return !expr.property ? false : expr.property.type === 'PrivateIdentifier';
@@ -4454,7 +4467,7 @@
4454
4467
  '159': 376,
4455
4468
  };
4456
4469
  function decodeHTMLStrict(text) {
4457
- return text.replace(/&(?:[a-zA-Z]+|#[xX][\da-fA-F]+|#\d+);/g, (key) => {
4470
+ return text.replaceAll(/&(?:[a-zA-Z]+|#[xX][\da-fA-F]+|#\d+);/g, (key) => {
4458
4471
  if (key.charAt(1) === '#') {
4459
4472
  const secondChar = key.charAt(2);
4460
4473
  const codePoint = secondChar === 'X' || secondChar === 'x' ? parseInt(key.slice(3), 16) : parseInt(key.slice(2), 10);
@@ -4537,7 +4550,7 @@
4537
4550
  if (parser.options.raw)
4538
4551
  parser.tokenRaw = raw;
4539
4552
  parser.tokenValue = decodeHTMLStrict(raw);
4540
- parser.setToken(137);
4553
+ parser.setToken(138);
4541
4554
  }
4542
4555
  function rescanJSXIdentifier(parser) {
4543
4556
  if ((parser.getToken() & 143360) === 143360) {
@@ -4998,7 +5011,7 @@
4998
5011
  return statements;
4999
5012
  }
5000
5013
  function parseModuleItem(parser, context, scope) {
5001
- if (parser.getToken() === 132) {
5014
+ if (parser.getToken() === 133) {
5002
5015
  Object.assign(parser.leadingDecorators, {
5003
5016
  start: parser.tokenStart,
5004
5017
  decorators: parseDecorators(parser, context, undefined),
@@ -5025,13 +5038,21 @@
5025
5038
  switch (parser.getToken()) {
5026
5039
  case 86104:
5027
5040
  return parseFunctionDeclaration(parser, context, scope, privateScope, origin, 1, 0, 0, start);
5028
- case 132:
5041
+ case 133:
5029
5042
  case 86094:
5030
5043
  return parseClassDeclaration(parser, context, scope, privateScope, 0);
5031
5044
  case 86090:
5032
5045
  return parseLexicalDeclaration(parser, context, scope, privateScope, 16, 0);
5033
5046
  case 241737:
5034
5047
  return parseLetIdentOrVarDeclarationStatement(parser, context, scope, privateScope, origin);
5048
+ case 209013:
5049
+ return parseUsingDeclarationOrExpressionStatement(parser, context, scope, privateScope, origin, labels);
5050
+ case 209006:
5051
+ if ((context & 2048 || (context & 2 && context & 8)) &&
5052
+ nextTokenIsUsingOnSameLine(parser)) {
5053
+ return parseAwaitUsingDeclarationOrExpressionStatement(parser, context, scope, privateScope, origin, labels);
5054
+ }
5055
+ return parseStatement(parser, context, scope, privateScope, origin, labels, 1);
5035
5056
  case 20564:
5036
5057
  parser.report(103, 'export');
5037
5058
  case 86106:
@@ -5115,15 +5136,18 @@
5115
5136
  default:
5116
5137
  expr = parsePrimaryExpression(parser, context, privateScope, 2, 0, 1, 0, 1, parser.tokenStart);
5117
5138
  }
5139
+ return finishExpressionOrLabelledStatement(parser, context, scope, privateScope, origin, labels, allowFuncDecl, expr, token, tokenValue, tokenStart);
5140
+ }
5141
+ function finishExpressionOrLabelledStatement(parser, context, scope, privateScope, origin, labels, allowFuncDecl, initialExpression, token, tokenValue, tokenStart) {
5118
5142
  if (token & 143360 && parser.getToken() === 21) {
5119
- return parseLabelledStatement(parser, context, scope, privateScope, origin, labels, tokenValue, expr, token, allowFuncDecl, tokenStart);
5143
+ return parseLabelledStatement(parser, context, scope, privateScope, origin, labels, tokenValue, initialExpression, token, allowFuncDecl, tokenStart);
5120
5144
  }
5121
- expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, tokenStart);
5122
- expr = parseAssignmentExpression(parser, context, privateScope, 0, 0, tokenStart, expr);
5145
+ let expression = parseMemberOrUpdateExpression(parser, context, privateScope, initialExpression, 0, 0, tokenStart);
5146
+ expression = parseAssignmentExpression(parser, context, privateScope, 0, 0, tokenStart, expression);
5123
5147
  if (parser.getToken() === 18) {
5124
- expr = parseSequenceExpression(parser, context, privateScope, 0, tokenStart, expr);
5148
+ expression = parseSequenceExpression(parser, context, privateScope, 0, tokenStart, expression);
5125
5149
  }
5126
- return parseExpressionStatement(parser, context, expr, tokenStart);
5150
+ return parseExpressionStatement(parser, context, expression, tokenStart);
5127
5151
  }
5128
5152
  function parseBlock(parser, context, scope, privateScope, labels, start = parser.tokenStart, type = 'BlockStatement') {
5129
5153
  const body = [];
@@ -5312,9 +5336,14 @@
5312
5336
  while (parser.getToken() !== 20556 &&
5313
5337
  parser.getToken() !== 1074790415 &&
5314
5338
  parser.getToken() !== 20561) {
5315
- consequent.push(parseStatementListItem(parser, context | 4, scope, privateScope, 2, {
5339
+ const statement = parseStatementListItem(parser, context | 4, scope, privateScope, 2, {
5316
5340
  $: labels,
5317
- }));
5341
+ });
5342
+ if (statement.type === 'VariableDeclaration' &&
5343
+ (statement.kind === 'using' || statement.kind === 'await using')) {
5344
+ parser.report(30, statement.kind);
5345
+ }
5346
+ consequent.push(statement);
5318
5347
  }
5319
5348
  cases.push(parser.finishNode({
5320
5349
  type: 'SwitchCase',
@@ -5516,14 +5545,90 @@
5516
5545
  }
5517
5546
  return parseExpressionStatement(parser, context, expr, tokenStart);
5518
5547
  }
5519
- function parseLexicalDeclaration(parser, context, scope, privateScope, kind, origin) {
5548
+ function nextTokenIsUsingOnSameLine(parser) {
5549
+ const { index: parserIndex, source } = parser;
5550
+ let index = parserIndex;
5551
+ while (index < parser.end) {
5552
+ const char = source.charCodeAt(index);
5553
+ if (char === 0x0a || char === 0x0d || char === 0x2028 || char === 0x2029)
5554
+ return false;
5555
+ if (/\s/u.test(source[index])) {
5556
+ index++;
5557
+ continue;
5558
+ }
5559
+ if (char === 0x2f && source.charCodeAt(index + 1) === 0x2a) {
5560
+ index += 2;
5561
+ while (index < parser.end) {
5562
+ const commentChar = source.charCodeAt(index);
5563
+ if (commentChar === 0x0a || commentChar === 0x0d || commentChar === 0x2028 || commentChar === 0x2029) {
5564
+ return false;
5565
+ }
5566
+ if (commentChar === 0x2a && source.charCodeAt(index + 1) === 0x2f) {
5567
+ index += 2;
5568
+ break;
5569
+ }
5570
+ index++;
5571
+ }
5572
+ continue;
5573
+ }
5574
+ break;
5575
+ }
5576
+ if (source.slice(index, index + 5) !== 'using')
5577
+ return false;
5578
+ const following = source.codePointAt(index + 5);
5579
+ return following === undefined || (following !== 0x5c && !isIdentifierPart(following));
5580
+ }
5581
+ function isResourceBindingStart(token) {
5582
+ return (token & 143360) === 143360 && (token & 20480) !== 20480;
5583
+ }
5584
+ function parseUsingDeclarationOrExpressionStatement(parser, context, scope, privateScope, origin, labels) {
5585
+ const { tokenStart, tokenValue } = parser;
5586
+ const token = parser.getToken();
5587
+ const expression = parseIdentifier(parser, context);
5588
+ if ((parser.flags & 1) === 0 && isResourceBindingStart(parser.getToken())) {
5589
+ if (origin & 4 && context & 8 && (context & 2) === 0) {
5590
+ parser.report(30, KeywordDescTable[parser.getToken() & 255]);
5591
+ }
5592
+ return parseLexicalDeclaration(parser, context, scope, privateScope, 16, origin, 'using', tokenStart, 1);
5593
+ }
5594
+ parser.assignable = 1;
5595
+ return finishExpressionOrLabelledStatement(parser, context, scope, privateScope, origin, labels, 1, expression, token, tokenValue, tokenStart);
5596
+ }
5597
+ function parseAwaitUsingDeclarationOrExpressionStatement(parser, context, scope, privateScope, origin, labels) {
5520
5598
  const start = parser.tokenStart;
5521
- nextToken(parser, context);
5522
- const declarations = parseVariableDeclarationList(parser, context, scope, privateScope, kind, origin);
5599
+ if (context & 524288)
5600
+ parser.report(177);
5601
+ nextToken(parser, context | 32);
5602
+ let argument;
5603
+ if ((parser.flags & 1) === 0 && parser.getToken() === 209013) {
5604
+ const usingStart = parser.tokenStart;
5605
+ const usingIdentifier = parseIdentifier(parser, context);
5606
+ if ((parser.flags & 1) === 0 && isResourceBindingStart(parser.getToken())) {
5607
+ return parseLexicalDeclaration(parser, context, scope, privateScope, 16, origin, 'await using', start, 1);
5608
+ }
5609
+ argument = parseMemberOrUpdateExpression(parser, context, privateScope, usingIdentifier, 0, 0, usingStart);
5610
+ }
5611
+ else {
5612
+ argument = parseLeftHandSideExpression(parser, context, privateScope, 0, 0, 1);
5613
+ }
5614
+ if (parser.getToken() === 8391735)
5615
+ parser.report(33);
5616
+ parser.assignable = 2;
5617
+ const expression = parser.finishNode({
5618
+ type: 'AwaitExpression',
5619
+ argument,
5620
+ }, start);
5621
+ return finishExpressionOrLabelledStatement(parser, context, scope, privateScope, origin, labels, 0, expression, 1048576, '', start);
5622
+ }
5623
+ function parseLexicalDeclaration(parser, context, scope, privateScope, kind, origin, declarationKind, declarationStart = parser.tokenStart, keywordConsumed = 0) {
5624
+ const start = declarationStart;
5625
+ if (!keywordConsumed)
5626
+ nextToken(parser, context);
5627
+ const declarations = parseVariableDeclarationList(parser, context, scope, privateScope, kind, origin, declarationKind);
5523
5628
  matchOrInsertSemicolon(parser, context | 32);
5524
5629
  return parser.finishNode({
5525
5630
  type: 'VariableDeclaration',
5526
- kind: kind & 8 ? 'let' : 'const',
5631
+ kind: declarationKind ?? (kind & 8 ? 'let' : 'const'),
5527
5632
  declarations,
5528
5633
  }, start);
5529
5634
  }
@@ -5538,24 +5643,34 @@
5538
5643
  declarations,
5539
5644
  }, start);
5540
5645
  }
5541
- function parseVariableDeclarationList(parser, context, scope, privateScope, kind, origin) {
5646
+ function parseVariableDeclarationList(parser, context, scope, privateScope, kind, origin, declarationKind) {
5542
5647
  let bindingCount = 1;
5543
- const list = [
5544
- parseVariableDeclaration(parser, context, scope, privateScope, kind, origin),
5545
- ];
5648
+ const firstDeclaration = parseVariableDeclaration(parser, context, scope, privateScope, kind, origin, declarationKind);
5649
+ const list = [firstDeclaration];
5650
+ const resourceNames = declarationKind && parser.options.lexical ? new Set([firstDeclaration.id.name]) : undefined;
5546
5651
  while (consumeOpt(parser, context, 18)) {
5547
5652
  bindingCount++;
5548
- list.push(parseVariableDeclaration(parser, context, scope, privateScope, kind, origin));
5653
+ const declaration = parseVariableDeclaration(parser, context, scope, privateScope, kind, origin, declarationKind);
5654
+ if (resourceNames) {
5655
+ const { name } = declaration.id;
5656
+ if (resourceNames.has(name))
5657
+ parser.report(145, name);
5658
+ resourceNames.add(name);
5659
+ }
5660
+ list.push(declaration);
5549
5661
  }
5550
5662
  if (bindingCount > 1 && origin & 32 && parser.getToken() & 262144) {
5551
5663
  parser.report(61, KeywordDescTable[parser.getToken() & 255]);
5552
5664
  }
5553
5665
  return list;
5554
5666
  }
5555
- function parseVariableDeclaration(parser, context, scope, privateScope, kind, origin) {
5667
+ function parseVariableDeclaration(parser, context, scope, privateScope, kind, origin, declarationKind) {
5556
5668
  const { tokenStart } = parser;
5557
5669
  const token = parser.getToken();
5558
5670
  let init = null;
5671
+ if (declarationKind && (token & 2097152) === 2097152) {
5672
+ parser.report(50);
5673
+ }
5559
5674
  const id = parseBindingPattern(parser, context, scope, privateScope, kind, origin);
5560
5675
  if (parser.getToken() === 1077936155) {
5561
5676
  nextToken(parser, context | 32);
@@ -5570,7 +5685,7 @@
5570
5685
  }
5571
5686
  else if ((kind & 16 || (token & 2097152) > 0) &&
5572
5687
  (parser.getToken() & 262144) !== 262144) {
5573
- parser.report(59, kind & 16 ? 'const' : 'destructuring');
5688
+ parser.report(59, declarationKind ?? (kind & 16 ? 'const' : 'destructuring'));
5574
5689
  }
5575
5690
  return parser.finishNode({
5576
5691
  type: 'VariableDeclarator',
@@ -5591,7 +5706,10 @@
5591
5706
  let init = null;
5592
5707
  let isVarDecl = parser.getToken() === 86088 ||
5593
5708
  parser.getToken() === 241737 ||
5594
- parser.getToken() === 86090;
5709
+ parser.getToken() === 86090 ||
5710
+ parser.getToken() === 209013;
5711
+ let resourceDeclarationKind;
5712
+ let consumedForOfDelimiter = false;
5595
5713
  let right;
5596
5714
  const { tokenStart } = parser;
5597
5715
  const token = parser.getToken();
@@ -5618,6 +5736,81 @@
5618
5736
  parser.report(115);
5619
5737
  }
5620
5738
  }
5739
+ else if (token === 209013) {
5740
+ const usingIdentifier = parseIdentifier(parser, context);
5741
+ if ((parser.flags & 1) !== 0 || !isResourceBindingStart(parser.getToken())) {
5742
+ isVarDecl = false;
5743
+ parser.assignable = 1;
5744
+ init = parseMemberOrUpdateExpression(parser, context, privateScope, usingIdentifier, 0, 0, tokenStart);
5745
+ }
5746
+ else if (parser.getToken() === 471156) {
5747
+ const ofStart = parser.tokenStart;
5748
+ const ofToken = parser.getToken();
5749
+ const ofValue = parser.tokenValue;
5750
+ const ofIdentifier = parseIdentifier(parser, context);
5751
+ if (parser.getToken() !== 1077936155 &&
5752
+ parser.getToken() !== 8673330 &&
5753
+ parser.getToken() !== 1074790417 &&
5754
+ parser.getToken() !== 18) {
5755
+ isVarDecl = false;
5756
+ consumedForOfDelimiter = true;
5757
+ parser.assignable = 1;
5758
+ init = usingIdentifier;
5759
+ }
5760
+ else {
5761
+ resourceDeclarationKind = 'using';
5762
+ validateBindingIdentifier(parser, context, 16, ofToken, 0);
5763
+ scope?.addBlockName(context, ofValue, 16, 32);
5764
+ let declarationInitializer = null;
5765
+ if (parser.getToken() === 1077936155) {
5766
+ nextToken(parser, context | 32);
5767
+ declarationInitializer = parseExpression(parser, context | 131072, privateScope, 1, 0, parser.tokenStart);
5768
+ if ((parser.getToken() & 262144) === 262144) {
5769
+ throw new ParseError(ofStart, parser.currentLocation, 60, parser.getToken() === 471156 ? 'of' : 'in');
5770
+ }
5771
+ }
5772
+ else if (parser.getToken() !== 8673330) {
5773
+ parser.report(59, resourceDeclarationKind);
5774
+ }
5775
+ const declarations = [
5776
+ parser.finishNode({
5777
+ type: 'VariableDeclarator',
5778
+ id: ofIdentifier,
5779
+ init: declarationInitializer,
5780
+ }, ofStart),
5781
+ ];
5782
+ const resourceNames = parser.options.lexical ? new Set([ofValue]) : undefined;
5783
+ while (consumeOpt(parser, context | 131072, 18)) {
5784
+ const declaration = parseVariableDeclaration(parser, context | 131072, scope, privateScope, 16, 32, resourceDeclarationKind);
5785
+ if (resourceNames) {
5786
+ const { name } = declaration.id;
5787
+ if (resourceNames.has(name))
5788
+ parser.report(145, name);
5789
+ resourceNames.add(name);
5790
+ }
5791
+ declarations.push(declaration);
5792
+ }
5793
+ if (declarations.length > 1 && parser.getToken() & 262144) {
5794
+ parser.report(61, KeywordDescTable[parser.getToken() & 255]);
5795
+ }
5796
+ init = parser.finishNode({
5797
+ type: 'VariableDeclaration',
5798
+ kind: resourceDeclarationKind,
5799
+ declarations,
5800
+ }, tokenStart);
5801
+ parser.assignable = 1;
5802
+ }
5803
+ }
5804
+ else {
5805
+ resourceDeclarationKind = 'using';
5806
+ init = parser.finishNode({
5807
+ type: 'VariableDeclaration',
5808
+ kind: resourceDeclarationKind,
5809
+ declarations: parseVariableDeclarationList(parser, context | 131072, scope, privateScope, 16, 32, resourceDeclarationKind),
5810
+ }, tokenStart);
5811
+ parser.assignable = 1;
5812
+ }
5813
+ }
5621
5814
  else {
5622
5815
  nextToken(parser, context);
5623
5816
  init = parser.finishNode(token === 86088
@@ -5634,6 +5827,42 @@
5634
5827
  parser.assignable = 1;
5635
5828
  }
5636
5829
  }
5830
+ else if (token === 209006 &&
5831
+ (context & 2048 || (context & 2 && context & 8))) {
5832
+ if (context & 524288)
5833
+ parser.report(177);
5834
+ nextToken(parser, context | 32);
5835
+ let awaitArgument;
5836
+ if ((parser.flags & 1) === 0 && parser.getToken() === 209013) {
5837
+ const usingStart = parser.tokenStart;
5838
+ const usingIdentifier = parseIdentifier(parser, context);
5839
+ if ((parser.flags & 1) === 0 && isResourceBindingStart(parser.getToken())) {
5840
+ resourceDeclarationKind = 'await using';
5841
+ isVarDecl = true;
5842
+ init = parser.finishNode({
5843
+ type: 'VariableDeclaration',
5844
+ kind: resourceDeclarationKind,
5845
+ declarations: parseVariableDeclarationList(parser, context | 131072, scope, privateScope, 16, 32, resourceDeclarationKind),
5846
+ }, tokenStart);
5847
+ parser.assignable = 1;
5848
+ }
5849
+ else {
5850
+ awaitArgument = parseMemberOrUpdateExpression(parser, context, privateScope, usingIdentifier, 0, 0, usingStart);
5851
+ }
5852
+ }
5853
+ else {
5854
+ awaitArgument = parseLeftHandSideExpression(parser, context, privateScope, 0, 0, 1);
5855
+ }
5856
+ if (!isVarDecl) {
5857
+ if (parser.getToken() === 8391735)
5858
+ parser.report(33);
5859
+ parser.assignable = 2;
5860
+ init = parser.finishNode({
5861
+ type: 'AwaitExpression',
5862
+ argument: awaitArgument,
5863
+ }, tokenStart);
5864
+ }
5865
+ }
5637
5866
  else if (token === 1074790417) {
5638
5867
  if (forAwait)
5639
5868
  parser.report(82);
@@ -5655,12 +5884,13 @@
5655
5884
  else {
5656
5885
  init = parseLeftHandSideExpression(parser, context | 131072, privateScope, 1, 0, 1);
5657
5886
  }
5658
- if ((parser.getToken() & 262144) === 262144) {
5659
- if (parser.getToken() === 471156) {
5887
+ if (consumedForOfDelimiter || (parser.getToken() & 262144) === 262144) {
5888
+ if (consumedForOfDelimiter || parser.getToken() === 471156) {
5660
5889
  if (parser.assignable & 2)
5661
5890
  parser.report(80, forAwait ? 'await' : 'of');
5662
5891
  reinterpretToPattern(parser, init);
5663
- nextToken(parser, context | 32);
5892
+ if (!consumedForOfDelimiter)
5893
+ nextToken(parser, context | 32);
5664
5894
  right = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);
5665
5895
  consume(parser, context | 32, 16);
5666
5896
  const body = parseIterationStatementBody(parser, context, scope, privateScope, labels);
@@ -5672,6 +5902,8 @@
5672
5902
  await: forAwait,
5673
5903
  }, start);
5674
5904
  }
5905
+ if (resourceDeclarationKind)
5906
+ parser.report(30, 'in');
5675
5907
  if (parser.assignable & 2)
5676
5908
  parser.report(80, 'in');
5677
5909
  reinterpretToPattern(parser, init);
@@ -5869,7 +6101,7 @@
5869
6101
  declaration = parseFunctionDeclaration(parser, context, scope, undefined, 4, 1, 1, 0, parser.tokenStart);
5870
6102
  break;
5871
6103
  }
5872
- case 132:
6104
+ case 133:
5873
6105
  case 86094:
5874
6106
  declaration = parseClassDeclaration(parser, context, scope, undefined, 1);
5875
6107
  break;
@@ -5992,7 +6224,7 @@
5992
6224
  matchOrInsertSemicolon(parser, context | 32);
5993
6225
  break;
5994
6226
  }
5995
- case 132:
6227
+ case 133:
5996
6228
  case 86094:
5997
6229
  declaration = parseClassDeclaration(parser, context, scope, undefined, 2);
5998
6230
  break;
@@ -6330,7 +6562,7 @@
6330
6562
  const { tokenStart } = parser;
6331
6563
  nextToken(parser, context);
6332
6564
  switch (parser.getToken()) {
6333
- case 67108990:
6565
+ case 67108991:
6334
6566
  parser.report(167);
6335
6567
  case 67174411: {
6336
6568
  if ((context & 512) === 0)
@@ -6377,10 +6609,13 @@
6377
6609
  switch (parser.getToken()) {
6378
6610
  case 67108877: {
6379
6611
  nextToken(parser, (context | 262144 | 8) ^ 8);
6380
- if (context & 16 && parser.getToken() === 130 && parser.tokenValue === 'super') {
6612
+ if (context & 16 && parser.getToken() === 131 && parser.tokenValue === 'super') {
6381
6613
  parser.report(173);
6382
6614
  }
6383
- parser.assignable = 1;
6615
+ parser.assignable =
6616
+ (parser.flags & 2048) === 2048
6617
+ ? 2
6618
+ : 1;
6384
6619
  const property = parsePropertyOrPrivatePropertyName(parser, context | 64, privateScope);
6385
6620
  expr = parser.finishNode({
6386
6621
  type: 'MemberExpression',
@@ -6405,7 +6640,7 @@
6405
6640
  const { tokenStart } = parser;
6406
6641
  const property = parseExpressions(parser, context, privateScope, inGroup, 1, tokenStart);
6407
6642
  consume(parser, context, 20);
6408
- parser.assignable = 1;
6643
+ parser.assignable = restoreHasOptionalChaining ? 2 : 1;
6409
6644
  expr = parser.finishNode({
6410
6645
  type: 'MemberExpression',
6411
6646
  object: expr,
@@ -6446,7 +6681,7 @@
6446
6681
  }
6447
6682
  break;
6448
6683
  }
6449
- case 67108990: {
6684
+ case 67108991: {
6450
6685
  nextToken(parser, (context | 262144 | 8) ^ 8);
6451
6686
  parser.flags |= 2048;
6452
6687
  parser.assignable = 2;
@@ -6533,12 +6768,12 @@
6533
6768
  }
6534
6769
  function parsePropertyOrPrivatePropertyName(parser, context, privateScope) {
6535
6770
  if ((parser.getToken() & 143360) === 0 &&
6536
- parser.getToken() !== -2147483528 &&
6537
6771
  parser.getToken() !== -2147483527 &&
6538
- parser.getToken() !== 130) {
6772
+ parser.getToken() !== -2147483526 &&
6773
+ parser.getToken() !== 131) {
6539
6774
  parser.report(160);
6540
6775
  }
6541
- return parser.getToken() === 130
6776
+ return parser.getToken() === 131
6542
6777
  ? parsePrivateIdentifier(parser, context, privateScope, 0)
6543
6778
  : parseIdentifier(parser, context);
6544
6779
  }
@@ -6631,7 +6866,7 @@
6631
6866
  return parseThisExpression(parser, context);
6632
6867
  case 65540:
6633
6868
  return parseRegExpLiteral(parser, context);
6634
- case 132:
6869
+ case 133:
6635
6870
  case 86094:
6636
6871
  return parseClassExpression(parser, context, privateScope, inGroup, start);
6637
6872
  case 86109:
@@ -6642,9 +6877,9 @@
6642
6877
  return parseTemplate(parser, context, privateScope);
6643
6878
  case 86107:
6644
6879
  return parseNewExpression(parser, context, privateScope, inGroup);
6645
- case 134283388:
6880
+ case 134283389:
6646
6881
  return parseBigIntLiteral(parser, context);
6647
- case 130:
6882
+ case 131:
6648
6883
  return parsePrivateIdentifier(parser, context, privateScope, 0);
6649
6884
  case 86106:
6650
6885
  return parseImportCallOrMetaExpression(parser, context, privateScope, inNew, inGroup, start);
@@ -6673,7 +6908,7 @@
6673
6908
  parser.report(169);
6674
6909
  nextToken(parser, context);
6675
6910
  const token = parser.getToken();
6676
- if (token !== 209030 && parser.tokenValue !== 'meta') {
6911
+ if (token !== 209031 && parser.tokenValue !== 'meta') {
6677
6912
  parser.report(174);
6678
6913
  }
6679
6914
  else if (token & -2147483648) {
@@ -6721,7 +6956,7 @@
6721
6956
  const value = parseStringLiteral(parser, context);
6722
6957
  const keyContent = key.type === 'Literal' ? key.value : key.name;
6723
6958
  if (keysContent.has(keyContent)) {
6724
- parser.report(145, `${keyContent}`);
6959
+ parser.report(145, keyContent);
6725
6960
  }
6726
6961
  keysContent.add(keyContent);
6727
6962
  attributes.push(parser.finishNode({
@@ -6897,7 +7132,7 @@
6897
7132
  }
6898
7133
  function parseLiteral(parser, context) {
6899
7134
  const { tokenValue, tokenRaw, tokenStart } = parser;
6900
- if (parser.getToken() === 134283388) {
7135
+ if (parser.getToken() === 134283389) {
6901
7136
  return parseBigIntLiteral(parser, context);
6902
7137
  }
6903
7138
  const node = {
@@ -7414,9 +7649,9 @@
7414
7649
  let key = null;
7415
7650
  let value;
7416
7651
  if (parser.getToken() & 143360 ||
7417
- parser.getToken() === -2147483528 ||
7418
- parser.getToken() === -2147483527) {
7419
- if (parser.getToken() === -2147483527)
7652
+ parser.getToken() === -2147483527 ||
7653
+ parser.getToken() === -2147483526) {
7654
+ if (parser.getToken() === -2147483526)
7420
7655
  destructible |= 16;
7421
7656
  key = parseIdentifier(parser, context);
7422
7657
  if (parser.getToken() === 18 ||
@@ -7448,7 +7683,7 @@
7448
7683
  else {
7449
7684
  destructible |=
7450
7685
  (token === 209006 ? 128 : 0) |
7451
- (token === -2147483528 ? 16 : 0);
7686
+ (token === -2147483527 ? 16 : 0);
7452
7687
  value = parser.cloneIdentifier(key);
7453
7688
  }
7454
7689
  }
@@ -7575,7 +7810,7 @@
7575
7810
  }
7576
7811
  else if (parser.getToken() & 143360) {
7577
7812
  destructible |= 16;
7578
- if (token === -2147483528)
7813
+ if (token === -2147483527)
7579
7814
  parser.report(95);
7580
7815
  if (token === 209005) {
7581
7816
  if (parser.flags & 1)
@@ -8386,7 +8621,7 @@
8386
8621
  const id = parseIdentifier(parser, context | 32);
8387
8622
  const { tokenStart } = parser;
8388
8623
  if (consumeOpt(parser, context, 67108877)) {
8389
- if (context & 65536 && parser.getToken() === 209029) {
8624
+ if (context & 65536 && parser.getToken() === 209030) {
8390
8625
  parser.assignable = 2;
8391
8626
  return parseMetaProperty(parser, context, id, start);
8392
8627
  }
@@ -8398,7 +8633,7 @@
8398
8633
  }
8399
8634
  const expr = parsePrimaryExpression(parser, context, privateScope, 2, 1, 0, inGroup, 1, tokenStart);
8400
8635
  context = (context | 131072) ^ 131072;
8401
- if (parser.getToken() === 67108990)
8636
+ if (parser.getToken() === 67108991)
8402
8637
  parser.report(168);
8403
8638
  const callee = parseMemberExpressionNoCall(parser, context, privateScope, expr, inGroup, tokenStart);
8404
8639
  parser.assignable = 2;
@@ -8599,7 +8834,7 @@
8599
8834
  let start;
8600
8835
  let decorators;
8601
8836
  if (parser.leadingDecorators.decorators.length) {
8602
- if (parser.getToken() === 132) {
8837
+ if (parser.getToken() === 133) {
8603
8838
  parser.report(30, '@');
8604
8839
  }
8605
8840
  start = parser.leadingDecorators.start;
@@ -8688,7 +8923,7 @@
8688
8923
  function parseDecorators(parser, context, privateScope) {
8689
8924
  const list = [];
8690
8925
  if (parser.options.next) {
8691
- while (parser.getToken() === 132) {
8926
+ while (parser.getToken() === 133) {
8692
8927
  list.push(parseDecoratorList(parser, context, privateScope));
8693
8928
  }
8694
8929
  }
@@ -8741,7 +8976,7 @@
8741
8976
  let kind = isStatic ? 32 : 0;
8742
8977
  let key = null;
8743
8978
  const token = parser.getToken();
8744
- if (token & (143360 | 36864) || token === -2147483528) {
8979
+ if (token & (143360 | 36864) || token === -2147483527) {
8745
8980
  key = parseIdentifier(parser, context);
8746
8981
  switch (token) {
8747
8982
  case 36970:
@@ -8804,7 +9039,7 @@
8804
9039
  kind |= 8;
8805
9040
  nextToken(parser, context);
8806
9041
  }
8807
- else if (parser.getToken() === 130) {
9042
+ else if (parser.getToken() === 131) {
8808
9043
  kind |= 8192;
8809
9044
  key = parsePrivateIdentifier(parser, context | 16, privateScope, 768);
8810
9045
  }
@@ -8814,7 +9049,7 @@
8814
9049
  else if (isStatic && token === 2162700) {
8815
9050
  return parseStaticBlock(parser, context | 16, scope, privateScope, start);
8816
9051
  }
8817
- else if (token === -2147483527) {
9052
+ else if (token === -2147483526) {
8818
9053
  key = parseIdentifier(parser, context);
8819
9054
  if (parser.getToken() !== 67174411)
8820
9055
  parser.report(30, KeywordDescTable[parser.getToken() & 255]);
@@ -8824,8 +9059,8 @@
8824
9059
  }
8825
9060
  if (kind & (8 | 16 | 768 | 1024)) {
8826
9061
  if (parser.getToken() & 143360 ||
8827
- parser.getToken() === -2147483528 ||
8828
- parser.getToken() === -2147483527) {
9062
+ parser.getToken() === -2147483527 ||
9063
+ parser.getToken() === -2147483526) {
8829
9064
  key = parseIdentifier(parser, context);
8830
9065
  }
8831
9066
  else if ((parser.getToken() & 134217728) === 134217728) {
@@ -8835,7 +9070,7 @@
8835
9070
  kind |= 2;
8836
9071
  key = parseComputedPropertyName(parser, context, privateScope, 0);
8837
9072
  }
8838
- else if (parser.getToken() === 130) {
9073
+ else if (parser.getToken() === 131) {
8839
9074
  kind |= 8192;
8840
9075
  key = parsePrivateIdentifier(parser, context, privateScope, kind);
8841
9076
  }
@@ -8915,7 +9150,7 @@
8915
9150
  if (parser.getToken() === 1077936155) {
8916
9151
  nextToken(parser, context | 32);
8917
9152
  const { tokenStart } = parser;
8918
- if (parser.getToken() === 537079927)
9153
+ if (parser.getToken() === 537079928)
8919
9154
  parser.report(119);
8920
9155
  const modifierFlags = 1024 |
8921
9156
  2048 |
@@ -8947,7 +9182,7 @@
8947
9182
  }
8948
9183
  function parseBindingPattern(parser, context, scope, privateScope, type, origin) {
8949
9184
  if (parser.getToken() & 143360 ||
8950
- ((context & 1) === 0 && parser.getToken() === -2147483527))
9185
+ ((context & 1) === 0 && parser.getToken() === -2147483526))
8951
9186
  return parseAndClassifyIdentifier(parser, context, scope, type, origin);
8952
9187
  if ((parser.getToken() & 2097152) !== 2097152)
8953
9188
  parser.report(30, KeywordDescTable[parser.getToken() & 255]);
@@ -8966,7 +9201,7 @@
8966
9201
  if ((token & 537079808) === 537079808) {
8967
9202
  parser.report(119);
8968
9203
  }
8969
- else if ((token & 36864) === 36864 || token === -2147483527) {
9204
+ else if ((token & 36864) === 36864 || token === -2147483526) {
8970
9205
  parser.report(118);
8971
9206
  }
8972
9207
  }
@@ -9087,7 +9322,7 @@
9087
9322
  }
9088
9323
  }
9089
9324
  function parseJSXChildOrClosingElement(parser, context, privateScope, inJSXChild) {
9090
- if (parser.getToken() === 137)
9325
+ if (parser.getToken() === 138)
9091
9326
  return parseJSXText(parser, context);
9092
9327
  if (parser.getToken() === 2162700)
9093
9328
  return parseJSXExpressionContainer(parser, context, privateScope, 1, 0);
@@ -9101,7 +9336,7 @@
9101
9336
  parser.report(0);
9102
9337
  }
9103
9338
  function parseJSXChildOrClosingFragment(parser, context, privateScope, inJSXChild) {
9104
- if (parser.getToken() === 137)
9339
+ if (parser.getToken() === 138)
9105
9340
  return parseJSXText(parser, context);
9106
9341
  if (parser.getToken() === 2162700)
9107
9342
  return parseJSXExpressionContainer(parser, context, privateScope, 1, 0);