  3871→function parsePrimaryExpression(
  3872→  parser: Parser,
  3873→  context: Context,
  3874→  privateScope: PrivateScope | undefined,
  3875→  kind: BindingKind,
  3876→  inNew: 0 | 1,
  3877→  canAssign: 0 | 1,
  3878→  inGroup: 0 | 1,
  3879→  isLHS: 0 | 1,
  3880→  start: Location,
  3881→): any {
  3882→  // PrimaryExpression ::
  3883→  //   'this'
  3884→  //   'null'
  3885→  //   'true'
  3886→  //   'false'
  3887→  //   Identifier
  3888→  //   Number
  3889→  //   String
  3890→  //   BigIntLiteral
  3891→  //   ArrayLiteral
  3892→  //   ObjectLiteral
  3893→  //   RegExpLiteral
  3894→  //   ClassLiteral
  3895→  //   ImportCall
  3896→  //   ImportMeta
  3897→  //   '(' Expression ')'
  3898→  //   TemplateLiteral
  3899→  //   AsyncFunctionLiteral
  3900→  //   YieldExpression
  3901→  //   AwaitExpression
  3902→  //   PrivateField
  3903→  //   Decorator
  3904→  //   Intrinsic
  3905→  //   JSX
  3906→
  3907→  if ((parser.getToken() & Token.IsIdentifier) === Token.IsIdentifier) {
  3908→    switch (parser.getToken()) {
  3909→      case Token.AwaitKeyword:
  3910→        return parseAwaitExpressionOrIdentifier(parser, context, privateScope, inNew, inGroup, start);
  3911→      case Token.YieldKeyword:
  3912→        return parseYieldExpressionOrIdentifier(parser, context, privateScope, inGroup, canAssign, start);
  3913→      case Token.AsyncKeyword:
  3914→        return parseAsyncExpression(parser, context, privateScope, inGroup, isLHS, canAssign, inNew, start);
  3915→      default: // ignore
  3916→    }
  3917→
  3918→    const { tokenValue } = parser;
  3919→    const token = parser.getToken();
  3920→
  3921→    const expr = parseIdentifier(parser, context | Context.TaggedTemplate);
  3922→
  3923→    if (parser.getToken() === Token.Arrow) {
  3924→      if (!isLHS) parser.report(Errors.Unexpected);
  3925→      classifyIdentifier(parser, context, token);
  3926→      if ((token & Token.FutureReserved) === Token.FutureReserved) {
  3927→        parser.flags |= Flags.HasStrictReserved;
  3928→      }
  3929→      return parseArrowFromIdentifier(parser, context, privateScope, tokenValue, expr, inNew, canAssign, 0, start);
  3930→    }
  3931→
  3932→    if (
  3933→      context & Context.InClass &&
  3934→      !(context & Context.InMethodOrFunction) &&
  3935→      !(context & Context.InArgumentList) &&
  3936→      // Use tokenValue instead of token === Token.Arguments
  3937→      // because "arguments" maybe escaped like argument\u0073
  3938→      parser.tokenValue === 'arguments'
  3939→    )
  3940→      parser.report(Errors.InvalidClassFieldArgEval);
  3941→
  3942→    // Only a "simple validation" is done here to handle 'let' edge cases
  3943→
  3944→    if ((token & Token.Type) === (Token.LetKeyword & Token.Type)) {
  3945→      if (context & Context.Strict) parser.report(Errors.StrictInvalidLetInExprPos);
  3946→      if (kind & (BindingKind.Let | BindingKind.Const)) parser.report(Errors.InvalidLetConstBinding);
  3947→    }
  3948→
  3949→    parser.assignable =
  3950→      context & Context.Strict && (token & Token.IsEvalOrArguments) === Token.IsEvalOrArguments
  3951→        ? AssignmentKind.CannotAssign
  3952→        : AssignmentKind.Assignable;
  3953→
  3954→    return expr;
  3955→  }
  3956→
  3957→  if ((parser.getToken() & Token.IsStringOrNumber) === Token.IsStringOrNumber) {
  3958→    return parseLiteral(parser, context);
  3959→  }
  3960→
  3961→  // Update + Unary + Primary expression
  3962→  switch (parser.getToken()) {
  3963→    case Token.Increment:
  3964→    case Token.Decrement:
  3965→      return parseUpdateExpressionPrefixed(parser, context, privateScope, inNew, isLHS, start);
  3966→    case Token.DeleteKeyword:
  3967→    case Token.Negate:
  3968→    case Token.Complement:
  3969→    case Token.Add:
  3970→    case Token.Subtract:
  3971→    case Token.TypeofKeyword:
  3972→    case Token.VoidKeyword:
  3973→      return parseUnaryExpression(parser, context, privateScope, isLHS, inGroup);
  3974→    case Token.FunctionKeyword:
  3975→      return parseFunctionExpression(parser, context, privateScope, /* isAsync */ 0, inGroup, start);
  3976→    case Token.LeftBrace:
  3977→      return parseObjectLiteral(parser, context, privateScope, canAssign ? 0 : 1, inGroup);
  3978→    case Token.LeftBracket:
  3979→      return parseArrayLiteral(parser, context, privateScope, canAssign ? 0 : 1, inGroup);
  3980→    case Token.LeftParen:
  3981→      return parseParenthesizedExpression(
  3982→        parser,
  3983→        context | Context.TaggedTemplate,
  3984→        privateScope,
  3985→        canAssign,
  3986→        BindingKind.ArgumentList,
  3987→        Origin.None,
  3988→        start,
  3989→      );
  3990→    case Token.FalseKeyword:
  3991→    case Token.TrueKeyword:
  3992→    case Token.NullKeyword:
  3993→      return parseNullOrTrueOrFalseLiteral(parser, context);
  3994→    case Token.ThisKeyword:
  3995→      return parseThisExpression(parser, context);
  3996→    case Token.RegularExpression:
  3997→      return parseRegExpLiteral(parser, context);
  3998→    case Token.Decorator:
  3999→    case Token.ClassKeyword:
  4000→      return parseClassExpression(parser, context, privateScope, inGroup, start);
  4001→    case Token.SuperKeyword:
  4002→      return parseSuperExpression(parser, context);
  4003→    case Token.TemplateSpan:
  4004→      return parseTemplateLiteral(parser, context);
  4005→    case Token.TemplateContinuation:
  4006→      return parseTemplate(parser, context, privateScope);
  4007→    case Token.NewKeyword:
  4008→      return parseNewExpression(parser, context, privateScope, inGroup);
  4009→    case Token.BigIntLiteral:
  4010→      return parseBigIntLiteral(parser, context);
  4011→    case Token.PrivateField:
  4012→      return parsePrivateIdentifier(parser, context, privateScope, PropertyKind.None);
  4013→    case Token.ImportKeyword:
  4014→      return parseImportCallOrMetaExpression(parser, context, privateScope, inNew, inGroup, start);
  4015→    case Token.LessThan:
  4016→      if (parser.options.jsx)
  4017→        return parseJSXRootElementOrFragment(parser, context, privateScope, /*inJSXChild*/ 0, parser.tokenStart);
  4018→    default:
  4019→      if (isValidIdentifier(context, parser.getToken())) return parseIdentifierOrArrow(parser, context, privateScope);
  4020→      parser.report(Errors.UnexpectedToken, KeywordDescTable[parser.getToken() & Token.Type]);
  4021→  }
  4022→}
  4023→
  4024→/**
  4025→ * Parses Import call expression
  4026→ *
  4027→ * @param parser  Parser object
  4028→ * @param context Context masks
  4029→ * @param inGroup
  4030→ * @param start
  4031→ */
  4032→function parseImportCallOrMetaExpression(
  4033→  parser: Parser,
  4034→  context: Context,
  4035→  privateScope: PrivateScope | undefined,
  4036→  inNew: 0 | 1,
  4037→  inGroup: 0 | 1,
  4038→  start: Location,
  4039→): ESTree.ImportExpression | ESTree.MetaProperty {
  4040→  // ImportCall[Yield, Await]:
  4041→  //  import(AssignmentExpression[+In, ?Yield, ?Await])
  4042→
  4043→  let expr: ESTree.Identifier | ESTree.ImportExpression = parseIdentifier(parser, context);
  4044→
  4045→  if (parser.getToken() === Token.Period) {

[4868 more lines in file. Use offset=4046 to continue.]