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