meriyah 6.1.0 → 6.1.2

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/dist/meriyah.cjs CHANGED
@@ -180,31 +180,36 @@ const errorMessages = {
180
180
  [177]: 'cannot use "await" in static blocks',
181
181
  };
182
182
  class ParseError extends SyntaxError {
183
- constructor(start, startLine, startColumn, end, endLine, endColumn, type, ...params) {
183
+ start;
184
+ end;
185
+ range;
186
+ loc;
187
+ description;
188
+ constructor(start, end, type, ...params) {
184
189
  const description = errorMessages[type].replace(/%(\d+)/g, (_, i) => params[i]);
185
- const message = '[' + startLine + ':' + startColumn + '-' + endLine + ':' + endColumn + ']: ' + description;
190
+ const message = '[' + start.line + ':' + start.column + '-' + end.line + ':' + end.column + ']: ' + description;
186
191
  super(message);
187
- this.start = start;
188
- this.end = end;
189
- this.range = [start, end];
192
+ this.start = start.index;
193
+ this.end = end.index;
194
+ this.range = [start.index, end.index];
190
195
  this.loc = {
191
- start: { line: startLine, column: startColumn },
192
- end: { line: endLine, column: endColumn },
196
+ start: { line: start.line, column: start.column },
197
+ end: { line: end.line, column: end.column },
193
198
  };
194
199
  this.description = description;
195
200
  }
196
201
  }
197
202
  function report(parser, type, ...params) {
198
- throw new ParseError(parser.tokenIndex, parser.tokenLine, parser.tokenColumn, parser.index, parser.line, parser.column, type, ...params);
203
+ throw new ParseError(parser.tokenStart, parser.currentLocation, type, ...params);
199
204
  }
200
205
  function reportScopeError(scope) {
201
- throw new ParseError(scope.tokenIndex, scope.tokenLine, scope.tokenColumn, scope.index, scope.line, scope.column, scope.type, ...scope.params);
206
+ throw new ParseError(scope.start, scope.end, scope.type, ...scope.params);
202
207
  }
203
- function reportMessageAt(tokenIndex, tokenLine, tokenColumn, index, line, column, type, ...params) {
204
- throw new ParseError(tokenIndex, tokenLine, tokenColumn, index, line, column, type, ...params);
208
+ function reportMessageAt(start, end, type, ...params) {
209
+ throw new ParseError(start, end, type, ...params);
205
210
  }
206
- function reportScannerError(tokenIndex, tokenLine, tokenColumn, index, line, column, type) {
207
- throw new ParseError(tokenIndex, tokenLine, tokenColumn, index, line, column, type);
211
+ function reportScannerError(start, end, type) {
212
+ throw new ParseError(start, end, type);
208
213
  }
209
214
 
210
215
  const unicodeLookup = ((compressed, lookup) => {
@@ -702,7 +707,13 @@ function isIdentifierPart(code) {
702
707
  : isIDContinue(code) || (code === 8204 || code === 8205);
703
708
  }
704
709
 
705
- const CommentTypes = ['SingleLine', 'MultiLine', 'HTMLOpen', 'HTMLClose', 'HashbangComment'];
710
+ const CommentTypes = [
711
+ 'SingleLine',
712
+ 'MultiLine',
713
+ 'HTMLOpen',
714
+ 'HTMLClose',
715
+ 'HashbangComment',
716
+ ];
706
717
  function skipHashBang(parser) {
707
718
  const { source } = parser;
708
719
  if (parser.currentChar === 35 && source.charCodeAt(parser.index + 1) === 33) {
@@ -738,7 +749,7 @@ function skipSingleLineComment(parser, source, state, type, start, line, column)
738
749
  parser.tokenLine = parser.line;
739
750
  parser.tokenColumn = parser.column;
740
751
  }
741
- if (parser.onComment) {
752
+ if (parser.options.onComment) {
742
753
  const loc = {
743
754
  start: {
744
755
  line,
@@ -749,7 +760,7 @@ function skipSingleLineComment(parser, source, state, type, start, line, column)
749
760
  column: parser.tokenColumn,
750
761
  },
751
762
  };
752
- parser.onComment(CommentTypes[type & 0xff], source.slice(index, parser.tokenIndex), start, parser.tokenIndex, loc);
763
+ parser.options.onComment(CommentTypes[type & 0xff], source.slice(index, parser.tokenIndex), start, parser.tokenIndex, loc);
753
764
  }
754
765
  return state | 1;
755
766
  }
@@ -765,7 +776,7 @@ function skipMultiLineComment(parser, source, state) {
765
776
  }
766
777
  if (advanceChar(parser) === 47) {
767
778
  advanceChar(parser);
768
- if (parser.onComment) {
779
+ if (parser.options.onComment) {
769
780
  const loc = {
770
781
  start: {
771
782
  line: parser.tokenLine,
@@ -776,7 +787,7 @@ function skipMultiLineComment(parser, source, state) {
776
787
  column: parser.column,
777
788
  },
778
789
  };
779
- parser.onComment(CommentTypes[1 & 0xff], source.slice(index, parser.index - 2), index - 2, parser.index, loc);
790
+ parser.options.onComment(CommentTypes[1 & 0xff], source.slice(index, parser.index - 2), index - 2, parser.index, loc);
780
791
  }
781
792
  parser.tokenIndex = parser.index;
782
793
  parser.tokenLine = parser.line;
@@ -1335,7 +1346,7 @@ function scanNumber(parser, context, kind) {
1335
1346
  if (char === 95) {
1336
1347
  char = advanceChar(parser);
1337
1348
  if (char === 95 || kind & 32) {
1338
- reportScannerError(parser.index, parser.line, parser.column, parser.index + 1, parser.line, parser.column, 152);
1349
+ reportScannerError(parser.currentLocation, { index: parser.index + 1, line: parser.line, column: parser.column }, 152);
1339
1350
  }
1340
1351
  allowSeparator = 1;
1341
1352
  continue;
@@ -1346,7 +1357,7 @@ function scanNumber(parser, context, kind) {
1346
1357
  --digit;
1347
1358
  }
1348
1359
  if (allowSeparator) {
1349
- reportScannerError(parser.index, parser.line, parser.column, parser.index + 1, parser.line, parser.column, 153);
1360
+ reportScannerError(parser.currentLocation, { index: parser.index + 1, line: parser.line, column: parser.column }, 153);
1350
1361
  }
1351
1362
  if (digit >= 0 && !isIdentifierStart(char) && char !== 46) {
1352
1363
  parser.tokenValue = value;
@@ -1411,7 +1422,7 @@ function scanDecimalDigitsOrSeparator(parser, char) {
1411
1422
  const { index } = parser;
1412
1423
  char = advanceChar(parser);
1413
1424
  if (char === 95) {
1414
- reportScannerError(parser.index, parser.line, parser.column, parser.index + 1, parser.line, parser.column, 152);
1425
+ reportScannerError(parser.currentLocation, { index: parser.index + 1, line: parser.line, column: parser.column }, 152);
1415
1426
  }
1416
1427
  allowSeparator = 1;
1417
1428
  ret += parser.source.substring(start, index);
@@ -1422,7 +1433,7 @@ function scanDecimalDigitsOrSeparator(parser, char) {
1422
1433
  char = advanceChar(parser);
1423
1434
  }
1424
1435
  if (allowSeparator) {
1425
- reportScannerError(parser.index, parser.line, parser.column, parser.index + 1, parser.line, parser.column, 153);
1436
+ reportScannerError(parser.currentLocation, { index: parser.index + 1, line: parser.line, column: parser.column }, 153);
1426
1437
  }
1427
1438
  return ret + parser.source.substring(start, parser.index);
1428
1439
  }
@@ -1624,6 +1635,7 @@ function scanIdentifierUnicodeEscape(parser) {
1624
1635
  report(parser, 5);
1625
1636
  }
1626
1637
  parser.currentChar = parser.source.charCodeAt((parser.index += 2));
1638
+ parser.column += 2;
1627
1639
  return scanUnicodeEscape(parser);
1628
1640
  }
1629
1641
  function scanUnicodeEscape(parser) {
@@ -1634,10 +1646,10 @@ function scanUnicodeEscape(parser) {
1634
1646
  while (CharTypes[advanceChar(parser)] & 64) {
1635
1647
  codePoint = (codePoint << 4) | toHex(parser.currentChar);
1636
1648
  if (codePoint > 1114111)
1637
- reportScannerError(begin, parser.line, parser.column, parser.index, parser.line, parser.column, 104);
1649
+ reportScannerError({ index: begin, line: parser.line, column: parser.column }, parser.currentLocation, 104);
1638
1650
  }
1639
1651
  if (parser.currentChar !== 125) {
1640
- reportScannerError(begin, parser.line, parser.column, parser.index, parser.line, parser.column, 7);
1652
+ reportScannerError({ index: begin, line: parser.line, column: parser.column }, parser.currentLocation, 7);
1641
1653
  }
1642
1654
  advanceChar(parser);
1643
1655
  return codePoint;
@@ -1655,6 +1667,7 @@ function scanUnicodeEscape(parser) {
1655
1667
  report(parser, 7);
1656
1668
  codePoint = (toHex(char) << 12) | (toHex(char2) << 8) | (toHex(char3) << 4) | toHex(char4);
1657
1669
  parser.currentChar = parser.source.charCodeAt((parser.index += 4));
1670
+ parser.column += 4;
1658
1671
  return codePoint;
1659
1672
  }
1660
1673
 
@@ -4382,7 +4395,7 @@ function matchOrInsertSemicolon(parser, context) {
4382
4395
  report(parser, 30, KeywordDescTable[parser.getToken() & 255]);
4383
4396
  }
4384
4397
  if (!consumeOpt(parser, context, 1074790417)) {
4385
- parser.onInsertedSemicolon?.(parser.startIndex);
4398
+ parser.options.onInsertedSemicolon?.(parser.startIndex);
4386
4399
  }
4387
4400
  }
4388
4401
  function isValidStrictMode(parser, index, tokenIndex, tokenValue) {
@@ -4529,29 +4542,6 @@ function validateAndDeclareLabel(parser, labels, name) {
4529
4542
  }
4530
4543
  labels['$' + name] = 1;
4531
4544
  }
4532
- function finishNode(parser, context, start, line, column, node) {
4533
- if (context & 2) {
4534
- node.start = start;
4535
- node.end = parser.startIndex;
4536
- node.range = [start, parser.startIndex];
4537
- }
4538
- if (context & 4) {
4539
- node.loc = {
4540
- start: {
4541
- line,
4542
- column,
4543
- },
4544
- end: {
4545
- line: parser.startLine,
4546
- column: parser.startColumn,
4547
- },
4548
- };
4549
- if (parser.sourceFile) {
4550
- node.loc.source = parser.sourceFile;
4551
- }
4552
- }
4553
- return node;
4554
- }
4555
4545
  function isEqualTagName(elementName) {
4556
4546
  switch (elementName.type) {
4557
4547
  case 'JSXIdentifier':
@@ -4568,16 +4558,11 @@ function createArrowHeadParsingScope(parser, context, value) {
4568
4558
  return scope;
4569
4559
  }
4570
4560
  function recordScopeError(parser, type, ...params) {
4571
- const { index, line, column, tokenIndex, tokenLine, tokenColumn } = parser;
4572
4561
  return {
4573
4562
  type,
4574
4563
  params,
4575
- index,
4576
- line,
4577
- column,
4578
- tokenIndex,
4579
- tokenLine,
4580
- tokenColumn,
4564
+ start: parser.tokenStart,
4565
+ end: parser.currentLocation,
4581
4566
  };
4582
4567
  }
4583
4568
  function createScope() {
@@ -4697,7 +4682,7 @@ function validatePrivateIdentifierRefs(scope) {
4697
4682
  for (const name in scope.refs) {
4698
4683
  if (!isPrivateIdentifierDefined(name, scope)) {
4699
4684
  const { index, line, column } = scope.refs[name][0];
4700
- throw new ParseError(index, line, column, index + name.length, line, column + name.length, 4, name);
4685
+ throw new ParseError({ index, line, column }, { index: index + name.length, line, column: column + name.length }, 4, name);
4701
4686
  }
4702
4687
  }
4703
4688
  }
@@ -4714,39 +4699,6 @@ function addBindingToExports(parser, name) {
4714
4699
  parser.exportedBindings['#' + name] = 1;
4715
4700
  }
4716
4701
  }
4717
- function pushComment(context, array) {
4718
- return function (type, value, start, end, loc) {
4719
- const comment = {
4720
- type,
4721
- value,
4722
- };
4723
- if (context & 2) {
4724
- comment.start = start;
4725
- comment.end = end;
4726
- comment.range = [start, end];
4727
- }
4728
- if (context & 4) {
4729
- comment.loc = loc;
4730
- }
4731
- array.push(comment);
4732
- };
4733
- }
4734
- function pushToken(context, array) {
4735
- return function (token, start, end, loc) {
4736
- const tokens = {
4737
- token,
4738
- };
4739
- if (context & 2) {
4740
- tokens.start = start;
4741
- tokens.end = end;
4742
- tokens.range = [start, end];
4743
- }
4744
- if (context & 4) {
4745
- tokens.loc = loc;
4746
- }
4747
- array.push(tokens);
4748
- };
4749
- }
4750
4702
  function isValidIdentifier(context, t) {
4751
4703
  if (context & (256 | 262144)) {
4752
4704
  if (context & 512 && t === 209006)
@@ -4767,72 +4719,136 @@ function classifyIdentifier(parser, context, t) {
4767
4719
  report(parser, 0);
4768
4720
  }
4769
4721
 
4770
- function create(source, sourceFile, onComment, onToken, onInsertedSemicolon) {
4771
- let token = 1048576;
4772
- let lastOnToken = null;
4773
- return {
4774
- source,
4775
- flags: 0,
4776
- index: 0,
4777
- line: 1,
4778
- column: 0,
4779
- startIndex: 0,
4780
- end: source.length,
4781
- tokenIndex: 0,
4782
- startColumn: 0,
4783
- tokenColumn: 0,
4784
- tokenLine: 1,
4785
- startLine: 1,
4786
- sourceFile,
4787
- tokenValue: '',
4788
- getToken() {
4789
- return token;
4790
- },
4791
- setToken(value, replaceLast = false) {
4792
- if (onToken) {
4793
- if (value !== 1048576) {
4794
- const loc = {
4795
- start: {
4796
- line: this.tokenLine,
4797
- column: this.tokenColumn,
4798
- },
4799
- end: {
4800
- line: this.line,
4801
- column: this.column,
4802
- },
4803
- };
4804
- if (!replaceLast && lastOnToken) {
4805
- onToken(...lastOnToken);
4806
- }
4807
- lastOnToken = [convertTokenType(value), this.tokenIndex, this.index, loc];
4722
+ class Parser {
4723
+ source;
4724
+ options;
4725
+ lastOnToken = null;
4726
+ token = 1048576;
4727
+ flags = 0;
4728
+ index = 0;
4729
+ line = 1;
4730
+ column = 0;
4731
+ startIndex = 0;
4732
+ end = 0;
4733
+ tokenIndex = 0;
4734
+ startColumn = 0;
4735
+ tokenColumn = 0;
4736
+ tokenLine = 1;
4737
+ startLine = 1;
4738
+ tokenValue = '';
4739
+ tokenRaw = '';
4740
+ tokenRegExp = void 0;
4741
+ currentChar = 0;
4742
+ exportedNames = {};
4743
+ exportedBindings = {};
4744
+ assignable = 1;
4745
+ destructible = 0;
4746
+ leadingDecorators = { decorators: [] };
4747
+ constructor(source, options = {}) {
4748
+ this.source = source;
4749
+ this.options = options;
4750
+ this.end = source.length;
4751
+ this.currentChar = source.charCodeAt(0);
4752
+ }
4753
+ getToken() {
4754
+ return this.token;
4755
+ }
4756
+ setToken(value, replaceLast = false) {
4757
+ this.token = value;
4758
+ const { onToken } = this.options;
4759
+ if (onToken) {
4760
+ if (value !== 1048576) {
4761
+ const loc = {
4762
+ start: {
4763
+ line: this.tokenLine,
4764
+ column: this.tokenColumn,
4765
+ },
4766
+ end: {
4767
+ line: this.line,
4768
+ column: this.column,
4769
+ },
4770
+ };
4771
+ if (!replaceLast && this.lastOnToken) {
4772
+ onToken(...this.lastOnToken);
4808
4773
  }
4809
- else {
4810
- if (lastOnToken) {
4811
- onToken(...lastOnToken);
4812
- lastOnToken = null;
4813
- }
4774
+ this.lastOnToken = [convertTokenType(value), this.tokenIndex, this.index, loc];
4775
+ }
4776
+ else {
4777
+ if (this.lastOnToken) {
4778
+ onToken(...this.lastOnToken);
4779
+ this.lastOnToken = null;
4814
4780
  }
4815
4781
  }
4816
- return (token = value);
4817
- },
4818
- tokenRaw: '',
4819
- tokenRegExp: void 0,
4820
- currentChar: source.charCodeAt(0),
4821
- exportedNames: [],
4822
- exportedBindings: [],
4823
- assignable: 1,
4824
- destructible: 0,
4825
- onComment,
4826
- onToken,
4827
- onInsertedSemicolon,
4828
- leadingDecorators: [],
4782
+ }
4783
+ return value;
4784
+ }
4785
+ get tokenStart() {
4786
+ return {
4787
+ index: this.tokenIndex,
4788
+ line: this.tokenLine,
4789
+ column: this.tokenColumn,
4790
+ };
4791
+ }
4792
+ get currentLocation() {
4793
+ return { index: this.index, line: this.line, column: this.column };
4794
+ }
4795
+ finishNode(node, start, end) {
4796
+ if (this.options.shouldAddRanges) {
4797
+ node.start = start.index;
4798
+ const endIndex = end ? end.index : this.startIndex;
4799
+ node.end = endIndex;
4800
+ node.range = [start.index, endIndex];
4801
+ }
4802
+ if (this.options.shouldAddLoc) {
4803
+ node.loc = {
4804
+ start: {
4805
+ line: start.line,
4806
+ column: start.column,
4807
+ },
4808
+ end: end ? { line: end.line, column: end.column } : { line: this.startLine, column: this.startColumn },
4809
+ };
4810
+ if (this.options.sourceFile) {
4811
+ node.loc.source = this.options.sourceFile;
4812
+ }
4813
+ }
4814
+ return node;
4815
+ }
4816
+ }
4817
+ function pushComment(comments, options) {
4818
+ return function (type, value, start, end, loc) {
4819
+ const comment = {
4820
+ type,
4821
+ value,
4822
+ };
4823
+ if (options.shouldAddRanges) {
4824
+ comment.start = start;
4825
+ comment.end = end;
4826
+ comment.range = [start, end];
4827
+ }
4828
+ if (options.shouldAddLoc) {
4829
+ comment.loc = loc;
4830
+ }
4831
+ comments.push(comment);
4829
4832
  };
4830
4833
  }
4834
+ function pushToken(tokens, options) {
4835
+ return function (type, start, end, loc) {
4836
+ const token = {
4837
+ token: type,
4838
+ };
4839
+ if (options.shouldAddRanges) {
4840
+ token.start = start;
4841
+ token.end = end;
4842
+ token.range = [start, end];
4843
+ }
4844
+ if (options.shouldAddLoc) {
4845
+ token.loc = loc;
4846
+ }
4847
+ tokens.push(token);
4848
+ };
4849
+ }
4850
+
4831
4851
  function parseSource(source, options, context) {
4832
- let sourceFile = '';
4833
- let onComment;
4834
- let onInsertedSemicolon;
4835
- let onToken;
4836
4852
  if (options != null) {
4837
4853
  if (options.module)
4838
4854
  context |= 512 | 256;
@@ -4858,18 +4874,28 @@ function parseSource(source, options, context) {
4858
4874
  context |= 256;
4859
4875
  if (options.jsx)
4860
4876
  context |= 8;
4877
+ }
4878
+ const parserOptions = {
4879
+ shouldAddLoc: Boolean(context & 4),
4880
+ shouldAddRanges: Boolean(context & 2),
4881
+ };
4882
+ if (options != null) {
4861
4883
  if (options.source)
4862
- sourceFile = options.source;
4884
+ parserOptions.sourceFile = options.source;
4863
4885
  if (options.onComment != null) {
4864
- onComment = Array.isArray(options.onComment) ? pushComment(context, options.onComment) : options.onComment;
4886
+ parserOptions.onComment = Array.isArray(options.onComment)
4887
+ ? pushComment(options.onComment, parserOptions)
4888
+ : options.onComment;
4865
4889
  }
4866
4890
  if (options.onInsertedSemicolon != null)
4867
- onInsertedSemicolon = options.onInsertedSemicolon;
4891
+ parserOptions.onInsertedSemicolon = options.onInsertedSemicolon;
4868
4892
  if (options.onToken != null) {
4869
- onToken = Array.isArray(options.onToken) ? pushToken(context, options.onToken) : options.onToken;
4893
+ parserOptions.onToken = Array.isArray(options.onToken)
4894
+ ? pushToken(options.onToken, parserOptions)
4895
+ : options.onToken;
4870
4896
  }
4871
4897
  }
4872
- const parser = create(source, sourceFile, onComment, onToken, onInsertedSemicolon);
4898
+ const parser = new Parser(source, parserOptions);
4873
4899
  skipHashBang(parser);
4874
4900
  const scope = context & 16 ? createScope() : void 0;
4875
4901
  let body = [];
@@ -4887,43 +4913,29 @@ function parseSource(source, options, context) {
4887
4913
  else {
4888
4914
  body = parseStatementList(parser, context | 2048, scope);
4889
4915
  }
4890
- const node = {
4916
+ return parser.finishNode({
4891
4917
  type: 'Program',
4892
4918
  sourceType,
4893
4919
  body,
4894
- };
4895
- if (context & 2) {
4896
- node.start = 0;
4897
- node.end = source.length;
4898
- node.range = [0, source.length];
4899
- }
4900
- if (context & 4) {
4901
- node.loc = {
4902
- start: { line: 1, column: 0 },
4903
- end: { line: parser.line, column: parser.column },
4904
- };
4905
- if (parser.sourceFile)
4906
- node.loc.source = sourceFile;
4907
- }
4908
- return node;
4920
+ }, { index: 0, line: 1, column: 0 }, parser.currentLocation);
4909
4921
  }
4910
4922
  function parseStatementList(parser, context, scope) {
4911
4923
  nextToken(parser, context | 8192 | 67108864);
4912
4924
  const statements = [];
4913
4925
  while (parser.getToken() === 134283267) {
4914
- const { index, tokenIndex, tokenValue, tokenLine, tokenColumn } = parser;
4926
+ const { index, tokenValue, tokenStart, tokenIndex } = parser;
4915
4927
  const token = parser.getToken();
4916
4928
  const expr = parseLiteral(parser, context);
4917
4929
  if (isValidStrictMode(parser, index, tokenIndex, tokenValue)) {
4918
4930
  context |= 256;
4919
4931
  if (parser.flags & 64) {
4920
- reportMessageAt(parser.tokenIndex, parser.tokenLine, parser.tokenColumn, parser.index, parser.line, parser.column, 9);
4932
+ reportMessageAt(parser.tokenStart, parser.currentLocation, 9);
4921
4933
  }
4922
4934
  if (parser.flags & 4096) {
4923
- reportMessageAt(parser.tokenIndex, parser.tokenLine, parser.tokenColumn, parser.index, parser.line, parser.column, 15);
4935
+ reportMessageAt(parser.tokenStart, parser.currentLocation, 15);
4924
4936
  }
4925
4937
  }
4926
- statements.push(parseDirective(parser, context, expr, token, tokenIndex, tokenLine, tokenColumn));
4938
+ statements.push(parseDirective(parser, context, expr, token, tokenStart));
4927
4939
  }
4928
4940
  while (parser.getToken() !== 1048576) {
4929
4941
  statements.push(parseStatementListItem(parser, context, scope, undefined, 4, {}));
@@ -4934,9 +4946,9 @@ function parseModuleItemList(parser, context, scope) {
4934
4946
  nextToken(parser, context | 8192);
4935
4947
  const statements = [];
4936
4948
  while (parser.getToken() === 134283267) {
4937
- const { tokenIndex, tokenLine, tokenColumn } = parser;
4949
+ const { tokenStart } = parser;
4938
4950
  const token = parser.getToken();
4939
- statements.push(parseDirective(parser, context, parseLiteral(parser, context), token, tokenIndex, tokenLine, tokenColumn));
4951
+ statements.push(parseDirective(parser, context, parseLiteral(parser, context), token, tokenStart));
4940
4952
  }
4941
4953
  while (parser.getToken() !== 1048576) {
4942
4954
  statements.push(parseModuleItem(parser, context, scope));
@@ -4944,7 +4956,12 @@ function parseModuleItemList(parser, context, scope) {
4944
4956
  return statements;
4945
4957
  }
4946
4958
  function parseModuleItem(parser, context, scope) {
4947
- parser.leadingDecorators = parseDecorators(parser, context, undefined);
4959
+ if (parser.getToken() === 132) {
4960
+ Object.assign(parser.leadingDecorators, {
4961
+ start: parser.tokenStart,
4962
+ decorators: parseDecorators(parser, context, undefined),
4963
+ });
4964
+ }
4948
4965
  let moduleItem;
4949
4966
  switch (parser.getToken()) {
4950
4967
  case 20564:
@@ -4956,77 +4973,75 @@ function parseModuleItem(parser, context, scope) {
4956
4973
  default:
4957
4974
  moduleItem = parseStatementListItem(parser, context, scope, undefined, 4, {});
4958
4975
  }
4959
- if (parser.leadingDecorators.length) {
4976
+ if (parser.leadingDecorators?.decorators.length) {
4960
4977
  report(parser, 170);
4961
4978
  }
4962
4979
  return moduleItem;
4963
4980
  }
4964
4981
  function parseStatementListItem(parser, context, scope, privateScope, origin, labels) {
4965
- const start = parser.tokenIndex;
4966
- const line = parser.tokenLine;
4967
- const column = parser.tokenColumn;
4982
+ const start = parser.tokenStart;
4968
4983
  switch (parser.getToken()) {
4969
4984
  case 86104:
4970
- return parseFunctionDeclaration(parser, context, scope, privateScope, origin, 1, 0, 0, start, line, column);
4985
+ return parseFunctionDeclaration(parser, context, scope, privateScope, origin, 1, 0, 0, start);
4971
4986
  case 132:
4972
4987
  case 86094:
4973
- return parseClassDeclaration(parser, context, scope, privateScope, 0, start, line, column);
4988
+ return parseClassDeclaration(parser, context, scope, privateScope, 0);
4974
4989
  case 86090:
4975
- return parseLexicalDeclaration(parser, context, scope, privateScope, 16, 0, start, line, column);
4990
+ return parseLexicalDeclaration(parser, context, scope, privateScope, 16, 0);
4976
4991
  case 241737:
4977
- return parseLetIdentOrVarDeclarationStatement(parser, context, scope, privateScope, origin, start, line, column);
4992
+ return parseLetIdentOrVarDeclarationStatement(parser, context, scope, privateScope, origin);
4978
4993
  case 20564:
4979
4994
  report(parser, 103, 'export');
4980
4995
  case 86106:
4981
4996
  nextToken(parser, context);
4982
4997
  switch (parser.getToken()) {
4983
4998
  case 67174411:
4984
- return parseImportCallDeclaration(parser, context, privateScope, start, line, column);
4999
+ return parseImportCallDeclaration(parser, context, privateScope, start);
4985
5000
  case 67108877:
4986
- return parseImportMetaDeclaration(parser, context, start, line, column);
5001
+ return parseImportMetaDeclaration(parser, context, start);
4987
5002
  default:
4988
5003
  report(parser, 103, 'import');
4989
5004
  }
4990
5005
  case 209005:
4991
- return parseAsyncArrowOrAsyncFunctionDeclaration(parser, context, scope, privateScope, origin, labels, 1, start, line, column);
5006
+ return parseAsyncArrowOrAsyncFunctionDeclaration(parser, context, scope, privateScope, origin, labels, 1);
4992
5007
  default:
4993
- return parseStatement(parser, context, scope, privateScope, origin, labels, 1, start, line, column);
5008
+ return parseStatement(parser, context, scope, privateScope, origin, labels, 1);
4994
5009
  }
4995
5010
  }
4996
- function parseStatement(parser, context, scope, privateScope, origin, labels, allowFuncDecl, start, line, column) {
5011
+ function parseStatement(parser, context, scope, privateScope, origin, labels, allowFuncDecl) {
4997
5012
  switch (parser.getToken()) {
4998
5013
  case 86088:
4999
- return parseVariableStatement(parser, context, scope, privateScope, 0, start, line, column);
5014
+ return parseVariableStatement(parser, context, scope, privateScope, 0);
5000
5015
  case 20572:
5001
- return parseReturnStatement(parser, context, privateScope, start, line, column);
5016
+ return parseReturnStatement(parser, context, privateScope);
5002
5017
  case 20569:
5003
- return parseIfStatement(parser, context, scope, privateScope, labels, start, line, column);
5018
+ return parseIfStatement(parser, context, scope, privateScope, labels);
5004
5019
  case 20567:
5005
- return parseForStatement(parser, context, scope, privateScope, labels, start, line, column);
5020
+ return parseForStatement(parser, context, scope, privateScope, labels);
5006
5021
  case 20562:
5007
- return parseDoWhileStatement(parser, context, scope, privateScope, labels, start, line, column);
5022
+ return parseDoWhileStatement(parser, context, scope, privateScope, labels);
5008
5023
  case 20578:
5009
- return parseWhileStatement(parser, context, scope, privateScope, labels, start, line, column);
5024
+ return parseWhileStatement(parser, context, scope, privateScope, labels);
5010
5025
  case 86110:
5011
- return parseSwitchStatement(parser, context, scope, privateScope, labels, start, line, column);
5026
+ return parseSwitchStatement(parser, context, scope, privateScope, labels);
5012
5027
  case 1074790417:
5013
- return parseEmptyStatement(parser, context, start, line, column);
5028
+ return parseEmptyStatement(parser, context);
5014
5029
  case 2162700:
5015
- return parseBlock(parser, context, scope ? addChildScope(scope, 2) : scope, privateScope, labels, start, line, column);
5030
+ return parseBlock(parser, context, scope ? addChildScope(scope, 2) : scope, privateScope, labels, parser.tokenStart);
5016
5031
  case 86112:
5017
- return parseThrowStatement(parser, context, privateScope, start, line, column);
5032
+ return parseThrowStatement(parser, context, privateScope);
5018
5033
  case 20555:
5019
- return parseBreakStatement(parser, context, labels, start, line, column);
5034
+ return parseBreakStatement(parser, context, labels);
5020
5035
  case 20559:
5021
- return parseContinueStatement(parser, context, labels, start, line, column);
5036
+ return parseContinueStatement(parser, context, labels);
5022
5037
  case 20577:
5023
- return parseTryStatement(parser, context, scope, privateScope, labels, start, line, column);
5038
+ return parseTryStatement(parser, context, scope, privateScope, labels);
5024
5039
  case 20579:
5025
- return parseWithStatement(parser, context, scope, privateScope, labels, start, line, column);
5040
+ return parseWithStatement(parser, context, scope, privateScope, labels);
5026
5041
  case 20560:
5027
- return parseDebuggerStatement(parser, context, start, line, column);
5042
+ return parseDebuggerStatement(parser, context);
5028
5043
  case 209005:
5029
- return parseAsyncArrowOrAsyncFunctionDeclaration(parser, context, scope, privateScope, origin, labels, 0, start, line, column);
5044
+ return parseAsyncArrowOrAsyncFunctionDeclaration(parser, context, scope, privateScope, origin, labels, 0);
5030
5045
  case 20557:
5031
5046
  report(parser, 162);
5032
5047
  case 20566:
@@ -5040,11 +5055,11 @@ function parseStatement(parser, context, scope, privateScope, origin, labels, al
5040
5055
  case 86094:
5041
5056
  report(parser, 79);
5042
5057
  default:
5043
- return parseExpressionOrLabelledStatement(parser, context, scope, privateScope, origin, labels, allowFuncDecl, start, line, column);
5058
+ return parseExpressionOrLabelledStatement(parser, context, scope, privateScope, origin, labels, allowFuncDecl);
5044
5059
  }
5045
5060
  }
5046
- function parseExpressionOrLabelledStatement(parser, context, scope, privateScope, origin, labels, allowFuncDecl, start, line, column) {
5047
- const { tokenValue } = parser;
5061
+ function parseExpressionOrLabelledStatement(parser, context, scope, privateScope, origin, labels, allowFuncDecl) {
5062
+ const { tokenValue, tokenStart } = parser;
5048
5063
  const token = parser.getToken();
5049
5064
  let expr;
5050
5065
  switch (token) {
@@ -5056,51 +5071,52 @@ function parseExpressionOrLabelledStatement(parser, context, scope, privateScope
5056
5071
  report(parser, 84);
5057
5072
  break;
5058
5073
  default:
5059
- expr = parsePrimaryExpression(parser, context, privateScope, 2, 0, 1, 0, 1, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5074
+ expr = parsePrimaryExpression(parser, context, privateScope, 2, 0, 1, 0, 1, parser.tokenStart);
5060
5075
  }
5061
5076
  if (token & 143360 && parser.getToken() === 21) {
5062
- return parseLabelledStatement(parser, context, scope, privateScope, origin, labels, tokenValue, expr, token, allowFuncDecl, start, line, column);
5077
+ return parseLabelledStatement(parser, context, scope, privateScope, origin, labels, tokenValue, expr, token, allowFuncDecl, tokenStart);
5063
5078
  }
5064
- expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, start, line, column);
5065
- expr = parseAssignmentExpression(parser, context, privateScope, 0, 0, start, line, column, expr);
5079
+ expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, tokenStart);
5080
+ expr = parseAssignmentExpression(parser, context, privateScope, 0, 0, tokenStart, expr);
5066
5081
  if (parser.getToken() === 18) {
5067
- expr = parseSequenceExpression(parser, context, privateScope, 0, start, line, column, expr);
5082
+ expr = parseSequenceExpression(parser, context, privateScope, 0, tokenStart, expr);
5068
5083
  }
5069
- return parseExpressionStatement(parser, context, expr, start, line, column);
5084
+ return parseExpressionStatement(parser, context, expr, tokenStart);
5070
5085
  }
5071
- function parseBlock(parser, context, scope, privateScope, labels, start, line, column, type = 'BlockStatement') {
5086
+ function parseBlock(parser, context, scope, privateScope, labels, start, type = 'BlockStatement') {
5072
5087
  const body = [];
5073
5088
  consume(parser, context | 8192, 2162700);
5074
5089
  while (parser.getToken() !== 1074790415) {
5075
5090
  body.push(parseStatementListItem(parser, context, scope, privateScope, 2, { $: labels }));
5076
5091
  }
5077
5092
  consume(parser, context | 8192, 1074790415);
5078
- return finishNode(parser, context, start, line, column, {
5093
+ return parser.finishNode({
5079
5094
  type,
5080
5095
  body,
5081
- });
5096
+ }, start);
5082
5097
  }
5083
- function parseReturnStatement(parser, context, privateScope, start, line, column) {
5098
+ function parseReturnStatement(parser, context, privateScope) {
5084
5099
  if ((context & 1048576) === 0)
5085
5100
  report(parser, 92);
5101
+ const start = parser.tokenStart;
5086
5102
  nextToken(parser, context | 8192);
5087
5103
  const argument = parser.flags & 1 || parser.getToken() & 1048576
5088
5104
  ? null
5089
- : parseExpressions(parser, context, privateScope, 0, 1, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5105
+ : parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
5090
5106
  matchOrInsertSemicolon(parser, context | 8192);
5091
- return finishNode(parser, context, start, line, column, {
5107
+ return parser.finishNode({
5092
5108
  type: 'ReturnStatement',
5093
5109
  argument,
5094
- });
5110
+ }, start);
5095
5111
  }
5096
- function parseExpressionStatement(parser, context, expression, start, line, column) {
5112
+ function parseExpressionStatement(parser, context, expression, start) {
5097
5113
  matchOrInsertSemicolon(parser, context | 8192);
5098
- return finishNode(parser, context, start, line, column, {
5114
+ return parser.finishNode({
5099
5115
  type: 'ExpressionStatement',
5100
5116
  expression,
5101
- });
5117
+ }, start);
5102
5118
  }
5103
- function parseLabelledStatement(parser, context, scope, privateScope, origin, labels, value, expr, token, allowFuncDecl, start, line, column) {
5119
+ function parseLabelledStatement(parser, context, scope, privateScope, origin, labels, value, expr, token, allowFuncDecl, start) {
5104
5120
  validateBindingIdentifier(parser, context, 0, token, 1);
5105
5121
  validateAndDeclareLabel(parser, labels, value);
5106
5122
  nextToken(parser, context | 8192);
@@ -5108,37 +5124,37 @@ function parseLabelledStatement(parser, context, scope, privateScope, origin, la
5108
5124
  (context & 256) === 0 &&
5109
5125
  context & 64 &&
5110
5126
  parser.getToken() === 86104
5111
- ? parseFunctionDeclaration(parser, context, addChildScope(scope, 2), privateScope, origin, 0, 0, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn)
5112
- : parseStatement(parser, context, scope, privateScope, origin, labels, allowFuncDecl, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5113
- return finishNode(parser, context, start, line, column, {
5127
+ ? parseFunctionDeclaration(parser, context, addChildScope(scope, 2), privateScope, origin, 0, 0, 0, parser.tokenStart)
5128
+ : parseStatement(parser, context, scope, privateScope, origin, labels, allowFuncDecl);
5129
+ return parser.finishNode({
5114
5130
  type: 'LabeledStatement',
5115
5131
  label: expr,
5116
5132
  body,
5117
- });
5133
+ }, start);
5118
5134
  }
5119
- function parseAsyncArrowOrAsyncFunctionDeclaration(parser, context, scope, privateScope, origin, labels, allowFuncDecl, start, line, column) {
5120
- const { tokenValue } = parser;
5135
+ function parseAsyncArrowOrAsyncFunctionDeclaration(parser, context, scope, privateScope, origin, labels, allowFuncDecl) {
5136
+ const { tokenValue, tokenStart: start } = parser;
5121
5137
  const token = parser.getToken();
5122
5138
  let expr = parseIdentifier(parser, context);
5123
5139
  if (parser.getToken() === 21) {
5124
- return parseLabelledStatement(parser, context, scope, privateScope, origin, labels, tokenValue, expr, token, 1, start, line, column);
5140
+ return parseLabelledStatement(parser, context, scope, privateScope, origin, labels, tokenValue, expr, token, 1, start);
5125
5141
  }
5126
5142
  const asyncNewLine = parser.flags & 1;
5127
5143
  if (!asyncNewLine) {
5128
5144
  if (parser.getToken() === 86104) {
5129
5145
  if (!allowFuncDecl)
5130
5146
  report(parser, 123);
5131
- return parseFunctionDeclaration(parser, context, scope, privateScope, origin, 1, 0, 1, start, line, column);
5147
+ return parseFunctionDeclaration(parser, context, scope, privateScope, origin, 1, 0, 1, start);
5132
5148
  }
5133
5149
  if (isValidIdentifier(context, parser.getToken())) {
5134
- expr = parseAsyncArrowAfterIdent(parser, context, privateScope, 1, start, line, column);
5150
+ expr = parseAsyncArrowAfterIdent(parser, context, privateScope, 1, start);
5135
5151
  if (parser.getToken() === 18)
5136
- expr = parseSequenceExpression(parser, context, privateScope, 0, start, line, column, expr);
5137
- return parseExpressionStatement(parser, context, expr, start, line, column);
5152
+ expr = parseSequenceExpression(parser, context, privateScope, 0, start, expr);
5153
+ return parseExpressionStatement(parser, context, expr, start);
5138
5154
  }
5139
5155
  }
5140
5156
  if (parser.getToken() === 67174411) {
5141
- expr = parseAsyncArrowOrCallExpression(parser, context, privateScope, expr, 1, 1, 0, asyncNewLine, start, line, column);
5157
+ expr = parseAsyncArrowOrCallExpression(parser, context, privateScope, expr, 1, 1, 0, asyncNewLine, start);
5142
5158
  }
5143
5159
  else {
5144
5160
  if (parser.getToken() === 10) {
@@ -5146,89 +5162,92 @@ function parseAsyncArrowOrAsyncFunctionDeclaration(parser, context, scope, priva
5146
5162
  if ((token & 36864) === 36864) {
5147
5163
  parser.flags |= 256;
5148
5164
  }
5149
- expr = parseArrowFromIdentifier(parser, context | 524288, privateScope, parser.tokenValue, expr, 0, 1, 0, start, line, column);
5165
+ expr = parseArrowFromIdentifier(parser, context | 524288, privateScope, parser.tokenValue, expr, 0, 1, 0, start);
5150
5166
  }
5151
5167
  parser.assignable = 1;
5152
5168
  }
5153
- expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, start, line, column);
5154
- expr = parseAssignmentExpression(parser, context, privateScope, 0, 0, start, line, column, expr);
5169
+ expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, start);
5170
+ expr = parseAssignmentExpression(parser, context, privateScope, 0, 0, start, expr);
5155
5171
  parser.assignable = 1;
5156
5172
  if (parser.getToken() === 18) {
5157
- expr = parseSequenceExpression(parser, context, privateScope, 0, start, line, column, expr);
5173
+ expr = parseSequenceExpression(parser, context, privateScope, 0, start, expr);
5158
5174
  }
5159
- return parseExpressionStatement(parser, context, expr, start, line, column);
5175
+ return parseExpressionStatement(parser, context, expr, start);
5160
5176
  }
5161
- function parseDirective(parser, context, expression, token, start, line, column) {
5177
+ function parseDirective(parser, context, expression, token, start) {
5162
5178
  const endIndex = parser.startIndex;
5163
5179
  if (token !== 1074790417) {
5164
5180
  parser.assignable = 2;
5165
- expression = parseMemberOrUpdateExpression(parser, context, undefined, expression, 0, 0, start, line, column);
5181
+ expression = parseMemberOrUpdateExpression(parser, context, undefined, expression, 0, 0, start);
5166
5182
  if (parser.getToken() !== 1074790417) {
5167
- expression = parseAssignmentExpression(parser, context, undefined, 0, 0, start, line, column, expression);
5183
+ expression = parseAssignmentExpression(parser, context, undefined, 0, 0, start, expression);
5168
5184
  if (parser.getToken() === 18) {
5169
- expression = parseSequenceExpression(parser, context, undefined, 0, start, line, column, expression);
5185
+ expression = parseSequenceExpression(parser, context, undefined, 0, start, expression);
5170
5186
  }
5171
5187
  }
5172
5188
  matchOrInsertSemicolon(parser, context | 8192);
5173
5189
  }
5174
- return expression.type === 'Literal' && typeof expression.value === 'string'
5175
- ? finishNode(parser, context, start, line, column, {
5176
- type: 'ExpressionStatement',
5177
- expression,
5178
- directive: parser.source.slice(start + 1, endIndex - 1),
5179
- })
5180
- : finishNode(parser, context, start, line, column, {
5181
- type: 'ExpressionStatement',
5182
- expression,
5183
- });
5190
+ const node = {
5191
+ type: 'ExpressionStatement',
5192
+ expression,
5193
+ };
5194
+ if (expression.type === 'Literal' && typeof expression.value === 'string') {
5195
+ node.directive = parser.source.slice(start.index + 1, endIndex - 1);
5196
+ }
5197
+ return parser.finishNode(node, start);
5184
5198
  }
5185
- function parseEmptyStatement(parser, context, start, line, column) {
5199
+ function parseEmptyStatement(parser, context) {
5200
+ const start = parser.tokenStart;
5186
5201
  nextToken(parser, context | 8192);
5187
- return finishNode(parser, context, start, line, column, {
5202
+ return parser.finishNode({
5188
5203
  type: 'EmptyStatement',
5189
- });
5204
+ }, start);
5190
5205
  }
5191
- function parseThrowStatement(parser, context, privateScope, start, line, column) {
5206
+ function parseThrowStatement(parser, context, privateScope) {
5207
+ const start = parser.tokenStart;
5192
5208
  nextToken(parser, context | 8192);
5193
5209
  if (parser.flags & 1)
5194
5210
  report(parser, 90);
5195
- const argument = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5211
+ const argument = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
5196
5212
  matchOrInsertSemicolon(parser, context | 8192);
5197
- return finishNode(parser, context, start, line, column, {
5213
+ return parser.finishNode({
5198
5214
  type: 'ThrowStatement',
5199
5215
  argument,
5200
- });
5216
+ }, start);
5201
5217
  }
5202
- function parseIfStatement(parser, context, scope, privateScope, labels, start, line, column) {
5218
+ function parseIfStatement(parser, context, scope, privateScope, labels) {
5219
+ const start = parser.tokenStart;
5203
5220
  nextToken(parser, context);
5204
5221
  consume(parser, context | 8192, 67174411);
5205
5222
  parser.assignable = 1;
5206
- const test = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenIndex, parser.line, parser.tokenColumn);
5223
+ const test = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
5207
5224
  consume(parser, context | 8192, 16);
5208
- const consequent = parseConsequentOrAlternative(parser, context, scope, privateScope, labels, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5225
+ const consequent = parseConsequentOrAlternative(parser, context, scope, privateScope, labels);
5209
5226
  let alternate = null;
5210
5227
  if (parser.getToken() === 20563) {
5211
5228
  nextToken(parser, context | 8192);
5212
- alternate = parseConsequentOrAlternative(parser, context, scope, privateScope, labels, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5229
+ alternate = parseConsequentOrAlternative(parser, context, scope, privateScope, labels);
5213
5230
  }
5214
- return finishNode(parser, context, start, line, column, {
5231
+ return parser.finishNode({
5215
5232
  type: 'IfStatement',
5216
5233
  test,
5217
5234
  consequent,
5218
5235
  alternate,
5219
- });
5236
+ }, start);
5220
5237
  }
5221
- function parseConsequentOrAlternative(parser, context, scope, privateScope, labels, start, line, column) {
5238
+ function parseConsequentOrAlternative(parser, context, scope, privateScope, labels) {
5239
+ const { tokenStart } = parser;
5222
5240
  return context & 256 ||
5223
5241
  (context & 64) === 0 ||
5224
5242
  parser.getToken() !== 86104
5225
- ? parseStatement(parser, context, scope, privateScope, 0, { $: labels }, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn)
5226
- : parseFunctionDeclaration(parser, context, addChildScope(scope, 2), privateScope, 0, 0, 0, 0, start, line, column);
5243
+ ? parseStatement(parser, context, scope, privateScope, 0, { $: labels }, 0)
5244
+ : parseFunctionDeclaration(parser, context, addChildScope(scope, 2), privateScope, 0, 0, 0, 0, tokenStart);
5227
5245
  }
5228
- function parseSwitchStatement(parser, context, scope, privateScope, labels, start, line, column) {
5246
+ function parseSwitchStatement(parser, context, scope, privateScope, labels) {
5247
+ const start = parser.tokenStart;
5229
5248
  nextToken(parser, context);
5230
5249
  consume(parser, context | 8192, 67174411);
5231
- const discriminant = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5250
+ const discriminant = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
5232
5251
  consume(parser, context, 16);
5233
5252
  consume(parser, context, 2162700);
5234
5253
  const cases = [];
@@ -5236,11 +5255,11 @@ function parseSwitchStatement(parser, context, scope, privateScope, labels, star
5236
5255
  if (scope)
5237
5256
  scope = addChildScope(scope, 8);
5238
5257
  while (parser.getToken() !== 1074790415) {
5239
- const { tokenIndex, tokenLine, tokenColumn } = parser;
5258
+ const { tokenStart } = parser;
5240
5259
  let test = null;
5241
5260
  const consequent = [];
5242
5261
  if (consumeOpt(parser, context | 8192, 20556)) {
5243
- test = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5262
+ test = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
5244
5263
  }
5245
5264
  else {
5246
5265
  consume(parser, context | 8192, 20561);
@@ -5256,37 +5275,39 @@ function parseSwitchStatement(parser, context, scope, privateScope, labels, star
5256
5275
  $: labels,
5257
5276
  }));
5258
5277
  }
5259
- cases.push(finishNode(parser, context, tokenIndex, tokenLine, tokenColumn, {
5278
+ cases.push(parser.finishNode({
5260
5279
  type: 'SwitchCase',
5261
5280
  test,
5262
5281
  consequent,
5263
- }));
5282
+ }, tokenStart));
5264
5283
  }
5265
5284
  consume(parser, context | 8192, 1074790415);
5266
- return finishNode(parser, context, start, line, column, {
5285
+ return parser.finishNode({
5267
5286
  type: 'SwitchStatement',
5268
5287
  discriminant,
5269
5288
  cases,
5270
- });
5289
+ }, start);
5271
5290
  }
5272
- function parseWhileStatement(parser, context, scope, privateScope, labels, start, line, column) {
5291
+ function parseWhileStatement(parser, context, scope, privateScope, labels) {
5292
+ const start = parser.tokenStart;
5273
5293
  nextToken(parser, context);
5274
5294
  consume(parser, context | 8192, 67174411);
5275
- const test = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5295
+ const test = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
5276
5296
  consume(parser, context | 8192, 16);
5277
5297
  const body = parseIterationStatementBody(parser, context, scope, privateScope, labels);
5278
- return finishNode(parser, context, start, line, column, {
5298
+ return parser.finishNode({
5279
5299
  type: 'WhileStatement',
5280
5300
  test,
5281
5301
  body,
5282
- });
5302
+ }, start);
5283
5303
  }
5284
5304
  function parseIterationStatementBody(parser, context, scope, privateScope, labels) {
5285
- return parseStatement(parser, ((context | 33554432) ^ 33554432) | 32768, scope, privateScope, 0, { loop: 1, $: labels }, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5305
+ return parseStatement(parser, ((context | 33554432) ^ 33554432) | 32768, scope, privateScope, 0, { loop: 1, $: labels }, 0);
5286
5306
  }
5287
- function parseContinueStatement(parser, context, labels, start, line, column) {
5307
+ function parseContinueStatement(parser, context, labels) {
5288
5308
  if ((context & 32768) === 0)
5289
5309
  report(parser, 68);
5310
+ const start = parser.tokenStart;
5290
5311
  nextToken(parser, context);
5291
5312
  let label = null;
5292
5313
  if ((parser.flags & 1) === 0 && parser.getToken() & 143360) {
@@ -5296,12 +5317,13 @@ function parseContinueStatement(parser, context, labels, start, line, column) {
5296
5317
  report(parser, 138, tokenValue);
5297
5318
  }
5298
5319
  matchOrInsertSemicolon(parser, context | 8192);
5299
- return finishNode(parser, context, start, line, column, {
5320
+ return parser.finishNode({
5300
5321
  type: 'ContinueStatement',
5301
5322
  label,
5302
- });
5323
+ }, start);
5303
5324
  }
5304
- function parseBreakStatement(parser, context, labels, start, line, column) {
5325
+ function parseBreakStatement(parser, context, labels) {
5326
+ const start = parser.tokenStart;
5305
5327
  nextToken(parser, context | 8192);
5306
5328
  let label = null;
5307
5329
  if ((parser.flags & 1) === 0 && parser.getToken() & 143360) {
@@ -5314,58 +5336,61 @@ function parseBreakStatement(parser, context, labels, start, line, column) {
5314
5336
  report(parser, 69);
5315
5337
  }
5316
5338
  matchOrInsertSemicolon(parser, context | 8192);
5317
- return finishNode(parser, context, start, line, column, {
5339
+ return parser.finishNode({
5318
5340
  type: 'BreakStatement',
5319
5341
  label,
5320
- });
5342
+ }, start);
5321
5343
  }
5322
- function parseWithStatement(parser, context, scope, privateScope, labels, start, line, column) {
5344
+ function parseWithStatement(parser, context, scope, privateScope, labels) {
5345
+ const start = parser.tokenStart;
5323
5346
  nextToken(parser, context);
5324
5347
  if (context & 256)
5325
5348
  report(parser, 91);
5326
5349
  consume(parser, context | 8192, 67174411);
5327
- const object = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5350
+ const object = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
5328
5351
  consume(parser, context | 8192, 16);
5329
- const body = parseStatement(parser, context, scope, privateScope, 2, labels, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5330
- return finishNode(parser, context, start, line, column, {
5352
+ const body = parseStatement(parser, context, scope, privateScope, 2, labels, 0);
5353
+ return parser.finishNode({
5331
5354
  type: 'WithStatement',
5332
5355
  object,
5333
5356
  body,
5334
- });
5357
+ }, start);
5335
5358
  }
5336
- function parseDebuggerStatement(parser, context, start, line, column) {
5359
+ function parseDebuggerStatement(parser, context) {
5360
+ const start = parser.tokenStart;
5337
5361
  nextToken(parser, context | 8192);
5338
5362
  matchOrInsertSemicolon(parser, context | 8192);
5339
- return finishNode(parser, context, start, line, column, {
5363
+ return parser.finishNode({
5340
5364
  type: 'DebuggerStatement',
5341
- });
5365
+ }, start);
5342
5366
  }
5343
- function parseTryStatement(parser, context, scope, privateScope, labels, start, line, column) {
5367
+ function parseTryStatement(parser, context, scope, privateScope, labels) {
5368
+ const start = parser.tokenStart;
5344
5369
  nextToken(parser, context | 8192);
5345
5370
  const firstScope = scope ? addChildScope(scope, 32) : void 0;
5346
- const block = parseBlock(parser, context, firstScope, privateScope, { $: labels }, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5347
- const { tokenIndex, tokenLine, tokenColumn } = parser;
5371
+ const block = parseBlock(parser, context, firstScope, privateScope, { $: labels }, parser.tokenStart);
5372
+ const { tokenStart } = parser;
5348
5373
  const handler = consumeOpt(parser, context | 8192, 20557)
5349
- ? parseCatchBlock(parser, context, scope, privateScope, labels, tokenIndex, tokenLine, tokenColumn)
5374
+ ? parseCatchBlock(parser, context, scope, privateScope, labels, tokenStart)
5350
5375
  : null;
5351
5376
  let finalizer = null;
5352
5377
  if (parser.getToken() === 20566) {
5353
5378
  nextToken(parser, context | 8192);
5354
5379
  const finalizerScope = firstScope ? addChildScope(scope, 4) : void 0;
5355
- const block = parseBlock(parser, context, finalizerScope, privateScope, { $: labels }, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5380
+ const block = parseBlock(parser, context, finalizerScope, privateScope, { $: labels }, parser.tokenStart);
5356
5381
  finalizer = block;
5357
5382
  }
5358
5383
  if (!handler && !finalizer) {
5359
5384
  report(parser, 88);
5360
5385
  }
5361
- return finishNode(parser, context, start, line, column, {
5386
+ return parser.finishNode({
5362
5387
  type: 'TryStatement',
5363
5388
  block,
5364
5389
  handler,
5365
5390
  finalizer,
5366
- });
5391
+ }, start);
5367
5392
  }
5368
- function parseCatchBlock(parser, context, scope, privateScope, labels, start, line, column) {
5393
+ function parseCatchBlock(parser, context, scope, privateScope, labels, start) {
5369
5394
  let param = null;
5370
5395
  let additionalScope = scope;
5371
5396
  if (consumeOpt(parser, context, 67174411)) {
@@ -5373,7 +5398,7 @@ function parseCatchBlock(parser, context, scope, privateScope, labels, start, li
5373
5398
  scope = addChildScope(scope, 4);
5374
5399
  param = parseBindingPattern(parser, context, scope, privateScope, (parser.getToken() & 2097152) === 2097152
5375
5400
  ? 256
5376
- : 512, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5401
+ : 512, 0);
5377
5402
  if (parser.getToken() === 18) {
5378
5403
  report(parser, 86);
5379
5404
  }
@@ -5384,14 +5409,14 @@ function parseCatchBlock(parser, context, scope, privateScope, labels, start, li
5384
5409
  }
5385
5410
  if (scope)
5386
5411
  additionalScope = addChildScope(scope, 64);
5387
- const body = parseBlock(parser, context, additionalScope, privateScope, { $: labels }, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5388
- return finishNode(parser, context, start, line, column, {
5412
+ const body = parseBlock(parser, context, additionalScope, privateScope, { $: labels }, parser.tokenStart);
5413
+ return parser.finishNode({
5389
5414
  type: 'CatchClause',
5390
5415
  param,
5391
5416
  body,
5392
- });
5417
+ }, start);
5393
5418
  }
5394
- function parseStaticBlock(parser, context, scope, privateScope, start, line, column) {
5419
+ function parseStaticBlock(parser, context, scope, privateScope, start) {
5395
5420
  if (scope)
5396
5421
  scope = addChildScope(scope, 2);
5397
5422
  const ctorContext = 131072 | 1048576 | 262144 | 1024 | 32768;
@@ -5401,76 +5426,79 @@ function parseStaticBlock(parser, context, scope, privateScope, start, line, col
5401
5426
  524288 |
5402
5427
  268435456 |
5403
5428
  16777216;
5404
- return parseBlock(parser, context, scope, privateScope, {}, start, line, column, 'StaticBlock');
5429
+ return parseBlock(parser, context, scope, privateScope, {}, start, 'StaticBlock');
5405
5430
  }
5406
- function parseDoWhileStatement(parser, context, scope, privateScope, labels, start, line, column) {
5431
+ function parseDoWhileStatement(parser, context, scope, privateScope, labels) {
5432
+ const start = parser.tokenStart;
5407
5433
  nextToken(parser, context | 8192);
5408
5434
  const body = parseIterationStatementBody(parser, context, scope, privateScope, labels);
5409
5435
  consume(parser, context, 20578);
5410
5436
  consume(parser, context | 8192, 67174411);
5411
- const test = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5437
+ const test = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
5412
5438
  consume(parser, context | 8192, 16);
5413
5439
  consumeOpt(parser, context | 8192, 1074790417);
5414
- return finishNode(parser, context, start, line, column, {
5440
+ return parser.finishNode({
5415
5441
  type: 'DoWhileStatement',
5416
5442
  body,
5417
5443
  test,
5418
- });
5444
+ }, start);
5419
5445
  }
5420
- function parseLetIdentOrVarDeclarationStatement(parser, context, scope, privateScope, origin, start, line, column) {
5421
- const { tokenValue } = parser;
5446
+ function parseLetIdentOrVarDeclarationStatement(parser, context, scope, privateScope, origin) {
5447
+ const { tokenValue, tokenStart } = parser;
5422
5448
  const token = parser.getToken();
5423
5449
  let expr = parseIdentifier(parser, context);
5424
5450
  if (parser.getToken() & (143360 | 2097152)) {
5425
5451
  const declarations = parseVariableDeclarationList(parser, context, scope, privateScope, 8, 0);
5426
5452
  matchOrInsertSemicolon(parser, context | 8192);
5427
- return finishNode(parser, context, start, line, column, {
5453
+ return parser.finishNode({
5428
5454
  type: 'VariableDeclaration',
5429
5455
  kind: 'let',
5430
5456
  declarations,
5431
- });
5457
+ }, tokenStart);
5432
5458
  }
5433
5459
  parser.assignable = 1;
5434
5460
  if (context & 256)
5435
5461
  report(parser, 85);
5436
5462
  if (parser.getToken() === 21) {
5437
- return parseLabelledStatement(parser, context, scope, privateScope, origin, {}, tokenValue, expr, token, 0, start, line, column);
5463
+ return parseLabelledStatement(parser, context, scope, privateScope, origin, {}, tokenValue, expr, token, 0, tokenStart);
5438
5464
  }
5439
5465
  if (parser.getToken() === 10) {
5440
5466
  let scope = void 0;
5441
5467
  if (context & 16)
5442
5468
  scope = createArrowHeadParsingScope(parser, context, tokenValue);
5443
5469
  parser.flags = (parser.flags | 128) ^ 128;
5444
- expr = parseArrowFunctionExpression(parser, context, scope, privateScope, [expr], 0, start, line, column);
5470
+ expr = parseArrowFunctionExpression(parser, context, scope, privateScope, [expr], 0, tokenStart);
5445
5471
  }
5446
5472
  else {
5447
- expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, start, line, column);
5448
- expr = parseAssignmentExpression(parser, context, privateScope, 0, 0, start, line, column, expr);
5473
+ expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, tokenStart);
5474
+ expr = parseAssignmentExpression(parser, context, privateScope, 0, 0, tokenStart, expr);
5449
5475
  }
5450
5476
  if (parser.getToken() === 18) {
5451
- expr = parseSequenceExpression(parser, context, privateScope, 0, start, line, column, expr);
5477
+ expr = parseSequenceExpression(parser, context, privateScope, 0, tokenStart, expr);
5452
5478
  }
5453
- return parseExpressionStatement(parser, context, expr, start, line, column);
5479
+ return parseExpressionStatement(parser, context, expr, tokenStart);
5454
5480
  }
5455
- function parseLexicalDeclaration(parser, context, scope, privateScope, kind, origin, start, line, column) {
5481
+ function parseLexicalDeclaration(parser, context, scope, privateScope, kind, origin) {
5482
+ const start = parser.tokenStart;
5456
5483
  nextToken(parser, context);
5457
5484
  const declarations = parseVariableDeclarationList(parser, context, scope, privateScope, kind, origin);
5458
5485
  matchOrInsertSemicolon(parser, context | 8192);
5459
- return finishNode(parser, context, start, line, column, {
5486
+ return parser.finishNode({
5460
5487
  type: 'VariableDeclaration',
5461
5488
  kind: kind & 8 ? 'let' : 'const',
5462
5489
  declarations,
5463
- });
5490
+ }, start);
5464
5491
  }
5465
- function parseVariableStatement(parser, context, scope, privateScope, origin, start, line, column) {
5492
+ function parseVariableStatement(parser, context, scope, privateScope, origin) {
5493
+ const start = parser.tokenStart;
5466
5494
  nextToken(parser, context);
5467
5495
  const declarations = parseVariableDeclarationList(parser, context, scope, privateScope, 4, origin);
5468
5496
  matchOrInsertSemicolon(parser, context | 8192);
5469
- return finishNode(parser, context, start, line, column, {
5497
+ return parser.finishNode({
5470
5498
  type: 'VariableDeclaration',
5471
5499
  kind: 'var',
5472
5500
  declarations,
5473
- });
5501
+ }, start);
5474
5502
  }
5475
5503
  function parseVariableDeclarationList(parser, context, scope, privateScope, kind, origin) {
5476
5504
  let bindingCount = 1;
@@ -5487,18 +5515,18 @@ function parseVariableDeclarationList(parser, context, scope, privateScope, kind
5487
5515
  return list;
5488
5516
  }
5489
5517
  function parseVariableDeclaration(parser, context, scope, privateScope, kind, origin) {
5490
- const { tokenIndex, tokenLine, tokenColumn } = parser;
5518
+ const { tokenStart } = parser;
5491
5519
  const token = parser.getToken();
5492
5520
  let init = null;
5493
- const id = parseBindingPattern(parser, context, scope, privateScope, kind, origin, tokenIndex, tokenLine, tokenColumn);
5521
+ const id = parseBindingPattern(parser, context, scope, privateScope, kind, origin);
5494
5522
  if (parser.getToken() === 1077936155) {
5495
5523
  nextToken(parser, context | 8192);
5496
- init = parseExpression(parser, context, privateScope, 1, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5524
+ init = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);
5497
5525
  if (origin & 32 || (token & 2097152) === 0) {
5498
5526
  if (parser.getToken() === 471156 ||
5499
5527
  (parser.getToken() === 8673330 &&
5500
5528
  (token & 2097152 || (kind & 4) === 0 || context & 256))) {
5501
- reportMessageAt(tokenIndex, tokenLine, tokenColumn, parser.index, parser.line, parser.column, 60, parser.getToken() === 471156 ? 'of' : 'in');
5529
+ reportMessageAt(tokenStart, parser.currentLocation, 60, parser.getToken() === 471156 ? 'of' : 'in');
5502
5530
  }
5503
5531
  }
5504
5532
  }
@@ -5506,13 +5534,14 @@ function parseVariableDeclaration(parser, context, scope, privateScope, kind, or
5506
5534
  (parser.getToken() & 262144) !== 262144) {
5507
5535
  report(parser, 59, kind & 16 ? 'const' : 'destructuring');
5508
5536
  }
5509
- return finishNode(parser, context, tokenIndex, tokenLine, tokenColumn, {
5537
+ return parser.finishNode({
5510
5538
  type: 'VariableDeclarator',
5511
5539
  id,
5512
5540
  init,
5513
- });
5541
+ }, tokenStart);
5514
5542
  }
5515
- function parseForStatement(parser, context, scope, privateScope, labels, start, line, column) {
5543
+ function parseForStatement(parser, context, scope, privateScope, labels) {
5544
+ const start = parser.tokenStart;
5516
5545
  nextToken(parser, context);
5517
5546
  const forAwait = ((context & 524288) > 0 || ((context & 512) > 0 && (context & 2048) > 0)) &&
5518
5547
  consumeOpt(parser, context, 209006);
@@ -5527,7 +5556,7 @@ function parseForStatement(parser, context, scope, privateScope, labels, start,
5527
5556
  parser.getToken() === 241737 ||
5528
5557
  parser.getToken() === 86090;
5529
5558
  let right;
5530
- const { tokenIndex, tokenLine, tokenColumn } = parser;
5559
+ const { tokenStart } = parser;
5531
5560
  const token = parser.getToken();
5532
5561
  if (isVarDecl) {
5533
5562
  if (token === 241737) {
@@ -5538,11 +5567,11 @@ function parseForStatement(parser, context, scope, privateScope, labels, start,
5538
5567
  report(parser, 67);
5539
5568
  }
5540
5569
  else {
5541
- init = finishNode(parser, context, tokenIndex, tokenLine, tokenColumn, {
5570
+ init = parser.finishNode({
5542
5571
  type: 'VariableDeclaration',
5543
5572
  kind: 'let',
5544
5573
  declarations: parseVariableDeclarationList(parser, context | 33554432, scope, privateScope, 8, 32),
5545
- });
5574
+ }, tokenStart);
5546
5575
  }
5547
5576
  parser.assignable = 1;
5548
5577
  }
@@ -5552,14 +5581,14 @@ function parseForStatement(parser, context, scope, privateScope, labels, start,
5552
5581
  else {
5553
5582
  isVarDecl = false;
5554
5583
  parser.assignable = 1;
5555
- init = parseMemberOrUpdateExpression(parser, context, privateScope, init, 0, 0, tokenIndex, tokenLine, tokenColumn);
5584
+ init = parseMemberOrUpdateExpression(parser, context, privateScope, init, 0, 0, tokenStart);
5556
5585
  if (parser.getToken() === 471156)
5557
5586
  report(parser, 115);
5558
5587
  }
5559
5588
  }
5560
5589
  else {
5561
5590
  nextToken(parser, context);
5562
- init = finishNode(parser, context, tokenIndex, tokenLine, tokenColumn, token === 86088
5591
+ init = parser.finishNode(token === 86088
5563
5592
  ? {
5564
5593
  type: 'VariableDeclaration',
5565
5594
  kind: 'var',
@@ -5569,7 +5598,7 @@ function parseForStatement(parser, context, scope, privateScope, labels, start,
5569
5598
  type: 'VariableDeclaration',
5570
5599
  kind: 'const',
5571
5600
  declarations: parseVariableDeclarationList(parser, context | 33554432, scope, privateScope, 16, 32),
5572
- });
5601
+ }, tokenStart);
5573
5602
  parser.assignable = 1;
5574
5603
  }
5575
5604
  }
@@ -5578,20 +5607,21 @@ function parseForStatement(parser, context, scope, privateScope, labels, start,
5578
5607
  report(parser, 82);
5579
5608
  }
5580
5609
  else if ((token & 2097152) === 2097152) {
5610
+ const patternStart = parser.tokenStart;
5581
5611
  init =
5582
5612
  token === 2162700
5583
- ? parseObjectLiteralOrPattern(parser, context, void 0, privateScope, 1, 0, 0, 2, 32, tokenIndex, tokenLine, tokenColumn)
5584
- : parseArrayExpressionOrPattern(parser, context, void 0, privateScope, 1, 0, 0, 2, 32, tokenIndex, tokenLine, tokenColumn);
5613
+ ? parseObjectLiteralOrPattern(parser, context, void 0, privateScope, 1, 0, 0, 2, 32)
5614
+ : parseArrayExpressionOrPattern(parser, context, void 0, privateScope, 1, 0, 0, 2, 32);
5585
5615
  destructible = parser.destructible;
5586
5616
  if (destructible & 64) {
5587
5617
  report(parser, 63);
5588
5618
  }
5589
5619
  parser.assignable =
5590
5620
  destructible & 16 ? 2 : 1;
5591
- init = parseMemberOrUpdateExpression(parser, context | 33554432, privateScope, init, 0, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5621
+ init = parseMemberOrUpdateExpression(parser, context | 33554432, privateScope, init, 0, 0, patternStart);
5592
5622
  }
5593
5623
  else {
5594
- init = parseLeftHandSideExpression(parser, context | 33554432, privateScope, 1, 0, 1, tokenIndex, tokenLine, tokenColumn);
5624
+ init = parseLeftHandSideExpression(parser, context | 33554432, privateScope, 1, 0, 1);
5595
5625
  }
5596
5626
  if ((parser.getToken() & 262144) === 262144) {
5597
5627
  if (parser.getToken() === 471156) {
@@ -5599,16 +5629,16 @@ function parseForStatement(parser, context, scope, privateScope, labels, start,
5599
5629
  report(parser, 80, forAwait ? 'await' : 'of');
5600
5630
  reinterpretToPattern(parser, init);
5601
5631
  nextToken(parser, context | 8192);
5602
- right = parseExpression(parser, context, privateScope, 1, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5632
+ right = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);
5603
5633
  consume(parser, context | 8192, 16);
5604
5634
  const body = parseIterationStatementBody(parser, context, scope, privateScope, labels);
5605
- return finishNode(parser, context, start, line, column, {
5635
+ return parser.finishNode({
5606
5636
  type: 'ForOfStatement',
5607
5637
  left: init,
5608
5638
  right,
5609
5639
  body,
5610
5640
  await: forAwait,
5611
- });
5641
+ }, start);
5612
5642
  }
5613
5643
  if (parser.assignable & 2)
5614
5644
  report(parser, 80, 'in');
@@ -5616,15 +5646,15 @@ function parseForStatement(parser, context, scope, privateScope, labels, start,
5616
5646
  nextToken(parser, context | 8192);
5617
5647
  if (forAwait)
5618
5648
  report(parser, 82);
5619
- right = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5649
+ right = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
5620
5650
  consume(parser, context | 8192, 16);
5621
5651
  const body = parseIterationStatementBody(parser, context, scope, privateScope, labels);
5622
- return finishNode(parser, context, start, line, column, {
5652
+ return parser.finishNode({
5623
5653
  type: 'ForInStatement',
5624
5654
  body,
5625
5655
  left: init,
5626
5656
  right,
5627
- });
5657
+ }, start);
5628
5658
  }
5629
5659
  if (forAwait)
5630
5660
  report(parser, 82);
@@ -5632,25 +5662,25 @@ function parseForStatement(parser, context, scope, privateScope, labels, start,
5632
5662
  if (destructible & 8 && parser.getToken() !== 1077936155) {
5633
5663
  report(parser, 80, 'loop');
5634
5664
  }
5635
- init = parseAssignmentExpression(parser, context | 33554432, privateScope, 0, 0, tokenIndex, tokenLine, tokenColumn, init);
5665
+ init = parseAssignmentExpression(parser, context | 33554432, privateScope, 0, 0, tokenStart, init);
5636
5666
  }
5637
5667
  if (parser.getToken() === 18)
5638
- init = parseSequenceExpression(parser, context, privateScope, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn, init);
5668
+ init = parseSequenceExpression(parser, context, privateScope, 0, parser.tokenStart, init);
5639
5669
  consume(parser, context | 8192, 1074790417);
5640
5670
  if (parser.getToken() !== 1074790417)
5641
- test = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5671
+ test = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
5642
5672
  consume(parser, context | 8192, 1074790417);
5643
5673
  if (parser.getToken() !== 16)
5644
- update = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5674
+ update = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
5645
5675
  consume(parser, context | 8192, 16);
5646
5676
  const body = parseIterationStatementBody(parser, context, scope, privateScope, labels);
5647
- return finishNode(parser, context, start, line, column, {
5677
+ return parser.finishNode({
5648
5678
  type: 'ForStatement',
5649
5679
  init,
5650
5680
  test,
5651
5681
  update,
5652
5682
  body,
5653
- });
5683
+ }, start);
5654
5684
  }
5655
5685
  function parseRestrictedIdentifier(parser, context, scope) {
5656
5686
  if (!isValidIdentifier(context, parser.getToken()))
@@ -5662,12 +5692,10 @@ function parseRestrictedIdentifier(parser, context, scope) {
5662
5692
  return parseIdentifier(parser, context);
5663
5693
  }
5664
5694
  function parseImportDeclaration(parser, context, scope) {
5665
- const start = parser.tokenIndex;
5666
- const line = parser.tokenLine;
5667
- const column = parser.tokenColumn;
5695
+ const start = parser.tokenStart;
5668
5696
  nextToken(parser, context);
5669
5697
  let source = null;
5670
- const { tokenIndex, tokenLine, tokenColumn } = parser;
5698
+ const { tokenStart } = parser;
5671
5699
  let specifiers = [];
5672
5700
  if (parser.getToken() === 134283267) {
5673
5701
  source = parseLiteral(parser, context);
@@ -5676,10 +5704,10 @@ function parseImportDeclaration(parser, context, scope) {
5676
5704
  if (parser.getToken() & 143360) {
5677
5705
  const local = parseRestrictedIdentifier(parser, context, scope);
5678
5706
  specifiers = [
5679
- finishNode(parser, context, tokenIndex, tokenLine, tokenColumn, {
5707
+ parser.finishNode({
5680
5708
  type: 'ImportDefaultSpecifier',
5681
5709
  local,
5682
- }),
5710
+ }, tokenStart),
5683
5711
  ];
5684
5712
  if (consumeOpt(parser, context, 18)) {
5685
5713
  switch (parser.getToken()) {
@@ -5703,9 +5731,9 @@ function parseImportDeclaration(parser, context, scope) {
5703
5731
  parseImportSpecifierOrNamedImports(parser, context, scope, specifiers);
5704
5732
  break;
5705
5733
  case 67174411:
5706
- return parseImportCallDeclaration(parser, context, undefined, start, line, column);
5734
+ return parseImportCallDeclaration(parser, context, undefined, start);
5707
5735
  case 67108877:
5708
- return parseImportMetaDeclaration(parser, context, start, line, column);
5736
+ return parseImportMetaDeclaration(parser, context, start);
5709
5737
  default:
5710
5738
  report(parser, 30, KeywordDescTable[parser.getToken() & 255]);
5711
5739
  }
@@ -5720,19 +5748,19 @@ function parseImportDeclaration(parser, context, scope) {
5720
5748
  attributes,
5721
5749
  };
5722
5750
  matchOrInsertSemicolon(parser, context | 8192);
5723
- return finishNode(parser, context, start, line, column, node);
5751
+ return parser.finishNode(node, start);
5724
5752
  }
5725
5753
  function parseImportNamespaceSpecifier(parser, context, scope) {
5726
- const { tokenIndex, tokenLine, tokenColumn } = parser;
5754
+ const { tokenStart } = parser;
5727
5755
  nextToken(parser, context);
5728
5756
  consume(parser, context, 77932);
5729
5757
  if ((parser.getToken() & 134217728) === 134217728) {
5730
- reportMessageAt(tokenIndex, tokenLine, tokenColumn, parser.index, parser.line, parser.column, 30, KeywordDescTable[parser.getToken() & 255]);
5758
+ reportMessageAt(tokenStart, parser.currentLocation, 30, KeywordDescTable[parser.getToken() & 255]);
5731
5759
  }
5732
- return finishNode(parser, context, tokenIndex, tokenLine, tokenColumn, {
5760
+ return parser.finishNode({
5733
5761
  type: 'ImportNamespaceSpecifier',
5734
5762
  local: parseRestrictedIdentifier(parser, context, scope),
5735
- });
5763
+ }, tokenStart);
5736
5764
  }
5737
5765
  function parseModuleSpecifier(parser, context) {
5738
5766
  consume(parser, context, 209011);
@@ -5743,7 +5771,7 @@ function parseModuleSpecifier(parser, context) {
5743
5771
  function parseImportSpecifierOrNamedImports(parser, context, scope, specifiers) {
5744
5772
  nextToken(parser, context);
5745
5773
  while (parser.getToken() & 143360 || parser.getToken() === 134283267) {
5746
- let { tokenValue, tokenIndex, tokenLine, tokenColumn } = parser;
5774
+ let { tokenValue, tokenStart } = parser;
5747
5775
  const token = parser.getToken();
5748
5776
  const imported = parseModuleExportName(parser, context);
5749
5777
  let local;
@@ -5767,41 +5795,39 @@ function parseImportSpecifierOrNamedImports(parser, context, scope, specifiers)
5767
5795
  }
5768
5796
  if (scope)
5769
5797
  addBlockName(parser, context, scope, tokenValue, 8, 0);
5770
- specifiers.push(finishNode(parser, context, tokenIndex, tokenLine, tokenColumn, {
5798
+ specifiers.push(parser.finishNode({
5771
5799
  type: 'ImportSpecifier',
5772
5800
  local,
5773
5801
  imported,
5774
- }));
5802
+ }, tokenStart));
5775
5803
  if (parser.getToken() !== 1074790415)
5776
5804
  consume(parser, context, 18);
5777
5805
  }
5778
5806
  consume(parser, context, 1074790415);
5779
5807
  return specifiers;
5780
5808
  }
5781
- function parseImportMetaDeclaration(parser, context, start, line, column) {
5782
- let expr = parseImportMetaExpression(parser, context, finishNode(parser, context, start, line, column, {
5809
+ function parseImportMetaDeclaration(parser, context, start) {
5810
+ let expr = parseImportMetaExpression(parser, context, parser.finishNode({
5783
5811
  type: 'Identifier',
5784
5812
  name: 'import',
5785
- }), start, line, column);
5786
- expr = parseMemberOrUpdateExpression(parser, context, undefined, expr, 0, 0, start, line, column);
5787
- expr = parseAssignmentExpression(parser, context, undefined, 0, 0, start, line, column, expr);
5813
+ }, start), start);
5814
+ expr = parseMemberOrUpdateExpression(parser, context, undefined, expr, 0, 0, start);
5815
+ expr = parseAssignmentExpression(parser, context, undefined, 0, 0, start, expr);
5788
5816
  if (parser.getToken() === 18) {
5789
- expr = parseSequenceExpression(parser, context, undefined, 0, start, line, column, expr);
5817
+ expr = parseSequenceExpression(parser, context, undefined, 0, start, expr);
5790
5818
  }
5791
- return parseExpressionStatement(parser, context, expr, start, line, column);
5819
+ return parseExpressionStatement(parser, context, expr, start);
5792
5820
  }
5793
- function parseImportCallDeclaration(parser, context, privateScope, start, line, column) {
5794
- let expr = parseImportExpression(parser, context, privateScope, 0, start, line, column);
5795
- expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, start, line, column);
5821
+ function parseImportCallDeclaration(parser, context, privateScope, start) {
5822
+ let expr = parseImportExpression(parser, context, privateScope, 0, start);
5823
+ expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, start);
5796
5824
  if (parser.getToken() === 18) {
5797
- expr = parseSequenceExpression(parser, context, privateScope, 0, start, line, column, expr);
5825
+ expr = parseSequenceExpression(parser, context, privateScope, 0, start, expr);
5798
5826
  }
5799
- return parseExpressionStatement(parser, context, expr, start, line, column);
5827
+ return parseExpressionStatement(parser, context, expr, start);
5800
5828
  }
5801
5829
  function parseExportDeclaration(parser, context, scope) {
5802
- const start = parser.tokenIndex;
5803
- const line = parser.tokenLine;
5804
- const column = parser.tokenColumn;
5830
+ const start = parser.leadingDecorators.decorators.length ? parser.leadingDecorators.start : parser.tokenStart;
5805
5831
  nextToken(parser, context | 8192);
5806
5832
  const specifiers = [];
5807
5833
  let declaration = null;
@@ -5810,47 +5836,47 @@ function parseExportDeclaration(parser, context, scope) {
5810
5836
  if (consumeOpt(parser, context | 8192, 20561)) {
5811
5837
  switch (parser.getToken()) {
5812
5838
  case 86104: {
5813
- declaration = parseFunctionDeclaration(parser, context, scope, undefined, 4, 1, 1, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5839
+ declaration = parseFunctionDeclaration(parser, context, scope, undefined, 4, 1, 1, 0, parser.tokenStart);
5814
5840
  break;
5815
5841
  }
5816
5842
  case 132:
5817
5843
  case 86094:
5818
- declaration = parseClassDeclaration(parser, context, scope, undefined, 1, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5844
+ declaration = parseClassDeclaration(parser, context, scope, undefined, 1);
5819
5845
  break;
5820
5846
  case 209005: {
5821
- const { tokenIndex, tokenLine, tokenColumn } = parser;
5847
+ const { tokenStart } = parser;
5822
5848
  declaration = parseIdentifier(parser, context);
5823
5849
  const { flags } = parser;
5824
5850
  if ((flags & 1) === 0) {
5825
5851
  if (parser.getToken() === 86104) {
5826
- declaration = parseFunctionDeclaration(parser, context, scope, undefined, 4, 1, 1, 1, tokenIndex, tokenLine, tokenColumn);
5852
+ declaration = parseFunctionDeclaration(parser, context, scope, undefined, 4, 1, 1, 1, tokenStart);
5827
5853
  }
5828
5854
  else {
5829
5855
  if (parser.getToken() === 67174411) {
5830
- declaration = parseAsyncArrowOrCallExpression(parser, context, undefined, declaration, 1, 1, 0, flags, tokenIndex, tokenLine, tokenColumn);
5831
- declaration = parseMemberOrUpdateExpression(parser, context, undefined, declaration, 0, 0, tokenIndex, tokenLine, tokenColumn);
5832
- declaration = parseAssignmentExpression(parser, context, undefined, 0, 0, tokenIndex, tokenLine, tokenColumn, declaration);
5856
+ declaration = parseAsyncArrowOrCallExpression(parser, context, undefined, declaration, 1, 1, 0, flags, tokenStart);
5857
+ declaration = parseMemberOrUpdateExpression(parser, context, undefined, declaration, 0, 0, tokenStart);
5858
+ declaration = parseAssignmentExpression(parser, context, undefined, 0, 0, tokenStart, declaration);
5833
5859
  }
5834
5860
  else if (parser.getToken() & 143360) {
5835
5861
  if (scope)
5836
5862
  scope = createArrowHeadParsingScope(parser, context, parser.tokenValue);
5837
5863
  declaration = parseIdentifier(parser, context);
5838
- declaration = parseArrowFunctionExpression(parser, context, scope, undefined, [declaration], 1, tokenIndex, tokenLine, tokenColumn);
5864
+ declaration = parseArrowFunctionExpression(parser, context, scope, undefined, [declaration], 1, tokenStart);
5839
5865
  }
5840
5866
  }
5841
5867
  }
5842
5868
  break;
5843
5869
  }
5844
5870
  default:
5845
- declaration = parseExpression(parser, context, undefined, 1, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5871
+ declaration = parseExpression(parser, context, undefined, 1, 0, parser.tokenStart);
5846
5872
  matchOrInsertSemicolon(parser, context | 8192);
5847
5873
  }
5848
5874
  if (scope)
5849
5875
  declareUnboundVariable(parser, 'default');
5850
- return finishNode(parser, context, start, line, column, {
5876
+ return parser.finishNode({
5851
5877
  type: 'ExportDefaultDeclaration',
5852
5878
  declaration,
5853
- });
5879
+ }, start);
5854
5880
  }
5855
5881
  switch (parser.getToken()) {
5856
5882
  case 8391476: {
@@ -5874,7 +5900,7 @@ function parseExportDeclaration(parser, context, scope) {
5874
5900
  attributes,
5875
5901
  };
5876
5902
  matchOrInsertSemicolon(parser, context | 8192);
5877
- return finishNode(parser, context, start, line, column, node);
5903
+ return parser.finishNode(node, start);
5878
5904
  }
5879
5905
  case 2162700: {
5880
5906
  nextToken(parser, context);
@@ -5882,7 +5908,7 @@ function parseExportDeclaration(parser, context, scope) {
5882
5908
  const tmpExportedBindings = [];
5883
5909
  let hasLiteralLocal = 0;
5884
5910
  while (parser.getToken() & 143360 || parser.getToken() === 134283267) {
5885
- const { tokenIndex, tokenValue, tokenLine, tokenColumn } = parser;
5911
+ const { tokenStart, tokenValue } = parser;
5886
5912
  const local = parseModuleExportName(parser, context);
5887
5913
  if (local.type === 'Literal') {
5888
5914
  hasLiteralLocal = 1;
@@ -5906,11 +5932,11 @@ function parseExportDeclaration(parser, context, scope) {
5906
5932
  }
5907
5933
  exported = local;
5908
5934
  }
5909
- specifiers.push(finishNode(parser, context, tokenIndex, tokenLine, tokenColumn, {
5935
+ specifiers.push(parser.finishNode({
5910
5936
  type: 'ExportSpecifier',
5911
5937
  local,
5912
5938
  exported,
5913
- }));
5939
+ }, tokenStart));
5914
5940
  if (parser.getToken() !== 1074790415)
5915
5941
  consume(parser, context, 18);
5916
5942
  }
@@ -5936,26 +5962,27 @@ function parseExportDeclaration(parser, context, scope) {
5936
5962
  matchOrInsertSemicolon(parser, context | 8192);
5937
5963
  break;
5938
5964
  }
5965
+ case 132:
5939
5966
  case 86094:
5940
- declaration = parseClassDeclaration(parser, context, scope, undefined, 2, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5967
+ declaration = parseClassDeclaration(parser, context, scope, undefined, 2);
5941
5968
  break;
5942
5969
  case 86104:
5943
- declaration = parseFunctionDeclaration(parser, context, scope, undefined, 4, 1, 2, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5970
+ declaration = parseFunctionDeclaration(parser, context, scope, undefined, 4, 1, 2, 0, parser.tokenStart);
5944
5971
  break;
5945
5972
  case 241737:
5946
- declaration = parseLexicalDeclaration(parser, context, scope, undefined, 8, 64, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5973
+ declaration = parseLexicalDeclaration(parser, context, scope, undefined, 8, 64);
5947
5974
  break;
5948
5975
  case 86090:
5949
- declaration = parseLexicalDeclaration(parser, context, scope, undefined, 16, 64, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5976
+ declaration = parseLexicalDeclaration(parser, context, scope, undefined, 16, 64);
5950
5977
  break;
5951
5978
  case 86088:
5952
- declaration = parseVariableStatement(parser, context, scope, undefined, 64, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
5979
+ declaration = parseVariableStatement(parser, context, scope, undefined, 64);
5953
5980
  break;
5954
5981
  case 209005: {
5955
- const { tokenIndex, tokenLine, tokenColumn } = parser;
5982
+ const { tokenStart } = parser;
5956
5983
  nextToken(parser, context);
5957
5984
  if ((parser.flags & 1) === 0 && parser.getToken() === 86104) {
5958
- declaration = parseFunctionDeclaration(parser, context, scope, undefined, 4, 1, 2, 1, tokenIndex, tokenLine, tokenColumn);
5985
+ declaration = parseFunctionDeclaration(parser, context, scope, undefined, 4, 1, 2, 1, tokenStart);
5959
5986
  break;
5960
5987
  }
5961
5988
  }
@@ -5969,30 +5996,30 @@ function parseExportDeclaration(parser, context, scope) {
5969
5996
  source,
5970
5997
  attributes: attributes,
5971
5998
  };
5972
- return finishNode(parser, context, start, line, column, node);
5999
+ return parser.finishNode(node, start);
5973
6000
  }
5974
- function parseExpression(parser, context, privateScope, canAssign, inGroup, start, line, column) {
5975
- let expr = parsePrimaryExpression(parser, context, privateScope, 2, 0, canAssign, inGroup, 1, start, line, column);
5976
- expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, inGroup, 0, start, line, column);
5977
- return parseAssignmentExpression(parser, context, privateScope, inGroup, 0, start, line, column, expr);
6001
+ function parseExpression(parser, context, privateScope, canAssign, inGroup, start) {
6002
+ let expr = parsePrimaryExpression(parser, context, privateScope, 2, 0, canAssign, inGroup, 1, start);
6003
+ expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, inGroup, 0, start);
6004
+ return parseAssignmentExpression(parser, context, privateScope, inGroup, 0, start, expr);
5978
6005
  }
5979
- function parseSequenceExpression(parser, context, privateScope, inGroup, start, line, column, expr) {
6006
+ function parseSequenceExpression(parser, context, privateScope, inGroup, start, expr) {
5980
6007
  const expressions = [expr];
5981
6008
  while (consumeOpt(parser, context | 8192, 18)) {
5982
- expressions.push(parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn));
6009
+ expressions.push(parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart));
5983
6010
  }
5984
- return finishNode(parser, context, start, line, column, {
6011
+ return parser.finishNode({
5985
6012
  type: 'SequenceExpression',
5986
6013
  expressions,
5987
- });
6014
+ }, start);
5988
6015
  }
5989
- function parseExpressions(parser, context, privateScope, inGroup, canAssign, start, line, column) {
5990
- const expr = parseExpression(parser, context, privateScope, canAssign, inGroup, start, line, column);
6016
+ function parseExpressions(parser, context, privateScope, inGroup, canAssign, start) {
6017
+ const expr = parseExpression(parser, context, privateScope, canAssign, inGroup, start);
5991
6018
  return parser.getToken() === 18
5992
- ? parseSequenceExpression(parser, context, privateScope, inGroup, start, line, column, expr)
6019
+ ? parseSequenceExpression(parser, context, privateScope, inGroup, start, expr)
5993
6020
  : expr;
5994
6021
  }
5995
- function parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, start, line, column, left) {
6022
+ function parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, start, left) {
5996
6023
  const token = parser.getToken();
5997
6024
  if ((token & 4194304) === 4194304) {
5998
6025
  if (parser.assignable & 2)
@@ -6002,9 +6029,9 @@ function parseAssignmentExpression(parser, context, privateScope, inGroup, isPat
6002
6029
  reinterpretToPattern(parser, left);
6003
6030
  }
6004
6031
  nextToken(parser, context | 8192);
6005
- const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
6032
+ const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);
6006
6033
  parser.assignable = 2;
6007
- return finishNode(parser, context, start, line, column, isPattern
6034
+ return parser.finishNode(isPattern
6008
6035
  ? {
6009
6036
  type: 'AssignmentPattern',
6010
6037
  left,
@@ -6015,21 +6042,21 @@ function parseAssignmentExpression(parser, context, privateScope, inGroup, isPat
6015
6042
  left,
6016
6043
  operator: KeywordDescTable[token & 255],
6017
6044
  right,
6018
- });
6045
+ }, start);
6019
6046
  }
6020
6047
  if ((token & 8388608) === 8388608) {
6021
- left = parseBinaryExpression(parser, context, privateScope, inGroup, start, line, column, 4, token, left);
6048
+ left = parseBinaryExpression(parser, context, privateScope, inGroup, start, 4, token, left);
6022
6049
  }
6023
6050
  if (consumeOpt(parser, context | 8192, 22)) {
6024
- left = parseConditionalExpression(parser, context, privateScope, left, start, line, column);
6051
+ left = parseConditionalExpression(parser, context, privateScope, left, start);
6025
6052
  }
6026
6053
  return left;
6027
6054
  }
6028
- function parseAssignmentExpressionOrPattern(parser, context, privateScope, inGroup, isPattern, start, line, column, left) {
6055
+ function parseAssignmentExpressionOrPattern(parser, context, privateScope, inGroup, isPattern, start, left) {
6029
6056
  const token = parser.getToken();
6030
6057
  nextToken(parser, context | 8192);
6031
- const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
6032
- left = finishNode(parser, context, start, line, column, isPattern
6058
+ const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);
6059
+ left = parser.finishNode(isPattern
6033
6060
  ? {
6034
6061
  type: 'AssignmentPattern',
6035
6062
  left,
@@ -6040,24 +6067,24 @@ function parseAssignmentExpressionOrPattern(parser, context, privateScope, inGro
6040
6067
  left,
6041
6068
  operator: KeywordDescTable[token & 255],
6042
6069
  right,
6043
- });
6070
+ }, start);
6044
6071
  parser.assignable = 2;
6045
6072
  return left;
6046
6073
  }
6047
- function parseConditionalExpression(parser, context, privateScope, test, start, line, column) {
6048
- const consequent = parseExpression(parser, (context | 33554432) ^ 33554432, privateScope, 1, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
6074
+ function parseConditionalExpression(parser, context, privateScope, test, start) {
6075
+ const consequent = parseExpression(parser, (context | 33554432) ^ 33554432, privateScope, 1, 0, parser.tokenStart);
6049
6076
  consume(parser, context | 8192, 21);
6050
6077
  parser.assignable = 1;
6051
- const alternate = parseExpression(parser, context, privateScope, 1, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
6078
+ const alternate = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);
6052
6079
  parser.assignable = 2;
6053
- return finishNode(parser, context, start, line, column, {
6080
+ return parser.finishNode({
6054
6081
  type: 'ConditionalExpression',
6055
6082
  test,
6056
6083
  consequent,
6057
6084
  alternate,
6058
- });
6085
+ }, start);
6059
6086
  }
6060
- function parseBinaryExpression(parser, context, privateScope, inGroup, start, line, column, minPrecedence, operator, left) {
6087
+ function parseBinaryExpression(parser, context, privateScope, inGroup, start, minPrecedence, operator, left) {
6061
6088
  const bit = -((context & 33554432) > 0) & 8673330;
6062
6089
  let t;
6063
6090
  let precedence;
@@ -6071,23 +6098,24 @@ function parseBinaryExpression(parser, context, privateScope, inGroup, start, li
6071
6098
  if (precedence + ((t === 8391735) << 8) - ((bit === t) << 12) <= minPrecedence)
6072
6099
  break;
6073
6100
  nextToken(parser, context | 8192);
6074
- left = finishNode(parser, context, start, line, column, {
6101
+ left = parser.finishNode({
6075
6102
  type: t & 524288 || t & 268435456 ? 'LogicalExpression' : 'BinaryExpression',
6076
6103
  left,
6077
- right: parseBinaryExpression(parser, context, privateScope, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn, precedence, t, parseLeftHandSideExpression(parser, context, privateScope, 0, inGroup, 1, parser.tokenIndex, parser.tokenLine, parser.tokenColumn)),
6104
+ right: parseBinaryExpression(parser, context, privateScope, inGroup, parser.tokenStart, precedence, t, parseLeftHandSideExpression(parser, context, privateScope, 0, inGroup, 1)),
6078
6105
  operator: KeywordDescTable[t & 255],
6079
- });
6106
+ }, start);
6080
6107
  }
6081
6108
  if (parser.getToken() === 1077936155)
6082
6109
  report(parser, 26);
6083
6110
  return left;
6084
6111
  }
6085
- function parseUnaryExpression(parser, context, privateScope, isLHS, start, line, column, inGroup) {
6112
+ function parseUnaryExpression(parser, context, privateScope, isLHS, inGroup) {
6086
6113
  if (!isLHS)
6087
6114
  report(parser, 0);
6115
+ const { tokenStart } = parser;
6088
6116
  const unaryOperator = parser.getToken();
6089
6117
  nextToken(parser, context | 8192);
6090
- const arg = parseLeftHandSideExpression(parser, context, privateScope, 0, inGroup, 1, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
6118
+ const arg = parseLeftHandSideExpression(parser, context, privateScope, 0, inGroup, 1);
6091
6119
  if (parser.getToken() === 8391735)
6092
6120
  report(parser, 33);
6093
6121
  if (context & 256 && unaryOperator === 16863276) {
@@ -6099,20 +6127,20 @@ function parseUnaryExpression(parser, context, privateScope, isLHS, start, line,
6099
6127
  }
6100
6128
  }
6101
6129
  parser.assignable = 2;
6102
- return finishNode(parser, context, start, line, column, {
6130
+ return parser.finishNode({
6103
6131
  type: 'UnaryExpression',
6104
6132
  operator: KeywordDescTable[unaryOperator & 255],
6105
6133
  argument: arg,
6106
6134
  prefix: true,
6107
- });
6135
+ }, tokenStart);
6108
6136
  }
6109
- function parseAsyncExpression(parser, context, privateScope, inGroup, isLHS, canAssign, inNew, start, line, column) {
6137
+ function parseAsyncExpression(parser, context, privateScope, inGroup, isLHS, canAssign, inNew, start) {
6110
6138
  const token = parser.getToken();
6111
6139
  const expr = parseIdentifier(parser, context);
6112
6140
  const { flags } = parser;
6113
6141
  if ((flags & 1) === 0) {
6114
6142
  if (parser.getToken() === 86104) {
6115
- return parseFunctionExpression(parser, context, privateScope, 1, inGroup, start, line, column);
6143
+ return parseFunctionExpression(parser, context, privateScope, 1, inGroup, start);
6116
6144
  }
6117
6145
  if (isValidIdentifier(context, parser.getToken())) {
6118
6146
  if (!isLHS)
@@ -6120,11 +6148,11 @@ function parseAsyncExpression(parser, context, privateScope, inGroup, isLHS, can
6120
6148
  if ((parser.getToken() & 36864) === 36864) {
6121
6149
  parser.flags |= 256;
6122
6150
  }
6123
- return parseAsyncArrowAfterIdent(parser, context, privateScope, canAssign, start, line, column);
6151
+ return parseAsyncArrowAfterIdent(parser, context, privateScope, canAssign, start);
6124
6152
  }
6125
6153
  }
6126
6154
  if (!inNew && parser.getToken() === 67174411) {
6127
- return parseAsyncArrowOrCallExpression(parser, context, privateScope, expr, canAssign, 1, 0, flags, start, line, column);
6155
+ return parseAsyncArrowOrCallExpression(parser, context, privateScope, expr, canAssign, 1, 0, flags, start);
6128
6156
  }
6129
6157
  if (parser.getToken() === 10) {
6130
6158
  classifyIdentifier(parser, context, token);
@@ -6133,12 +6161,12 @@ function parseAsyncExpression(parser, context, privateScope, inGroup, isLHS, can
6133
6161
  if ((token & 36864) === 36864) {
6134
6162
  parser.flags |= 256;
6135
6163
  }
6136
- return parseArrowFromIdentifier(parser, context, privateScope, parser.tokenValue, expr, inNew, canAssign, 0, start, line, column);
6164
+ return parseArrowFromIdentifier(parser, context, privateScope, parser.tokenValue, expr, inNew, canAssign, 0, start);
6137
6165
  }
6138
6166
  parser.assignable = 1;
6139
6167
  return expr;
6140
6168
  }
6141
- function parseYieldExpressionOrIdentifier(parser, context, privateScope, inGroup, canAssign, start, line, column) {
6169
+ function parseYieldExpressionOrIdentifier(parser, context, privateScope, inGroup, canAssign, start) {
6142
6170
  if (inGroup)
6143
6171
  parser.destructible |= 256;
6144
6172
  if (context & 262144) {
@@ -6154,83 +6182,83 @@ function parseYieldExpressionOrIdentifier(parser, context, privateScope, inGroup
6154
6182
  if ((parser.flags & 1) === 0) {
6155
6183
  delegate = consumeOpt(parser, context | 8192, 8391476);
6156
6184
  if (parser.getToken() & (12288 | 65536) || delegate) {
6157
- argument = parseExpression(parser, context, privateScope, 1, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
6185
+ argument = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);
6158
6186
  }
6159
6187
  }
6160
6188
  else if (parser.getToken() === 8391476) {
6161
6189
  report(parser, 30, KeywordDescTable[parser.getToken() & 255]);
6162
6190
  }
6163
6191
  parser.assignable = 2;
6164
- return finishNode(parser, context, start, line, column, {
6192
+ return parser.finishNode({
6165
6193
  type: 'YieldExpression',
6166
6194
  argument,
6167
6195
  delegate,
6168
- });
6196
+ }, start);
6169
6197
  }
6170
6198
  if (context & 256)
6171
6199
  report(parser, 97, 'yield');
6172
- return parseIdentifierOrArrow(parser, context, privateScope, start, line, column);
6200
+ return parseIdentifierOrArrow(parser, context, privateScope);
6173
6201
  }
6174
- function parseAwaitExpressionOrIdentifier(parser, context, privateScope, inNew, inGroup, start, line, column) {
6202
+ function parseAwaitExpressionOrIdentifier(parser, context, privateScope, inNew, inGroup, start) {
6175
6203
  if (inGroup)
6176
6204
  parser.destructible |= 128;
6177
6205
  if (context & 268435456)
6178
6206
  report(parser, 177);
6179
- const possibleIdentifierOrArrowFunc = parseIdentifierOrArrow(parser, context, privateScope, start, line, column);
6207
+ const possibleIdentifierOrArrowFunc = parseIdentifierOrArrow(parser, context, privateScope);
6180
6208
  const isIdentifier = possibleIdentifierOrArrowFunc.type === 'ArrowFunctionExpression' ||
6181
6209
  (parser.getToken() & 65536) === 0;
6182
6210
  if (isIdentifier) {
6183
6211
  if (context & 524288)
6184
- reportMessageAt(start, line, column, parser.startIndex, parser.startLine, parser.startColumn, 176);
6212
+ reportMessageAt(start, { index: parser.startIndex, line: parser.startLine, column: parser.startColumn }, 176);
6185
6213
  if (context & 512)
6186
- reportMessageAt(start, line, column, parser.startIndex, parser.startLine, parser.startColumn, 110);
6214
+ reportMessageAt(start, { index: parser.startIndex, line: parser.startLine, column: parser.startColumn }, 110);
6187
6215
  if (context & 2097152 && context & 524288)
6188
- reportMessageAt(start, line, column, parser.startIndex, parser.startLine, parser.startColumn, 110);
6216
+ reportMessageAt(start, { index: parser.startIndex, line: parser.startLine, column: parser.startColumn }, 110);
6189
6217
  return possibleIdentifierOrArrowFunc;
6190
6218
  }
6191
6219
  if (context & 2097152) {
6192
- reportMessageAt(start, line, column, parser.startIndex, parser.startLine, parser.startColumn, 31);
6220
+ reportMessageAt(start, { index: parser.startIndex, line: parser.startLine, column: parser.startColumn }, 31);
6193
6221
  }
6194
6222
  if (context & 524288 || (context & 512 && context & 2048)) {
6195
6223
  if (inNew)
6196
- reportMessageAt(start, line, column, parser.startIndex, parser.startLine, parser.startColumn, 0);
6197
- const argument = parseLeftHandSideExpression(parser, context, privateScope, 0, 0, 1, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
6224
+ reportMessageAt(start, { index: parser.startIndex, line: parser.startLine, column: parser.startColumn }, 0);
6225
+ const argument = parseLeftHandSideExpression(parser, context, privateScope, 0, 0, 1);
6198
6226
  if (parser.getToken() === 8391735)
6199
6227
  report(parser, 33);
6200
6228
  parser.assignable = 2;
6201
- return finishNode(parser, context, start, line, column, {
6229
+ return parser.finishNode({
6202
6230
  type: 'AwaitExpression',
6203
6231
  argument,
6204
- });
6232
+ }, start);
6205
6233
  }
6206
6234
  if (context & 512)
6207
- reportMessageAt(start, line, column, parser.startIndex, parser.startLine, parser.startColumn, 98);
6235
+ reportMessageAt(start, { index: parser.startIndex, line: parser.startLine, column: parser.startColumn }, 98);
6208
6236
  return possibleIdentifierOrArrowFunc;
6209
6237
  }
6210
6238
  function parseFunctionBody(parser, context, scope, privateScope, origin, funcNameToken, scopeError) {
6211
- const { tokenIndex, tokenLine, tokenColumn } = parser;
6239
+ const { tokenStart } = parser;
6212
6240
  consume(parser, context | 8192, 2162700);
6213
6241
  const body = [];
6214
6242
  if (parser.getToken() !== 1074790415) {
6215
6243
  while (parser.getToken() === 134283267) {
6216
- const { index, tokenIndex, tokenValue } = parser;
6244
+ const { index, tokenStart, tokenIndex, tokenValue } = parser;
6217
6245
  const token = parser.getToken();
6218
6246
  const expr = parseLiteral(parser, context);
6219
6247
  if (isValidStrictMode(parser, index, tokenIndex, tokenValue)) {
6220
6248
  context |= 256;
6221
6249
  if (parser.flags & 128) {
6222
- reportMessageAt(tokenIndex, tokenLine, tokenColumn, parser.index, parser.line, parser.column, 66);
6250
+ reportMessageAt(tokenStart, parser.currentLocation, 66);
6223
6251
  }
6224
6252
  if (parser.flags & 64) {
6225
- reportMessageAt(tokenIndex, tokenLine, tokenColumn, parser.index, parser.line, parser.column, 9);
6253
+ reportMessageAt(tokenStart, parser.currentLocation, 9);
6226
6254
  }
6227
6255
  if (parser.flags & 4096) {
6228
- reportMessageAt(tokenIndex, tokenLine, tokenColumn, parser.index, parser.line, parser.column, 15);
6256
+ reportMessageAt(tokenStart, parser.currentLocation, 15);
6229
6257
  }
6230
6258
  if (scopeError)
6231
6259
  reportScopeError(scopeError);
6232
6260
  }
6233
- body.push(parseDirective(parser, context, expr, token, tokenIndex, parser.tokenLine, parser.tokenColumn));
6261
+ body.push(parseDirective(parser, context, expr, token, tokenStart));
6234
6262
  }
6235
6263
  if (context & 256) {
6236
6264
  if (funcNameToken) {
@@ -6258,12 +6286,13 @@ function parseFunctionBody(parser, context, scope, privateScope, origin, funcNam
6258
6286
  parser.flags &= -4289;
6259
6287
  if (parser.getToken() === 1077936155)
6260
6288
  report(parser, 26);
6261
- return finishNode(parser, context, tokenIndex, tokenLine, tokenColumn, {
6289
+ return parser.finishNode({
6262
6290
  type: 'BlockStatement',
6263
6291
  body,
6264
- });
6292
+ }, tokenStart);
6265
6293
  }
6266
- function parseSuperExpression(parser, context, start, line, column) {
6294
+ function parseSuperExpression(parser, context) {
6295
+ const { tokenStart } = parser;
6267
6296
  nextToken(parser, context);
6268
6297
  switch (parser.getToken()) {
6269
6298
  case 67108990:
@@ -6284,28 +6313,29 @@ function parseSuperExpression(parser, context, start, line, column) {
6284
6313
  default:
6285
6314
  report(parser, 30, 'super');
6286
6315
  }
6287
- return finishNode(parser, context, start, line, column, { type: 'Super' });
6316
+ return parser.finishNode({ type: 'Super' }, tokenStart);
6288
6317
  }
6289
- function parseLeftHandSideExpression(parser, context, privateScope, canAssign, inGroup, isLHS, start, line, column) {
6290
- const expression = parsePrimaryExpression(parser, context, privateScope, 2, 0, canAssign, inGroup, isLHS, start, line, column);
6291
- return parseMemberOrUpdateExpression(parser, context, privateScope, expression, inGroup, 0, start, line, column);
6318
+ function parseLeftHandSideExpression(parser, context, privateScope, canAssign, inGroup, isLHS) {
6319
+ const start = parser.tokenStart;
6320
+ const expression = parsePrimaryExpression(parser, context, privateScope, 2, 0, canAssign, inGroup, isLHS, start);
6321
+ return parseMemberOrUpdateExpression(parser, context, privateScope, expression, inGroup, 0, start);
6292
6322
  }
6293
- function parseUpdateExpression(parser, context, expr, start, line, column) {
6323
+ function parseUpdateExpression(parser, context, expr, start) {
6294
6324
  if (parser.assignable & 2)
6295
6325
  report(parser, 55);
6296
6326
  const token = parser.getToken();
6297
6327
  nextToken(parser, context);
6298
6328
  parser.assignable = 2;
6299
- return finishNode(parser, context, start, line, column, {
6329
+ return parser.finishNode({
6300
6330
  type: 'UpdateExpression',
6301
6331
  argument: expr,
6302
6332
  operator: KeywordDescTable[token & 255],
6303
6333
  prefix: false,
6304
- });
6334
+ }, start);
6305
6335
  }
6306
- function parseMemberOrUpdateExpression(parser, context, privateScope, expr, inGroup, inChain, start, line, column) {
6336
+ function parseMemberOrUpdateExpression(parser, context, privateScope, expr, inGroup, inChain, start) {
6307
6337
  if ((parser.getToken() & 33619968) === 33619968 && (parser.flags & 1) === 0) {
6308
- expr = parseUpdateExpression(parser, context, expr, start, line, column);
6338
+ expr = parseUpdateExpression(parser, context, expr, start);
6309
6339
  }
6310
6340
  else if ((parser.getToken() & 67108864) === 67108864) {
6311
6341
  context = (context | 33554432) ^ 33554432;
@@ -6317,12 +6347,13 @@ function parseMemberOrUpdateExpression(parser, context, privateScope, expr, inGr
6317
6347
  }
6318
6348
  parser.assignable = 1;
6319
6349
  const property = parsePropertyOrPrivatePropertyName(parser, context | 16384, privateScope);
6320
- expr = finishNode(parser, context, start, line, column, {
6350
+ expr = parser.finishNode({
6321
6351
  type: 'MemberExpression',
6322
6352
  object: expr,
6323
6353
  computed: false,
6324
6354
  property,
6325
- });
6355
+ optional: false,
6356
+ }, start);
6326
6357
  break;
6327
6358
  }
6328
6359
  case 69271571: {
@@ -6332,16 +6363,17 @@ function parseMemberOrUpdateExpression(parser, context, privateScope, expr, inGr
6332
6363
  parser.flags = (parser.flags | 2048) ^ 2048;
6333
6364
  }
6334
6365
  nextToken(parser, context | 8192);
6335
- const { tokenIndex, tokenLine, tokenColumn } = parser;
6336
- const property = parseExpressions(parser, context, privateScope, inGroup, 1, tokenIndex, tokenLine, tokenColumn);
6366
+ const { tokenStart } = parser;
6367
+ const property = parseExpressions(parser, context, privateScope, inGroup, 1, tokenStart);
6337
6368
  consume(parser, context, 20);
6338
6369
  parser.assignable = 1;
6339
- expr = finishNode(parser, context, start, line, column, {
6370
+ expr = parser.finishNode({
6340
6371
  type: 'MemberExpression',
6341
6372
  object: expr,
6342
6373
  computed: true,
6343
6374
  property,
6344
- });
6375
+ optional: false,
6376
+ }, start);
6345
6377
  if (restoreHasOptionalChaining) {
6346
6378
  parser.flags |= 2048;
6347
6379
  }
@@ -6359,11 +6391,12 @@ function parseMemberOrUpdateExpression(parser, context, privateScope, expr, inGr
6359
6391
  }
6360
6392
  const args = parseArguments(parser, context, privateScope, inGroup);
6361
6393
  parser.assignable = 2;
6362
- expr = finishNode(parser, context, start, line, column, {
6394
+ expr = parser.finishNode({
6363
6395
  type: 'CallExpression',
6364
6396
  callee: expr,
6365
6397
  arguments: args,
6366
- });
6398
+ optional: false,
6399
+ }, start);
6367
6400
  if (restoreHasOptionalChaining) {
6368
6401
  parser.flags |= 2048;
6369
6402
  }
@@ -6373,7 +6406,7 @@ function parseMemberOrUpdateExpression(parser, context, privateScope, expr, inGr
6373
6406
  nextToken(parser, (context | 67108864 | 2048) ^ 2048);
6374
6407
  parser.flags |= 2048;
6375
6408
  parser.assignable = 2;
6376
- expr = parseOptionalChain(parser, context, privateScope, expr, start, line, column);
6409
+ expr = parseOptionalChain(parser, context, privateScope, expr, start);
6377
6410
  break;
6378
6411
  }
6379
6412
  default:
@@ -6381,26 +6414,26 @@ function parseMemberOrUpdateExpression(parser, context, privateScope, expr, inGr
6381
6414
  report(parser, 166);
6382
6415
  }
6383
6416
  parser.assignable = 2;
6384
- expr = finishNode(parser, context, start, line, column, {
6417
+ expr = parser.finishNode({
6385
6418
  type: 'TaggedTemplateExpression',
6386
6419
  tag: expr,
6387
6420
  quasi: parser.getToken() === 67174408
6388
6421
  ? parseTemplate(parser, context | 16384, privateScope)
6389
- : parseTemplateLiteral(parser, context, parser.tokenIndex, parser.tokenLine, parser.tokenColumn),
6390
- });
6422
+ : parseTemplateLiteral(parser, context, parser.tokenStart),
6423
+ }, start);
6391
6424
  }
6392
- expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 1, start, line, column);
6425
+ expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 1, start);
6393
6426
  }
6394
6427
  if (inChain === 0 && (parser.flags & 2048) === 2048) {
6395
6428
  parser.flags = (parser.flags | 2048) ^ 2048;
6396
- expr = finishNode(parser, context, start, line, column, {
6429
+ expr = parser.finishNode({
6397
6430
  type: 'ChainExpression',
6398
6431
  expression: expr,
6399
- });
6432
+ }, start);
6400
6433
  }
6401
6434
  return expr;
6402
6435
  }
6403
- function parseOptionalChain(parser, context, privateScope, expr, start, line, column) {
6436
+ function parseOptionalChain(parser, context, privateScope, expr, start) {
6404
6437
  let restoreHasOptionalChaining = false;
6405
6438
  let node;
6406
6439
  if (parser.getToken() === 69271571 || parser.getToken() === 67174411) {
@@ -6411,38 +6444,38 @@ function parseOptionalChain(parser, context, privateScope, expr, start, line, co
6411
6444
  }
6412
6445
  if (parser.getToken() === 69271571) {
6413
6446
  nextToken(parser, context | 8192);
6414
- const { tokenIndex, tokenLine, tokenColumn } = parser;
6415
- const property = parseExpressions(parser, context, privateScope, 0, 1, tokenIndex, tokenLine, tokenColumn);
6447
+ const { tokenStart } = parser;
6448
+ const property = parseExpressions(parser, context, privateScope, 0, 1, tokenStart);
6416
6449
  consume(parser, context, 20);
6417
6450
  parser.assignable = 2;
6418
- node = finishNode(parser, context, start, line, column, {
6451
+ node = parser.finishNode({
6419
6452
  type: 'MemberExpression',
6420
6453
  object: expr,
6421
6454
  computed: true,
6422
6455
  optional: true,
6423
6456
  property,
6424
- });
6457
+ }, start);
6425
6458
  }
6426
6459
  else if (parser.getToken() === 67174411) {
6427
6460
  const args = parseArguments(parser, context, privateScope, 0);
6428
6461
  parser.assignable = 2;
6429
- node = finishNode(parser, context, start, line, column, {
6462
+ node = parser.finishNode({
6430
6463
  type: 'CallExpression',
6431
6464
  callee: expr,
6432
6465
  arguments: args,
6433
6466
  optional: true,
6434
- });
6467
+ }, start);
6435
6468
  }
6436
6469
  else {
6437
6470
  const property = parsePropertyOrPrivatePropertyName(parser, context, privateScope);
6438
6471
  parser.assignable = 2;
6439
- node = finishNode(parser, context, start, line, column, {
6472
+ node = parser.finishNode({
6440
6473
  type: 'MemberExpression',
6441
6474
  object: expr,
6442
6475
  computed: false,
6443
6476
  optional: true,
6444
6477
  property,
6445
- });
6478
+ }, start);
6446
6479
  }
6447
6480
  if (restoreHasOptionalChaining) {
6448
6481
  parser.flags |= 2048;
@@ -6457,37 +6490,37 @@ function parsePropertyOrPrivatePropertyName(parser, context, privateScope) {
6457
6490
  report(parser, 160);
6458
6491
  }
6459
6492
  return parser.getToken() === 130
6460
- ? parsePrivateIdentifier(parser, context, privateScope, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn)
6493
+ ? parsePrivateIdentifier(parser, context, privateScope, 0)
6461
6494
  : parseIdentifier(parser, context);
6462
6495
  }
6463
- function parseUpdateExpressionPrefixed(parser, context, privateScope, inNew, isLHS, start, line, column) {
6496
+ function parseUpdateExpressionPrefixed(parser, context, privateScope, inNew, isLHS, start) {
6464
6497
  if (inNew)
6465
6498
  report(parser, 56);
6466
6499
  if (!isLHS)
6467
6500
  report(parser, 0);
6468
6501
  const token = parser.getToken();
6469
6502
  nextToken(parser, context | 8192);
6470
- const arg = parseLeftHandSideExpression(parser, context, privateScope, 0, 0, 1, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
6503
+ const arg = parseLeftHandSideExpression(parser, context, privateScope, 0, 0, 1);
6471
6504
  if (parser.assignable & 2) {
6472
6505
  report(parser, 55);
6473
6506
  }
6474
6507
  parser.assignable = 2;
6475
- return finishNode(parser, context, start, line, column, {
6508
+ return parser.finishNode({
6476
6509
  type: 'UpdateExpression',
6477
6510
  argument: arg,
6478
6511
  operator: KeywordDescTable[token & 255],
6479
6512
  prefix: true,
6480
- });
6513
+ }, start);
6481
6514
  }
6482
- function parsePrimaryExpression(parser, context, privateScope, kind, inNew, canAssign, inGroup, isLHS, start, line, column) {
6515
+ function parsePrimaryExpression(parser, context, privateScope, kind, inNew, canAssign, inGroup, isLHS, start) {
6483
6516
  if ((parser.getToken() & 143360) === 143360) {
6484
6517
  switch (parser.getToken()) {
6485
6518
  case 209006:
6486
- return parseAwaitExpressionOrIdentifier(parser, context, privateScope, inNew, inGroup, start, line, column);
6519
+ return parseAwaitExpressionOrIdentifier(parser, context, privateScope, inNew, inGroup, start);
6487
6520
  case 241771:
6488
- return parseYieldExpressionOrIdentifier(parser, context, privateScope, inGroup, canAssign, start, line, column);
6521
+ return parseYieldExpressionOrIdentifier(parser, context, privateScope, inGroup, canAssign, start);
6489
6522
  case 209005:
6490
- return parseAsyncExpression(parser, context, privateScope, inGroup, isLHS, canAssign, inNew, start, line, column);
6523
+ return parseAsyncExpression(parser, context, privateScope, inGroup, isLHS, canAssign, inNew, start);
6491
6524
  }
6492
6525
  const { tokenValue } = parser;
6493
6526
  const token = parser.getToken();
@@ -6499,7 +6532,7 @@ function parsePrimaryExpression(parser, context, privateScope, kind, inNew, canA
6499
6532
  if ((token & 36864) === 36864) {
6500
6533
  parser.flags |= 256;
6501
6534
  }
6502
- return parseArrowFromIdentifier(parser, context, privateScope, tokenValue, expr, inNew, canAssign, 0, start, line, column);
6535
+ return parseArrowFromIdentifier(parser, context, privateScope, tokenValue, expr, inNew, canAssign, 0, start);
6503
6536
  }
6504
6537
  if (context & 4096 &&
6505
6538
  !(context & 8388608) &&
@@ -6524,7 +6557,7 @@ function parsePrimaryExpression(parser, context, privateScope, kind, inNew, canA
6524
6557
  switch (parser.getToken()) {
6525
6558
  case 33619993:
6526
6559
  case 33619994:
6527
- return parseUpdateExpressionPrefixed(parser, context, privateScope, inNew, isLHS, start, line, column);
6560
+ return parseUpdateExpressionPrefixed(parser, context, privateScope, inNew, isLHS, start);
6528
6561
  case 16863276:
6529
6562
  case 16842798:
6530
6563
  case 16842799:
@@ -6532,61 +6565,61 @@ function parsePrimaryExpression(parser, context, privateScope, kind, inNew, canA
6532
6565
  case 25233969:
6533
6566
  case 16863275:
6534
6567
  case 16863277:
6535
- return parseUnaryExpression(parser, context, privateScope, isLHS, start, line, column, inGroup);
6568
+ return parseUnaryExpression(parser, context, privateScope, isLHS, inGroup);
6536
6569
  case 86104:
6537
- return parseFunctionExpression(parser, context, privateScope, 0, inGroup, start, line, column);
6570
+ return parseFunctionExpression(parser, context, privateScope, 0, inGroup, start);
6538
6571
  case 2162700:
6539
- return parseObjectLiteral(parser, context, privateScope, canAssign ? 0 : 1, inGroup, start, line, column);
6572
+ return parseObjectLiteral(parser, context, privateScope, canAssign ? 0 : 1, inGroup);
6540
6573
  case 69271571:
6541
- return parseArrayLiteral(parser, context, privateScope, canAssign ? 0 : 1, inGroup, start, line, column);
6574
+ return parseArrayLiteral(parser, context, privateScope, canAssign ? 0 : 1, inGroup);
6542
6575
  case 67174411:
6543
- return parseParenthesizedExpression(parser, context | 16384, privateScope, canAssign, 1, 0, start, line, column);
6576
+ return parseParenthesizedExpression(parser, context | 16384, privateScope, canAssign, 1, 0, start);
6544
6577
  case 86021:
6545
6578
  case 86022:
6546
6579
  case 86023:
6547
- return parseNullOrTrueOrFalseLiteral(parser, context, start, line, column);
6580
+ return parseNullOrTrueOrFalseLiteral(parser, context);
6548
6581
  case 86111:
6549
6582
  return parseThisExpression(parser, context);
6550
6583
  case 65540:
6551
- return parseRegExpLiteral(parser, context, start, line, column);
6584
+ return parseRegExpLiteral(parser, context);
6552
6585
  case 132:
6553
6586
  case 86094:
6554
- return parseClassExpression(parser, context, privateScope, inGroup, start, line, column);
6587
+ return parseClassExpression(parser, context, privateScope, inGroup, start);
6555
6588
  case 86109:
6556
- return parseSuperExpression(parser, context, start, line, column);
6589
+ return parseSuperExpression(parser, context);
6557
6590
  case 67174409:
6558
- return parseTemplateLiteral(parser, context, start, line, column);
6591
+ return parseTemplateLiteral(parser, context, start);
6559
6592
  case 67174408:
6560
6593
  return parseTemplate(parser, context, privateScope);
6561
6594
  case 86107:
6562
- return parseNewExpression(parser, context, privateScope, inGroup, start, line, column);
6595
+ return parseNewExpression(parser, context, privateScope, inGroup);
6563
6596
  case 134283388:
6564
- return parseBigIntLiteral(parser, context, start, line, column);
6597
+ return parseBigIntLiteral(parser, context);
6565
6598
  case 130:
6566
- return parsePrivateIdentifier(parser, context, privateScope, 0, start, line, column);
6599
+ return parsePrivateIdentifier(parser, context, privateScope, 0);
6567
6600
  case 86106:
6568
- return parseImportCallOrMetaExpression(parser, context, privateScope, inNew, inGroup, start, line, column);
6601
+ return parseImportCallOrMetaExpression(parser, context, privateScope, inNew, inGroup, start);
6569
6602
  case 8456256:
6570
6603
  if (context & 8)
6571
- return parseJSXRootElementOrFragment(parser, context, privateScope, 0, start, line, column);
6604
+ return parseJSXRootElementOrFragment(parser, context, privateScope, 0, parser.tokenStart);
6572
6605
  default:
6573
6606
  if (isValidIdentifier(context, parser.getToken()))
6574
- return parseIdentifierOrArrow(parser, context, privateScope, start, line, column);
6607
+ return parseIdentifierOrArrow(parser, context, privateScope);
6575
6608
  report(parser, 30, KeywordDescTable[parser.getToken() & 255]);
6576
6609
  }
6577
6610
  }
6578
- function parseImportCallOrMetaExpression(parser, context, privateScope, inNew, inGroup, start, line, column) {
6611
+ function parseImportCallOrMetaExpression(parser, context, privateScope, inNew, inGroup, start) {
6579
6612
  let expr = parseIdentifier(parser, context);
6580
6613
  if (parser.getToken() === 67108877) {
6581
- return parseImportMetaExpression(parser, context, expr, start, line, column);
6614
+ return parseImportMetaExpression(parser, context, expr, start);
6582
6615
  }
6583
6616
  if (inNew)
6584
6617
  report(parser, 142);
6585
- expr = parseImportExpression(parser, context, privateScope, inGroup, start, line, column);
6618
+ expr = parseImportExpression(parser, context, privateScope, inGroup, start);
6586
6619
  parser.assignable = 2;
6587
- return parseMemberOrUpdateExpression(parser, context, privateScope, expr, inGroup, 0, start, line, column);
6620
+ return parseMemberOrUpdateExpression(parser, context, privateScope, expr, inGroup, 0, start);
6588
6621
  }
6589
- function parseImportMetaExpression(parser, context, meta, start, line, column) {
6622
+ function parseImportMetaExpression(parser, context, meta, start) {
6590
6623
  if ((context & 512) === 0)
6591
6624
  report(parser, 169);
6592
6625
  nextToken(parser, context);
@@ -6598,23 +6631,23 @@ function parseImportMetaExpression(parser, context, meta, start, line, column) {
6598
6631
  report(parser, 175);
6599
6632
  }
6600
6633
  parser.assignable = 2;
6601
- return finishNode(parser, context, start, line, column, {
6634
+ return parser.finishNode({
6602
6635
  type: 'MetaProperty',
6603
6636
  meta,
6604
6637
  property: parseIdentifier(parser, context),
6605
- });
6638
+ }, start);
6606
6639
  }
6607
- function parseImportExpression(parser, context, privateScope, inGroup, start, line, column) {
6640
+ function parseImportExpression(parser, context, privateScope, inGroup, start) {
6608
6641
  consume(parser, context | 8192, 67174411);
6609
6642
  if (parser.getToken() === 14)
6610
6643
  report(parser, 143);
6611
- const source = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
6644
+ const source = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);
6612
6645
  let options = null;
6613
6646
  if (parser.getToken() === 18) {
6614
6647
  consume(parser, context, 18);
6615
6648
  if (parser.getToken() !== 16) {
6616
6649
  const expContext = (context | 33554432) ^ 33554432;
6617
- options = parseExpression(parser, expContext, privateScope, 1, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
6650
+ options = parseExpression(parser, expContext, privateScope, 1, inGroup, parser.tokenStart);
6618
6651
  }
6619
6652
  consumeOpt(parser, context, 18);
6620
6653
  }
@@ -6624,7 +6657,7 @@ function parseImportExpression(parser, context, privateScope, inGroup, start, li
6624
6657
  options,
6625
6658
  };
6626
6659
  consume(parser, context, 16);
6627
- return finishNode(parser, context, start, line, column, node);
6660
+ return parser.finishNode(node, start);
6628
6661
  }
6629
6662
  function parseImportAttributes(parser, context, specifiers = null) {
6630
6663
  if (!consumeOpt(parser, context, 20579))
@@ -6633,9 +6666,7 @@ function parseImportAttributes(parser, context, specifiers = null) {
6633
6666
  const attributes = [];
6634
6667
  const keysContent = new Set();
6635
6668
  while (parser.getToken() !== 1074790415) {
6636
- const start = parser.tokenIndex;
6637
- const line = parser.tokenLine;
6638
- const column = parser.tokenColumn;
6669
+ const start = parser.tokenStart;
6639
6670
  const key = parseIdentifierOrStringLiteral(parser, context);
6640
6671
  consume(parser, context, 21);
6641
6672
  const value = parseStringLiteral(parser, context);
@@ -6659,11 +6690,11 @@ function parseImportAttributes(parser, context, specifiers = null) {
6659
6690
  report(parser, 145, `${keyContent}`);
6660
6691
  }
6661
6692
  keysContent.add(keyContent);
6662
- attributes.push(finishNode(parser, context, start, line, column, {
6693
+ attributes.push(parser.finishNode({
6663
6694
  type: 'ImportAttribute',
6664
6695
  key,
6665
6696
  value,
6666
- }));
6697
+ }, start));
6667
6698
  if (parser.getToken() !== 1074790415) {
6668
6699
  consume(parser, context, 18);
6669
6700
  }
@@ -6713,8 +6744,8 @@ function parseModuleExportName(parser, context) {
6713
6744
  report(parser, 30, KeywordDescTable[parser.getToken() & 255]);
6714
6745
  }
6715
6746
  }
6716
- function parseBigIntLiteral(parser, context, start, line, column) {
6717
- const { tokenRaw, tokenValue } = parser;
6747
+ function parseBigIntLiteral(parser, context) {
6748
+ const { tokenRaw, tokenValue, tokenStart } = parser;
6718
6749
  nextToken(parser, context);
6719
6750
  parser.assignable = 2;
6720
6751
  const node = {
@@ -6725,61 +6756,57 @@ function parseBigIntLiteral(parser, context, start, line, column) {
6725
6756
  if (context & 128) {
6726
6757
  node.raw = tokenRaw;
6727
6758
  }
6728
- return finishNode(parser, context, start, line, column, node);
6759
+ return parser.finishNode(node, tokenStart);
6729
6760
  }
6730
- function parseTemplateLiteral(parser, context, start, line, column) {
6761
+ function parseTemplateLiteral(parser, context, start) {
6731
6762
  parser.assignable = 2;
6732
- const { tokenValue, tokenRaw, tokenIndex, tokenLine, tokenColumn } = parser;
6763
+ const { tokenValue, tokenRaw, tokenStart } = parser;
6733
6764
  consume(parser, context, 67174409);
6734
- const quasis = [
6735
- parseTemplateElement(parser, context, tokenValue, tokenRaw, tokenIndex, tokenLine, tokenColumn, true),
6736
- ];
6737
- return finishNode(parser, context, start, line, column, {
6765
+ const quasis = [parseTemplateElement(parser, context, tokenValue, tokenRaw, tokenStart, true)];
6766
+ return parser.finishNode({
6738
6767
  type: 'TemplateLiteral',
6739
6768
  expressions: [],
6740
6769
  quasis,
6741
- });
6770
+ }, start);
6742
6771
  }
6743
6772
  function parseTemplate(parser, context, privateScope) {
6744
6773
  context = (context | 33554432) ^ 33554432;
6745
- const { tokenValue, tokenRaw, tokenIndex, tokenLine, tokenColumn } = parser;
6774
+ const { tokenValue, tokenRaw, tokenStart } = parser;
6746
6775
  consume(parser, (context & -16385) | 8192, 67174408);
6747
- const quasis = [
6748
- parseTemplateElement(parser, context, tokenValue, tokenRaw, tokenIndex, tokenLine, tokenColumn, false),
6749
- ];
6776
+ const quasis = [parseTemplateElement(parser, context, tokenValue, tokenRaw, tokenStart, false)];
6750
6777
  const expressions = [
6751
- parseExpressions(parser, context & -16385, privateScope, 0, 1, parser.tokenIndex, parser.tokenLine, parser.tokenColumn),
6778
+ parseExpressions(parser, context & -16385, privateScope, 0, 1, parser.tokenStart),
6752
6779
  ];
6753
6780
  if (parser.getToken() !== 1074790415)
6754
6781
  report(parser, 83);
6755
6782
  while (parser.setToken(scanTemplateTail(parser, context), true) !== 67174409) {
6756
- const { tokenValue, tokenRaw, tokenIndex, tokenLine, tokenColumn } = parser;
6783
+ const { tokenValue, tokenRaw, tokenStart } = parser;
6757
6784
  consume(parser, (context & -16385) | 8192, 67174408);
6758
- quasis.push(parseTemplateElement(parser, context, tokenValue, tokenRaw, tokenIndex, tokenLine, tokenColumn, false));
6759
- expressions.push(parseExpressions(parser, context, privateScope, 0, 1, parser.tokenIndex, parser.tokenLine, parser.tokenColumn));
6785
+ quasis.push(parseTemplateElement(parser, context, tokenValue, tokenRaw, tokenStart, false));
6786
+ expressions.push(parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart));
6760
6787
  if (parser.getToken() !== 1074790415)
6761
6788
  report(parser, 83);
6762
6789
  }
6763
6790
  {
6764
- const { tokenValue, tokenRaw, tokenIndex, tokenLine, tokenColumn } = parser;
6791
+ const { tokenValue, tokenRaw, tokenStart } = parser;
6765
6792
  consume(parser, context, 67174409);
6766
- quasis.push(parseTemplateElement(parser, context, tokenValue, tokenRaw, tokenIndex, tokenLine, tokenColumn, true));
6793
+ quasis.push(parseTemplateElement(parser, context, tokenValue, tokenRaw, tokenStart, true));
6767
6794
  }
6768
- return finishNode(parser, context, tokenIndex, tokenLine, tokenColumn, {
6795
+ return parser.finishNode({
6769
6796
  type: 'TemplateLiteral',
6770
6797
  expressions,
6771
6798
  quasis,
6772
- });
6799
+ }, tokenStart);
6773
6800
  }
6774
- function parseTemplateElement(parser, context, cooked, raw, start, line, col, tail) {
6775
- const node = finishNode(parser, context, start, line, col, {
6801
+ function parseTemplateElement(parser, context, cooked, raw, start, tail) {
6802
+ const node = parser.finishNode({
6776
6803
  type: 'TemplateElement',
6777
6804
  value: {
6778
6805
  cooked,
6779
6806
  raw,
6780
6807
  },
6781
6808
  tail,
6782
- });
6809
+ }, start);
6783
6810
  const tailSize = tail ? 1 : 2;
6784
6811
  if (context & 2) {
6785
6812
  node.start += 1;
@@ -6793,15 +6820,16 @@ function parseTemplateElement(parser, context, cooked, raw, start, line, col, ta
6793
6820
  }
6794
6821
  return node;
6795
6822
  }
6796
- function parseSpreadElement(parser, context, privateScope, start, line, column) {
6823
+ function parseSpreadElement(parser, context, privateScope) {
6824
+ const start = parser.tokenStart;
6797
6825
  context = (context | 33554432) ^ 33554432;
6798
6826
  consume(parser, context | 8192, 14);
6799
- const argument = parseExpression(parser, context, privateScope, 1, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
6827
+ const argument = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);
6800
6828
  parser.assignable = 1;
6801
- return finishNode(parser, context, start, line, column, {
6829
+ return parser.finishNode({
6802
6830
  type: 'SpreadElement',
6803
6831
  argument,
6804
- });
6832
+ }, start);
6805
6833
  }
6806
6834
  function parseArguments(parser, context, privateScope, inGroup) {
6807
6835
  nextToken(parser, context | 8192);
@@ -6812,10 +6840,10 @@ function parseArguments(parser, context, privateScope, inGroup) {
6812
6840
  }
6813
6841
  while (parser.getToken() !== 16) {
6814
6842
  if (parser.getToken() === 14) {
6815
- args.push(parseSpreadElement(parser, context, privateScope, parser.tokenIndex, parser.tokenLine, parser.tokenColumn));
6843
+ args.push(parseSpreadElement(parser, context, privateScope));
6816
6844
  }
6817
6845
  else {
6818
- args.push(parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn));
6846
+ args.push(parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart));
6819
6847
  }
6820
6848
  if (parser.getToken() !== 18)
6821
6849
  break;
@@ -6827,22 +6855,22 @@ function parseArguments(parser, context, privateScope, inGroup) {
6827
6855
  return args;
6828
6856
  }
6829
6857
  function parseIdentifier(parser, context) {
6830
- const { tokenValue, tokenIndex, tokenLine, tokenColumn } = parser;
6858
+ const { tokenValue, tokenStart } = parser;
6831
6859
  const allowRegex = tokenValue === 'await' && (parser.getToken() & -2147483648) === 0;
6832
6860
  nextToken(parser, context | (allowRegex ? 8192 : 0));
6833
- return finishNode(parser, context, tokenIndex, tokenLine, tokenColumn, {
6861
+ return parser.finishNode({
6834
6862
  type: 'Identifier',
6835
6863
  name: tokenValue,
6836
- });
6864
+ }, tokenStart);
6837
6865
  }
6838
6866
  function parseLiteral(parser, context) {
6839
- const { tokenValue, tokenRaw, tokenIndex, tokenLine, tokenColumn } = parser;
6867
+ const { tokenValue, tokenRaw, tokenStart } = parser;
6840
6868
  if (parser.getToken() === 134283388) {
6841
- return parseBigIntLiteral(parser, context, tokenIndex, tokenLine, tokenColumn);
6869
+ return parseBigIntLiteral(parser, context);
6842
6870
  }
6843
6871
  nextToken(parser, context);
6844
6872
  parser.assignable = 2;
6845
- return finishNode(parser, context, tokenIndex, tokenLine, tokenColumn, context & 128
6873
+ return parser.finishNode(context & 128
6846
6874
  ? {
6847
6875
  type: 'Literal',
6848
6876
  value: tokenValue,
@@ -6851,14 +6879,15 @@ function parseLiteral(parser, context) {
6851
6879
  : {
6852
6880
  type: 'Literal',
6853
6881
  value: tokenValue,
6854
- });
6882
+ }, tokenStart);
6855
6883
  }
6856
- function parseNullOrTrueOrFalseLiteral(parser, context, start, line, column) {
6884
+ function parseNullOrTrueOrFalseLiteral(parser, context) {
6885
+ const start = parser.tokenStart;
6857
6886
  const raw = KeywordDescTable[parser.getToken() & 255];
6858
6887
  const value = parser.getToken() === 86023 ? null : raw === 'true';
6859
6888
  nextToken(parser, context);
6860
6889
  parser.assignable = 2;
6861
- return finishNode(parser, context, start, line, column, context & 128
6890
+ return parser.finishNode(context & 128
6862
6891
  ? {
6863
6892
  type: 'Literal',
6864
6893
  value,
@@ -6867,17 +6896,17 @@ function parseNullOrTrueOrFalseLiteral(parser, context, start, line, column) {
6867
6896
  : {
6868
6897
  type: 'Literal',
6869
6898
  value,
6870
- });
6899
+ }, start);
6871
6900
  }
6872
6901
  function parseThisExpression(parser, context) {
6873
- const { tokenIndex, tokenLine, tokenColumn } = parser;
6902
+ const { tokenStart } = parser;
6874
6903
  nextToken(parser, context);
6875
6904
  parser.assignable = 2;
6876
- return finishNode(parser, context, tokenIndex, tokenLine, tokenColumn, {
6905
+ return parser.finishNode({
6877
6906
  type: 'ThisExpression',
6878
- });
6907
+ }, tokenStart);
6879
6908
  }
6880
- function parseFunctionDeclaration(parser, context, scope, privateScope, origin, allowGen, flags, isAsync, start, line, column) {
6909
+ function parseFunctionDeclaration(parser, context, scope, privateScope, origin, allowGen, flags, isAsync, start) {
6881
6910
  nextToken(parser, context | 8192);
6882
6911
  const isGenerator = allowGen ? optionalBit(parser, context, 8391476) : 0;
6883
6912
  let id = null;
@@ -6933,16 +6962,16 @@ function parseFunctionDeclaration(parser, context, scope, privateScope, origin,
6933
6962
  const params = parseFormalParametersOrFormalList(parser, (context | 2097152) & -268435457, functionScope, privateScope, 0, 1);
6934
6963
  const modifierFlags = 2048 | 1024 | 32768 | 268435456;
6935
6964
  const body = parseFunctionBody(parser, ((context | modifierFlags) ^ modifierFlags) | 8388608 | 1048576, scope ? addChildScope(functionScope, 128) : functionScope, privateScope, 8, funcNameToken, functionScope?.scopeError);
6936
- return finishNode(parser, context, start, line, column, {
6965
+ return parser.finishNode({
6937
6966
  type: 'FunctionDeclaration',
6938
6967
  id,
6939
6968
  params,
6940
6969
  body,
6941
6970
  async: isAsync === 1,
6942
6971
  generator: isGenerator === 1,
6943
- });
6972
+ }, start);
6944
6973
  }
6945
- function parseFunctionExpression(parser, context, privateScope, isAsync, inGroup, start, line, column) {
6974
+ function parseFunctionExpression(parser, context, privateScope, isAsync, inGroup, start) {
6946
6975
  nextToken(parser, context | 8192);
6947
6976
  const isGenerator = optionalBit(parser, context, 8391476);
6948
6977
  const generatorAndAsyncFlags = (isAsync ? 524288 : 0) | (isGenerator ? 262144 : 0);
@@ -6975,17 +7004,17 @@ function parseFunctionExpression(parser, context, privateScope, isAsync, inGroup
6975
7004
  8388608 |
6976
7005
  1048576, scope ? addChildScope(scope, 128) : scope, privateScope, 0, funcNameToken, scope?.scopeError);
6977
7006
  parser.assignable = 2;
6978
- return finishNode(parser, context, start, line, column, {
7007
+ return parser.finishNode({
6979
7008
  type: 'FunctionExpression',
6980
7009
  id,
6981
7010
  params,
6982
7011
  body,
6983
7012
  async: isAsync === 1,
6984
7013
  generator: isGenerator === 1,
6985
- });
7014
+ }, start);
6986
7015
  }
6987
- function parseArrayLiteral(parser, context, privateScope, skipInitializer, inGroup, start, line, column) {
6988
- const expr = parseArrayExpressionOrPattern(parser, context, void 0, privateScope, skipInitializer, inGroup, 0, 2, 0, start, line, column);
7016
+ function parseArrayLiteral(parser, context, privateScope, skipInitializer, inGroup) {
7017
+ const expr = parseArrayExpressionOrPattern(parser, context, void 0, privateScope, skipInitializer, inGroup, 0, 2, 0);
6989
7018
  if (parser.destructible & 64) {
6990
7019
  report(parser, 63);
6991
7020
  }
@@ -6994,7 +7023,8 @@ function parseArrayLiteral(parser, context, privateScope, skipInitializer, inGro
6994
7023
  }
6995
7024
  return expr;
6996
7025
  }
6997
- function parseArrayExpressionOrPattern(parser, context, scope, privateScope, skipInitializer, inGroup, isPattern, kind, origin, start, line, column) {
7026
+ function parseArrayExpressionOrPattern(parser, context, scope, privateScope, skipInitializer, inGroup, isPattern, kind, origin) {
7027
+ const { tokenStart: start } = parser;
6998
7028
  nextToken(parser, context | 8192);
6999
7029
  const elements = [];
7000
7030
  let destructible = 0;
@@ -7005,18 +7035,18 @@ function parseArrayExpressionOrPattern(parser, context, scope, privateScope, ski
7005
7035
  }
7006
7036
  else {
7007
7037
  let left;
7008
- const { tokenIndex, tokenLine, tokenColumn, tokenValue } = parser;
7038
+ const { tokenStart, tokenValue } = parser;
7009
7039
  const token = parser.getToken();
7010
7040
  if (token & 143360) {
7011
- left = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, inGroup, 1, tokenIndex, tokenLine, tokenColumn);
7041
+ left = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, inGroup, 1, tokenStart);
7012
7042
  if (parser.getToken() === 1077936155) {
7013
7043
  if (parser.assignable & 2)
7014
7044
  report(parser, 26);
7015
7045
  nextToken(parser, context | 8192);
7016
7046
  if (scope)
7017
7047
  addVarOrBlock(parser, context, scope, tokenValue, kind, origin);
7018
- const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
7019
- left = finishNode(parser, context, tokenIndex, tokenLine, tokenColumn, isPattern
7048
+ const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);
7049
+ left = parser.finishNode(isPattern
7020
7050
  ? {
7021
7051
  type: 'AssignmentPattern',
7022
7052
  left,
@@ -7027,7 +7057,7 @@ function parseArrayExpressionOrPattern(parser, context, scope, privateScope, ski
7027
7057
  operator: '=',
7028
7058
  left,
7029
7059
  right,
7030
- });
7060
+ }, tokenStart);
7031
7061
  destructible |=
7032
7062
  parser.destructible & 256
7033
7063
  ? 256
@@ -7056,11 +7086,11 @@ function parseArrayExpressionOrPattern(parser, context, scope, privateScope, ski
7056
7086
  : (kind & 2) === 0
7057
7087
  ? 16
7058
7088
  : 0;
7059
- left = parseMemberOrUpdateExpression(parser, context, privateScope, left, inGroup, 0, tokenIndex, tokenLine, tokenColumn);
7089
+ left = parseMemberOrUpdateExpression(parser, context, privateScope, left, inGroup, 0, tokenStart);
7060
7090
  if (parser.getToken() !== 18 && parser.getToken() !== 20) {
7061
7091
  if (parser.getToken() !== 1077936155)
7062
7092
  destructible |= 16;
7063
- left = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenIndex, tokenLine, tokenColumn, left);
7093
+ left = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, left);
7064
7094
  }
7065
7095
  else if (parser.getToken() !== 1077936155) {
7066
7096
  destructible |=
@@ -7073,8 +7103,8 @@ function parseArrayExpressionOrPattern(parser, context, scope, privateScope, ski
7073
7103
  else if (token & 2097152) {
7074
7104
  left =
7075
7105
  parser.getToken() === 2162700
7076
- ? parseObjectLiteralOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin, tokenIndex, tokenLine, tokenColumn)
7077
- : parseArrayExpressionOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin, tokenIndex, tokenLine, tokenColumn);
7106
+ ? parseObjectLiteralOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin)
7107
+ : parseArrayExpressionOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin);
7078
7108
  destructible |= parser.destructible;
7079
7109
  parser.assignable =
7080
7110
  parser.destructible & 16
@@ -7089,10 +7119,10 @@ function parseArrayExpressionOrPattern(parser, context, scope, privateScope, ski
7089
7119
  report(parser, 71);
7090
7120
  }
7091
7121
  else {
7092
- left = parseMemberOrUpdateExpression(parser, context, privateScope, left, inGroup, 0, tokenIndex, tokenLine, tokenColumn);
7122
+ left = parseMemberOrUpdateExpression(parser, context, privateScope, left, inGroup, 0, tokenStart);
7093
7123
  destructible = parser.assignable & 2 ? 16 : 0;
7094
7124
  if (parser.getToken() !== 18 && parser.getToken() !== 20) {
7095
- left = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenIndex, tokenLine, tokenColumn, left);
7125
+ left = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, left);
7096
7126
  }
7097
7127
  else if (parser.getToken() !== 1077936155) {
7098
7128
  destructible |=
@@ -7103,15 +7133,15 @@ function parseArrayExpressionOrPattern(parser, context, scope, privateScope, ski
7103
7133
  }
7104
7134
  }
7105
7135
  else if (token === 14) {
7106
- left = parseSpreadOrRestElement(parser, context, scope, privateScope, 20, kind, origin, 0, inGroup, isPattern, tokenIndex, tokenLine, tokenColumn);
7136
+ left = parseSpreadOrRestElement(parser, context, scope, privateScope, 20, kind, origin, 0, inGroup, isPattern);
7107
7137
  destructible |= parser.destructible;
7108
7138
  if (parser.getToken() !== 18 && parser.getToken() !== 20)
7109
7139
  report(parser, 30, KeywordDescTable[parser.getToken() & 255]);
7110
7140
  }
7111
7141
  else {
7112
- left = parseLeftHandSideExpression(parser, context, privateScope, 1, 0, 1, tokenIndex, tokenLine, tokenColumn);
7142
+ left = parseLeftHandSideExpression(parser, context, privateScope, 1, 0, 1);
7113
7143
  if (parser.getToken() !== 18 && parser.getToken() !== 20) {
7114
- left = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenIndex, tokenLine, tokenColumn, left);
7144
+ left = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, left);
7115
7145
  if ((kind & (2 | 1)) === 0 && token === 67174411)
7116
7146
  destructible |= 16;
7117
7147
  }
@@ -7135,17 +7165,17 @@ function parseArrayExpressionOrPattern(parser, context, scope, privateScope, ski
7135
7165
  }
7136
7166
  }
7137
7167
  consume(parser, context, 20);
7138
- const node = finishNode(parser, context, start, line, column, {
7168
+ const node = parser.finishNode({
7139
7169
  type: isPattern ? 'ArrayPattern' : 'ArrayExpression',
7140
7170
  elements,
7141
- });
7171
+ }, start);
7142
7172
  if (!skipInitializer && parser.getToken() & 4194304) {
7143
- return parseArrayOrObjectAssignmentPattern(parser, context, privateScope, destructible, inGroup, isPattern, start, line, column, node);
7173
+ return parseArrayOrObjectAssignmentPattern(parser, context, privateScope, destructible, inGroup, isPattern, start, node);
7144
7174
  }
7145
7175
  parser.destructible = destructible;
7146
7176
  return node;
7147
7177
  }
7148
- function parseArrayOrObjectAssignmentPattern(parser, context, privateScope, destructible, inGroup, isPattern, start, line, column, node) {
7178
+ function parseArrayOrObjectAssignmentPattern(parser, context, privateScope, destructible, inGroup, isPattern, start, node) {
7149
7179
  if (parser.getToken() !== 1077936155)
7150
7180
  report(parser, 26);
7151
7181
  nextToken(parser, context | 8192);
@@ -7153,14 +7183,14 @@ function parseArrayOrObjectAssignmentPattern(parser, context, privateScope, dest
7153
7183
  report(parser, 26);
7154
7184
  if (!isPattern)
7155
7185
  reinterpretToPattern(parser, node);
7156
- const { tokenIndex, tokenLine, tokenColumn } = parser;
7157
- const right = parseExpression(parser, context, privateScope, 1, inGroup, tokenIndex, tokenLine, tokenColumn);
7186
+ const { tokenStart } = parser;
7187
+ const right = parseExpression(parser, context, privateScope, 1, inGroup, tokenStart);
7158
7188
  parser.destructible =
7159
7189
  ((destructible | 64 | 8) ^
7160
7190
  (8 | 64)) |
7161
7191
  (parser.destructible & 128 ? 128 : 0) |
7162
7192
  (parser.destructible & 256 ? 256 : 0);
7163
- return finishNode(parser, context, start, line, column, isPattern
7193
+ return parser.finishNode(isPattern
7164
7194
  ? {
7165
7195
  type: 'AssignmentPattern',
7166
7196
  left: node,
@@ -7171,24 +7201,25 @@ function parseArrayOrObjectAssignmentPattern(parser, context, privateScope, dest
7171
7201
  left: node,
7172
7202
  operator: '=',
7173
7203
  right,
7174
- });
7204
+ }, start);
7175
7205
  }
7176
- function parseSpreadOrRestElement(parser, context, scope, privateScope, closingToken, kind, origin, isAsync, inGroup, isPattern, start, line, column) {
7206
+ function parseSpreadOrRestElement(parser, context, scope, privateScope, closingToken, kind, origin, isAsync, inGroup, isPattern) {
7207
+ const { tokenStart: start } = parser;
7177
7208
  nextToken(parser, context | 8192);
7178
7209
  let argument = null;
7179
7210
  let destructible = 0;
7180
- const { tokenValue, tokenIndex, tokenLine, tokenColumn } = parser;
7211
+ const { tokenValue, tokenStart } = parser;
7181
7212
  let token = parser.getToken();
7182
7213
  if (token & 143360) {
7183
7214
  parser.assignable = 1;
7184
- argument = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, inGroup, 1, tokenIndex, tokenLine, tokenColumn);
7215
+ argument = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, inGroup, 1, tokenStart);
7185
7216
  token = parser.getToken();
7186
- argument = parseMemberOrUpdateExpression(parser, context, privateScope, argument, inGroup, 0, tokenIndex, tokenLine, tokenColumn);
7217
+ argument = parseMemberOrUpdateExpression(parser, context, privateScope, argument, inGroup, 0, tokenStart);
7187
7218
  if (parser.getToken() !== 18 && parser.getToken() !== closingToken) {
7188
7219
  if (parser.assignable & 2 && parser.getToken() === 1077936155)
7189
7220
  report(parser, 71);
7190
7221
  destructible |= 16;
7191
- argument = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenIndex, tokenLine, tokenColumn, argument);
7222
+ argument = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, argument);
7192
7223
  }
7193
7224
  if (parser.assignable & 2) {
7194
7225
  destructible |= 16;
@@ -7208,25 +7239,25 @@ function parseSpreadOrRestElement(parser, context, scope, privateScope, closingT
7208
7239
  else if (token & 2097152) {
7209
7240
  argument =
7210
7241
  parser.getToken() === 2162700
7211
- ? parseObjectLiteralOrPattern(parser, context, scope, privateScope, 1, inGroup, isPattern, kind, origin, tokenIndex, tokenLine, tokenColumn)
7212
- : parseArrayExpressionOrPattern(parser, context, scope, privateScope, 1, inGroup, isPattern, kind, origin, tokenIndex, tokenLine, tokenColumn);
7242
+ ? parseObjectLiteralOrPattern(parser, context, scope, privateScope, 1, inGroup, isPattern, kind, origin)
7243
+ : parseArrayExpressionOrPattern(parser, context, scope, privateScope, 1, inGroup, isPattern, kind, origin);
7213
7244
  token = parser.getToken();
7214
7245
  if (token !== 1077936155 && token !== closingToken && token !== 18) {
7215
7246
  if (parser.destructible & 8)
7216
7247
  report(parser, 71);
7217
- argument = parseMemberOrUpdateExpression(parser, context, privateScope, argument, inGroup, 0, tokenIndex, tokenLine, tokenColumn);
7248
+ argument = parseMemberOrUpdateExpression(parser, context, privateScope, argument, inGroup, 0, tokenStart);
7218
7249
  destructible |= parser.assignable & 2 ? 16 : 0;
7219
7250
  if ((parser.getToken() & 4194304) === 4194304) {
7220
7251
  if (parser.getToken() !== 1077936155)
7221
7252
  destructible |= 16;
7222
- argument = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenIndex, tokenLine, tokenColumn, argument);
7253
+ argument = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, argument);
7223
7254
  }
7224
7255
  else {
7225
7256
  if ((parser.getToken() & 8388608) === 8388608) {
7226
- argument = parseBinaryExpression(parser, context, privateScope, 1, tokenIndex, tokenLine, tokenColumn, 4, token, argument);
7257
+ argument = parseBinaryExpression(parser, context, privateScope, 1, tokenStart, 4, token, argument);
7227
7258
  }
7228
7259
  if (consumeOpt(parser, context | 8192, 22)) {
7229
- argument = parseConditionalExpression(parser, context, privateScope, argument, tokenIndex, tokenLine, tokenColumn);
7260
+ argument = parseConditionalExpression(parser, context, privateScope, argument, tokenStart);
7230
7261
  }
7231
7262
  destructible |=
7232
7263
  parser.assignable & 2
@@ -7243,13 +7274,13 @@ function parseSpreadOrRestElement(parser, context, scope, privateScope, closingT
7243
7274
  }
7244
7275
  else {
7245
7276
  destructible |= 32;
7246
- argument = parseLeftHandSideExpression(parser, context, privateScope, 1, inGroup, 1, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
7247
- const { tokenIndex, tokenLine, tokenColumn } = parser;
7277
+ argument = parseLeftHandSideExpression(parser, context, privateScope, 1, inGroup, 1);
7278
+ const { tokenStart } = parser;
7248
7279
  const token = parser.getToken();
7249
7280
  if (token === 1077936155) {
7250
7281
  if (parser.assignable & 2)
7251
7282
  report(parser, 26);
7252
- argument = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenIndex, tokenLine, tokenColumn, argument);
7283
+ argument = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, argument);
7253
7284
  destructible |= 16;
7254
7285
  }
7255
7286
  else {
@@ -7257,7 +7288,7 @@ function parseSpreadOrRestElement(parser, context, scope, privateScope, closingT
7257
7288
  destructible |= 16;
7258
7289
  }
7259
7290
  else if (token !== closingToken) {
7260
- argument = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenIndex, tokenLine, tokenColumn, argument);
7291
+ argument = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, argument);
7261
7292
  }
7262
7293
  destructible |=
7263
7294
  parser.assignable & 1 ? 32 : 16;
@@ -7265,10 +7296,10 @@ function parseSpreadOrRestElement(parser, context, scope, privateScope, closingT
7265
7296
  parser.destructible = destructible;
7266
7297
  if (parser.getToken() !== closingToken && parser.getToken() !== 18)
7267
7298
  report(parser, 161);
7268
- return finishNode(parser, context, start, line, column, {
7299
+ return parser.finishNode({
7269
7300
  type: isPattern ? 'RestElement' : 'SpreadElement',
7270
7301
  argument: argument,
7271
- });
7302
+ }, start);
7272
7303
  }
7273
7304
  if (parser.getToken() !== closingToken) {
7274
7305
  if (kind & 1)
@@ -7277,8 +7308,8 @@ function parseSpreadOrRestElement(parser, context, scope, privateScope, closingT
7277
7308
  if (destructible & 16)
7278
7309
  report(parser, 26);
7279
7310
  reinterpretToPattern(parser, argument);
7280
- const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
7281
- argument = finishNode(parser, context, tokenIndex, tokenLine, tokenColumn, isPattern
7311
+ const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);
7312
+ argument = parser.finishNode(isPattern
7282
7313
  ? {
7283
7314
  type: 'AssignmentPattern',
7284
7315
  left: argument,
@@ -7289,7 +7320,7 @@ function parseSpreadOrRestElement(parser, context, scope, privateScope, closingT
7289
7320
  left: argument,
7290
7321
  operator: '=',
7291
7322
  right,
7292
- });
7323
+ }, tokenStart);
7293
7324
  destructible = 16;
7294
7325
  }
7295
7326
  else {
@@ -7297,12 +7328,12 @@ function parseSpreadOrRestElement(parser, context, scope, privateScope, closingT
7297
7328
  }
7298
7329
  }
7299
7330
  parser.destructible = destructible;
7300
- return finishNode(parser, context, start, line, column, {
7331
+ return parser.finishNode({
7301
7332
  type: isPattern ? 'RestElement' : 'SpreadElement',
7302
7333
  argument: argument,
7303
- });
7334
+ }, start);
7304
7335
  }
7305
- function parseMethodDefinition(parser, context, privateScope, kind, inGroup, start, line, column) {
7336
+ function parseMethodDefinition(parser, context, privateScope, kind, inGroup, start) {
7306
7337
  const modifierFlags = 262144 |
7307
7338
  524288 |
7308
7339
  2097152 |
@@ -7322,17 +7353,17 @@ function parseMethodDefinition(parser, context, privateScope, kind, inGroup, sta
7322
7353
  const body = parseFunctionBody(parser, (context & -301992961) |
7323
7354
  8388608 |
7324
7355
  1048576, scope, privateScope, 0, void 0, scope?.parent?.scopeError);
7325
- return finishNode(parser, context, start, line, column, {
7356
+ return parser.finishNode({
7326
7357
  type: 'FunctionExpression',
7327
7358
  params,
7328
7359
  body,
7329
7360
  async: (kind & 16) > 0,
7330
7361
  generator: (kind & 8) > 0,
7331
7362
  id: null,
7332
- });
7363
+ }, start);
7333
7364
  }
7334
- function parseObjectLiteral(parser, context, privateScope, skipInitializer, inGroup, start, line, column) {
7335
- const expr = parseObjectLiteralOrPattern(parser, context, void 0, privateScope, skipInitializer, inGroup, 0, 2, 0, start, line, column);
7365
+ function parseObjectLiteral(parser, context, privateScope, skipInitializer, inGroup) {
7366
+ const expr = parseObjectLiteralOrPattern(parser, context, void 0, privateScope, skipInitializer, inGroup, 0, 2, 0);
7336
7367
  if (parser.destructible & 64) {
7337
7368
  report(parser, 63);
7338
7369
  }
@@ -7341,17 +7372,18 @@ function parseObjectLiteral(parser, context, privateScope, skipInitializer, inGr
7341
7372
  }
7342
7373
  return expr;
7343
7374
  }
7344
- function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipInitializer, inGroup, isPattern, kind, origin, start, line, column) {
7375
+ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipInitializer, inGroup, isPattern, kind, origin) {
7376
+ const { tokenStart: start } = parser;
7345
7377
  nextToken(parser, context);
7346
7378
  const properties = [];
7347
7379
  let destructible = 0;
7348
7380
  let prototypeCount = 0;
7349
7381
  context = (context | 33554432) ^ 33554432;
7350
7382
  while (parser.getToken() !== 1074790415) {
7351
- const { tokenValue, tokenLine, tokenColumn, tokenIndex } = parser;
7383
+ const { tokenValue, tokenStart } = parser;
7352
7384
  const token = parser.getToken();
7353
7385
  if (token === 14) {
7354
- properties.push(parseSpreadOrRestElement(parser, context, scope, privateScope, 1074790415, kind, origin, 0, inGroup, isPattern, tokenIndex, tokenLine, tokenColumn));
7386
+ properties.push(parseSpreadOrRestElement(parser, context, scope, privateScope, 1074790415, kind, origin, 0, inGroup, isPattern));
7355
7387
  }
7356
7388
  else {
7357
7389
  let state = 0;
@@ -7377,18 +7409,18 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7377
7409
  addVarOrBlock(parser, context, scope, tokenValue, kind, origin);
7378
7410
  if (consumeOpt(parser, context | 8192, 1077936155)) {
7379
7411
  destructible |= 8;
7380
- const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
7412
+ const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);
7381
7413
  destructible |=
7382
7414
  parser.destructible & 256
7383
7415
  ? 256
7384
7416
  : 0 | (parser.destructible & 128)
7385
7417
  ? 128
7386
7418
  : 0;
7387
- value = finishNode(parser, context, tokenIndex, tokenLine, tokenColumn, {
7419
+ value = parser.finishNode({
7388
7420
  type: 'AssignmentPattern',
7389
7421
  left: context & 134217728 ? Object.assign({}, key) : key,
7390
7422
  right,
7391
- });
7423
+ }, tokenStart);
7392
7424
  }
7393
7425
  else {
7394
7426
  destructible |=
@@ -7398,15 +7430,15 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7398
7430
  }
7399
7431
  }
7400
7432
  else if (consumeOpt(parser, context | 8192, 21)) {
7401
- const { tokenIndex, tokenLine, tokenColumn } = parser;
7433
+ const { tokenStart } = parser;
7402
7434
  if (tokenValue === '__proto__')
7403
7435
  prototypeCount++;
7404
7436
  if (parser.getToken() & 143360) {
7405
7437
  const tokenAfterColon = parser.getToken();
7406
7438
  const valueAfterColon = parser.tokenValue;
7407
- value = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, inGroup, 1, tokenIndex, tokenLine, tokenColumn);
7439
+ value = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, inGroup, 1, tokenStart);
7408
7440
  const token = parser.getToken();
7409
- value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenIndex, tokenLine, tokenColumn);
7441
+ value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart);
7410
7442
  if (parser.getToken() === 18 || parser.getToken() === 1074790415) {
7411
7443
  if (token === 1077936155 || token === 1074790415 || token === 18) {
7412
7444
  destructible |= parser.destructible & 128 ? 128 : 0;
@@ -7434,23 +7466,23 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7434
7466
  else if (scope) {
7435
7467
  addVarOrBlock(parser, context, scope, valueAfterColon, kind, origin);
7436
7468
  }
7437
- value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenIndex, tokenLine, tokenColumn, value);
7469
+ value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, value);
7438
7470
  }
7439
7471
  else {
7440
7472
  destructible |= 16;
7441
7473
  if ((parser.getToken() & 8388608) === 8388608) {
7442
- value = parseBinaryExpression(parser, context, privateScope, 1, tokenIndex, tokenLine, tokenColumn, 4, token, value);
7474
+ value = parseBinaryExpression(parser, context, privateScope, 1, tokenStart, 4, token, value);
7443
7475
  }
7444
7476
  if (consumeOpt(parser, context | 8192, 22)) {
7445
- value = parseConditionalExpression(parser, context, privateScope, value, tokenIndex, tokenLine, tokenColumn);
7477
+ value = parseConditionalExpression(parser, context, privateScope, value, tokenStart);
7446
7478
  }
7447
7479
  }
7448
7480
  }
7449
7481
  else if ((parser.getToken() & 2097152) === 2097152) {
7450
7482
  value =
7451
7483
  parser.getToken() === 69271571
7452
- ? parseArrayExpressionOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin, tokenIndex, tokenLine, tokenColumn)
7453
- : parseObjectLiteralOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin, tokenIndex, tokenLine, tokenColumn);
7484
+ ? parseArrayExpressionOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin)
7485
+ : parseObjectLiteralOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin);
7454
7486
  destructible = parser.destructible;
7455
7487
  parser.assignable =
7456
7488
  destructible & 16 ? 2 : 1;
@@ -7462,17 +7494,17 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7462
7494
  report(parser, 71);
7463
7495
  }
7464
7496
  else {
7465
- value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenIndex, tokenLine, tokenColumn);
7497
+ value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart);
7466
7498
  destructible = parser.assignable & 2 ? 16 : 0;
7467
7499
  if ((parser.getToken() & 4194304) === 4194304) {
7468
- value = parseAssignmentExpressionOrPattern(parser, context, privateScope, inGroup, isPattern, tokenIndex, tokenLine, tokenColumn, value);
7500
+ value = parseAssignmentExpressionOrPattern(parser, context, privateScope, inGroup, isPattern, tokenStart, value);
7469
7501
  }
7470
7502
  else {
7471
7503
  if ((parser.getToken() & 8388608) === 8388608) {
7472
- value = parseBinaryExpression(parser, context, privateScope, 1, tokenIndex, tokenLine, tokenColumn, 4, token, value);
7504
+ value = parseBinaryExpression(parser, context, privateScope, 1, tokenStart, 4, token, value);
7473
7505
  }
7474
7506
  if (consumeOpt(parser, context | 8192, 22)) {
7475
- value = parseConditionalExpression(parser, context, privateScope, value, tokenIndex, tokenLine, tokenColumn);
7507
+ value = parseConditionalExpression(parser, context, privateScope, value, tokenStart);
7476
7508
  }
7477
7509
  destructible |=
7478
7510
  parser.assignable & 2
@@ -7482,7 +7514,7 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7482
7514
  }
7483
7515
  }
7484
7516
  else {
7485
- value = parseLeftHandSideExpression(parser, context, privateScope, 1, inGroup, 1, tokenIndex, tokenLine, tokenColumn);
7517
+ value = parseLeftHandSideExpression(parser, context, privateScope, 1, inGroup, 1);
7486
7518
  destructible |=
7487
7519
  parser.assignable & 1
7488
7520
  ? 32
@@ -7492,12 +7524,12 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7492
7524
  destructible |= 16;
7493
7525
  }
7494
7526
  else {
7495
- value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenIndex, tokenLine, tokenColumn);
7527
+ value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart);
7496
7528
  destructible = parser.assignable & 2 ? 16 : 0;
7497
7529
  if (parser.getToken() !== 18 && token !== 1074790415) {
7498
7530
  if (parser.getToken() !== 1077936155)
7499
7531
  destructible |= 16;
7500
- value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenIndex, tokenLine, tokenColumn, value);
7532
+ value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, value);
7501
7533
  }
7502
7534
  }
7503
7535
  }
@@ -7514,7 +7546,7 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7514
7546
  : 1) | 2;
7515
7547
  key = parseComputedPropertyName(parser, context, privateScope, inGroup);
7516
7548
  destructible |= parser.assignable;
7517
- value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
7549
+ value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);
7518
7550
  }
7519
7551
  else if (parser.getToken() & 143360) {
7520
7552
  destructible |= 16;
@@ -7535,12 +7567,12 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7535
7567
  report(parser, 0);
7536
7568
  }
7537
7569
  key = parseIdentifier(parser, context);
7538
- value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
7570
+ value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);
7539
7571
  }
7540
7572
  else if (parser.getToken() === 67174411) {
7541
7573
  destructible |= 16;
7542
7574
  state |= 1;
7543
- value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
7575
+ value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);
7544
7576
  }
7545
7577
  else if (parser.getToken() === 8391476) {
7546
7578
  destructible |= 16;
@@ -7570,7 +7602,7 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7570
7602
  else {
7571
7603
  report(parser, 30, KeywordDescTable[parser.getToken() & 255]);
7572
7604
  }
7573
- value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
7605
+ value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);
7574
7606
  }
7575
7607
  else if ((parser.getToken() & 134217728) === 134217728) {
7576
7608
  if (token === 209005)
@@ -7583,7 +7615,7 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7583
7615
  : 1;
7584
7616
  destructible |= 16;
7585
7617
  key = parseLiteral(parser, context);
7586
- value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
7618
+ value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);
7587
7619
  }
7588
7620
  else {
7589
7621
  report(parser, 133);
@@ -7593,14 +7625,14 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7593
7625
  key = parseLiteral(parser, context);
7594
7626
  if (parser.getToken() === 21) {
7595
7627
  consume(parser, context | 8192, 21);
7596
- const { tokenIndex, tokenLine, tokenColumn } = parser;
7628
+ const { tokenStart } = parser;
7597
7629
  if (tokenValue === '__proto__')
7598
7630
  prototypeCount++;
7599
7631
  if (parser.getToken() & 143360) {
7600
- value = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, inGroup, 1, tokenIndex, tokenLine, tokenColumn);
7632
+ value = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, inGroup, 1, tokenStart);
7601
7633
  const { tokenValue: valueAfterColon } = parser;
7602
7634
  const token = parser.getToken();
7603
- value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenIndex, tokenLine, tokenColumn);
7635
+ value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart);
7604
7636
  if (parser.getToken() === 18 || parser.getToken() === 1074790415) {
7605
7637
  if (token === 1077936155 || token === 1074790415 || token === 18) {
7606
7638
  if (parser.assignable & 2) {
@@ -7620,18 +7652,18 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7620
7652
  else if (parser.getToken() === 1077936155) {
7621
7653
  if (parser.assignable & 2)
7622
7654
  destructible |= 16;
7623
- value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenIndex, tokenLine, tokenColumn, value);
7655
+ value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, value);
7624
7656
  }
7625
7657
  else {
7626
7658
  destructible |= 16;
7627
- value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenIndex, tokenLine, tokenColumn, value);
7659
+ value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, value);
7628
7660
  }
7629
7661
  }
7630
7662
  else if ((parser.getToken() & 2097152) === 2097152) {
7631
7663
  value =
7632
7664
  parser.getToken() === 69271571
7633
- ? parseArrayExpressionOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin, tokenIndex, tokenLine, tokenColumn)
7634
- : parseObjectLiteralOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin, tokenIndex, tokenLine, tokenColumn);
7665
+ ? parseArrayExpressionOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin)
7666
+ : parseObjectLiteralOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin);
7635
7667
  destructible = parser.destructible;
7636
7668
  parser.assignable =
7637
7669
  destructible & 16 ? 2 : 1;
@@ -7641,17 +7673,17 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7641
7673
  }
7642
7674
  }
7643
7675
  else if ((parser.destructible & 8) !== 8) {
7644
- value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenIndex, tokenLine, tokenColumn);
7676
+ value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart);
7645
7677
  destructible = parser.assignable & 2 ? 16 : 0;
7646
7678
  if ((parser.getToken() & 4194304) === 4194304) {
7647
- value = parseAssignmentExpressionOrPattern(parser, context, privateScope, inGroup, isPattern, tokenIndex, tokenLine, tokenColumn, value);
7679
+ value = parseAssignmentExpressionOrPattern(parser, context, privateScope, inGroup, isPattern, tokenStart, value);
7648
7680
  }
7649
7681
  else {
7650
7682
  if ((parser.getToken() & 8388608) === 8388608) {
7651
- value = parseBinaryExpression(parser, context, privateScope, 1, tokenIndex, tokenLine, tokenColumn, 4, token, value);
7683
+ value = parseBinaryExpression(parser, context, privateScope, 1, tokenStart, 4, token, value);
7652
7684
  }
7653
7685
  if (consumeOpt(parser, context | 8192, 22)) {
7654
- value = parseConditionalExpression(parser, context, privateScope, value, tokenIndex, tokenLine, tokenColumn);
7686
+ value = parseConditionalExpression(parser, context, privateScope, value, tokenStart);
7655
7687
  }
7656
7688
  destructible |=
7657
7689
  parser.assignable & 2
@@ -7661,7 +7693,7 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7661
7693
  }
7662
7694
  }
7663
7695
  else {
7664
- value = parseLeftHandSideExpression(parser, context, privateScope, 1, 0, 1, tokenIndex, tokenLine, tokenColumn);
7696
+ value = parseLeftHandSideExpression(parser, context, privateScope, 1, 0, 1);
7665
7697
  destructible |=
7666
7698
  parser.assignable & 1
7667
7699
  ? 32
@@ -7672,19 +7704,19 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7672
7704
  }
7673
7705
  }
7674
7706
  else {
7675
- value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenIndex, tokenLine, tokenColumn);
7707
+ value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart);
7676
7708
  destructible = parser.assignable & 1 ? 0 : 16;
7677
7709
  if (parser.getToken() !== 18 && parser.getToken() !== 1074790415) {
7678
7710
  if (parser.getToken() !== 1077936155)
7679
7711
  destructible |= 16;
7680
- value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenIndex, tokenLine, tokenColumn, value);
7712
+ value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, value);
7681
7713
  }
7682
7714
  }
7683
7715
  }
7684
7716
  }
7685
7717
  else if (parser.getToken() === 67174411) {
7686
7718
  state |= 1;
7687
- value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
7719
+ value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);
7688
7720
  destructible = parser.assignable | 16;
7689
7721
  }
7690
7722
  else {
@@ -7697,12 +7729,12 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7697
7729
  state |= 2;
7698
7730
  if (parser.getToken() === 21) {
7699
7731
  nextToken(parser, context | 8192);
7700
- const { tokenIndex, tokenLine, tokenColumn, tokenValue } = parser;
7732
+ const { tokenStart, tokenValue } = parser;
7701
7733
  const tokenAfterColon = parser.getToken();
7702
7734
  if (parser.getToken() & 143360) {
7703
- value = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, inGroup, 1, tokenIndex, tokenLine, tokenColumn);
7735
+ value = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, inGroup, 1, tokenStart);
7704
7736
  const token = parser.getToken();
7705
- value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenIndex, tokenLine, tokenColumn);
7737
+ value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart);
7706
7738
  if ((parser.getToken() & 4194304) === 4194304) {
7707
7739
  destructible |=
7708
7740
  parser.assignable & 2
@@ -7710,7 +7742,7 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7710
7742
  : token === 1077936155
7711
7743
  ? 0
7712
7744
  : 32;
7713
- value = parseAssignmentExpressionOrPattern(parser, context, privateScope, inGroup, isPattern, tokenIndex, tokenLine, tokenColumn, value);
7745
+ value = parseAssignmentExpressionOrPattern(parser, context, privateScope, inGroup, isPattern, tokenStart, value);
7714
7746
  }
7715
7747
  else if (parser.getToken() === 18 || parser.getToken() === 1074790415) {
7716
7748
  if (token === 1077936155 || token === 1074790415 || token === 18) {
@@ -7730,14 +7762,14 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7730
7762
  }
7731
7763
  else {
7732
7764
  destructible |= 16;
7733
- value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenIndex, tokenLine, tokenColumn, value);
7765
+ value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, value);
7734
7766
  }
7735
7767
  }
7736
7768
  else if ((parser.getToken() & 2097152) === 2097152) {
7737
7769
  value =
7738
7770
  parser.getToken() === 69271571
7739
- ? parseArrayExpressionOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin, tokenIndex, tokenLine, tokenColumn)
7740
- : parseObjectLiteralOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin, tokenIndex, tokenLine, tokenColumn);
7771
+ ? parseArrayExpressionOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin)
7772
+ : parseObjectLiteralOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin);
7741
7773
  destructible = parser.destructible;
7742
7774
  parser.assignable =
7743
7775
  destructible & 16 ? 2 : 1;
@@ -7749,20 +7781,20 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7749
7781
  report(parser, 62);
7750
7782
  }
7751
7783
  else {
7752
- value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenIndex, tokenLine, tokenColumn);
7784
+ value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart);
7753
7785
  destructible =
7754
7786
  parser.assignable & 2 ? destructible | 16 : 0;
7755
7787
  if ((parser.getToken() & 4194304) === 4194304) {
7756
7788
  if (parser.getToken() !== 1077936155)
7757
7789
  destructible |= 16;
7758
- value = parseAssignmentExpressionOrPattern(parser, context, privateScope, inGroup, isPattern, tokenIndex, tokenLine, tokenColumn, value);
7790
+ value = parseAssignmentExpressionOrPattern(parser, context, privateScope, inGroup, isPattern, tokenStart, value);
7759
7791
  }
7760
7792
  else {
7761
7793
  if ((parser.getToken() & 8388608) === 8388608) {
7762
- value = parseBinaryExpression(parser, context, privateScope, 1, tokenIndex, tokenLine, tokenColumn, 4, token, value);
7794
+ value = parseBinaryExpression(parser, context, privateScope, 1, tokenStart, 4, token, value);
7763
7795
  }
7764
7796
  if (consumeOpt(parser, context | 8192, 22)) {
7765
- value = parseConditionalExpression(parser, context, privateScope, value, tokenIndex, tokenLine, tokenColumn);
7797
+ value = parseConditionalExpression(parser, context, privateScope, value, tokenStart);
7766
7798
  }
7767
7799
  destructible |=
7768
7800
  parser.assignable & 2
@@ -7772,7 +7804,7 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7772
7804
  }
7773
7805
  }
7774
7806
  else {
7775
- value = parseLeftHandSideExpression(parser, context, privateScope, 1, 0, 1, tokenIndex, tokenLine, tokenColumn);
7807
+ value = parseLeftHandSideExpression(parser, context, privateScope, 1, 0, 1);
7776
7808
  destructible |=
7777
7809
  parser.assignable & 1
7778
7810
  ? 32
@@ -7782,19 +7814,19 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7782
7814
  destructible |= 16;
7783
7815
  }
7784
7816
  else {
7785
- value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenIndex, tokenLine, tokenColumn);
7817
+ value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart);
7786
7818
  destructible = parser.assignable & 1 ? 0 : 16;
7787
7819
  if (parser.getToken() !== 18 && parser.getToken() !== 1074790415) {
7788
7820
  if (parser.getToken() !== 1077936155)
7789
7821
  destructible |= 16;
7790
- value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenIndex, tokenLine, tokenColumn, value);
7822
+ value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, value);
7791
7823
  }
7792
7824
  }
7793
7825
  }
7794
7826
  }
7795
7827
  else if (parser.getToken() === 67174411) {
7796
7828
  state |= 1;
7797
- value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenIndex, tokenLine, tokenColumn);
7829
+ value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);
7798
7830
  destructible = 16;
7799
7831
  }
7800
7832
  else {
@@ -7810,10 +7842,10 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7810
7842
  state |= 1;
7811
7843
  if (parser.getToken() === 67174411) {
7812
7844
  destructible |= 16;
7813
- value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
7845
+ value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);
7814
7846
  }
7815
7847
  else {
7816
- reportMessageAt(parser.tokenIndex, parser.tokenLine, parser.tokenColumn, parser.index, parser.line, parser.column, token === 209005
7848
+ reportMessageAt(parser.tokenStart, parser.currentLocation, token === 209005
7817
7849
  ? 46
7818
7850
  : token === 209008 || parser.getToken() === 209009
7819
7851
  ? 45
@@ -7824,13 +7856,13 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7824
7856
  destructible |= 16;
7825
7857
  key = parseLiteral(parser, context);
7826
7858
  state |= 1;
7827
- value = parseMethodDefinition(parser, context, privateScope, state, inGroup, tokenIndex, tokenLine, tokenColumn);
7859
+ value = parseMethodDefinition(parser, context, privateScope, state, inGroup, tokenStart);
7828
7860
  }
7829
7861
  else if (parser.getToken() === 69271571) {
7830
7862
  destructible |= 16;
7831
7863
  state |= 2 | 1;
7832
7864
  key = parseComputedPropertyName(parser, context, privateScope, inGroup);
7833
- value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
7865
+ value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);
7834
7866
  }
7835
7867
  else {
7836
7868
  report(parser, 126);
@@ -7841,7 +7873,7 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7841
7873
  }
7842
7874
  destructible |= parser.destructible & 128 ? 128 : 0;
7843
7875
  parser.destructible = destructible;
7844
- properties.push(finishNode(parser, context, tokenIndex, tokenLine, tokenColumn, {
7876
+ properties.push(parser.finishNode({
7845
7877
  type: 'Property',
7846
7878
  key: key,
7847
7879
  value,
@@ -7849,7 +7881,7 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7849
7881
  computed: (state & 2) > 0,
7850
7882
  method: (state & 1) > 0,
7851
7883
  shorthand: (state & 4) > 0,
7852
- }));
7884
+ }, tokenStart));
7853
7885
  }
7854
7886
  destructible |= parser.destructible;
7855
7887
  if (parser.getToken() !== 18)
@@ -7859,12 +7891,12 @@ function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipI
7859
7891
  consume(parser, context, 1074790415);
7860
7892
  if (prototypeCount > 1)
7861
7893
  destructible |= 64;
7862
- const node = finishNode(parser, context, start, line, column, {
7894
+ const node = parser.finishNode({
7863
7895
  type: isPattern ? 'ObjectPattern' : 'ObjectExpression',
7864
7896
  properties,
7865
- });
7897
+ }, start);
7866
7898
  if (!skipInitializer && parser.getToken() & 4194304) {
7867
- return parseArrayOrObjectAssignmentPattern(parser, context, privateScope, destructible, inGroup, isPattern, start, line, column, node);
7899
+ return parseArrayOrObjectAssignmentPattern(parser, context, privateScope, destructible, inGroup, isPattern, start, node);
7868
7900
  }
7869
7901
  parser.destructible = destructible;
7870
7902
  return node;
@@ -7891,7 +7923,7 @@ function parseMethodFormals(parser, context, scope, privateScope, kind, type, in
7891
7923
  let isNonSimpleParameterList = 0;
7892
7924
  while (parser.getToken() !== 18) {
7893
7925
  let left = null;
7894
- const { tokenIndex, tokenLine, tokenColumn } = parser;
7926
+ const { tokenStart } = parser;
7895
7927
  if (parser.getToken() & 143360) {
7896
7928
  if ((context & 256) === 0) {
7897
7929
  if ((parser.getToken() & 36864) === 36864) {
@@ -7901,17 +7933,17 @@ function parseMethodFormals(parser, context, scope, privateScope, kind, type, in
7901
7933
  parser.flags |= 512;
7902
7934
  }
7903
7935
  }
7904
- left = parseAndClassifyIdentifier(parser, context, scope, kind | 1, 0, tokenIndex, tokenLine, tokenColumn);
7936
+ left = parseAndClassifyIdentifier(parser, context, scope, kind | 1, 0);
7905
7937
  }
7906
7938
  else {
7907
7939
  if (parser.getToken() === 2162700) {
7908
- left = parseObjectLiteralOrPattern(parser, context, scope, privateScope, 1, inGroup, 1, type, 0, tokenIndex, tokenLine, tokenColumn);
7940
+ left = parseObjectLiteralOrPattern(parser, context, scope, privateScope, 1, inGroup, 1, type, 0);
7909
7941
  }
7910
7942
  else if (parser.getToken() === 69271571) {
7911
- left = parseArrayExpressionOrPattern(parser, context, scope, privateScope, 1, inGroup, 1, type, 0, tokenIndex, tokenLine, tokenColumn);
7943
+ left = parseArrayExpressionOrPattern(parser, context, scope, privateScope, 1, inGroup, 1, type, 0);
7912
7944
  }
7913
7945
  else if (parser.getToken() === 14) {
7914
- left = parseSpreadOrRestElement(parser, context, scope, privateScope, 16, type, 0, 0, inGroup, 1, tokenIndex, tokenLine, tokenColumn);
7946
+ left = parseSpreadOrRestElement(parser, context, scope, privateScope, 16, type, 0, 0, inGroup, 1);
7915
7947
  }
7916
7948
  isNonSimpleParameterList = 1;
7917
7949
  if (parser.destructible & (32 | 16))
@@ -7920,12 +7952,12 @@ function parseMethodFormals(parser, context, scope, privateScope, kind, type, in
7920
7952
  if (parser.getToken() === 1077936155) {
7921
7953
  nextToken(parser, context | 8192);
7922
7954
  isNonSimpleParameterList = 1;
7923
- const right = parseExpression(parser, context, privateScope, 1, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
7924
- left = finishNode(parser, context, tokenIndex, tokenLine, tokenColumn, {
7955
+ const right = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);
7956
+ left = parser.finishNode({
7925
7957
  type: 'AssignmentPattern',
7926
7958
  left: left,
7927
7959
  right,
7928
- });
7960
+ }, tokenStart);
7929
7961
  }
7930
7962
  setterArgs++;
7931
7963
  params.push(left);
@@ -7947,18 +7979,18 @@ function parseMethodFormals(parser, context, scope, privateScope, kind, type, in
7947
7979
  }
7948
7980
  function parseComputedPropertyName(parser, context, privateScope, inGroup) {
7949
7981
  nextToken(parser, context | 8192);
7950
- const key = parseExpression(parser, (context | 33554432) ^ 33554432, privateScope, 1, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
7982
+ const key = parseExpression(parser, (context | 33554432) ^ 33554432, privateScope, 1, inGroup, parser.tokenStart);
7951
7983
  consume(parser, context, 20);
7952
7984
  return key;
7953
7985
  }
7954
- function parseParenthesizedExpression(parser, context, privateScope, canAssign, kind, origin, start, line, column) {
7986
+ function parseParenthesizedExpression(parser, context, privateScope, canAssign, kind, origin, start) {
7955
7987
  parser.flags = (parser.flags | 128) ^ 128;
7956
- const { tokenIndex: piStart, tokenLine: plStart, tokenColumn: pcStart } = parser;
7988
+ const parenthesesStart = parser.tokenStart;
7957
7989
  nextToken(parser, context | 8192 | 67108864);
7958
7990
  const scope = context & 16 ? addChildScope(createScope(), 1024) : void 0;
7959
7991
  context = (context | 33554432) ^ 33554432;
7960
7992
  if (consumeOpt(parser, context, 16)) {
7961
- return parseParenthesizedArrow(parser, context, scope, privateScope, [], canAssign, 0, start, line, column);
7993
+ return parseParenthesizedArrow(parser, context, scope, privateScope, [], canAssign, 0, start);
7962
7994
  }
7963
7995
  let destructible = 0;
7964
7996
  parser.destructible &= -385;
@@ -7967,10 +7999,10 @@ function parseParenthesizedExpression(parser, context, privateScope, canAssign,
7967
7999
  let isSequence = 0;
7968
8000
  let isNonSimpleParameterList = 0;
7969
8001
  let hasStrictReserved = 0;
7970
- const { tokenIndex: iStart, tokenLine: lStart, tokenColumn: cStart } = parser;
8002
+ const tokenAfterParenthesesStart = parser.tokenStart;
7971
8003
  parser.assignable = 1;
7972
8004
  while (parser.getToken() !== 16) {
7973
- const { tokenIndex, tokenLine, tokenColumn } = parser;
8005
+ const { tokenStart } = parser;
7974
8006
  const token = parser.getToken();
7975
8007
  if (token & 143360) {
7976
8008
  if (scope)
@@ -7981,7 +8013,7 @@ function parseParenthesizedExpression(parser, context, privateScope, canAssign,
7981
8013
  else if ((token & 36864) === 36864) {
7982
8014
  hasStrictReserved = 1;
7983
8015
  }
7984
- expr = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, 1, 1, tokenIndex, tokenLine, tokenColumn);
8016
+ expr = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, 1, 1, tokenStart);
7985
8017
  if (parser.getToken() === 16 || parser.getToken() === 18) {
7986
8018
  if (parser.assignable & 2) {
7987
8019
  destructible |= 16;
@@ -7995,32 +8027,32 @@ function parseParenthesizedExpression(parser, context, privateScope, canAssign,
7995
8027
  else {
7996
8028
  destructible |= 16;
7997
8029
  }
7998
- expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 1, 0, tokenIndex, tokenLine, tokenColumn);
8030
+ expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 1, 0, tokenStart);
7999
8031
  if (parser.getToken() !== 16 && parser.getToken() !== 18) {
8000
- expr = parseAssignmentExpression(parser, context, privateScope, 1, 0, tokenIndex, tokenLine, tokenColumn, expr);
8032
+ expr = parseAssignmentExpression(parser, context, privateScope, 1, 0, tokenStart, expr);
8001
8033
  }
8002
8034
  }
8003
8035
  }
8004
8036
  else if ((token & 2097152) === 2097152) {
8005
8037
  expr =
8006
8038
  token === 2162700
8007
- ? parseObjectLiteralOrPattern(parser, context | 67108864, scope, privateScope, 0, 1, 0, kind, origin, tokenIndex, tokenLine, tokenColumn)
8008
- : parseArrayExpressionOrPattern(parser, context | 67108864, scope, privateScope, 0, 1, 0, kind, origin, tokenIndex, tokenLine, tokenColumn);
8039
+ ? parseObjectLiteralOrPattern(parser, context | 67108864, scope, privateScope, 0, 1, 0, kind, origin)
8040
+ : parseArrayExpressionOrPattern(parser, context | 67108864, scope, privateScope, 0, 1, 0, kind, origin);
8009
8041
  destructible |= parser.destructible;
8010
8042
  isNonSimpleParameterList = 1;
8011
8043
  parser.assignable = 2;
8012
8044
  if (parser.getToken() !== 16 && parser.getToken() !== 18) {
8013
8045
  if (destructible & 8)
8014
8046
  report(parser, 122);
8015
- expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, tokenIndex, tokenLine, tokenColumn);
8047
+ expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, tokenStart);
8016
8048
  destructible |= 16;
8017
8049
  if (parser.getToken() !== 16 && parser.getToken() !== 18) {
8018
- expr = parseAssignmentExpression(parser, context, privateScope, 0, 0, tokenIndex, tokenLine, tokenColumn, expr);
8050
+ expr = parseAssignmentExpression(parser, context, privateScope, 0, 0, tokenStart, expr);
8019
8051
  }
8020
8052
  }
8021
8053
  }
8022
8054
  else if (token === 14) {
8023
- expr = parseSpreadOrRestElement(parser, context, scope, privateScope, 16, kind, origin, 0, 1, 0, tokenIndex, tokenLine, tokenColumn);
8055
+ expr = parseSpreadOrRestElement(parser, context, scope, privateScope, 16, kind, origin, 0, 1, 0);
8024
8056
  if (parser.destructible & 16)
8025
8057
  report(parser, 74);
8026
8058
  isNonSimpleParameterList = 1;
@@ -8032,7 +8064,7 @@ function parseParenthesizedExpression(parser, context, privateScope, canAssign,
8032
8064
  }
8033
8065
  else {
8034
8066
  destructible |= 16;
8035
- expr = parseExpression(parser, context, privateScope, 1, 1, tokenIndex, tokenLine, tokenColumn);
8067
+ expr = parseExpression(parser, context, privateScope, 1, 1, tokenStart);
8036
8068
  if (isSequence && (parser.getToken() === 16 || parser.getToken() === 18)) {
8037
8069
  expressions.push(expr);
8038
8070
  }
@@ -8044,21 +8076,21 @@ function parseParenthesizedExpression(parser, context, privateScope, canAssign,
8044
8076
  }
8045
8077
  if (isSequence) {
8046
8078
  while (consumeOpt(parser, context | 8192, 18)) {
8047
- expressions.push(parseExpression(parser, context, privateScope, 1, 1, parser.tokenIndex, parser.tokenLine, parser.tokenColumn));
8079
+ expressions.push(parseExpression(parser, context, privateScope, 1, 1, parser.tokenStart));
8048
8080
  }
8049
8081
  parser.assignable = 2;
8050
- expr = finishNode(parser, context, iStart, lStart, cStart, {
8082
+ expr = parser.finishNode({
8051
8083
  type: 'SequenceExpression',
8052
8084
  expressions,
8053
- });
8085
+ }, tokenAfterParenthesesStart);
8054
8086
  }
8055
8087
  consume(parser, context, 16);
8056
8088
  parser.destructible = destructible;
8057
8089
  return context & 32
8058
- ? finishNode(parser, context, piStart, plStart, pcStart, {
8090
+ ? parser.finishNode({
8059
8091
  type: 'ParenthesizedExpression',
8060
8092
  expression: expr,
8061
- })
8093
+ }, parenthesesStart)
8062
8094
  : expr;
8063
8095
  }
8064
8096
  if (isSequence && (parser.getToken() === 16 || parser.getToken() === 18)) {
@@ -8077,10 +8109,10 @@ function parseParenthesizedExpression(parser, context, privateScope, canAssign,
8077
8109
  }
8078
8110
  if (isSequence) {
8079
8111
  parser.assignable = 2;
8080
- expr = finishNode(parser, context, iStart, lStart, cStart, {
8112
+ expr = parser.finishNode({
8081
8113
  type: 'SequenceExpression',
8082
8114
  expressions,
8083
- });
8115
+ }, tokenAfterParenthesesStart);
8084
8116
  }
8085
8117
  consume(parser, context, 16);
8086
8118
  if (destructible & 16 && destructible & 8)
@@ -8103,7 +8135,7 @@ function parseParenthesizedExpression(parser, context, privateScope, canAssign,
8103
8135
  parser.flags |= 128;
8104
8136
  if (hasStrictReserved)
8105
8137
  parser.flags |= 256;
8106
- return parseParenthesizedArrow(parser, context, scope, privateScope, isSequence ? expressions : [expr], canAssign, 0, start, line, column);
8138
+ return parseParenthesizedArrow(parser, context, scope, privateScope, isSequence ? expressions : [expr], canAssign, 0, start);
8107
8139
  }
8108
8140
  if (destructible & 64) {
8109
8141
  report(parser, 63);
@@ -8113,13 +8145,14 @@ function parseParenthesizedExpression(parser, context, privateScope, canAssign,
8113
8145
  }
8114
8146
  parser.destructible = ((parser.destructible | 256) ^ 256) | destructible;
8115
8147
  return context & 32
8116
- ? finishNode(parser, context, piStart, plStart, pcStart, {
8148
+ ? parser.finishNode({
8117
8149
  type: 'ParenthesizedExpression',
8118
8150
  expression: expr,
8119
- })
8151
+ }, parenthesesStart)
8120
8152
  : expr;
8121
8153
  }
8122
- function parseIdentifierOrArrow(parser, context, privateScope, start, line, column) {
8154
+ function parseIdentifierOrArrow(parser, context, privateScope) {
8155
+ const { tokenStart: start } = parser;
8123
8156
  const { tokenValue } = parser;
8124
8157
  let isNonSimpleParameterList = 0;
8125
8158
  let hasStrictReserved = 0;
@@ -8139,27 +8172,27 @@ function parseIdentifierOrArrow(parser, context, privateScope, start, line, colu
8139
8172
  parser.flags |= 128;
8140
8173
  if (hasStrictReserved)
8141
8174
  parser.flags |= 256;
8142
- return parseArrowFunctionExpression(parser, context, scope, privateScope, [expr], 0, start, line, column);
8175
+ return parseArrowFunctionExpression(parser, context, scope, privateScope, [expr], 0, start);
8143
8176
  }
8144
8177
  return expr;
8145
8178
  }
8146
- function parseArrowFromIdentifier(parser, context, privateScope, value, expr, inNew, canAssign, isAsync, start, line, column) {
8179
+ function parseArrowFromIdentifier(parser, context, privateScope, value, expr, inNew, canAssign, isAsync, start) {
8147
8180
  if (!canAssign)
8148
8181
  report(parser, 57);
8149
8182
  if (inNew)
8150
8183
  report(parser, 51);
8151
8184
  parser.flags &= -129;
8152
8185
  const scope = context & 16 ? createArrowHeadParsingScope(parser, context, value) : void 0;
8153
- return parseArrowFunctionExpression(parser, context, scope, privateScope, [expr], isAsync, start, line, column);
8186
+ return parseArrowFunctionExpression(parser, context, scope, privateScope, [expr], isAsync, start);
8154
8187
  }
8155
- function parseParenthesizedArrow(parser, context, scope, privateScope, params, canAssign, isAsync, start, line, column) {
8188
+ function parseParenthesizedArrow(parser, context, scope, privateScope, params, canAssign, isAsync, start) {
8156
8189
  if (!canAssign)
8157
8190
  report(parser, 57);
8158
8191
  for (let i = 0; i < params.length; ++i)
8159
8192
  reinterpretToPattern(parser, params[i]);
8160
- return parseArrowFunctionExpression(parser, context, scope, privateScope, params, isAsync, start, line, column);
8193
+ return parseArrowFunctionExpression(parser, context, scope, privateScope, params, isAsync, start);
8161
8194
  }
8162
- function parseArrowFunctionExpression(parser, context, scope, privateScope, params, isAsync, start, line, column) {
8195
+ function parseArrowFunctionExpression(parser, context, scope, privateScope, params, isAsync, start) {
8163
8196
  if (parser.flags & 1)
8164
8197
  report(parser, 48);
8165
8198
  consume(parser, context | 8192, 10);
@@ -8173,7 +8206,7 @@ function parseArrowFunctionExpression(parser, context, scope, privateScope, para
8173
8206
  parser.flags =
8174
8207
  (parser.flags | 512 | 256 | 64 | 4096) ^
8175
8208
  (512 | 256 | 64 | 4096);
8176
- body = parseExpression(parser, context, privateScope, 1, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
8209
+ body = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);
8177
8210
  }
8178
8211
  else {
8179
8212
  if (scope)
@@ -8203,14 +8236,14 @@ function parseArrowFunctionExpression(parser, context, scope, privateScope, para
8203
8236
  report(parser, 125);
8204
8237
  }
8205
8238
  parser.assignable = 2;
8206
- return finishNode(parser, context, start, line, column, {
8239
+ return parser.finishNode({
8207
8240
  type: 'ArrowFunctionExpression',
8208
8241
  params,
8209
8242
  body,
8210
8243
  async: isAsync === 1,
8211
8244
  expression,
8212
8245
  generator: false,
8213
- });
8246
+ }, start);
8214
8247
  }
8215
8248
  function parseFormalParametersOrFormalList(parser, context, scope, privateScope, inGroup, kind) {
8216
8249
  consume(parser, context, 67174411);
@@ -8222,7 +8255,7 @@ function parseFormalParametersOrFormalList(parser, context, scope, privateScope,
8222
8255
  let isNonSimpleParameterList = 0;
8223
8256
  while (parser.getToken() !== 18) {
8224
8257
  let left;
8225
- const { tokenIndex, tokenLine, tokenColumn } = parser;
8258
+ const { tokenStart } = parser;
8226
8259
  const token = parser.getToken();
8227
8260
  if (token & 143360) {
8228
8261
  if ((context & 256) === 0) {
@@ -8233,17 +8266,17 @@ function parseFormalParametersOrFormalList(parser, context, scope, privateScope,
8233
8266
  parser.flags |= 512;
8234
8267
  }
8235
8268
  }
8236
- left = parseAndClassifyIdentifier(parser, context, scope, kind | 1, 0, tokenIndex, tokenLine, tokenColumn);
8269
+ left = parseAndClassifyIdentifier(parser, context, scope, kind | 1, 0);
8237
8270
  }
8238
8271
  else {
8239
8272
  if (token === 2162700) {
8240
- left = parseObjectLiteralOrPattern(parser, context, scope, privateScope, 1, inGroup, 1, kind, 0, tokenIndex, tokenLine, tokenColumn);
8273
+ left = parseObjectLiteralOrPattern(parser, context, scope, privateScope, 1, inGroup, 1, kind, 0);
8241
8274
  }
8242
8275
  else if (token === 69271571) {
8243
- left = parseArrayExpressionOrPattern(parser, context, scope, privateScope, 1, inGroup, 1, kind, 0, tokenIndex, tokenLine, tokenColumn);
8276
+ left = parseArrayExpressionOrPattern(parser, context, scope, privateScope, 1, inGroup, 1, kind, 0);
8244
8277
  }
8245
8278
  else if (token === 14) {
8246
- left = parseSpreadOrRestElement(parser, context, scope, privateScope, 16, kind, 0, 0, inGroup, 1, tokenIndex, tokenLine, tokenColumn);
8279
+ left = parseSpreadOrRestElement(parser, context, scope, privateScope, 16, kind, 0, 0, inGroup, 1);
8247
8280
  }
8248
8281
  else {
8249
8282
  report(parser, 30, KeywordDescTable[token & 255]);
@@ -8256,12 +8289,12 @@ function parseFormalParametersOrFormalList(parser, context, scope, privateScope,
8256
8289
  if (parser.getToken() === 1077936155) {
8257
8290
  nextToken(parser, context | 8192);
8258
8291
  isNonSimpleParameterList = 1;
8259
- const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
8260
- left = finishNode(parser, context, tokenIndex, tokenLine, tokenColumn, {
8292
+ const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);
8293
+ left = parser.finishNode({
8261
8294
  type: 'AssignmentPattern',
8262
8295
  left,
8263
8296
  right,
8264
- });
8297
+ }, tokenStart);
8265
8298
  }
8266
8299
  params.push(left);
8267
8300
  if (!consumeOpt(parser, context, 18))
@@ -8278,53 +8311,56 @@ function parseFormalParametersOrFormalList(parser, context, scope, privateScope,
8278
8311
  consume(parser, context, 16);
8279
8312
  return params;
8280
8313
  }
8281
- function parseMemberExpressionNoCall(parser, context, privateScope, expr, inGroup, start, line, column) {
8314
+ function parseMemberExpressionNoCall(parser, context, privateScope, expr, inGroup, start) {
8282
8315
  const token = parser.getToken();
8283
8316
  if (token & 67108864) {
8284
8317
  if (token === 67108877) {
8285
8318
  nextToken(parser, context | 67108864);
8286
8319
  parser.assignable = 1;
8287
8320
  const property = parsePropertyOrPrivatePropertyName(parser, context, privateScope);
8288
- return parseMemberExpressionNoCall(parser, context, privateScope, finishNode(parser, context, start, line, column, {
8321
+ return parseMemberExpressionNoCall(parser, context, privateScope, parser.finishNode({
8289
8322
  type: 'MemberExpression',
8290
8323
  object: expr,
8291
8324
  computed: false,
8292
8325
  property,
8293
- }), 0, start, line, column);
8326
+ optional: false,
8327
+ }, start), 0, start);
8294
8328
  }
8295
8329
  else if (token === 69271571) {
8296
8330
  nextToken(parser, context | 8192);
8297
- const { tokenIndex, tokenLine, tokenColumn } = parser;
8298
- const property = parseExpressions(parser, context, privateScope, inGroup, 1, tokenIndex, tokenLine, tokenColumn);
8331
+ const { tokenStart } = parser;
8332
+ const property = parseExpressions(parser, context, privateScope, inGroup, 1, tokenStart);
8299
8333
  consume(parser, context, 20);
8300
8334
  parser.assignable = 1;
8301
- return parseMemberExpressionNoCall(parser, context, privateScope, finishNode(parser, context, start, line, column, {
8335
+ return parseMemberExpressionNoCall(parser, context, privateScope, parser.finishNode({
8302
8336
  type: 'MemberExpression',
8303
8337
  object: expr,
8304
8338
  computed: true,
8305
8339
  property,
8306
- }), 0, start, line, column);
8340
+ optional: false,
8341
+ }, start), 0, start);
8307
8342
  }
8308
8343
  else if (token === 67174408 || token === 67174409) {
8309
8344
  parser.assignable = 2;
8310
- return parseMemberExpressionNoCall(parser, context, privateScope, finishNode(parser, context, start, line, column, {
8345
+ return parseMemberExpressionNoCall(parser, context, privateScope, parser.finishNode({
8311
8346
  type: 'TaggedTemplateExpression',
8312
8347
  tag: expr,
8313
8348
  quasi: parser.getToken() === 67174408
8314
8349
  ? parseTemplate(parser, context | 16384, privateScope)
8315
- : parseTemplateLiteral(parser, context | 16384, parser.tokenIndex, parser.tokenLine, parser.tokenColumn),
8316
- }), 0, start, line, column);
8350
+ : parseTemplateLiteral(parser, context | 16384, parser.tokenStart),
8351
+ }, start), 0, start);
8317
8352
  }
8318
8353
  }
8319
8354
  return expr;
8320
8355
  }
8321
- function parseNewExpression(parser, context, privateScope, inGroup, start, line, column) {
8356
+ function parseNewExpression(parser, context, privateScope, inGroup) {
8357
+ const { tokenStart: start } = parser;
8322
8358
  const id = parseIdentifier(parser, context | 8192);
8323
- const { tokenIndex, tokenLine, tokenColumn } = parser;
8359
+ const { tokenStart } = parser;
8324
8360
  if (consumeOpt(parser, context, 67108877)) {
8325
8361
  if (context & 16777216 && parser.getToken() === 209029) {
8326
8362
  parser.assignable = 2;
8327
- return parseMetaProperty(parser, context, id, start, line, column);
8363
+ return parseMetaProperty(parser, context, id, start);
8328
8364
  }
8329
8365
  report(parser, 94);
8330
8366
  }
@@ -8332,27 +8368,27 @@ function parseNewExpression(parser, context, privateScope, inGroup, start, line,
8332
8368
  if ((parser.getToken() & 16842752) === 16842752) {
8333
8369
  report(parser, 65, KeywordDescTable[parser.getToken() & 255]);
8334
8370
  }
8335
- const expr = parsePrimaryExpression(parser, context, privateScope, 2, 1, 0, inGroup, 1, tokenIndex, tokenLine, tokenColumn);
8371
+ const expr = parsePrimaryExpression(parser, context, privateScope, 2, 1, 0, inGroup, 1, tokenStart);
8336
8372
  context = (context | 33554432) ^ 33554432;
8337
8373
  if (parser.getToken() === 67108990)
8338
8374
  report(parser, 168);
8339
- const callee = parseMemberExpressionNoCall(parser, context, privateScope, expr, inGroup, tokenIndex, tokenLine, tokenColumn);
8375
+ const callee = parseMemberExpressionNoCall(parser, context, privateScope, expr, inGroup, tokenStart);
8340
8376
  parser.assignable = 2;
8341
- return finishNode(parser, context, start, line, column, {
8377
+ return parser.finishNode({
8342
8378
  type: 'NewExpression',
8343
8379
  callee,
8344
8380
  arguments: parser.getToken() === 67174411 ? parseArguments(parser, context, privateScope, inGroup) : [],
8345
- });
8381
+ }, start);
8346
8382
  }
8347
- function parseMetaProperty(parser, context, meta, start, line, column) {
8383
+ function parseMetaProperty(parser, context, meta, start) {
8348
8384
  const property = parseIdentifier(parser, context);
8349
- return finishNode(parser, context, start, line, column, {
8385
+ return parser.finishNode({
8350
8386
  type: 'MetaProperty',
8351
8387
  meta,
8352
8388
  property,
8353
- });
8389
+ }, start);
8354
8390
  }
8355
- function parseAsyncArrowAfterIdent(parser, context, privateScope, canAssign, start, line, column) {
8391
+ function parseAsyncArrowAfterIdent(parser, context, privateScope, canAssign, start) {
8356
8392
  if (parser.getToken() === 209006)
8357
8393
  report(parser, 31);
8358
8394
  if (context & (256 | 262144) && parser.getToken() === 241771) {
@@ -8362,9 +8398,9 @@ function parseAsyncArrowAfterIdent(parser, context, privateScope, canAssign, sta
8362
8398
  if ((parser.getToken() & 36864) === 36864) {
8363
8399
  parser.flags |= 256;
8364
8400
  }
8365
- return parseArrowFromIdentifier(parser, (context & -268435457) | 524288, privateScope, parser.tokenValue, parseIdentifier(parser, context), 0, canAssign, 1, start, line, column);
8401
+ return parseArrowFromIdentifier(parser, (context & -268435457) | 524288, privateScope, parser.tokenValue, parseIdentifier(parser, context), 0, canAssign, 1, start);
8366
8402
  }
8367
- function parseAsyncArrowOrCallExpression(parser, context, privateScope, callee, canAssign, kind, origin, flags, start, line, column) {
8403
+ function parseAsyncArrowOrCallExpression(parser, context, privateScope, callee, canAssign, kind, origin, flags, start) {
8368
8404
  nextToken(parser, context | 8192);
8369
8405
  const scope = context & 16 ? addChildScope(createScope(), 1024) : void 0;
8370
8406
  context = (context | 33554432) ^ 33554432;
@@ -8372,13 +8408,14 @@ function parseAsyncArrowOrCallExpression(parser, context, privateScope, callee,
8372
8408
  if (parser.getToken() === 10) {
8373
8409
  if (flags & 1)
8374
8410
  report(parser, 48);
8375
- return parseParenthesizedArrow(parser, context, scope, privateScope, [], canAssign, 1, start, line, column);
8411
+ return parseParenthesizedArrow(parser, context, scope, privateScope, [], canAssign, 1, start);
8376
8412
  }
8377
- return finishNode(parser, context, start, line, column, {
8413
+ return parser.finishNode({
8378
8414
  type: 'CallExpression',
8379
8415
  callee,
8380
8416
  arguments: [],
8381
- });
8417
+ optional: false,
8418
+ }, start);
8382
8419
  }
8383
8420
  let destructible = 0;
8384
8421
  let expr = null;
@@ -8388,7 +8425,7 @@ function parseAsyncArrowOrCallExpression(parser, context, privateScope, callee,
8388
8425
  (256 | 128);
8389
8426
  const params = [];
8390
8427
  while (parser.getToken() !== 16) {
8391
- const { tokenIndex, tokenLine, tokenColumn } = parser;
8428
+ const { tokenStart } = parser;
8392
8429
  const token = parser.getToken();
8393
8430
  if (token & 143360) {
8394
8431
  if (scope)
@@ -8399,7 +8436,7 @@ function parseAsyncArrowOrCallExpression(parser, context, privateScope, callee,
8399
8436
  else if ((token & 36864) === 36864) {
8400
8437
  parser.flags |= 256;
8401
8438
  }
8402
- expr = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, 1, 1, tokenIndex, tokenLine, tokenColumn);
8439
+ expr = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, 1, 1, tokenStart);
8403
8440
  if (parser.getToken() === 16 || parser.getToken() === 18) {
8404
8441
  if (parser.assignable & 2) {
8405
8442
  destructible |= 16;
@@ -8413,54 +8450,55 @@ function parseAsyncArrowOrCallExpression(parser, context, privateScope, callee,
8413
8450
  else {
8414
8451
  destructible |= 16;
8415
8452
  }
8416
- expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 1, 0, tokenIndex, tokenLine, tokenColumn);
8453
+ expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 1, 0, tokenStart);
8417
8454
  if (parser.getToken() !== 16 && parser.getToken() !== 18) {
8418
- expr = parseAssignmentExpression(parser, context, privateScope, 1, 0, tokenIndex, tokenLine, tokenColumn, expr);
8455
+ expr = parseAssignmentExpression(parser, context, privateScope, 1, 0, tokenStart, expr);
8419
8456
  }
8420
8457
  }
8421
8458
  }
8422
8459
  else if (token & 2097152) {
8423
8460
  expr =
8424
8461
  token === 2162700
8425
- ? parseObjectLiteralOrPattern(parser, context, scope, privateScope, 0, 1, 0, kind, origin, tokenIndex, tokenLine, tokenColumn)
8426
- : parseArrayExpressionOrPattern(parser, context, scope, privateScope, 0, 1, 0, kind, origin, tokenIndex, tokenLine, tokenColumn);
8462
+ ? parseObjectLiteralOrPattern(parser, context, scope, privateScope, 0, 1, 0, kind, origin)
8463
+ : parseArrayExpressionOrPattern(parser, context, scope, privateScope, 0, 1, 0, kind, origin);
8427
8464
  destructible |= parser.destructible;
8428
8465
  isNonSimpleParameterList = 1;
8429
8466
  if (parser.getToken() !== 16 && parser.getToken() !== 18) {
8430
8467
  if (destructible & 8)
8431
8468
  report(parser, 122);
8432
- expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, tokenIndex, tokenLine, tokenColumn);
8469
+ expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, tokenStart);
8433
8470
  destructible |= 16;
8434
8471
  if ((parser.getToken() & 8388608) === 8388608) {
8435
- expr = parseBinaryExpression(parser, context, privateScope, 1, start, line, column, 4, token, expr);
8472
+ expr = parseBinaryExpression(parser, context, privateScope, 1, start, 4, token, expr);
8436
8473
  }
8437
8474
  if (consumeOpt(parser, context | 8192, 22)) {
8438
- expr = parseConditionalExpression(parser, context, privateScope, expr, start, line, column);
8475
+ expr = parseConditionalExpression(parser, context, privateScope, expr, start);
8439
8476
  }
8440
8477
  }
8441
8478
  }
8442
8479
  else if (token === 14) {
8443
- expr = parseSpreadOrRestElement(parser, context, scope, privateScope, 16, kind, origin, 1, 1, 0, tokenIndex, tokenLine, tokenColumn);
8480
+ expr = parseSpreadOrRestElement(parser, context, scope, privateScope, 16, kind, origin, 1, 1, 0);
8444
8481
  destructible |=
8445
8482
  (parser.getToken() === 16 ? 0 : 16) | parser.destructible;
8446
8483
  isNonSimpleParameterList = 1;
8447
8484
  }
8448
8485
  else {
8449
- expr = parseExpression(parser, context, privateScope, 1, 0, tokenIndex, tokenLine, tokenColumn);
8486
+ expr = parseExpression(parser, context, privateScope, 1, 0, tokenStart);
8450
8487
  destructible = parser.assignable;
8451
8488
  params.push(expr);
8452
8489
  while (consumeOpt(parser, context | 8192, 18)) {
8453
- params.push(parseExpression(parser, context, privateScope, 1, 0, tokenIndex, tokenLine, tokenColumn));
8490
+ params.push(parseExpression(parser, context, privateScope, 1, 0, tokenStart));
8454
8491
  }
8455
8492
  destructible |= parser.assignable;
8456
8493
  consume(parser, context, 16);
8457
8494
  parser.destructible = destructible | 16;
8458
8495
  parser.assignable = 2;
8459
- return finishNode(parser, context, start, line, column, {
8496
+ return parser.finishNode({
8460
8497
  type: 'CallExpression',
8461
8498
  callee,
8462
8499
  arguments: params,
8463
- });
8500
+ optional: false,
8501
+ }, start);
8464
8502
  }
8465
8503
  params.push(expr);
8466
8504
  if (!consumeOpt(parser, context | 8192, 18))
@@ -8484,7 +8522,7 @@ function parseAsyncArrowOrCallExpression(parser, context, privateScope, callee,
8484
8522
  report(parser, 32);
8485
8523
  if (isNonSimpleParameterList)
8486
8524
  parser.flags |= 128;
8487
- return parseParenthesizedArrow(parser, context | 524288, scope, privateScope, params, canAssign, 1, start, line, column);
8525
+ return parseParenthesizedArrow(parser, context | 524288, scope, privateScope, params, canAssign, 1, start);
8488
8526
  }
8489
8527
  if (destructible & 64) {
8490
8528
  report(parser, 63);
@@ -8493,40 +8531,41 @@ function parseAsyncArrowOrCallExpression(parser, context, privateScope, callee,
8493
8531
  report(parser, 62);
8494
8532
  }
8495
8533
  parser.assignable = 2;
8496
- return finishNode(parser, context, start, line, column, {
8534
+ return parser.finishNode({
8497
8535
  type: 'CallExpression',
8498
8536
  callee,
8499
8537
  arguments: params,
8500
- });
8538
+ optional: false,
8539
+ }, start);
8501
8540
  }
8502
- function parseRegExpLiteral(parser, context, start, line, column) {
8503
- const { tokenRaw, tokenRegExp, tokenValue } = parser;
8541
+ function parseRegExpLiteral(parser, context) {
8542
+ const { tokenRaw, tokenRegExp, tokenValue, tokenStart } = parser;
8504
8543
  nextToken(parser, context);
8505
8544
  parser.assignable = 2;
8506
- return context & 128
8507
- ? finishNode(parser, context, start, line, column, {
8508
- type: 'Literal',
8509
- value: tokenValue,
8510
- regex: tokenRegExp,
8511
- raw: tokenRaw,
8512
- })
8513
- : finishNode(parser, context, start, line, column, {
8514
- type: 'Literal',
8515
- value: tokenValue,
8516
- regex: tokenRegExp,
8517
- });
8545
+ const node = {
8546
+ type: 'Literal',
8547
+ value: tokenValue,
8548
+ regex: tokenRegExp,
8549
+ };
8550
+ if (context & 128) {
8551
+ node.raw = tokenRaw;
8552
+ }
8553
+ return parser.finishNode(node, tokenStart);
8518
8554
  }
8519
- function parseClassDeclaration(parser, context, scope, privateScope, flags, start, line, column) {
8520
- let decorators = parseDecorators(parser, context, privateScope);
8521
- if (decorators.length) {
8522
- start = parser.tokenIndex;
8523
- line = parser.tokenLine;
8524
- column = parser.tokenColumn;
8555
+ function parseClassDeclaration(parser, context, scope, privateScope, flags) {
8556
+ let start;
8557
+ let decorators;
8558
+ if (parser.leadingDecorators.decorators.length) {
8559
+ if (parser.getToken() === 132) {
8560
+ report(parser, 30, '@');
8561
+ }
8562
+ start = parser.leadingDecorators.start;
8563
+ decorators = [...parser.leadingDecorators.decorators];
8564
+ parser.leadingDecorators.decorators.length = 0;
8525
8565
  }
8526
- if (parser.leadingDecorators.length) {
8527
- parser.leadingDecorators.push(...decorators);
8528
- decorators = parser.leadingDecorators;
8529
- parser.leadingDecorators = [];
8566
+ else {
8567
+ start = parser.tokenStart;
8568
+ decorators = parseDecorators(parser, context, privateScope);
8530
8569
  }
8531
8570
  context = (context | 4194304 | 256) ^ 4194304;
8532
8571
  nextToken(parser, context);
@@ -8556,30 +8595,25 @@ function parseClassDeclaration(parser, context, scope, privateScope, flags, star
8556
8595
  }
8557
8596
  let inheritedContext = context;
8558
8597
  if (consumeOpt(parser, context | 8192, 20565)) {
8559
- superClass = parseLeftHandSideExpression(parser, context, privateScope, 0, 0, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
8598
+ superClass = parseLeftHandSideExpression(parser, context, privateScope, 0, 0, 0);
8560
8599
  inheritedContext |= 131072;
8561
8600
  }
8562
8601
  else {
8563
8602
  inheritedContext = (inheritedContext | 131072) ^ 131072;
8564
8603
  }
8565
8604
  const body = parseClassBody(parser, inheritedContext, context, scope, privateScope, 2, 8, 0);
8566
- return finishNode(parser, context, start, line, column, {
8605
+ return parser.finishNode({
8567
8606
  type: 'ClassDeclaration',
8568
8607
  id,
8569
8608
  superClass,
8570
8609
  body,
8571
8610
  ...(context & 1 ? { decorators } : null),
8572
- });
8611
+ }, start);
8573
8612
  }
8574
- function parseClassExpression(parser, context, privateScope, inGroup, start, line, column) {
8613
+ function parseClassExpression(parser, context, privateScope, inGroup, start) {
8575
8614
  let id = null;
8576
8615
  let superClass = null;
8577
8616
  const decorators = parseDecorators(parser, context, privateScope);
8578
- if (decorators.length) {
8579
- start = parser.tokenIndex;
8580
- line = parser.tokenLine;
8581
- column = parser.tokenColumn;
8582
- }
8583
8617
  context = (context | 256 | 4194304) ^ 4194304;
8584
8618
  nextToken(parser, context);
8585
8619
  if (parser.getToken() & 4096 && parser.getToken() !== 20565) {
@@ -8592,7 +8626,7 @@ function parseClassExpression(parser, context, privateScope, inGroup, start, lin
8592
8626
  }
8593
8627
  let inheritedContext = context;
8594
8628
  if (consumeOpt(parser, context | 8192, 20565)) {
8595
- superClass = parseLeftHandSideExpression(parser, context, privateScope, 0, inGroup, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
8629
+ superClass = parseLeftHandSideExpression(parser, context, privateScope, 0, inGroup, 0);
8596
8630
  inheritedContext |= 131072;
8597
8631
  }
8598
8632
  else {
@@ -8600,34 +8634,34 @@ function parseClassExpression(parser, context, privateScope, inGroup, start, lin
8600
8634
  }
8601
8635
  const body = parseClassBody(parser, inheritedContext, context, void 0, privateScope, 2, 0, inGroup);
8602
8636
  parser.assignable = 2;
8603
- return finishNode(parser, context, start, line, column, {
8637
+ return parser.finishNode({
8604
8638
  type: 'ClassExpression',
8605
8639
  id,
8606
8640
  superClass,
8607
8641
  body,
8608
8642
  ...(context & 1 ? { decorators } : null),
8609
- });
8643
+ }, start);
8610
8644
  }
8611
8645
  function parseDecorators(parser, context, privateScope) {
8612
8646
  const list = [];
8613
8647
  if (context & 1) {
8614
8648
  while (parser.getToken() === 132) {
8615
- list.push(parseDecoratorList(parser, context, privateScope, parser.tokenIndex, parser.tokenLine, parser.tokenColumn));
8649
+ list.push(parseDecoratorList(parser, context, privateScope, parser.tokenStart));
8616
8650
  }
8617
8651
  }
8618
8652
  return list;
8619
8653
  }
8620
- function parseDecoratorList(parser, context, privateScope, start, line, column) {
8654
+ function parseDecoratorList(parser, context, privateScope, start) {
8621
8655
  nextToken(parser, context | 8192);
8622
- let expression = parsePrimaryExpression(parser, context, privateScope, 2, 0, 1, 0, 1, start, line, column);
8623
- expression = parseMemberOrUpdateExpression(parser, context, privateScope, expression, 0, 0, start, line, column);
8624
- return finishNode(parser, context, start, line, column, {
8656
+ let expression = parsePrimaryExpression(parser, context, privateScope, 2, 0, 1, 0, 1, start);
8657
+ expression = parseMemberOrUpdateExpression(parser, context, privateScope, expression, 0, 0, parser.tokenStart);
8658
+ return parser.finishNode({
8625
8659
  type: 'Decorator',
8626
8660
  expression,
8627
- });
8661
+ }, start);
8628
8662
  }
8629
8663
  function parseClassBody(parser, context, inheritedContext, scope, parentScope, kind, origin, inGroup) {
8630
- const { tokenIndex, tokenLine, tokenColumn } = parser;
8664
+ const { tokenStart } = parser;
8631
8665
  const privateScope = context & 16 ? addChildPrivateScope(parentScope) : undefined;
8632
8666
  consume(parser, context | 8192, 2162700);
8633
8667
  const modifierFlags = 33554432 | 268435456;
@@ -8636,6 +8670,7 @@ function parseClassBody(parser, context, inheritedContext, scope, parentScope, k
8636
8670
  parser.flags = (parser.flags | 32) ^ 32;
8637
8671
  const body = [];
8638
8672
  let decorators;
8673
+ const decoratorStart = parser.tokenStart;
8639
8674
  while (parser.getToken() !== 1074790415) {
8640
8675
  let length = 0;
8641
8676
  decorators = parseDecorators(parser, context, privateScope);
@@ -8650,21 +8685,21 @@ function parseClassBody(parser, context, inheritedContext, scope, parentScope, k
8650
8685
  report(parser, 120);
8651
8686
  continue;
8652
8687
  }
8653
- body.push(parseClassElementList(parser, context, scope, privateScope, inheritedContext, kind, decorators, 0, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn));
8688
+ body.push(parseClassElementList(parser, context, scope, privateScope, inheritedContext, kind, decorators, 0, inGroup, length > 0 ? decoratorStart : parser.tokenStart));
8654
8689
  }
8655
8690
  consume(parser, origin & 8 ? context | 8192 : context, 1074790415);
8656
8691
  if (privateScope)
8657
8692
  validatePrivateIdentifierRefs(privateScope);
8658
8693
  parser.flags = (parser.flags & -33) | hasConstr;
8659
- return finishNode(parser, context, tokenIndex, tokenLine, tokenColumn, {
8694
+ return parser.finishNode({
8660
8695
  type: 'ClassBody',
8661
8696
  body,
8662
- });
8697
+ }, tokenStart);
8663
8698
  }
8664
- function parseClassElementList(parser, context, scope, privateScope, inheritedContext, type, decorators, isStatic, inGroup, start, line, column) {
8699
+ function parseClassElementList(parser, context, scope, privateScope, inheritedContext, type, decorators, isStatic, inGroup, start) {
8665
8700
  let kind = isStatic ? 32 : 0;
8666
8701
  let key = null;
8667
- const { tokenIndex, tokenLine, tokenColumn } = parser;
8702
+ const { tokenStart } = parser;
8668
8703
  const token = parser.getToken();
8669
8704
  if (token & (143360 | 36864) || token === -2147483528) {
8670
8705
  key = parseIdentifier(parser, context);
@@ -8674,13 +8709,13 @@ function parseClassElementList(parser, context, scope, privateScope, inheritedCo
8674
8709
  parser.getToken() !== 67174411 &&
8675
8710
  (parser.getToken() & 1048576) !== 1048576 &&
8676
8711
  parser.getToken() !== 1077936155) {
8677
- return parseClassElementList(parser, context, scope, privateScope, inheritedContext, type, decorators, 1, inGroup, start, line, column);
8712
+ return parseClassElementList(parser, context, scope, privateScope, inheritedContext, type, decorators, 1, inGroup, start);
8678
8713
  }
8679
8714
  break;
8680
8715
  case 209005:
8681
8716
  if (parser.getToken() !== 67174411 && (parser.flags & 1) === 0) {
8682
8717
  if ((parser.getToken() & 1073741824) === 1073741824) {
8683
- return parsePropertyDefinition(parser, context, privateScope, key, kind, decorators, tokenIndex, tokenLine, tokenColumn);
8718
+ return parsePropertyDefinition(parser, context, privateScope, key, kind, decorators, tokenStart);
8684
8719
  }
8685
8720
  kind |= 16 | (optionalBit(parser, context, 8391476) ? 8 : 0);
8686
8721
  }
@@ -8688,7 +8723,7 @@ function parseClassElementList(parser, context, scope, privateScope, inheritedCo
8688
8723
  case 209008:
8689
8724
  if (parser.getToken() !== 67174411) {
8690
8725
  if ((parser.getToken() & 1073741824) === 1073741824) {
8691
- return parsePropertyDefinition(parser, context, privateScope, key, kind, decorators, tokenIndex, tokenLine, tokenColumn);
8726
+ return parsePropertyDefinition(parser, context, privateScope, key, kind, decorators, tokenStart);
8692
8727
  }
8693
8728
  kind |= 256;
8694
8729
  }
@@ -8696,7 +8731,7 @@ function parseClassElementList(parser, context, scope, privateScope, inheritedCo
8696
8731
  case 209009:
8697
8732
  if (parser.getToken() !== 67174411) {
8698
8733
  if ((parser.getToken() & 1073741824) === 1073741824) {
8699
- return parsePropertyDefinition(parser, context, privateScope, key, kind, decorators, tokenIndex, tokenLine, tokenColumn);
8734
+ return parsePropertyDefinition(parser, context, privateScope, key, kind, decorators, tokenStart);
8700
8735
  }
8701
8736
  kind |= 512;
8702
8737
  }
@@ -8704,7 +8739,7 @@ function parseClassElementList(parser, context, scope, privateScope, inheritedCo
8704
8739
  case 12402:
8705
8740
  if (parser.getToken() !== 67174411 && (parser.flags & 1) === 0) {
8706
8741
  if ((parser.getToken() & 1073741824) === 1073741824) {
8707
- return parsePropertyDefinition(parser, context, privateScope, key, kind, decorators, tokenIndex, tokenLine, tokenColumn);
8742
+ return parsePropertyDefinition(parser, context, privateScope, key, kind, decorators, tokenStart);
8708
8743
  }
8709
8744
  if (context & 1)
8710
8745
  kind |= 1024;
@@ -8725,13 +8760,13 @@ function parseClassElementList(parser, context, scope, privateScope, inheritedCo
8725
8760
  }
8726
8761
  else if (parser.getToken() === 130) {
8727
8762
  kind |= 8192;
8728
- key = parsePrivateIdentifier(parser, context | 4096, privateScope, 768, tokenIndex, tokenLine, tokenColumn);
8763
+ key = parsePrivateIdentifier(parser, context | 4096, privateScope, 768);
8729
8764
  }
8730
8765
  else if ((parser.getToken() & 1073741824) === 1073741824) {
8731
8766
  kind |= 128;
8732
8767
  }
8733
8768
  else if (isStatic && token === 2162700) {
8734
- return parseStaticBlock(parser, context | 4096, scope, privateScope, start, line, column);
8769
+ return parseStaticBlock(parser, context | 4096, scope, privateScope, start);
8735
8770
  }
8736
8771
  else if (token === -2147483527) {
8737
8772
  key = parseIdentifier(parser, context);
@@ -8756,7 +8791,7 @@ function parseClassElementList(parser, context, scope, privateScope, inheritedCo
8756
8791
  }
8757
8792
  else if (parser.getToken() === 130) {
8758
8793
  kind |= 8192;
8759
- key = parsePrivateIdentifier(parser, context, privateScope, kind, tokenIndex, tokenLine, tokenColumn);
8794
+ key = parsePrivateIdentifier(parser, context, privateScope, kind);
8760
8795
  }
8761
8796
  else
8762
8797
  report(parser, 135);
@@ -8786,10 +8821,10 @@ function parseClassElementList(parser, context, scope, privateScope, inheritedCo
8786
8821
  }
8787
8822
  }
8788
8823
  if (kind & 1024 || (parser.getToken() !== 67174411 && (kind & 768) === 0)) {
8789
- return parsePropertyDefinition(parser, context, privateScope, key, kind, decorators, tokenIndex, tokenLine, tokenColumn);
8824
+ return parsePropertyDefinition(parser, context, privateScope, key, kind, decorators, start);
8790
8825
  }
8791
- const value = parseMethodDefinition(parser, context | 4096, privateScope, kind, inGroup, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
8792
- return finishNode(parser, context, start, line, column, {
8826
+ const value = parseMethodDefinition(parser, context | 4096, privateScope, kind, inGroup, parser.tokenStart);
8827
+ return parser.finishNode({
8793
8828
  type: 'MethodDefinition',
8794
8829
  kind: (kind & 32) === 0 && kind & 64
8795
8830
  ? 'constructor'
@@ -8803,9 +8838,10 @@ function parseClassElementList(parser, context, scope, privateScope, inheritedCo
8803
8838
  key,
8804
8839
  value,
8805
8840
  ...(context & 1 ? { decorators } : null),
8806
- });
8841
+ }, start);
8807
8842
  }
8808
- function parsePrivateIdentifier(parser, context, privateScope, kind, start, line, column) {
8843
+ function parsePrivateIdentifier(parser, context, privateScope, kind) {
8844
+ const { tokenStart } = parser;
8809
8845
  nextToken(parser, context);
8810
8846
  const { tokenValue } = parser;
8811
8847
  if (tokenValue === 'constructor')
@@ -8821,18 +8857,18 @@ function parsePrivateIdentifier(parser, context, privateScope, kind, start, line
8821
8857
  }
8822
8858
  }
8823
8859
  nextToken(parser, context);
8824
- return finishNode(parser, context, start, line, column, {
8860
+ return parser.finishNode({
8825
8861
  type: 'PrivateIdentifier',
8826
8862
  name: tokenValue,
8827
- });
8863
+ }, tokenStart);
8828
8864
  }
8829
- function parsePropertyDefinition(parser, context, privateScope, key, state, decorators, start, line, column) {
8865
+ function parsePropertyDefinition(parser, context, privateScope, key, state, decorators, start) {
8830
8866
  let value = null;
8831
8867
  if (state & 8)
8832
8868
  report(parser, 0);
8833
8869
  if (parser.getToken() === 1077936155) {
8834
8870
  nextToken(parser, context | 8192);
8835
- const { tokenIndex, tokenLine, tokenColumn } = parser;
8871
+ const { tokenStart } = parser;
8836
8872
  if (parser.getToken() === 537079927)
8837
8873
  report(parser, 119);
8838
8874
  const modifierFlags = 262144 |
@@ -8846,40 +8882,39 @@ function parsePropertyDefinition(parser, context, privateScope, key, state, deco
8846
8882
  (state & 64 ? 4194304 : 0) |
8847
8883
  65536 |
8848
8884
  16777216;
8849
- value = parsePrimaryExpression(parser, context | 4096, privateScope, 2, 0, 1, 0, 1, tokenIndex, tokenLine, tokenColumn);
8885
+ value = parsePrimaryExpression(parser, context | 4096, privateScope, 2, 0, 1, 0, 1, tokenStart);
8850
8886
  if ((parser.getToken() & 1073741824) !== 1073741824 ||
8851
8887
  (parser.getToken() & 4194304) === 4194304) {
8852
- value = parseMemberOrUpdateExpression(parser, context | 4096, privateScope, value, 0, 0, tokenIndex, tokenLine, tokenColumn);
8853
- value = parseAssignmentExpression(parser, context | 4096, privateScope, 0, 0, tokenIndex, tokenLine, tokenColumn, value);
8888
+ value = parseMemberOrUpdateExpression(parser, context | 4096, privateScope, value, 0, 0, tokenStart);
8889
+ value = parseAssignmentExpression(parser, context | 4096, privateScope, 0, 0, tokenStart, value);
8854
8890
  }
8855
8891
  }
8856
8892
  matchOrInsertSemicolon(parser, context);
8857
- return finishNode(parser, context, start, line, column, {
8893
+ return parser.finishNode({
8858
8894
  type: state & 1024 ? 'AccessorProperty' : 'PropertyDefinition',
8859
8895
  key,
8860
8896
  value,
8861
8897
  static: (state & 32) > 0,
8862
8898
  computed: (state & 2) > 0,
8863
8899
  ...(context & 1 ? { decorators } : null),
8864
- });
8900
+ }, start);
8865
8901
  }
8866
- function parseBindingPattern(parser, context, scope, privateScope, type, origin, start, line, column) {
8902
+ function parseBindingPattern(parser, context, scope, privateScope, type, origin) {
8867
8903
  if (parser.getToken() & 143360 ||
8868
8904
  ((context & 256) === 0 && parser.getToken() === -2147483527))
8869
- return parseAndClassifyIdentifier(parser, context, scope, type, origin, start, line, column);
8905
+ return parseAndClassifyIdentifier(parser, context, scope, type, origin);
8870
8906
  if ((parser.getToken() & 2097152) !== 2097152)
8871
8907
  report(parser, 30, KeywordDescTable[parser.getToken() & 255]);
8872
8908
  const left = parser.getToken() === 69271571
8873
- ? parseArrayExpressionOrPattern(parser, context, scope, privateScope, 1, 0, 1, type, origin, start, line, column)
8874
- : parseObjectLiteralOrPattern(parser, context, scope, privateScope, 1, 0, 1, type, origin, start, line, column);
8909
+ ? parseArrayExpressionOrPattern(parser, context, scope, privateScope, 1, 0, 1, type, origin)
8910
+ : parseObjectLiteralOrPattern(parser, context, scope, privateScope, 1, 0, 1, type, origin);
8875
8911
  if (parser.destructible & 16)
8876
8912
  report(parser, 50);
8877
8913
  if (parser.destructible & 32)
8878
8914
  report(parser, 50);
8879
8915
  return left;
8880
8916
  }
8881
- function parseAndClassifyIdentifier(parser, context, scope, kind, origin, start, line, column) {
8882
- const { tokenValue } = parser;
8917
+ function parseAndClassifyIdentifier(parser, context, scope, kind, origin) {
8883
8918
  const token = parser.getToken();
8884
8919
  if (context & 256) {
8885
8920
  if ((token & 537079808) === 537079808) {
@@ -8908,54 +8943,55 @@ function parseAndClassifyIdentifier(parser, context, scope, kind, origin, start,
8908
8943
  if (context & 512)
8909
8944
  report(parser, 110);
8910
8945
  }
8946
+ const { tokenValue, tokenStart: start } = parser;
8911
8947
  nextToken(parser, context);
8912
8948
  if (scope)
8913
8949
  addVarOrBlock(parser, context, scope, tokenValue, kind, origin);
8914
- return finishNode(parser, context, start, line, column, {
8950
+ return parser.finishNode({
8915
8951
  type: 'Identifier',
8916
8952
  name: tokenValue,
8917
- });
8953
+ }, start);
8918
8954
  }
8919
- function parseJSXRootElementOrFragment(parser, context, privateScope, inJSXChild, start, line, column) {
8955
+ function parseJSXRootElementOrFragment(parser, context, privateScope, inJSXChild, start) {
8920
8956
  if (!inJSXChild)
8921
8957
  consume(parser, context, 8456256);
8922
8958
  if (parser.getToken() === 8390721) {
8923
- const openingFragment = parseOpeningFragment(parser, context, start, line, column);
8959
+ const openingFragment = parseJSXOpeningFragment(parser, context, start);
8924
8960
  const [children, closingFragment] = parseJSXChildrenAndClosingFragment(parser, context, privateScope, inJSXChild);
8925
- return finishNode(parser, context, start, line, column, {
8961
+ return parser.finishNode({
8926
8962
  type: 'JSXFragment',
8927
8963
  openingFragment,
8928
8964
  children,
8929
8965
  closingFragment,
8930
- });
8966
+ }, start);
8931
8967
  }
8932
8968
  if (parser.getToken() === 8457014)
8933
8969
  report(parser, 30, KeywordDescTable[parser.getToken() & 255]);
8934
8970
  let closingElement = null;
8935
8971
  let children = [];
8936
- const openingElement = parseJSXOpeningElementOrSelfCloseElement(parser, context, privateScope, inJSXChild, start, line, column);
8972
+ const openingElement = parseJSXOpeningElementOrSelfCloseElement(parser, context, privateScope, inJSXChild, start);
8937
8973
  if (!openingElement.selfClosing) {
8938
8974
  [children, closingElement] = parseJSXChildrenAndClosingElement(parser, context, privateScope, inJSXChild);
8939
8975
  const close = isEqualTagName(closingElement.name);
8940
8976
  if (isEqualTagName(openingElement.name) !== close)
8941
8977
  report(parser, 155, close);
8942
8978
  }
8943
- return finishNode(parser, context, start, line, column, {
8979
+ return parser.finishNode({
8944
8980
  type: 'JSXElement',
8945
8981
  children,
8946
8982
  openingElement,
8947
8983
  closingElement,
8948
- });
8984
+ }, start);
8949
8985
  }
8950
- function parseOpeningFragment(parser, context, start, line, column) {
8986
+ function parseJSXOpeningFragment(parser, context, start) {
8951
8987
  nextJSXToken(parser, context);
8952
- return finishNode(parser, context, start, line, column, {
8988
+ return parser.finishNode({
8953
8989
  type: 'JSXOpeningFragment',
8954
- });
8990
+ }, start);
8955
8991
  }
8956
- function parseJSXClosingElement(parser, context, inJSXChild, start, line, column) {
8992
+ function parseJSXClosingElement(parser, context, inJSXChild, start) {
8957
8993
  consume(parser, context, 8457014);
8958
- const name = parseJSXElementName(parser, context, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
8994
+ const name = parseJSXElementName(parser, context);
8959
8995
  if (parser.getToken() !== 8390721) {
8960
8996
  report(parser, 25, KeywordDescTable[8390721 & 255]);
8961
8997
  }
@@ -8965,12 +9001,12 @@ function parseJSXClosingElement(parser, context, inJSXChild, start, line, column
8965
9001
  else {
8966
9002
  nextToken(parser, context);
8967
9003
  }
8968
- return finishNode(parser, context, start, line, column, {
9004
+ return parser.finishNode({
8969
9005
  type: 'JSXClosingElement',
8970
9006
  name,
8971
- });
9007
+ }, start);
8972
9008
  }
8973
- function parseJSXClosingFragment(parser, context, inJSXChild, start, line, column) {
9009
+ function parseJSXClosingFragment(parser, context, inJSXChild, start) {
8974
9010
  consume(parser, context, 8457014);
8975
9011
  if (parser.getToken() !== 8390721) {
8976
9012
  report(parser, 25, KeywordDescTable[8390721 & 255]);
@@ -8981,14 +9017,14 @@ function parseJSXClosingFragment(parser, context, inJSXChild, start, line, colum
8981
9017
  else {
8982
9018
  nextToken(parser, context);
8983
9019
  }
8984
- return finishNode(parser, context, start, line, column, {
9020
+ return parser.finishNode({
8985
9021
  type: 'JSXClosingFragment',
8986
- });
9022
+ }, start);
8987
9023
  }
8988
9024
  function parseJSXChildrenAndClosingElement(parser, context, privateScope, inJSXChild) {
8989
9025
  const children = [];
8990
9026
  while (true) {
8991
- const child = parseJSXChildOrClosingElement(parser, context, privateScope, inJSXChild, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
9027
+ const child = parseJSXChildOrClosingElement(parser, context, privateScope, inJSXChild);
8992
9028
  if (child.type === 'JSXClosingElement') {
8993
9029
  return [children, child];
8994
9030
  }
@@ -8998,40 +9034,43 @@ function parseJSXChildrenAndClosingElement(parser, context, privateScope, inJSXC
8998
9034
  function parseJSXChildrenAndClosingFragment(parser, context, privateScope, inJSXChild) {
8999
9035
  const children = [];
9000
9036
  while (true) {
9001
- const child = parseJSXChildOrClosingFragment(parser, context, privateScope, inJSXChild, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
9037
+ const child = parseJSXChildOrClosingFragment(parser, context, privateScope, inJSXChild);
9002
9038
  if (child.type === 'JSXClosingFragment') {
9003
9039
  return [children, child];
9004
9040
  }
9005
9041
  children.push(child);
9006
9042
  }
9007
9043
  }
9008
- function parseJSXChildOrClosingElement(parser, context, privateScope, inJSXChild, start, line, column) {
9044
+ function parseJSXChildOrClosingElement(parser, context, privateScope, inJSXChild) {
9009
9045
  if (parser.getToken() === 137)
9010
- return parseJSXText(parser, context, start, line, column);
9046
+ return parseJSXText(parser, context);
9011
9047
  if (parser.getToken() === 2162700)
9012
- return parseJSXExpressionContainer(parser, context, privateScope, 1, 0, start, line, column);
9048
+ return parseJSXExpressionContainer(parser, context, privateScope, 1, 0);
9013
9049
  if (parser.getToken() === 8456256) {
9050
+ const { tokenStart } = parser;
9014
9051
  nextToken(parser, context);
9015
9052
  if (parser.getToken() === 8457014)
9016
- return parseJSXClosingElement(parser, context, inJSXChild, start, line, column);
9017
- return parseJSXRootElementOrFragment(parser, context, privateScope, 1, start, line, column);
9053
+ return parseJSXClosingElement(parser, context, inJSXChild, tokenStart);
9054
+ return parseJSXRootElementOrFragment(parser, context, privateScope, 1, tokenStart);
9018
9055
  }
9019
9056
  report(parser, 0);
9020
9057
  }
9021
- function parseJSXChildOrClosingFragment(parser, context, privateScope, inJSXChild, start, line, column) {
9058
+ function parseJSXChildOrClosingFragment(parser, context, privateScope, inJSXChild) {
9022
9059
  if (parser.getToken() === 137)
9023
- return parseJSXText(parser, context, start, line, column);
9060
+ return parseJSXText(parser, context);
9024
9061
  if (parser.getToken() === 2162700)
9025
- return parseJSXExpressionContainer(parser, context, privateScope, 1, 0, start, line, column);
9062
+ return parseJSXExpressionContainer(parser, context, privateScope, 1, 0);
9026
9063
  if (parser.getToken() === 8456256) {
9064
+ const { tokenStart } = parser;
9027
9065
  nextToken(parser, context);
9028
9066
  if (parser.getToken() === 8457014)
9029
- return parseJSXClosingFragment(parser, context, inJSXChild, start, line, column);
9030
- return parseJSXRootElementOrFragment(parser, context, privateScope, 1, start, line, column);
9067
+ return parseJSXClosingFragment(parser, context, inJSXChild, tokenStart);
9068
+ return parseJSXRootElementOrFragment(parser, context, privateScope, 1, tokenStart);
9031
9069
  }
9032
9070
  report(parser, 0);
9033
9071
  }
9034
- function parseJSXText(parser, context, start, line, column) {
9072
+ function parseJSXText(parser, context) {
9073
+ const start = parser.tokenStart;
9035
9074
  nextToken(parser, context);
9036
9075
  const node = {
9037
9076
  type: 'JSXText',
@@ -9040,13 +9079,13 @@ function parseJSXText(parser, context, start, line, column) {
9040
9079
  if (context & 128) {
9041
9080
  node.raw = parser.tokenRaw;
9042
9081
  }
9043
- return finishNode(parser, context, start, line, column, node);
9082
+ return parser.finishNode(node, start);
9044
9083
  }
9045
- function parseJSXOpeningElementOrSelfCloseElement(parser, context, privateScope, inJSXChild, start, line, column) {
9084
+ function parseJSXOpeningElementOrSelfCloseElement(parser, context, privateScope, inJSXChild, start) {
9046
9085
  if ((parser.getToken() & 143360) !== 143360 &&
9047
9086
  (parser.getToken() & 4096) !== 4096)
9048
9087
  report(parser, 0);
9049
- const tagName = parseJSXElementName(parser, context, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
9088
+ const tagName = parseJSXElementName(parser, context);
9050
9089
  const attributes = parseJSXAttributes(parser, context, privateScope);
9051
9090
  const selfClosing = parser.getToken() === 8457014;
9052
9091
  if (selfClosing)
@@ -9060,105 +9099,112 @@ function parseJSXOpeningElementOrSelfCloseElement(parser, context, privateScope,
9060
9099
  else {
9061
9100
  nextToken(parser, context);
9062
9101
  }
9063
- return finishNode(parser, context, start, line, column, {
9102
+ return parser.finishNode({
9064
9103
  type: 'JSXOpeningElement',
9065
9104
  name: tagName,
9066
9105
  attributes,
9067
9106
  selfClosing,
9068
- });
9107
+ }, start);
9069
9108
  }
9070
- function parseJSXElementName(parser, context, start, line, column) {
9109
+ function parseJSXElementName(parser, context) {
9110
+ const { tokenStart } = parser;
9071
9111
  rescanJSXIdentifier(parser);
9072
- let key = parseJSXIdentifier(parser, context, start, line, column);
9112
+ let key = parseJSXIdentifier(parser, context);
9073
9113
  if (parser.getToken() === 21)
9074
- return parseJSXNamespacedName(parser, context, key, start, line, column);
9114
+ return parseJSXNamespacedName(parser, context, key, tokenStart);
9075
9115
  while (consumeOpt(parser, context, 67108877)) {
9076
9116
  rescanJSXIdentifier(parser);
9077
- key = parseJSXMemberExpression(parser, context, key, start, line, column);
9117
+ key = parseJSXMemberExpression(parser, context, key, tokenStart);
9078
9118
  }
9079
9119
  return key;
9080
9120
  }
9081
- function parseJSXMemberExpression(parser, context, object, start, line, column) {
9082
- const property = parseJSXIdentifier(parser, context, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
9083
- return finishNode(parser, context, start, line, column, {
9121
+ function parseJSXMemberExpression(parser, context, object, start) {
9122
+ const property = parseJSXIdentifier(parser, context);
9123
+ return parser.finishNode({
9084
9124
  type: 'JSXMemberExpression',
9085
9125
  object,
9086
9126
  property,
9087
- });
9127
+ }, start);
9088
9128
  }
9089
9129
  function parseJSXAttributes(parser, context, privateScope) {
9090
9130
  const attributes = [];
9091
9131
  while (parser.getToken() !== 8457014 &&
9092
9132
  parser.getToken() !== 8390721 &&
9093
9133
  parser.getToken() !== 1048576) {
9094
- attributes.push(parseJsxAttribute(parser, context, privateScope, parser.tokenIndex, parser.tokenLine, parser.tokenColumn));
9134
+ attributes.push(parseJsxAttribute(parser, context, privateScope));
9095
9135
  }
9096
9136
  return attributes;
9097
9137
  }
9098
- function parseJSXSpreadAttribute(parser, context, privateScope, start, line, column) {
9138
+ function parseJSXSpreadAttribute(parser, context, privateScope) {
9139
+ const start = parser.tokenStart;
9099
9140
  nextToken(parser, context);
9100
9141
  consume(parser, context, 14);
9101
- const expression = parseExpression(parser, context, privateScope, 1, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
9142
+ const expression = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);
9102
9143
  consume(parser, context, 1074790415);
9103
- return finishNode(parser, context, start, line, column, {
9144
+ return parser.finishNode({
9104
9145
  type: 'JSXSpreadAttribute',
9105
9146
  argument: expression,
9106
- });
9147
+ }, start);
9107
9148
  }
9108
- function parseJsxAttribute(parser, context, privateScope, start, line, column) {
9149
+ function parseJsxAttribute(parser, context, privateScope) {
9150
+ const { tokenStart } = parser;
9109
9151
  if (parser.getToken() === 2162700)
9110
- return parseJSXSpreadAttribute(parser, context, privateScope, start, line, column);
9152
+ return parseJSXSpreadAttribute(parser, context, privateScope);
9111
9153
  rescanJSXIdentifier(parser);
9112
9154
  let value = null;
9113
- let name = parseJSXIdentifier(parser, context, start, line, column);
9155
+ let name = parseJSXIdentifier(parser, context);
9114
9156
  if (parser.getToken() === 21) {
9115
- name = parseJSXNamespacedName(parser, context, name, start, line, column);
9157
+ name = parseJSXNamespacedName(parser, context, name, tokenStart);
9116
9158
  }
9117
9159
  if (parser.getToken() === 1077936155) {
9118
9160
  const token = scanJSXAttributeValue(parser, context);
9119
- const { tokenIndex, tokenLine, tokenColumn } = parser;
9120
9161
  switch (token) {
9121
9162
  case 134283267:
9122
9163
  value = parseLiteral(parser, context);
9123
9164
  break;
9124
9165
  case 8456256:
9125
- value = parseJSXRootElementOrFragment(parser, context, privateScope, 0, tokenIndex, tokenLine, tokenColumn);
9166
+ value = parseJSXRootElementOrFragment(parser, context, privateScope, 0, parser.tokenStart);
9126
9167
  break;
9127
9168
  case 2162700:
9128
- value = parseJSXExpressionContainer(parser, context, privateScope, 0, 1, tokenIndex, tokenLine, tokenColumn);
9169
+ value = parseJSXExpressionContainer(parser, context, privateScope, 0, 1);
9129
9170
  break;
9130
9171
  default:
9131
9172
  report(parser, 154);
9132
9173
  }
9133
9174
  }
9134
- return finishNode(parser, context, start, line, column, {
9175
+ return parser.finishNode({
9135
9176
  type: 'JSXAttribute',
9136
9177
  value,
9137
9178
  name,
9138
- });
9179
+ }, tokenStart);
9139
9180
  }
9140
- function parseJSXNamespacedName(parser, context, namespace, start, line, column) {
9181
+ function parseJSXNamespacedName(parser, context, namespace, start) {
9141
9182
  consume(parser, context, 21);
9142
- const name = parseJSXIdentifier(parser, context, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
9143
- return finishNode(parser, context, start, line, column, {
9183
+ const name = parseJSXIdentifier(parser, context);
9184
+ return parser.finishNode({
9144
9185
  type: 'JSXNamespacedName',
9145
9186
  namespace,
9146
9187
  name,
9147
- });
9188
+ }, start);
9148
9189
  }
9149
- function parseJSXExpressionContainer(parser, context, privateScope, inJSXChild, isAttr, start, line, column) {
9190
+ function parseJSXExpressionContainer(parser, context, privateScope, inJSXChild, isAttr) {
9191
+ const { tokenStart: start } = parser;
9150
9192
  nextToken(parser, context | 8192);
9151
- const { tokenIndex, tokenLine, tokenColumn } = parser;
9193
+ const { tokenStart } = parser;
9152
9194
  if (parser.getToken() === 14)
9153
- return parseJSXSpreadChild(parser, context, privateScope, start, line, column);
9195
+ return parseJSXSpreadChild(parser, context, privateScope, start);
9154
9196
  let expression = null;
9155
9197
  if (parser.getToken() === 1074790415) {
9156
9198
  if (isAttr)
9157
9199
  report(parser, 157);
9158
- expression = parseJSXEmptyExpression(parser, context, parser.startIndex, parser.startLine, parser.startColumn);
9200
+ expression = parseJSXEmptyExpression(parser, {
9201
+ index: parser.startIndex,
9202
+ line: parser.startLine,
9203
+ column: parser.startColumn,
9204
+ });
9159
9205
  }
9160
9206
  else {
9161
- expression = parseExpression(parser, context, privateScope, 1, 0, tokenIndex, tokenLine, tokenColumn);
9207
+ expression = parseExpression(parser, context, privateScope, 1, 0, tokenStart);
9162
9208
  }
9163
9209
  if (parser.getToken() !== 1074790415) {
9164
9210
  report(parser, 25, KeywordDescTable[1074790415 & 255]);
@@ -9169,41 +9215,39 @@ function parseJSXExpressionContainer(parser, context, privateScope, inJSXChild,
9169
9215
  else {
9170
9216
  nextToken(parser, context);
9171
9217
  }
9172
- return finishNode(parser, context, start, line, column, {
9218
+ return parser.finishNode({
9173
9219
  type: 'JSXExpressionContainer',
9174
9220
  expression,
9175
- });
9221
+ }, start);
9176
9222
  }
9177
- function parseJSXSpreadChild(parser, context, privateScope, start, line, column) {
9223
+ function parseJSXSpreadChild(parser, context, privateScope, start) {
9178
9224
  consume(parser, context, 14);
9179
- const expression = parseExpression(parser, context, privateScope, 1, 0, parser.tokenIndex, parser.tokenLine, parser.tokenColumn);
9225
+ const expression = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);
9180
9226
  consume(parser, context, 1074790415);
9181
- return finishNode(parser, context, start, line, column, {
9227
+ return parser.finishNode({
9182
9228
  type: 'JSXSpreadChild',
9183
9229
  expression,
9184
- });
9230
+ }, start);
9185
9231
  }
9186
- function parseJSXEmptyExpression(parser, context, start, line, column) {
9187
- parser.startIndex = parser.tokenIndex;
9188
- parser.startLine = parser.tokenLine;
9189
- parser.startColumn = parser.tokenColumn;
9190
- return finishNode(parser, context, start, line, column, {
9232
+ function parseJSXEmptyExpression(parser, start) {
9233
+ return parser.finishNode({
9191
9234
  type: 'JSXEmptyExpression',
9192
- });
9235
+ }, start, parser.tokenStart);
9193
9236
  }
9194
- function parseJSXIdentifier(parser, context, start, line, column) {
9237
+ function parseJSXIdentifier(parser, context) {
9238
+ const start = parser.tokenStart;
9195
9239
  if (!(parser.getToken() & 143360)) {
9196
9240
  report(parser, 30, KeywordDescTable[parser.getToken() & 255]);
9197
9241
  }
9198
9242
  const { tokenValue } = parser;
9199
9243
  nextToken(parser, context);
9200
- return finishNode(parser, context, start, line, column, {
9244
+ return parser.finishNode({
9201
9245
  type: 'JSXIdentifier',
9202
9246
  name: tokenValue,
9203
- });
9247
+ }, start);
9204
9248
  }
9205
9249
 
9206
- var version$1 = "6.1.0";
9250
+ var version$1 = "6.1.2";
9207
9251
 
9208
9252
  const version = version$1;
9209
9253
  function parseScript(source, options) {