   596→ * @see [Link](https://tc39.github.io/ecma262/#prod-ExpressionStatement)
   597→ *
   598→ * @param parser  Parser object
   599→ * @param context Context masks
   600→ * @param expression AST node
   601→ * @param start
   602→ */
   603→function parseExpressionStatement(
   604→  parser: Parser,
   605→  context: Context,
   606→  expression: ESTree.Expression,
   607→  start: Location,
   608→): ESTree.ExpressionStatement {
   609→  matchOrInsertSemicolon(parser, context | Context.AllowRegExp);
   610→  return parser.finishNode<ESTree.ExpressionStatement>(
   611→    {
   612→      type: 'ExpressionStatement',
   613→      expression,
   614→    },
   615→    start,
   616→  );
   617→}
   618→
   619→/**
   620→ * Parses either expression or labeled statement
   621→ *
   622→ * @param parser  Parser object
   623→ * @param context Context masks
   624→ * @param expr ESTree AST node
   625→ * @param token Token to validate
   626→ * @param allowFuncDecl Allow / disallow func statement
   627→ * @param start
   628→ */
   629→function parseLabelledStatement(
   630→  parser: Parser,
   631→  context: Context,
   632→  scope: Scope | undefined,
   633→  privateScope: PrivateScope | undefined,
   634→  origin: Origin,
   635→  labels: ESTree.Labels,
   636→  value: string,
   637→  expr: ESTree.Identifier | ESTree.Expression,
   638→  token: Token,
   639→  allowFuncDecl: 0 | 1,
   640→  start: Location,
   641→): ESTree.LabeledStatement {
   642→  // LabelledStatement ::
   643→  //   Expression ';'
   644→  //   Identifier ':' Statement
   645→
   646→  validateBindingIdentifier(parser, context, BindingKind.None, token, 1);
   647→  validateAndDeclareLabel(parser, labels, value);
   648→
   649→  nextToken(parser, context | Context.AllowRegExp); // skip: ':'
   650→
   651→  const body =
   652→    allowFuncDecl &&
   653→    (context & Context.Strict) === 0 &&
   654→    parser.options.webcompat &&
   655→    // In sloppy mode, Annex B.3.2 allows labelled function declarations.
   656→    // Otherwise it's a parse error.
   657→    parser.getToken() === Token.FunctionKeyword
   658→      ? parseFunctionDeclaration(
   659→          parser,
   660→          context,
   661→          scope?.createChildScope(),
   662→          privateScope,
   663→          origin,
   664→          0,
   665→          HoistedFunctionFlags.None,
   666→          0,
   667→          parser.tokenStart,
   668→        )
   669→      : parseStatement(parser, context, scope, privateScope, origin, labels, allowFuncDecl);
   670→
   671→  return parser.finishNode<ESTree.LabeledStatement>(
   672→    {
   673→      type: 'LabeledStatement',
   674→      label: expr as ESTree.Identifier,
   675→      body,
   676→    },
   677→    start,
   678→  );
   679→}
   680→
   681→/**
   682→ * Parses either async ident, async function or async arrow in
   683→ * statement position
   684→ *
   685→ * @param parser  Parser object
   686→ * @param context Context masks
   687→ * @param labels
   688→ * @param allowFuncDecl Allow / disallow func statement
   689→ */
   690→
   691→function parseAsyncArrowOrAsyncFunctionDeclaration(
   692→  parser: Parser,
   693→  context: Context,
   694→  scope: Scope | undefined,
   695→  privateScope: PrivateScope | undefined,
   696→  origin: Origin,
   697→  labels: ESTree.Labels,
   698→  allowFuncDecl: 0 | 1,
   699→): ESTree.ExpressionStatement | ESTree.LabeledStatement | ESTree.FunctionDeclaration {
   700→  // AsyncArrowFunction[In, Yield, Await]:
   701→  //    async[no LineTerminator here]AsyncArrowBindingIdentifier[?Yield][no LineTerminator here]=>AsyncConciseBody[?In]
   702→  //    CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await][no LineTerminator here]=>AsyncConciseBody[?In]
   703→  //
   704→  // AsyncArrowBindingIdentifier[Yield]:
   705→  //    BindingIdentifier[?Yield, +Await]
   706→  //
   707→  // CoverCallExpressionAndAsyncArrowHead[Yield, Await]:
   708→  //    MemberExpression[?Yield, ?Await]Arguments[?Yield, ?Await]
   709→  //
   710→  // AsyncFunctionDeclaration[Yield, Await, Default]:
   711→  //    async[no LineTerminator here]functionBindingIdentifier[?Yield, ?Await](FormalParameters[~Yield, +Await]){AsyncFunctionBody}
   712→  //    [+Default]async[no LineTerminator here]function(FormalParameters[~Yield, +Await]){AsyncFunctionBody}
   713→  //
   714→  // AsyncFunctionBody:
   715→  //    FunctionBody[~Yield, +Await]
   716→
   717→  const { tokenValue, tokenStart: start } = parser;
   718→  const token = parser.getToken();
   719→
   720→  let expr: ESTree.Expression = parseIdentifier(parser, context);
   721→
   722→  if (parser.getToken() === Token.Colon) {
   723→    return parseLabelledStatement(
   724→      parser,
   725→      context,
   726→      scope,
   727→      privateScope,
   728→      origin,
   729→      labels,
   730→      tokenValue,
   731→      expr,
   732→      token,
   733→      1,
   734→      start,
   735→    );

[8178 more lines in file. Use offset=736 to continue.]