  3497→function parseLeftHandSideExpression(
  3498→  parser: Parser,
  3499→  context: Context,
  3500→  privateScope: PrivateScope | undefined,
  3501→  canAssign: 0 | 1,
  3502→  inGroup: 0 | 1,
  3503→  isLHS: 0 | 1,
  3504→): ESTree.Expression {
  3505→  // LeftHandSideExpression ::
  3506→  //   (PrimaryExpression | MemberExpression) ...
  3507→
  3508→  const start = parser.tokenStart;
  3509→  const expression = parsePrimaryExpression(
  3510→    parser,
  3511→    context,
  3512→    privateScope,
  3513→    BindingKind.Empty,
  3514→    0,
  3515→    canAssign,
  3516→    inGroup,
  3517→    isLHS,
  3518→    start,
  3519→  );
  3520→
  3521→  return parseMemberOrUpdateExpression(parser, context, privateScope, expression, inGroup, 0, start);
  3522→}
  3523→
  3524→/**
  3525→ * Parse update expression
  3526→ *
  3527→ * @param parser  Parser object
  3528→ * @param context Context masks
  3529→ * @param inNew
  3530→ * @param start
  3531→ */
  3532→function parseUpdateExpression(parser: Parser, context: Context, expr: ESTree.Expression, start: Location) {
  3533→  if (parser.assignable & AssignmentKind.CannotAssign) parser.report(Errors.InvalidIncDecTarget);
  3534→
  3535→  const token = parser.getToken();
  3536→
  3537→  nextToken(parser, context);
  3538→
  3539→  parser.assignable = AssignmentKind.CannotAssign;
  3540→
  3541→  return parser.finishNode<ESTree.UpdateExpression>(
  3542→    {
  3543→      type: 'UpdateExpression',
  3544→      argument: expr,
  3545→      operator: KeywordDescTable[token & Token.Type] as ESTree.UpdateOperator,
  3546→      prefix: false,
  3547→    },
  3548→    start,
  3549→  );
  3550→}
  3551→/**
  3552→ * Parses member or update expression
  3553→ *
  3554→ * @param parser  Parser object
  3555→ * @param context Context masks
  3556→ * @param expr ESTree AST node
  3557→ * @param inGroup
  3558→ * @param start
  3559→ */
  3560→function parseMemberOrUpdateExpression(
  3561→  parser: Parser,
  3562→  context: Context,
  3563→  privateScope: PrivateScope | undefined,
  3564→  expr: ESTree.Expression,
  3565→  inGroup: 0 | 1,
  3566→  inChain: 0 | 1,
  3567→  start: Location,
  3568→): any {
  3569→  if ((parser.getToken() & Token.IsUpdateOp) === Token.IsUpdateOp && (parser.flags & Flags.NewLine) === 0) {
  3570→    expr = parseUpdateExpression(parser, context, expr, start);
  3571→  } else if ((parser.getToken() & Token.IsMemberOrCallExpression) === Token.IsMemberOrCallExpression) {
  3572→    context = (context | Context.DisallowIn) ^ Context.DisallowIn;
  3573→
  3574→    switch (parser.getToken()) {
  3575→      /* Property */
  3576→      case Token.Period: {
  3577→        nextToken(parser, (context | Context.AllowEscapedKeyword | Context.InGlobal) ^ Context.InGlobal);
  3578→
  3579→        if (context & Context.InClass && parser.getToken() === Token.PrivateField && parser.tokenValue === 'super') {
  3580→          parser.report(Errors.InvalidSuperPrivate);
  3581→        }
  3582→
  3583→        parser.assignable = AssignmentKind.Assignable;
  3584→
  3585→        const property = parsePropertyOrPrivatePropertyName(parser, context | Context.TaggedTemplate, privateScope);
  3586→
  3587→        expr = parser.finishNode<ESTree.MemberExpression>(
  3588→          {
  3589→            type: 'MemberExpression',
  3590→            object: expr,
  3591→            computed: false,
  3592→            property,
  3593→            optional: false,
  3594→          },
  3595→          start,
  3596→        );
  3597→        break;
  3598→      }
  3599→
  3600→      /* Property */
  3601→      case Token.LeftBracket: {
  3602→        let restoreHasOptionalChaining = false;
  3603→        if ((parser.flags & Flags.HasOptionalChaining) === Flags.HasOptionalChaining) {
  3604→          restoreHasOptionalChaining = true;
  3605→          parser.flags = (parser.flags | Flags.HasOptionalChaining) ^ Flags.HasOptionalChaining;
  3606→        }
  3607→
  3608→        nextToken(parser, context | Context.AllowRegExp);
  3609→
  3610→        const { tokenStart } = parser;
  3611→        const property = parseExpressions(parser, context, privateScope, inGroup, 1, tokenStart);
  3612→
  3613→        consume(parser, context, Token.RightBracket);
  3614→
  3615→        parser.assignable = AssignmentKind.Assignable;


[5297 more lines in file. Use offset=3617 to continue.]