github.com/evanw/esbuild/internal/js_parser.parser.lexer (field)

1146 uses

	github.com/evanw/esbuild/internal/js_parser (current package)
		js_parser.go#L38: 	lexer                    js_lexer.Lexer
		js_parser.go#L1681: 	if p.lexer.IsLegacyOctalLiteral {
		js_parser.go#L1685: 		p.legacyOctalLiterals[e] = p.lexer.Range()
		js_parser.go#L1692: 	loc := p.lexer.Loc()
		js_parser.go#L1693: 	if p.lexer.LegacyOctalLoc.Start > loc.Start {
		js_parser.go#L1694: 		legacyOctalLoc = p.lexer.LegacyOctalLoc
		js_parser.go#L1697: 		Value:          p.lexer.StringLiteral,
		js_parser.go#L1699: 		PreferTemplate: p.lexer.Token == js_lexer.TNoSubstitutionTemplateLiteral,
		js_parser.go#L1701: 	p.lexer.Next()
		js_parser.go#L1720: 	keyRange := p.lexer.Range()
		js_parser.go#L1723: 	switch p.lexer.Token {
		js_parser.go#L1725: 		key = js_ast.Expr{Loc: p.lexer.Loc(), Data: &js_ast.ENumber{Value: p.lexer.Number}}
		js_parser.go#L1727: 		p.lexer.Next()
		js_parser.go#L1733: 		key = js_ast.Expr{Loc: p.lexer.Loc(), Data: &js_ast.EBigInt{Value: p.lexer.Identifier}}
		js_parser.go#L1734: 		p.markSyntaxFeature(compat.BigInt, p.lexer.Range())
		js_parser.go#L1735: 		p.lexer.Next()
		js_parser.go#L1739: 			p.lexer.Expected(js_lexer.TIdentifier)
		js_parser.go#L1741: 		key = js_ast.Expr{Loc: p.lexer.Loc(), Data: &js_ast.EPrivateIdentifier{Ref: p.storeNameInRef(p.lexer.Identifier)}}
		js_parser.go#L1742: 		p.lexer.Next()
		js_parser.go#L1746: 		p.markSyntaxFeature(compat.ObjectExtensions, p.lexer.Range())
		js_parser.go#L1747: 		p.lexer.Next()
		js_parser.go#L1748: 		wasIdentifier := p.lexer.Token == js_lexer.TIdentifier
		js_parser.go#L1752: 		if p.options.ts.Parse && p.lexer.Token == js_lexer.TColon && wasIdentifier && opts.isClass {
		js_parser.go#L1755: 				p.lexer.Next()
		js_parser.go#L1757: 				p.lexer.Expect(js_lexer.TCloseBracket)
		js_parser.go#L1758: 				p.lexer.Expect(js_lexer.TColon)
		js_parser.go#L1760: 				p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L1767: 		p.lexer.Expect(js_lexer.TCloseBracket)
		js_parser.go#L1772: 			p.lexer.Unexpected()
		js_parser.go#L1774: 		p.lexer.Next()
		js_parser.go#L1779: 		name := p.lexer.Identifier
		js_parser.go#L1780: 		raw := p.lexer.Raw()
		js_parser.go#L1781: 		nameRange := p.lexer.Range()
		js_parser.go#L1782: 		if !p.lexer.IsIdentifierOrKeyword() {
		js_parser.go#L1783: 			p.lexer.Expect(js_lexer.TIdentifier)
		js_parser.go#L1785: 		p.lexer.Next()
		js_parser.go#L1790: 			couldBeModifierKeyword := p.lexer.IsIdentifierOrKeyword()
		js_parser.go#L1792: 				switch p.lexer.Token {
		js_parser.go#L1815: 					if !opts.isAsync && raw == name && !p.lexer.HasNewlineBefore {
		js_parser.go#L1840: 		if !opts.isClass && kind == js_ast.PropertyNormal && p.lexer.Token != js_lexer.TColon &&
		js_parser.go#L1841: 			p.lexer.Token != js_lexer.TOpenParen && p.lexer.Token != js_lexer.TLessThan && !opts.isGenerator &&
		js_parser.go#L1851: 			if errors != nil && p.lexer.Token == js_lexer.TEquals {
		js_parser.go#L1852: 				errors.invalidExprDefaultValue = p.lexer.Range()
		js_parser.go#L1853: 				p.lexer.Next()
		js_parser.go#L1871: 		if opts.isClass && (p.lexer.Token == js_lexer.TQuestion || p.lexer.Token == js_lexer.TExclamation) {
		js_parser.go#L1872: 			p.lexer.Next()
		js_parser.go#L1882: 		!opts.isGenerator && p.lexer.Token != js_lexer.TOpenParen {
		js_parser.go#L1894: 		if p.options.ts.Parse && p.lexer.Token == js_lexer.TColon {
		js_parser.go#L1895: 			p.lexer.Next()
		js_parser.go#L1899: 		if p.lexer.Token == js_lexer.TEquals {
		js_parser.go#L1900: 			p.lexer.Next()
		js_parser.go#L1920: 		p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L1932: 	if p.lexer.Token == js_lexer.TOpenParen || kind != js_ast.PropertyNormal ||
		js_parser.go#L1934: 		if p.lexer.Token == js_lexer.TOpenParen && kind != js_ast.PropertyGet && kind != js_ast.PropertySet {
		js_parser.go#L1935: 			p.markSyntaxFeature(compat.ObjectExtensions, p.lexer.Range())
		js_parser.go#L1937: 		loc := p.lexer.Loc()
		js_parser.go#L2058: 	p.lexer.Expect(js_lexer.TColon)
		js_parser.go#L2072: 	switch p.lexer.Token {
		js_parser.go#L2074: 		p.lexer.Next()
		js_parser.go#L2075: 		value := js_ast.Binding{Loc: p.lexer.Loc(), Data: &js_ast.BIdentifier{Ref: p.storeNameInRef(p.lexer.Identifier)}}
		js_parser.go#L2076: 		p.lexer.Expect(js_lexer.TIdentifier)
		js_parser.go#L2083: 		key = js_ast.Expr{Loc: p.lexer.Loc(), Data: &js_ast.ENumber{Value: p.lexer.Number}}
		js_parser.go#L2085: 		p.lexer.Next()
		js_parser.go#L2091: 		key = js_ast.Expr{Loc: p.lexer.Loc(), Data: &js_ast.EBigInt{Value: p.lexer.Identifier}}
		js_parser.go#L2092: 		p.markSyntaxFeature(compat.BigInt, p.lexer.Range())
		js_parser.go#L2093: 		p.lexer.Next()
		js_parser.go#L2097: 		p.lexer.Next()
		js_parser.go#L2099: 		p.lexer.Expect(js_lexer.TCloseBracket)
		js_parser.go#L2102: 		name := p.lexer.Identifier
		js_parser.go#L2103: 		loc := p.lexer.Loc()
		js_parser.go#L2104: 		if !p.lexer.IsIdentifierOrKeyword() {
		js_parser.go#L2105: 			p.lexer.Expect(js_lexer.TIdentifier)
		js_parser.go#L2107: 		p.lexer.Next()
		js_parser.go#L2110: 		if p.lexer.Token != js_lexer.TColon && p.lexer.Token != js_lexer.TOpenParen {
		js_parser.go#L2115: 			if p.lexer.Token == js_lexer.TEquals {
		js_parser.go#L2116: 				p.lexer.Next()
		js_parser.go#L2129: 	p.lexer.Expect(js_lexer.TColon)
		js_parser.go#L2133: 	if p.lexer.Token == js_lexer.TEquals {
		js_parser.go#L2134: 		p.lexer.Next()
		js_parser.go#L2148: 	arrowLoc := p.lexer.Loc()
		js_parser.go#L2151: 	if p.lexer.HasNewlineBefore {
		js_parser.go#L2152: 		p.log.AddRangeError(&p.source, p.lexer.Range(), "Unexpected newline before \"=>\"")
		js_parser.go#L2156: 	p.lexer.Expect(js_lexer.TEqualsGreaterThan)
		js_parser.go#L2165: 	if p.lexer.Token == js_lexer.TOpenBrace {
		js_parser.go#L2167: 		p.afterArrowBodyLoc = p.lexer.Loc()
		js_parser.go#L2189: 	if !p.lexer.HasNewlineBefore && p.lexer.Token == js_lexer.TFunction {
		js_parser.go#L2196: 	if !p.lexer.HasNewlineBefore && level < js_ast.LMember {
		js_parser.go#L2197: 		switch p.lexer.Token {
		js_parser.go#L2210: 			ref := p.storeNameInRef(p.lexer.Identifier)
		js_parser.go#L2211: 			arg := js_ast.Arg{Binding: js_ast.Binding{Loc: p.lexer.Loc(), Data: &js_ast.BIdentifier{Ref: ref}}}
		js_parser.go#L2212: 			p.lexer.Next()
		js_parser.go#L2224: 			p.lexer.Next()
		js_parser.go#L2231: 				p.lexer.Next()
		js_parser.go#L2243: 	p.lexer.Next()
		js_parser.go#L2244: 	isGenerator := p.lexer.Token == js_lexer.TAsterisk
		js_parser.go#L2246: 		p.markSyntaxFeature(compat.Generator, p.lexer.Range())
		js_parser.go#L2247: 		p.lexer.Next()
		js_parser.go#L2257: 	if p.lexer.Token == js_lexer.TIdentifier {
		js_parser.go#L2259: 		name = &js_ast.LocRef{Loc: p.lexer.Loc()}
		js_parser.go#L2260: 		if text := p.lexer.Identifier; text != "arguments" {
		js_parser.go#L2265: 		p.lexer.Next()
		js_parser.go#L2314: 	for p.lexer.Token != js_lexer.TCloseParen {
		js_parser.go#L2315: 		itemLoc := p.lexer.Loc()
		js_parser.go#L2316: 		isSpread := p.lexer.Token == js_lexer.TDotDotDot
		js_parser.go#L2319: 			spreadRange = p.lexer.Range()
		js_parser.go#L2321: 			p.lexer.Next()
		js_parser.go#L2327: 		p.latestArrowArgLoc = p.lexer.Loc()
		js_parser.go#L2335: 		if p.options.ts.Parse && p.lexer.Token == js_lexer.TColon {
		js_parser.go#L2336: 			typeColonRange = p.lexer.Range()
		js_parser.go#L2337: 			p.lexer.Next()
		js_parser.go#L2342: 		if p.options.ts.Parse && p.lexer.Token == js_lexer.TEquals && p.lexer.Loc() != p.forbidSuffixAfterAsLoc {
		js_parser.go#L2343: 			p.lexer.Next()
		js_parser.go#L2348: 		if p.lexer.Token != js_lexer.TComma {
		js_parser.go#L2355: 			commaAfterSpread = p.lexer.Loc()
		js_parser.go#L2359: 		p.lexer.Next()
		js_parser.go#L2363: 	p.lexer.Expect(js_lexer.TCloseParen)
		js_parser.go#L2372: 	if p.lexer.Token == js_lexer.TEqualsGreaterThan || opts.forceArrowFn || (p.options.ts.Parse && p.lexer.Token == js_lexer.TColon) {
		js_parser.go#L2397: 		if p.lexer.Token == js_lexer.TEqualsGreaterThan || (len(invalidLog) == 0 &&
		js_parser.go#L2455: 	p.lexer.Expected(js_lexer.TEqualsGreaterThan)
		js_parser.go#L2617: 	loc := p.lexer.Loc()
		js_parser.go#L2619: 	switch p.lexer.Token {
		js_parser.go#L2621: 		superRange := p.lexer.Range()
		js_parser.go#L2622: 		p.lexer.Next()
		js_parser.go#L2624: 		switch p.lexer.Token {
		js_parser.go#L2638: 		p.lexer.Next()
		js_parser.go#L2648: 			p.lexer.Expect(js_lexer.TCloseParen)
		js_parser.go#L2658: 		p.lexer.Next()
		js_parser.go#L2662: 		p.lexer.Next()
		js_parser.go#L2666: 		p.lexer.Next()
		js_parser.go#L2670: 		p.lexer.Next()
		js_parser.go#L2674: 		name := p.lexer.Identifier
		js_parser.go#L2675: 		nameRange := p.lexer.Range()
		js_parser.go#L2676: 		raw := p.lexer.Raw()
		js_parser.go#L2677: 		p.lexer.Next()
		js_parser.go#L2699: 					if p.lexer.Token == js_lexer.TAsteriskAsterisk {
		js_parser.go#L2700: 						p.lexer.Unexpected()
		js_parser.go#L2719: 			} else if !p.lexer.HasNewlineBefore {
		js_parser.go#L2721: 				switch p.lexer.Token {
		js_parser.go#L2731: 		if p.lexer.Token == js_lexer.TEqualsGreaterThan {
		js_parser.go#L2749: 		head := p.lexer.StringLiteral
		js_parser.go#L2750: 		if p.lexer.LegacyOctalLoc.Start > loc.Start {
		js_parser.go#L2751: 			legacyOctalLoc = p.lexer.LegacyOctalLoc
		js_parser.go#L2801: 		value := js_ast.Expr{Loc: loc, Data: &js_ast.ENumber{Value: p.lexer.Number}}
		js_parser.go#L2803: 		p.lexer.Next()
		js_parser.go#L2807: 		value := p.lexer.Identifier
		js_parser.go#L2808: 		p.markSyntaxFeature(compat.BigInt, p.lexer.Range())
		js_parser.go#L2809: 		p.lexer.Next()
		js_parser.go#L2813: 		p.lexer.ScanRegExp()
		js_parser.go#L2814: 		value := p.lexer.Raw()
		js_parser.go#L2815: 		p.lexer.Next()
		js_parser.go#L2819: 		p.lexer.Next()
		js_parser.go#L2821: 		if p.lexer.Token == js_lexer.TAsteriskAsterisk {
		js_parser.go#L2822: 			p.lexer.Unexpected()
		js_parser.go#L2827: 		p.lexer.Next()
		js_parser.go#L2829: 		if p.lexer.Token == js_lexer.TAsteriskAsterisk {
		js_parser.go#L2830: 			p.lexer.Unexpected()
		js_parser.go#L2835: 		p.lexer.Next()
		js_parser.go#L2837: 		if p.lexer.Token == js_lexer.TAsteriskAsterisk {
		js_parser.go#L2838: 			p.lexer.Unexpected()
		js_parser.go#L2850: 		p.lexer.Next()
		js_parser.go#L2852: 		if p.lexer.Token == js_lexer.TAsteriskAsterisk {
		js_parser.go#L2853: 			p.lexer.Unexpected()
		js_parser.go#L2858: 		p.lexer.Next()
		js_parser.go#L2860: 		if p.lexer.Token == js_lexer.TAsteriskAsterisk {
		js_parser.go#L2861: 			p.lexer.Unexpected()
		js_parser.go#L2866: 		p.lexer.Next()
		js_parser.go#L2868: 		if p.lexer.Token == js_lexer.TAsteriskAsterisk {
		js_parser.go#L2869: 			p.lexer.Unexpected()
		js_parser.go#L2874: 		p.lexer.Next()
		js_parser.go#L2876: 		if p.lexer.Token == js_lexer.TAsteriskAsterisk {
		js_parser.go#L2877: 			p.lexer.Unexpected()
		js_parser.go#L2882: 		p.lexer.Next()
		js_parser.go#L2886: 		p.lexer.Next()
		js_parser.go#L2893: 		classKeyword := p.lexer.Range()
		js_parser.go#L2895: 		p.lexer.Next()
		js_parser.go#L2901: 		if p.lexer.Token == js_lexer.TIdentifier && !js_lexer.StrictModeReservedWords[p.lexer.Identifier] {
		js_parser.go#L2902: 			name = &js_ast.LocRef{Loc: p.lexer.Loc(), Ref: p.newSymbol(js_ast.SymbolOther, p.lexer.Identifier)}
		js_parser.go#L2903: 			p.lexer.Next()
		js_parser.go#L2917: 		p.lexer.Next()
		js_parser.go#L2920: 		if p.lexer.Token == js_lexer.TDot {
		js_parser.go#L2921: 			p.lexer.Next()
		js_parser.go#L2922: 			if p.lexer.Token != js_lexer.TIdentifier || p.lexer.Identifier != "target" {
		js_parser.go#L2923: 				p.lexer.Unexpected()
		js_parser.go#L2925: 			r := logger.Range{Loc: loc, Len: p.lexer.Range().End() - loc.Start}
		js_parser.go#L2927: 			p.lexer.Next()
		js_parser.go#L2936: 			if p.lexer.Token == js_lexer.TExclamation && !p.lexer.HasNewlineBefore {
		js_parser.go#L2937: 				p.lexer.Next()
		js_parser.go#L2941: 			if p.lexer.Token == js_lexer.TLessThan {
		js_parser.go#L2946: 		if p.lexer.Token == js_lexer.TOpenParen {
		js_parser.go#L2953: 		p.lexer.Next()
		js_parser.go#L2954: 		isSingleLine := !p.lexer.HasNewlineBefore
		js_parser.go#L2963: 		for p.lexer.Token != js_lexer.TCloseBracket {
		js_parser.go#L2964: 			switch p.lexer.Token {
		js_parser.go#L2966: 				items = append(items, js_ast.Expr{Loc: p.lexer.Loc(), Data: &js_ast.EMissing{}})
		js_parser.go#L2970: 					errors.arraySpreadFeature = p.lexer.Range()
		js_parser.go#L2972: 					p.markSyntaxFeature(compat.ArraySpread, p.lexer.Range())
		js_parser.go#L2974: 				dotsLoc := p.lexer.Loc()
		js_parser.go#L2975: 				p.lexer.Next()
		js_parser.go#L2980: 				if p.lexer.Token == js_lexer.TComma {
		js_parser.go#L2981: 					commaAfterSpread = p.lexer.Loc()
		js_parser.go#L2989: 			if p.lexer.Token != js_lexer.TComma {
		js_parser.go#L2992: 			if p.lexer.HasNewlineBefore {
		js_parser.go#L2995: 			p.lexer.Next()
		js_parser.go#L2996: 			if p.lexer.HasNewlineBefore {
		js_parser.go#L3001: 		if p.lexer.HasNewlineBefore {
		js_parser.go#L3004: 		p.lexer.Expect(js_lexer.TCloseBracket)
		js_parser.go#L3024: 		p.lexer.Next()
		js_parser.go#L3025: 		isSingleLine := !p.lexer.HasNewlineBefore
		js_parser.go#L3034: 		for p.lexer.Token != js_lexer.TCloseBrace {
		js_parser.go#L3035: 			if p.lexer.Token == js_lexer.TDotDotDot {
		js_parser.go#L3036: 				p.lexer.Next()
		js_parser.go#L3044: 				if p.lexer.Token == js_lexer.TComma {
		js_parser.go#L3045: 					commaAfterSpread = p.lexer.Loc()
		js_parser.go#L3054: 			if p.lexer.Token != js_lexer.TComma {
		js_parser.go#L3057: 			if p.lexer.HasNewlineBefore {
		js_parser.go#L3060: 			p.lexer.Next()
		js_parser.go#L3061: 			if p.lexer.HasNewlineBefore {
		js_parser.go#L3066: 		if p.lexer.HasNewlineBefore {
		js_parser.go#L3069: 		p.lexer.Expect(js_lexer.TCloseBrace)
		js_parser.go#L3123: 			oldLexer := p.lexer
		js_parser.go#L3124: 			p.lexer.Next()
		js_parser.go#L3128: 			if p.lexer.Token == js_lexer.TIdentifier {
		js_parser.go#L3129: 				p.lexer.Next()
		js_parser.go#L3130: 				if p.lexer.Token == js_lexer.TComma {
		js_parser.go#L3132: 				} else if p.lexer.Token == js_lexer.TExtends {
		js_parser.go#L3133: 					p.lexer.Next()
		js_parser.go#L3134: 					isTSArrowFn = p.lexer.Token != js_lexer.TEquals && p.lexer.Token != js_lexer.TGreaterThan
		js_parser.go#L3139: 			p.lexer = oldLexer
		js_parser.go#L3143: 				p.lexer.Expect(js_lexer.TOpenParen)
		js_parser.go#L3150: 			p.lexer.NextInsideJSXElement()
		js_parser.go#L3157: 			p.lexer.Next()
		js_parser.go#L3167: 				p.lexer.Expect(js_lexer.TOpenParen)
		js_parser.go#L3172: 			p.lexer.Next()
		js_parser.go#L3174: 			p.lexer.ExpectGreaterThan(false /* isInsideJSXElement */)
		js_parser.go#L3179: 		p.lexer.Unexpected()
		js_parser.go#L3183: 		p.lexer.Next()
		js_parser.go#L3187: 		p.lexer.Unexpected()
		js_parser.go#L3194: 	isStar := p.lexer.Token == js_lexer.TAsterisk
		js_parser.go#L3196: 		if p.lexer.HasNewlineBefore {
		js_parser.go#L3197: 			p.lexer.Unexpected()
		js_parser.go#L3199: 		p.lexer.Next()
		js_parser.go#L3205: 	switch p.lexer.Token {
		js_parser.go#L3210: 		if isStar || !p.lexer.HasNewlineBefore {
		js_parser.go#L3220: 	switch p.lexer.Token {
		js_parser.go#L3231: 		return !p.allowIn && p.lexer.IsContextualKeyword("of")
		js_parser.go#L3241: 	if p.lexer.Token == js_lexer.TDot {
		js_parser.go#L3243: 		p.lexer.Next()
		js_parser.go#L3244: 		if p.lexer.IsContextualKeyword("meta") {
		js_parser.go#L3245: 			r := p.lexer.Range()
		js_parser.go#L3246: 			p.lexer.Next()
		js_parser.go#L3254: 			p.lexer.ExpectedString("\"meta\"")
		js_parser.go#L3267: 	p.lexer.PreserveAllCommentsBefore = true
		js_parser.go#L3268: 	p.lexer.Expect(js_lexer.TOpenParen)
		js_parser.go#L3269: 	comments := p.lexer.CommentsToPreserveBefore
		js_parser.go#L3270: 	p.lexer.PreserveAllCommentsBefore = false
		js_parser.go#L3273: 	p.lexer.Expect(js_lexer.TCloseParen)
		js_parser.go#L3292: 	hadPureCommentBefore := p.lexer.HasPureCommentBefore && !p.options.ignoreDCEAnnotations
		js_parser.go#L3316: 		if p.lexer.Loc() == p.afterArrowBodyLoc {
		js_parser.go#L3318: 				switch p.lexer.Token {
		js_parser.go#L3323: 					p.lexer.Next()
		js_parser.go#L3333: 		if p.lexer.Loc() == p.forbidSuffixAfterAsLoc {
		js_parser.go#L3342: 		switch p.lexer.Token {
		js_parser.go#L3344: 			p.lexer.Next()
		js_parser.go#L3346: 			if p.lexer.Token == js_lexer.TPrivateIdentifier && p.allowPrivateIdentifiers {
		js_parser.go#L3350: 					p.lexer.Expected(js_lexer.TIdentifier)
		js_parser.go#L3352: 				name := p.lexer.Identifier
		js_parser.go#L3353: 				nameLoc := p.lexer.Loc()
		js_parser.go#L3354: 				p.lexer.Next()
		js_parser.go#L3364: 				if !p.lexer.IsIdentifierOrKeyword() {
		js_parser.go#L3365: 					p.lexer.Expect(js_lexer.TIdentifier)
		js_parser.go#L3367: 				name := p.lexer.Identifier
		js_parser.go#L3368: 				nameLoc := p.lexer.Loc()
		js_parser.go#L3369: 				p.lexer.Next()
		js_parser.go#L3381: 			p.lexer.Next()
		js_parser.go#L3383: 			switch p.lexer.Token {
		js_parser.go#L3386: 				p.lexer.Next()
		js_parser.go#L3396: 				p.lexer.Expect(js_lexer.TCloseBracket)
		js_parser.go#L3417: 					p.lexer.Expected(js_lexer.TIdentifier)
		js_parser.go#L3420: 				if p.lexer.Token != js_lexer.TOpenParen {
		js_parser.go#L3421: 					p.lexer.Expected(js_lexer.TOpenParen)
		js_parser.go#L3433: 				if p.lexer.Token == js_lexer.TPrivateIdentifier && p.allowPrivateIdentifiers {
		js_parser.go#L3435: 					name := p.lexer.Identifier
		js_parser.go#L3436: 					nameLoc := p.lexer.Loc()
		js_parser.go#L3437: 					p.lexer.Next()
		js_parser.go#L3446: 					if !p.lexer.IsIdentifierOrKeyword() {
		js_parser.go#L3447: 						p.lexer.Expect(js_lexer.TIdentifier)
		js_parser.go#L3449: 					name := p.lexer.Identifier
		js_parser.go#L3450: 					nameLoc := p.lexer.Loc()
		js_parser.go#L3451: 					p.lexer.Next()
		js_parser.go#L3465: 				p.log.AddRangeError(&p.source, p.lexer.Range(), "Template literals cannot have an optional chain as a tag")
		js_parser.go#L3467: 			p.markSyntaxFeature(compat.TemplateLiteral, p.lexer.Range())
		js_parser.go#L3468: 			head := p.lexer.StringLiteral
		js_parser.go#L3469: 			headRaw := p.lexer.RawTemplateContents()
		js_parser.go#L3470: 			p.lexer.Next()
		js_parser.go#L3476: 				p.log.AddRangeError(&p.source, p.lexer.Range(), "Template literals cannot have an optional chain as a tag")
		js_parser.go#L3478: 			p.markSyntaxFeature(compat.TemplateLiteral, p.lexer.Range())
		js_parser.go#L3479: 			head := p.lexer.StringLiteral
		js_parser.go#L3480: 			headRaw := p.lexer.RawTemplateContents()
		js_parser.go#L3498: 			p.lexer.Next()
		js_parser.go#L3508: 			p.lexer.Expect(js_lexer.TCloseBracket)
		js_parser.go#L3531: 			p.lexer.Next()
		js_parser.go#L3537: 			if p.options.ts.Parse && left.Loc == p.latestArrowArgLoc && (p.lexer.Token == js_lexer.TColon ||
		js_parser.go#L3538: 				p.lexer.Token == js_lexer.TCloseParen || p.lexer.Token == js_lexer.TComma) {
		js_parser.go#L3540: 					p.lexer.Unexpected()
		js_parser.go#L3542: 				errors.invalidExprAfterQuestion = p.lexer.Range()
		js_parser.go#L3554: 			p.lexer.Expect(js_lexer.TColon)
		js_parser.go#L3560: 			if p.lexer.HasNewlineBefore {
		js_parser.go#L3564: 				p.lexer.Unexpected()
		js_parser.go#L3569: 			p.lexer.Next()
		js_parser.go#L3573: 			if p.lexer.HasNewlineBefore || level >= js_ast.LPostfix {
		js_parser.go#L3576: 			p.lexer.Next()
		js_parser.go#L3580: 			if p.lexer.HasNewlineBefore || level >= js_ast.LPostfix {
		js_parser.go#L3583: 			p.lexer.Next()
		js_parser.go#L3590: 			p.lexer.Next()
		js_parser.go#L3597: 			p.lexer.Next()
		js_parser.go#L3604: 			p.lexer.Next()
		js_parser.go#L3611: 			p.lexer.Next()
		js_parser.go#L3618: 			p.lexer.Next()
		js_parser.go#L3625: 			p.lexer.Next()
		js_parser.go#L3632: 			p.lexer.Next()
		js_parser.go#L3639: 			p.lexer.Next()
		js_parser.go#L3646: 			p.lexer.Next()
		js_parser.go#L3653: 			p.lexer.Next()
		js_parser.go#L3660: 			p.lexer.Next()
		js_parser.go#L3667: 			p.lexer.Next()
		js_parser.go#L3674: 			p.lexer.Next()
		js_parser.go#L3681: 			p.lexer.Next()
		js_parser.go#L3688: 			p.lexer.Next()
		js_parser.go#L3695: 			p.lexer.Next()
		js_parser.go#L3702: 			p.lexer.Next()
		js_parser.go#L3717: 			p.lexer.Next()
		js_parser.go#L3724: 			p.lexer.Next()
		js_parser.go#L3731: 			p.lexer.Next()
		js_parser.go#L3738: 			p.lexer.Next()
		js_parser.go#L3745: 			p.lexer.Next()
		js_parser.go#L3752: 			p.lexer.Next()
		js_parser.go#L3759: 			p.lexer.Next()
		js_parser.go#L3766: 			p.lexer.Next()
		js_parser.go#L3773: 			p.lexer.Next()
		js_parser.go#L3780: 			p.lexer.Next()
		js_parser.go#L3787: 			p.lexer.Next()
		js_parser.go#L3794: 			p.lexer.Next()
		js_parser.go#L3804: 				p.lexer.Unexpected()
		js_parser.go#L3807: 			p.lexer.Next()
		js_parser.go#L3814: 				if p.lexer.Token == js_lexer.TQuestionQuestion {
		js_parser.go#L3815: 					p.lexer.Unexpected()
		js_parser.go#L3823: 			p.lexer.Next()
		js_parser.go#L3833: 				p.lexer.Unexpected()
		js_parser.go#L3836: 			p.lexer.Next()
		js_parser.go#L3842: 				if p.lexer.Token == js_lexer.TQuestionQuestion {
		js_parser.go#L3843: 					p.lexer.Unexpected()
		js_parser.go#L3851: 			p.lexer.Next()
		js_parser.go#L3858: 			p.lexer.Next()
		js_parser.go#L3865: 			p.lexer.Next()
		js_parser.go#L3872: 			p.lexer.Next()
		js_parser.go#L3879: 			p.lexer.Next()
		js_parser.go#L3886: 			p.lexer.Next()
		js_parser.go#L3893: 			p.lexer.Next()
		js_parser.go#L3900: 			p.lexer.Next()
		js_parser.go#L3916: 			p.lexer.Next()
		js_parser.go#L3933: 			p.lexer.Next()
		js_parser.go#L3938: 			if p.options.ts.Parse && level < js_ast.LCompare && !p.lexer.HasNewlineBefore && p.lexer.IsContextualKeyword("as") {
		js_parser.go#L3939: 				p.lexer.Next()
		js_parser.go#L3949: 				switch p.lexer.Token {
		js_parser.go#L3952: 					p.forbidSuffixAfterAsLoc = p.lexer.Loc()
		js_parser.go#L3955: 				if p.lexer.Token.IsAssign() {
		js_parser.go#L3956: 					p.forbidSuffixAfterAsLoc = p.lexer.Loc()
		js_parser.go#L3968: 	letRange := p.lexer.Range()
		js_parser.go#L3969: 	raw := p.lexer.Raw()
		js_parser.go#L3971: 	if p.lexer.Token != js_lexer.TIdentifier || raw != "let" {
		js_parser.go#L3975: 	p.lexer.Next()
		js_parser.go#L3977: 	switch p.lexer.Token {
		js_parser.go#L3979: 		if opts.lexicalDecl == lexicalDeclAllowAll || !p.lexer.HasNewlineBefore || p.lexer.Token == js_lexer.TOpenBracket {
		js_parser.go#L4004: 	p.lexer.Expect(js_lexer.TOpenParen)
		js_parser.go#L4006: 	for p.lexer.Token != js_lexer.TCloseParen {
		js_parser.go#L4007: 		loc := p.lexer.Loc()
		js_parser.go#L4008: 		isSpread := p.lexer.Token == js_lexer.TDotDotDot
		js_parser.go#L4010: 			p.markSyntaxFeature(compat.RestArgument, p.lexer.Range())
		js_parser.go#L4011: 			p.lexer.Next()
		js_parser.go#L4018: 		if p.lexer.Token != js_lexer.TComma {
		js_parser.go#L4021: 		p.lexer.Next()
		js_parser.go#L4024: 	p.lexer.Expect(js_lexer.TCloseParen)
		js_parser.go#L4030: 	loc := p.lexer.Loc()
		js_parser.go#L4033: 	if p.lexer.Token == js_lexer.TGreaterThan {
		js_parser.go#L4038: 	name := p.lexer.Identifier
		js_parser.go#L4039: 	tagRange := p.lexer.Range()
		js_parser.go#L4040: 	p.lexer.ExpectInsideJSXElement(js_lexer.TIdentifier)
		js_parser.go#L4043: 	if strings.ContainsAny(name, "-:") || (p.lexer.Token != js_lexer.TDot && name[0] >= 'a' && name[0] <= 'z') {
		js_parser.go#L4051: 	for p.lexer.Token == js_lexer.TDot {
		js_parser.go#L4052: 		p.lexer.NextInsideJSXElement()
		js_parser.go#L4053: 		memberRange := p.lexer.Range()
		js_parser.go#L4054: 		member := p.lexer.Identifier
		js_parser.go#L4055: 		p.lexer.ExpectInsideJSXElement(js_lexer.TIdentifier)
		js_parser.go#L4094: 			switch p.lexer.Token {
		js_parser.go#L4097: 				keyRange := p.lexer.Range()
		js_parser.go#L4098: 				key := js_ast.Expr{Loc: keyRange.Loc, Data: &js_ast.EString{Value: js_lexer.StringToUTF16(p.lexer.Identifier)}}
		js_parser.go#L4099: 				p.lexer.NextInsideJSXElement()
		js_parser.go#L4103: 				if p.lexer.Token != js_lexer.TEquals {
		js_parser.go#L4108: 					p.lexer.NextInsideJSXElement()
		js_parser.go#L4109: 					if p.lexer.Token == js_lexer.TStringLiteral {
		js_parser.go#L4110: 						value = js_ast.Expr{Loc: p.lexer.Loc(), Data: &js_ast.EString{Value: p.lexer.StringLiteral}}
		js_parser.go#L4111: 						p.lexer.NextInsideJSXElement()
		js_parser.go#L4114: 						p.lexer.Expect(js_lexer.TOpenBrace)
		js_parser.go#L4116: 						p.lexer.ExpectInsideJSXElement(js_lexer.TCloseBrace)
		js_parser.go#L4128: 				p.lexer.Next()
		js_parser.go#L4129: 				p.lexer.Expect(js_lexer.TDotDotDot)
		js_parser.go#L4137: 				p.lexer.NextInsideJSXElement()
		js_parser.go#L4146: 	if p.lexer.Token == js_lexer.TSlash {
		js_parser.go#L4148: 		p.lexer.NextInsideJSXElement()
		js_parser.go#L4149: 		if p.lexer.Token != js_lexer.TGreaterThan {
		js_parser.go#L4150: 			p.lexer.Expected(js_lexer.TGreaterThan)
		js_parser.go#L4156: 	p.lexer.ExpectJSXElementChild(js_lexer.TGreaterThan)
		js_parser.go#L4161: 		switch p.lexer.Token {
		js_parser.go#L4163: 			children = append(children, js_ast.Expr{Loc: p.lexer.Loc(), Data: &js_ast.EString{Value: p.lexer.StringLiteral}})
		js_parser.go#L4164: 			p.lexer.NextJSXElementChild()
		js_parser.go#L4168: 			p.lexer.Next()
		js_parser.go#L4171: 			if p.lexer.Token == js_lexer.TDotDotDot && p.options.ts.Parse {
		js_parser.go#L4172: 				p.lexer.Next()
		js_parser.go#L4176: 			if p.lexer.Token != js_lexer.TCloseBrace {
		js_parser.go#L4181: 			p.lexer.ExpectJSXElementChild(js_lexer.TCloseBrace)
		js_parser.go#L4184: 			lessThanLoc := p.lexer.Loc()
		js_parser.go#L4185: 			p.lexer.NextInsideJSXElement()
		js_parser.go#L4187: 			if p.lexer.Token != js_lexer.TSlash {
		js_parser.go#L4195: 				p.lexer.NextJSXElementChild()
		js_parser.go#L4200: 			p.lexer.NextInsideJSXElement()
		js_parser.go#L4206: 			if p.lexer.Token != js_lexer.TGreaterThan {
		js_parser.go#L4207: 				p.lexer.Expected(js_lexer.TGreaterThan)
		js_parser.go#L4213: 			p.lexer.Unexpected()
		js_parser.go#L4224: 		p.lexer.Next()
		js_parser.go#L4226: 		tailLoc := p.lexer.Loc()
		js_parser.go#L4227: 		p.lexer.RescanCloseBraceAsTemplateToken()
		js_parser.go#L4228: 		tail := p.lexer.StringLiteral
		js_parser.go#L4231: 			tailRaw = p.lexer.RawTemplateContents()
		js_parser.go#L4232: 		} else if p.lexer.LegacyOctalLoc.Start > tailLoc.Start {
		js_parser.go#L4233: 			legacyOctalLoc = p.lexer.LegacyOctalLoc
		js_parser.go#L4236: 		if p.lexer.Token == js_lexer.TTemplateTail {
		js_parser.go#L4237: 			p.lexer.Next()
		js_parser.go#L4252: 		if (kind == js_ast.SymbolOther || kind == js_ast.SymbolConst) && p.lexer.IsContextualKeyword("let") {
		js_parser.go#L4253: 			p.log.AddRangeError(&p.source, p.lexer.Range(), "Cannot use \"let\" as an identifier here")
		js_parser.go#L4263: 			isDefiniteAssignmentAssertion := p.lexer.Token == js_lexer.TExclamation
		js_parser.go#L4265: 				p.lexer.Next()
		js_parser.go#L4269: 			if isDefiniteAssignmentAssertion || p.lexer.Token == js_lexer.TColon {
		js_parser.go#L4270: 				p.lexer.Expect(js_lexer.TColon)
		js_parser.go#L4275: 		if p.lexer.Token == js_lexer.TEquals {
		js_parser.go#L4276: 			p.lexer.Next()
		js_parser.go#L4283: 		if p.lexer.Token != js_lexer.TComma {
		js_parser.go#L4286: 		p.lexer.Next()
		js_parser.go#L4323: 	p.lexer.Expect(js_lexer.TOpenBrace)
		js_parser.go#L4324: 	isSingleLine := !p.lexer.HasNewlineBefore
		js_parser.go#L4326: 	for p.lexer.Token != js_lexer.TCloseBrace {
		js_parser.go#L4327: 		alias := p.lexer.Identifier
		js_parser.go#L4328: 		aliasLoc := p.lexer.Loc()
		js_parser.go#L4333: 		isIdentifier := p.lexer.Token == js_lexer.TIdentifier
		js_parser.go#L4334: 		if !p.lexer.IsIdentifierOrKeyword() {
		js_parser.go#L4335: 			p.lexer.Expect(js_lexer.TIdentifier)
		js_parser.go#L4337: 		p.lexer.Next()
		js_parser.go#L4339: 		if p.lexer.IsContextualKeyword("as") {
		js_parser.go#L4340: 			p.lexer.Next()
		js_parser.go#L4341: 			originalName = p.lexer.Identifier
		js_parser.go#L4342: 			name = js_ast.LocRef{Loc: p.lexer.Loc(), Ref: p.storeNameInRef(originalName)}
		js_parser.go#L4343: 			p.lexer.Expect(js_lexer.TIdentifier)
		js_parser.go#L4346: 			p.lexer.Unexpected()
		js_parser.go#L4362: 		if p.lexer.Token != js_lexer.TComma {
		js_parser.go#L4365: 		if p.lexer.HasNewlineBefore {
		js_parser.go#L4368: 		p.lexer.Next()
		js_parser.go#L4369: 		if p.lexer.HasNewlineBefore {
		js_parser.go#L4374: 	if p.lexer.HasNewlineBefore {
		js_parser.go#L4377: 	p.lexer.Expect(js_lexer.TCloseBrace)
		js_parser.go#L4384: 	p.lexer.Expect(js_lexer.TOpenBrace)
		js_parser.go#L4385: 	isSingleLine := !p.lexer.HasNewlineBefore
		js_parser.go#L4387: 	for p.lexer.Token != js_lexer.TCloseBrace {
		js_parser.go#L4388: 		alias := p.lexer.Identifier
		js_parser.go#L4389: 		aliasLoc := p.lexer.Loc()
		js_parser.go#L4403: 		if p.lexer.Token != js_lexer.TIdentifier {
		js_parser.go#L4404: 			if !p.lexer.IsIdentifierOrKeyword() {
		js_parser.go#L4405: 				p.lexer.Expect(js_lexer.TIdentifier)
		js_parser.go#L4408: 				firstKeywordItemLoc = p.lexer.Loc()
		js_parser.go#L4412: 		p.lexer.Next()
		js_parser.go#L4414: 		if p.lexer.IsContextualKeyword("as") {
		js_parser.go#L4415: 			p.lexer.Next()
		js_parser.go#L4416: 			alias = p.lexer.Identifier
		js_parser.go#L4417: 			aliasLoc = p.lexer.Loc()
		js_parser.go#L4420: 			if !p.lexer.IsIdentifierOrKeyword() {
		js_parser.go#L4421: 				p.lexer.Expect(js_lexer.TIdentifier)
		js_parser.go#L4424: 			p.lexer.Next()
		js_parser.go#L4434: 		if p.lexer.Token != js_lexer.TComma {
		js_parser.go#L4437: 		if p.lexer.HasNewlineBefore {
		js_parser.go#L4440: 		p.lexer.Next()
		js_parser.go#L4441: 		if p.lexer.HasNewlineBefore {
		js_parser.go#L4446: 	if p.lexer.HasNewlineBefore {
		js_parser.go#L4449: 	p.lexer.Expect(js_lexer.TCloseBrace)
		js_parser.go#L4453: 	if firstKeywordItemLoc.Start != 0 && !p.lexer.IsContextualKeyword("from") {
		js_parser.go#L4463: 	loc := p.lexer.Loc()
		js_parser.go#L4465: 	switch p.lexer.Token {
		js_parser.go#L4467: 		name := p.lexer.Identifier
		js_parser.go#L4469: 			p.log.AddRangeError(&p.source, p.lexer.Range(), fmt.Sprintf("Cannot use %q as an identifier here", name))
		js_parser.go#L4472: 		p.lexer.Next()
		js_parser.go#L4476: 		p.markSyntaxFeature(compat.Destructuring, p.lexer.Range())
		js_parser.go#L4477: 		p.lexer.Next()
		js_parser.go#L4478: 		isSingleLine := !p.lexer.HasNewlineBefore
		js_parser.go#L4486: 		for p.lexer.Token != js_lexer.TCloseBracket {
		js_parser.go#L4487: 			if p.lexer.Token == js_lexer.TComma {
		js_parser.go#L4488: 				binding := js_ast.Binding{Loc: p.lexer.Loc(), Data: &js_ast.BMissing{}}
		js_parser.go#L4491: 				if p.lexer.Token == js_lexer.TDotDotDot {
		js_parser.go#L4492: 					p.lexer.Next()
		js_parser.go#L4496: 					if p.lexer.Token != js_lexer.TIdentifier {
		js_parser.go#L4497: 						p.markSyntaxFeature(compat.NestedRestBinding, p.lexer.Range())
		js_parser.go#L4504: 				if !hasSpread && p.lexer.Token == js_lexer.TEquals {
		js_parser.go#L4505: 					p.lexer.Next()
		js_parser.go#L4513: 				if hasSpread && p.lexer.Token == js_lexer.TComma {
		js_parser.go#L4514: 					p.log.AddRangeError(&p.source, p.lexer.Range(), "Unexpected \",\" after rest pattern")
		js_parser.go#L4519: 			if p.lexer.Token != js_lexer.TComma {
		js_parser.go#L4522: 			if p.lexer.HasNewlineBefore {
		js_parser.go#L4525: 			p.lexer.Next()
		js_parser.go#L4526: 			if p.lexer.HasNewlineBefore {
		js_parser.go#L4533: 		if p.lexer.HasNewlineBefore {
		js_parser.go#L4536: 		p.lexer.Expect(js_lexer.TCloseBracket)
		js_parser.go#L4544: 		p.markSyntaxFeature(compat.Destructuring, p.lexer.Range())
		js_parser.go#L4545: 		p.lexer.Next()
		js_parser.go#L4546: 		isSingleLine := !p.lexer.HasNewlineBefore
		js_parser.go#L4553: 		for p.lexer.Token != js_lexer.TCloseBrace {
		js_parser.go#L4558: 			if property.IsSpread && p.lexer.Token == js_lexer.TComma {
		js_parser.go#L4559: 				p.log.AddRangeError(&p.source, p.lexer.Range(), "Unexpected \",\" after rest pattern")
		js_parser.go#L4563: 			if p.lexer.Token != js_lexer.TComma {
		js_parser.go#L4566: 			if p.lexer.HasNewlineBefore {
		js_parser.go#L4569: 			p.lexer.Next()
		js_parser.go#L4570: 			if p.lexer.HasNewlineBefore {
		js_parser.go#L4577: 		if p.lexer.HasNewlineBefore {
		js_parser.go#L4580: 		p.lexer.Expect(js_lexer.TCloseBrace)
		js_parser.go#L4587: 	p.lexer.Expect(js_lexer.TIdentifier)
		js_parser.go#L4601: 	fn.OpenParenLoc = p.lexer.Loc()
		js_parser.go#L4602: 	p.lexer.Expect(js_lexer.TOpenParen)
		js_parser.go#L4612: 	for p.lexer.Token != js_lexer.TCloseParen {
		js_parser.go#L4614: 		if p.options.ts.Parse && p.lexer.Token == js_lexer.TThis {
		js_parser.go#L4615: 			p.lexer.Next()
		js_parser.go#L4616: 			if p.lexer.Token == js_lexer.TColon {
		js_parser.go#L4617: 				p.lexer.Next()
		js_parser.go#L4620: 			if p.lexer.Token != js_lexer.TComma {
		js_parser.go#L4623: 			p.lexer.Next()
		js_parser.go#L4632: 		if !fn.HasRestArg && p.lexer.Token == js_lexer.TDotDotDot {
		js_parser.go#L4633: 			p.markSyntaxFeature(compat.RestArgument, p.lexer.Range())
		js_parser.go#L4634: 			p.lexer.Next()
		js_parser.go#L4639: 		isIdentifier := p.lexer.Token == js_lexer.TIdentifier
		js_parser.go#L4640: 		text := p.lexer.Identifier
		js_parser.go#L4648: 				for p.lexer.Token == js_lexer.TIdentifier || p.lexer.Token == js_lexer.TOpenBrace || p.lexer.Token == js_lexer.TOpenBracket {
		js_parser.go#L4655: 					if p.lexer.Token != js_lexer.TIdentifier {
		js_parser.go#L4656: 						p.lexer.Expect(js_lexer.TIdentifier)
		js_parser.go#L4658: 					text = p.lexer.Identifier
		js_parser.go#L4666: 			if p.lexer.Token == js_lexer.TQuestion {
		js_parser.go#L4667: 				p.lexer.Next()
		js_parser.go#L4671: 			if p.lexer.Token == js_lexer.TColon {
		js_parser.go#L4672: 				p.lexer.Next()
		js_parser.go#L4680: 		if !fn.HasRestArg && p.lexer.Token == js_lexer.TEquals {
		js_parser.go#L4681: 			p.markSyntaxFeature(compat.DefaultArgument, p.lexer.Range())
		js_parser.go#L4682: 			p.lexer.Next()
		js_parser.go#L4696: 		if p.lexer.Token != js_lexer.TComma {
		js_parser.go#L4703: 				p.lexer.Next()
		js_parser.go#L4705: 				p.lexer.Expect(js_lexer.TCloseParen)
		js_parser.go#L4709: 		p.lexer.Next()
		js_parser.go#L4721: 	p.lexer.Expect(js_lexer.TCloseParen)
		js_parser.go#L4725: 	if p.options.ts.Parse && p.lexer.Token == js_lexer.TColon {
		js_parser.go#L4726: 		p.lexer.Next()
		js_parser.go#L4731: 	if data.allowMissingBodyForTypeScript && p.lexer.Token != js_lexer.TOpenBrace {
		js_parser.go#L4732: 		p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L4743: 	classKeyword := p.lexer.Range()
		js_parser.go#L4744: 	if p.lexer.Token == js_lexer.TClass {
		js_parser.go#L4746: 		p.lexer.Next()
		js_parser.go#L4748: 		p.lexer.Expected(js_lexer.TClass)
		js_parser.go#L4751: 	isIdentifier := p.lexer.Token == js_lexer.TIdentifier
		js_parser.go#L4752: 	isStrictModeReservedWord := isIdentifier && js_lexer.StrictModeReservedWords[p.lexer.Identifier]
		js_parser.go#L4754: 		nameLoc := p.lexer.Loc()
		js_parser.go#L4755: 		nameText := p.lexer.Identifier
		js_parser.go#L4757: 			p.lexer.Unexpected()
		js_parser.go#L4759: 		p.lexer.Expect(js_lexer.TIdentifier)
		js_parser.go#L4799: 	if p.lexer.Token == js_lexer.TExtends {
		js_parser.go#L4800: 		p.lexer.Next()
		js_parser.go#L4816: 	if p.options.ts.Parse && p.lexer.IsContextualKeyword("implements") {
		js_parser.go#L4817: 		p.lexer.Next()
		js_parser.go#L4820: 			if p.lexer.Token != js_lexer.TComma {
		js_parser.go#L4823: 			p.lexer.Next()
		js_parser.go#L4827: 	bodyLoc := p.lexer.Loc()
		js_parser.go#L4828: 	p.lexer.Expect(js_lexer.TOpenBrace)
		js_parser.go#L4846: 	for p.lexer.Token != js_lexer.TCloseBrace {
		js_parser.go#L4847: 		if p.lexer.Token == js_lexer.TSemicolon {
		js_parser.go#L4848: 			p.lexer.Next()
		js_parser.go#L4853: 		firstDecoratorLoc := p.lexer.Loc()
		js_parser.go#L4883: 	p.lexer.Expect(js_lexer.TCloseBrace)
		js_parser.go#L4895: 	if p.lexer.Token != js_lexer.TIdentifier || p.lexer.HasNewlineBefore {
		js_parser.go#L4899: 	name := js_ast.LocRef{Loc: p.lexer.Loc(), Ref: p.storeNameInRef(p.lexer.Identifier)}
		js_parser.go#L4900: 	p.lexer.Next()
		js_parser.go#L4905: 	pathLoc := p.lexer.Loc()
		js_parser.go#L4906: 	pathText := js_lexer.UTF16ToString(p.lexer.StringLiteral)
		js_parser.go#L4907: 	if p.lexer.Token == js_lexer.TNoSubstitutionTemplateLiteral {
		js_parser.go#L4908: 		p.lexer.Next()
		js_parser.go#L4910: 		p.lexer.Expect(js_lexer.TStringLiteral)
		js_parser.go#L4917: 	isGenerator := p.lexer.Token == js_lexer.TAsterisk
		js_parser.go#L4919: 		p.markSyntaxFeature(compat.Generator, p.lexer.Range())
		js_parser.go#L4920: 		p.lexer.Next()
		js_parser.go#L4940: 	if !opts.isNameOptional || p.lexer.Token == js_lexer.TIdentifier {
		js_parser.go#L4941: 		nameLoc := p.lexer.Loc()
		js_parser.go#L4942: 		nameText = p.lexer.Identifier
		js_parser.go#L4943: 		p.lexer.Expect(js_lexer.TIdentifier)
		js_parser.go#L4959: 	scopeIndex := p.pushScopeForParsePass(js_ast.ScopeFunctionArgs, p.lexer.Loc())
		js_parser.go#L5036: 	loc := p.lexer.Loc()
		js_parser.go#L5038: 	switch p.lexer.Token {
		js_parser.go#L5040: 		p.lexer.Next()
		js_parser.go#L5046: 			p.es6ExportKeyword = p.lexer.Range()
		js_parser.go#L5048: 			p.lexer.Unexpected()
		js_parser.go#L5050: 		p.lexer.Next()
		js_parser.go#L5059: 		if opts.tsDecorators != nil && p.lexer.Token != js_lexer.TClass && p.lexer.Token != js_lexer.TDefault &&
		js_parser.go#L5060: 			!p.lexer.IsContextualKeyword("abstract") && !p.lexer.IsContextualKeyword("declare") {
		js_parser.go#L5061: 			p.lexer.Expected(js_lexer.TClass)
		js_parser.go#L5064: 		switch p.lexer.Token {
		js_parser.go#L5076: 			p.lexer.Unexpected()
		js_parser.go#L5081: 				p.lexer.Unexpected()
		js_parser.go#L5087: 			if p.lexer.IsContextualKeyword("let") {
		js_parser.go#L5092: 			if opts.isTypeScriptDeclare && p.lexer.IsContextualKeyword("as") {
		js_parser.go#L5094: 				p.lexer.Next()
		js_parser.go#L5095: 				p.lexer.ExpectContextualKeyword("namespace")
		js_parser.go#L5096: 				p.lexer.Expect(js_lexer.TIdentifier)
		js_parser.go#L5097: 				p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L5101: 			if p.lexer.IsContextualKeyword("async") {
		js_parser.go#L5103: 				asyncRange := p.lexer.Range()
		js_parser.go#L5104: 				p.lexer.Next()
		js_parser.go#L5105: 				if p.lexer.HasNewlineBefore {
		js_parser.go#L5109: 				p.lexer.Expect(js_lexer.TFunction)
		js_parser.go#L5115: 				switch p.lexer.Identifier {
		js_parser.go#L5118: 					typeRange := p.lexer.Range()
		js_parser.go#L5119: 					p.lexer.Next()
		js_parser.go#L5120: 					if p.lexer.HasNewlineBefore {
		js_parser.go#L5144: 			p.lexer.Unexpected()
		js_parser.go#L5149: 				p.lexer.Unexpected()
		js_parser.go#L5152: 			defaultLoc := p.lexer.Loc()
		js_parser.go#L5153: 			p.lexer.Next()
		js_parser.go#L5165: 			if opts.tsDecorators != nil && p.lexer.Token != js_lexer.TClass && !p.lexer.IsContextualKeyword("abstract") {
		js_parser.go#L5166: 				p.lexer.Expected(js_lexer.TClass)
		js_parser.go#L5169: 			if p.lexer.IsContextualKeyword("async") {
		js_parser.go#L5170: 				asyncRange := p.lexer.Range()
		js_parser.go#L5171: 				p.lexer.Next()
		js_parser.go#L5173: 				if p.lexer.Token == js_lexer.TFunction && !p.lexer.HasNewlineBefore {
		js_parser.go#L5174: 					p.lexer.Next()
		js_parser.go#L5196: 				p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L5200: 			if p.lexer.Token == js_lexer.TFunction || p.lexer.Token == js_lexer.TClass || p.lexer.IsContextualKeyword("interface") {
		js_parser.go#L5232: 			isIdentifier := p.lexer.Token == js_lexer.TIdentifier
		js_parser.go#L5233: 			name := p.lexer.Identifier
		js_parser.go#L5238: 				if _, ok := expr.Data.(*js_ast.EIdentifier); ok && (p.lexer.Token == js_lexer.TClass || opts.tsDecorators != nil) {
		js_parser.go#L5256: 			p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L5262: 				p.lexer.Unexpected()
		js_parser.go#L5265: 			p.lexer.Next()
		js_parser.go#L5271: 			if p.lexer.IsContextualKeyword("as") {
		js_parser.go#L5273: 				p.lexer.Next()
		js_parser.go#L5274: 				name := p.lexer.Identifier
		js_parser.go#L5276: 				alias = &js_ast.ExportStarAlias{Loc: p.lexer.Loc(), OriginalName: name}
		js_parser.go#L5277: 				if !p.lexer.IsIdentifierOrKeyword() {
		js_parser.go#L5278: 					p.lexer.Expect(js_lexer.TIdentifier)
		js_parser.go#L5281: 				p.lexer.Next()
		js_parser.go#L5282: 				p.lexer.ExpectContextualKeyword("from")
		js_parser.go#L5286: 				p.lexer.ExpectContextualKeyword("from")
		js_parser.go#L5293: 			p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L5302: 				p.lexer.Unexpected()
		js_parser.go#L5306: 			if p.lexer.IsContextualKeyword("from") {
		js_parser.go#L5307: 				p.lexer.Next()
		js_parser.go#L5312: 				p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L5320: 			p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L5327: 				p.lexer.Next()
		js_parser.go#L5329: 				p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L5332: 			p.lexer.Unexpected()
		js_parser.go#L5336: 			p.lexer.Unexpected()
		js_parser.go#L5341: 		p.lexer.Next()
		js_parser.go#L5346: 			p.lexer.Unexpected()
		js_parser.go#L5380: 			if p.lexer.Token != js_lexer.TClass && p.lexer.Token != js_lexer.TExport &&
		js_parser.go#L5381: 				!p.lexer.IsContextualKeyword("abstract") && !p.lexer.IsContextualKeyword("declare") {
		js_parser.go#L5382: 				p.lexer.Expected(js_lexer.TClass)
		js_parser.go#L5388: 		p.lexer.Unexpected()
		js_parser.go#L5398: 		p.lexer.Next()
		js_parser.go#L5400: 		p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L5411: 		p.markSyntaxFeature(compat.Const, p.lexer.Range())
		js_parser.go#L5412: 		p.lexer.Next()
		js_parser.go#L5414: 		if p.options.ts.Parse && p.lexer.Token == js_lexer.TEnum {
		js_parser.go#L5419: 		p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L5430: 		p.lexer.Next()
		js_parser.go#L5431: 		p.lexer.Expect(js_lexer.TOpenParen)
		js_parser.go#L5433: 		p.lexer.Expect(js_lexer.TCloseParen)
		js_parser.go#L5436: 		if p.lexer.Token == js_lexer.TElse {
		js_parser.go#L5437: 			p.lexer.Next()
		js_parser.go#L5444: 		p.lexer.Next()
		js_parser.go#L5446: 		p.lexer.Expect(js_lexer.TWhile)
		js_parser.go#L5447: 		p.lexer.Expect(js_lexer.TOpenParen)
		js_parser.go#L5449: 		p.lexer.Expect(js_lexer.TCloseParen)
		js_parser.go#L5453: 		if p.lexer.Token == js_lexer.TSemicolon {
		js_parser.go#L5454: 			p.lexer.Next()
		js_parser.go#L5459: 		p.lexer.Next()
		js_parser.go#L5460: 		p.lexer.Expect(js_lexer.TOpenParen)
		js_parser.go#L5462: 		p.lexer.Expect(js_lexer.TCloseParen)
		js_parser.go#L5467: 		p.lexer.Next()
		js_parser.go#L5468: 		p.lexer.Expect(js_lexer.TOpenParen)
		js_parser.go#L5470: 		bodyLoc := p.lexer.Loc()
		js_parser.go#L5471: 		p.lexer.Expect(js_lexer.TCloseParen)
		js_parser.go#L5483: 		p.lexer.Next()
		js_parser.go#L5484: 		p.lexer.Expect(js_lexer.TOpenParen)
		js_parser.go#L5486: 		p.lexer.Expect(js_lexer.TCloseParen)
		js_parser.go#L5488: 		bodyLoc := p.lexer.Loc()
		js_parser.go#L5492: 		p.lexer.Expect(js_lexer.TOpenBrace)
		js_parser.go#L5496: 		for p.lexer.Token != js_lexer.TCloseBrace {
		js_parser.go#L5500: 			if p.lexer.Token == js_lexer.TDefault {
		js_parser.go#L5502: 					p.log.AddRangeError(&p.source, p.lexer.Range(), "Multiple default clauses are not allowed")
		js_parser.go#L5506: 				p.lexer.Next()
		js_parser.go#L5507: 				p.lexer.Expect(js_lexer.TColon)
		js_parser.go#L5509: 				p.lexer.Expect(js_lexer.TCase)
		js_parser.go#L5512: 				p.lexer.Expect(js_lexer.TColon)
		js_parser.go#L5517: 				switch p.lexer.Token {
		js_parser.go#L5529: 		p.lexer.Expect(js_lexer.TCloseBrace)
		js_parser.go#L5537: 		p.lexer.Next()
		js_parser.go#L5538: 		bodyLoc := p.lexer.Loc()
		js_parser.go#L5539: 		p.lexer.Expect(js_lexer.TOpenBrace)
		js_parser.go#L5543: 		p.lexer.Next()
		js_parser.go#L5548: 		if p.lexer.Token == js_lexer.TCatch {
		js_parser.go#L5549: 			catchLoc := p.lexer.Loc()
		js_parser.go#L5551: 			p.lexer.Next()
		js_parser.go#L5555: 			if p.lexer.Token == js_lexer.TOpenBrace {
		js_parser.go#L5560: 					binding = &js_ast.Binding{Loc: p.lexer.Loc(), Data: &js_ast.BIdentifier{Ref: ref}}
		js_parser.go#L5563: 				p.lexer.Expect(js_lexer.TOpenParen)
		js_parser.go#L5567: 				if p.options.ts.Parse && p.lexer.Token == js_lexer.TColon {
		js_parser.go#L5568: 					p.lexer.Expect(js_lexer.TColon)
		js_parser.go#L5572: 				p.lexer.Expect(js_lexer.TCloseParen)
		js_parser.go#L5583: 			p.lexer.Expect(js_lexer.TOpenBrace)
		js_parser.go#L5585: 			p.lexer.Next()
		js_parser.go#L5590: 		if p.lexer.Token == js_lexer.TFinally || catch == nil {
		js_parser.go#L5591: 			finallyLoc := p.lexer.Loc()
		js_parser.go#L5593: 			p.lexer.Expect(js_lexer.TFinally)
		js_parser.go#L5594: 			p.lexer.Expect(js_lexer.TOpenBrace)
		js_parser.go#L5596: 			p.lexer.Next()
		js_parser.go#L5612: 		p.lexer.Next()
		js_parser.go#L5615: 		isForAwait := p.lexer.IsContextualKeyword("await")
		js_parser.go#L5617: 			awaitRange := p.lexer.Range()
		js_parser.go#L5628: 			p.lexer.Next()
		js_parser.go#L5631: 		p.lexer.Expect(js_lexer.TOpenParen)
		js_parser.go#L5641: 		if p.lexer.IsContextualKeyword("let") {
		js_parser.go#L5642: 			badLetRange = p.lexer.Range()
		js_parser.go#L5645: 		initLoc := p.lexer.Loc()
		js_parser.go#L5647: 		switch p.lexer.Token {
		js_parser.go#L5650: 			p.lexer.Next()
		js_parser.go#L5655: 			p.markSyntaxFeature(compat.Const, p.lexer.Range())
		js_parser.go#L5656: 			p.lexer.Next()
		js_parser.go#L5678: 		if p.lexer.IsContextualKeyword("of") || isForAwait {
		js_parser.go#L5682: 			if isForAwait && !p.lexer.IsContextualKeyword("of") {
		js_parser.go#L5684: 					p.lexer.ExpectedString("\"of\"")
		js_parser.go#L5686: 					p.lexer.Unexpected()
		js_parser.go#L5690: 			p.markSyntaxFeature(compat.ForOf, p.lexer.Range())
		js_parser.go#L5691: 			p.lexer.Next()
		js_parser.go#L5693: 			p.lexer.Expect(js_lexer.TCloseParen)
		js_parser.go#L5699: 		if p.lexer.Token == js_lexer.TIn {
		js_parser.go#L5701: 			p.lexer.Next()
		js_parser.go#L5703: 			p.lexer.Expect(js_lexer.TCloseParen)
		js_parser.go#L5715: 		p.lexer.Expect(js_lexer.TSemicolon)
		js_parser.go#L5717: 		if p.lexer.Token != js_lexer.TSemicolon {
		js_parser.go#L5722: 		p.lexer.Expect(js_lexer.TSemicolon)
		js_parser.go#L5724: 		if p.lexer.Token != js_lexer.TCloseParen {
		js_parser.go#L5729: 		p.lexer.Expect(js_lexer.TCloseParen)
		js_parser.go#L5735: 		p.es6ImportKeyword = p.lexer.Range()
		js_parser.go#L5736: 		p.lexer.Next()
		js_parser.go#L5742: 		if (opts.isExport || (opts.isNamespaceScope && !opts.isTypeScriptDeclare)) && p.lexer.Token != js_lexer.TIdentifier {
		js_parser.go#L5743: 			p.lexer.Expected(js_lexer.TIdentifier)
		js_parser.go#L5746: 		switch p.lexer.Token {
		js_parser.go#L5752: 			p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L5758: 				p.lexer.Unexpected()
		js_parser.go#L5767: 				p.lexer.Unexpected()
		js_parser.go#L5771: 			p.lexer.Next()
		js_parser.go#L5772: 			p.lexer.ExpectContextualKeyword("as")
		js_parser.go#L5773: 			stmt.NamespaceRef = p.storeNameInRef(p.lexer.Identifier)
		js_parser.go#L5774: 			starLoc := p.lexer.Loc()
		js_parser.go#L5776: 			p.lexer.Expect(js_lexer.TIdentifier)
		js_parser.go#L5777: 			p.lexer.ExpectContextualKeyword("from")
		js_parser.go#L5782: 				p.lexer.Unexpected()
		js_parser.go#L5789: 			p.lexer.ExpectContextualKeyword("from")
		js_parser.go#L5795: 				p.lexer.Unexpected()
		js_parser.go#L5799: 			defaultName := p.lexer.Identifier
		js_parser.go#L5800: 			stmt.DefaultName = &js_ast.LocRef{Loc: p.lexer.Loc(), Ref: p.storeNameInRef(defaultName)}
		js_parser.go#L5801: 			p.lexer.Next()
		js_parser.go#L5806: 					switch p.lexer.Token {
		js_parser.go#L5808: 						if p.lexer.Identifier != "from" {
		js_parser.go#L5810: 							p.lexer.Next()
		js_parser.go#L5811: 							p.lexer.ExpectContextualKeyword("from")
		js_parser.go#L5813: 							p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L5819: 						p.lexer.Next()
		js_parser.go#L5820: 						p.lexer.ExpectContextualKeyword("as")
		js_parser.go#L5821: 						p.lexer.Expect(js_lexer.TIdentifier)
		js_parser.go#L5822: 						p.lexer.ExpectContextualKeyword("from")
		js_parser.go#L5824: 						p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L5830: 						p.lexer.ExpectContextualKeyword("from")
		js_parser.go#L5832: 						p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L5838: 				if p.lexer.Token == js_lexer.TEquals || opts.isExport || (opts.isNamespaceScope && !opts.isTypeScriptDeclare) {
		js_parser.go#L5844: 			if p.lexer.Token == js_lexer.TComma {
		js_parser.go#L5845: 				p.lexer.Next()
		js_parser.go#L5846: 				switch p.lexer.Token {
		js_parser.go#L5849: 					p.lexer.Next()
		js_parser.go#L5850: 					p.lexer.ExpectContextualKeyword("as")
		js_parser.go#L5851: 					stmt.NamespaceRef = p.storeNameInRef(p.lexer.Identifier)
		js_parser.go#L5852: 					starLoc := p.lexer.Loc()
		js_parser.go#L5854: 					p.lexer.Expect(js_lexer.TIdentifier)
		js_parser.go#L5863: 					p.lexer.Unexpected()
		js_parser.go#L5867: 			p.lexer.ExpectContextualKeyword("from")
		js_parser.go#L5870: 			p.lexer.Unexpected()
		js_parser.go#L5877: 		p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L5916: 		p.lexer.Next()
		js_parser.go#L5918: 		p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L5922: 		p.lexer.Next()
		js_parser.go#L5924: 		p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L5928: 		p.lexer.Next()
		js_parser.go#L5930: 		if p.lexer.Token != js_lexer.TSemicolon &&
		js_parser.go#L5931: 			!p.lexer.HasNewlineBefore &&
		js_parser.go#L5932: 			p.lexer.Token != js_lexer.TCloseBrace &&
		js_parser.go#L5933: 			p.lexer.Token != js_lexer.TEndOfFile {
		js_parser.go#L5937: 		p.latestReturnHadSemicolon = p.lexer.Token == js_lexer.TSemicolon
		js_parser.go#L5938: 		p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L5945: 		p.lexer.Next()
		js_parser.go#L5946: 		if p.lexer.HasNewlineBefore {
		js_parser.go#L5951: 		p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L5955: 		p.lexer.Next()
		js_parser.go#L5956: 		p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L5963: 		p.lexer.Next()
		js_parser.go#L5965: 		p.lexer.Next()
		js_parser.go#L5969: 		isIdentifier := p.lexer.Token == js_lexer.TIdentifier
		js_parser.go#L5970: 		name := p.lexer.Identifier
		js_parser.go#L5974: 		if isIdentifier && p.lexer.Raw() == "async" {
		js_parser.go#L5975: 			asyncRange := p.lexer.Range()
		js_parser.go#L5976: 			p.lexer.Next()
		js_parser.go#L5977: 			if p.lexer.Token == js_lexer.TFunction && !p.lexer.HasNewlineBefore {
		js_parser.go#L5978: 				p.lexer.Next()
		js_parser.go#L5986: 				p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L5993: 				if p.lexer.Token == js_lexer.TColon && opts.tsDecorators == nil {
		js_parser.go#L5998: 					p.lexer.Next()
		js_parser.go#L6011: 						if p.lexer.Token == js_lexer.TIdentifier && !p.lexer.HasNewlineBefore {
		js_parser.go#L6022: 						if (opts.isModuleScope || opts.isNamespaceScope) && (p.lexer.Token == js_lexer.TIdentifier ||
		js_parser.go#L6023: 							(p.lexer.Token == js_lexer.TStringLiteral && opts.isTypeScriptDeclare)) {
		js_parser.go#L6033: 						if p.lexer.Token == js_lexer.TClass || opts.tsDecorators != nil {
		js_parser.go#L6039: 						if opts.isNamespaceScope && opts.isTypeScriptDeclare && p.lexer.Token == js_lexer.TOpenBrace {
		js_parser.go#L6040: 							p.lexer.Next()
		js_parser.go#L6042: 							p.lexer.Next()
		js_parser.go#L6052: 						if opts.tsDecorators != nil && p.lexer.Token != js_lexer.TClass && !p.lexer.IsContextualKeyword("abstract") {
		js_parser.go#L6053: 							p.lexer.Expected(js_lexer.TClass)
		js_parser.go#L6057: 						if p.lexer.IsContextualKeyword("global") {
		js_parser.go#L6058: 							p.lexer.Next()
		js_parser.go#L6059: 							p.lexer.Expect(js_lexer.TOpenBrace)
		js_parser.go#L6061: 							p.lexer.Next()
		js_parser.go#L6113: 		p.lexer.ExpectOrInsertSemicolon()
		js_parser.go#L6158: 	loc := p.lexer.Loc()
		js_parser.go#L6162: 	p.lexer.Expect(js_lexer.TOpenBrace)
		js_parser.go#L6164: 	p.lexer.Next()
		js_parser.go#L6184: 		comments := p.lexer.CommentsToPreserveBefore
		js_parser.go#L6194: 		if p.lexer.Token == end {
		js_parser.go#L12631: 		lexer:              lexer,
		js_parser.go#L12704: 	if p.lexer.Token == js_lexer.THashbang {
		js_parser.go#L12705: 		hashbang = p.lexer.Identifier
		js_parser.go#L12706: 		p.lexer.Next()
		js_parser.go#L12822: 	result.SourceMapComment = p.lexer.SourceMappingURL
		js_parser.go#L12903: 		if value := p.validateJSX(p.lexer.JSXFactoryPragmaComment, "factory"); value != nil {
		js_parser.go#L12906: 		if value := p.validateJSX(p.lexer.JSXFragmentPragmaComment, "fragment"); value != nil {
		js_parser.go#L12971: 	for _, comment := range p.lexer.AllOriginalComments {
		js_parser.go#L13167: 		ApproximateLineCount:    int32(p.lexer.ApproximateNewlineCount) + 1,
		ts_parser.go#L14: 	switch p.lexer.Token {
		ts_parser.go#L16: 		p.lexer.Next()
		ts_parser.go#L19: 		p.lexer.Next()
		ts_parser.go#L22: 		for p.lexer.Token == js_lexer.TComma {
		ts_parser.go#L23: 			p.lexer.Next()
		ts_parser.go#L27: 		for p.lexer.Token != js_lexer.TCloseBracket {
		ts_parser.go#L29: 			if p.lexer.Token != js_lexer.TComma {
		ts_parser.go#L32: 			p.lexer.Next()
		ts_parser.go#L35: 		p.lexer.Expect(js_lexer.TCloseBracket)
		ts_parser.go#L38: 		p.lexer.Next()
		ts_parser.go#L40: 		for p.lexer.Token != js_lexer.TCloseBrace {
		ts_parser.go#L43: 			switch p.lexer.Token {
		ts_parser.go#L48: 				p.lexer.Next()
		ts_parser.go#L53: 				p.lexer.Next()
		ts_parser.go#L56: 				if p.lexer.IsIdentifierOrKeyword() {
		ts_parser.go#L58: 					p.lexer.Next()
		ts_parser.go#L60: 					p.lexer.Unexpected()
		ts_parser.go#L64: 			if p.lexer.Token == js_lexer.TColon || !foundIdentifier {
		ts_parser.go#L65: 				p.lexer.Expect(js_lexer.TColon)
		ts_parser.go#L69: 			if p.lexer.Token != js_lexer.TComma {
		ts_parser.go#L72: 			p.lexer.Next()
		ts_parser.go#L75: 		p.lexer.Expect(js_lexer.TCloseBrace)
		ts_parser.go#L78: 		p.lexer.Unexpected()
		ts_parser.go#L83: 	p.lexer.Expect(js_lexer.TOpenParen)
		ts_parser.go#L85: 	for p.lexer.Token != js_lexer.TCloseParen {
		ts_parser.go#L87: 		if p.lexer.Token == js_lexer.TDotDotDot {
		ts_parser.go#L88: 			p.lexer.Next()
		ts_parser.go#L94: 		if p.lexer.Token == js_lexer.TQuestion {
		ts_parser.go#L95: 			p.lexer.Next()
		ts_parser.go#L99: 		if p.lexer.Token == js_lexer.TColon {
		ts_parser.go#L100: 			p.lexer.Next()
		ts_parser.go#L105: 		if p.lexer.Token != js_lexer.TComma {
		ts_parser.go#L108: 		p.lexer.Next()
		ts_parser.go#L111: 	p.lexer.Expect(js_lexer.TCloseParen)
		ts_parser.go#L133: 		p.lexer.Expect(js_lexer.TOpenParen)
		ts_parser.go#L135: 		p.lexer.Expect(js_lexer.TCloseParen)
		ts_parser.go#L141: 	if p.lexer.IsContextualKeyword("asserts") {
		ts_parser.go#L142: 		p.lexer.Next()
		ts_parser.go#L145: 		if p.lexer.Token != js_lexer.TIdentifier && p.lexer.Token != js_lexer.TThis {
		ts_parser.go#L148: 		p.lexer.Next()
		ts_parser.go#L156: 	if p.lexer.IsContextualKeyword("is") && !p.lexer.HasNewlineBefore {
		ts_parser.go#L157: 		p.lexer.Next()
		ts_parser.go#L168: 	switch p.lexer.Token {
		ts_parser.go#L172: 		p.lexer.Next()
		ts_parser.go#L177: 		p.lexer.Next()
		ts_parser.go#L178: 		if p.lexer.Token == js_lexer.TBigIntegerLiteral {
		ts_parser.go#L179: 			p.lexer.Next()
		ts_parser.go#L181: 			p.lexer.Expect(js_lexer.TNumericLiteral)
		ts_parser.go#L187: 		p.lexer.Next()
		ts_parser.go#L192: 		p.lexer.Next()
		ts_parser.go#L193: 		p.lexer.Expect(js_lexer.TOpenParen)
		ts_parser.go#L194: 		p.lexer.Expect(js_lexer.TStringLiteral)
		ts_parser.go#L195: 		p.lexer.Expect(js_lexer.TCloseParen)
		ts_parser.go#L200: 		p.lexer.Next()
		ts_parser.go#L214: 		switch p.lexer.Identifier {
		ts_parser.go#L216: 			p.lexer.Next()
		ts_parser.go#L220: 			p.lexer.Next()
		ts_parser.go#L221: 			if p.lexer.IsContextualKeyword("symbol") {
		ts_parser.go#L222: 				p.lexer.Next()
		ts_parser.go#L227: 			p.lexer.Next()
		ts_parser.go#L228: 			if p.lexer.Token == js_lexer.TNew {
		ts_parser.go#L233: 			p.lexer.Next()
		ts_parser.go#L237: 		p.lexer.Next()
		ts_parser.go#L238: 		if p.lexer.Token == js_lexer.TImport {
		ts_parser.go#L245: 				if !p.lexer.IsIdentifierOrKeyword() {
		ts_parser.go#L246: 					p.lexer.Expected(js_lexer.TIdentifier)
		ts_parser.go#L248: 				p.lexer.Next()
		ts_parser.go#L249: 				if p.lexer.Token != js_lexer.TDot {
		ts_parser.go#L252: 				p.lexer.Next()
		ts_parser.go#L259: 		p.lexer.Next()
		ts_parser.go#L260: 		for p.lexer.Token != js_lexer.TCloseBracket {
		ts_parser.go#L261: 			if p.lexer.Token == js_lexer.TDotDotDot {
		ts_parser.go#L262: 				p.lexer.Next()
		ts_parser.go#L265: 			if p.lexer.Token == js_lexer.TQuestion {
		ts_parser.go#L266: 				p.lexer.Next()
		ts_parser.go#L268: 			if p.lexer.Token == js_lexer.TColon {
		ts_parser.go#L269: 				p.lexer.Next()
		ts_parser.go#L272: 			if p.lexer.Token != js_lexer.TComma {
		ts_parser.go#L275: 			p.lexer.Next()
		ts_parser.go#L277: 		p.lexer.Expect(js_lexer.TCloseBracket)
		ts_parser.go#L285: 			p.lexer.Next()
		ts_parser.go#L287: 			p.lexer.RescanCloseBraceAsTemplateToken()
		ts_parser.go#L288: 			if p.lexer.Token == js_lexer.TTemplateTail {
		ts_parser.go#L289: 				p.lexer.Next()
		ts_parser.go#L295: 		p.lexer.Unexpected()
		ts_parser.go#L301: 		switch p.lexer.Token {
		ts_parser.go#L306: 			p.lexer.Next()
		ts_parser.go#L313: 			p.lexer.Next()
		ts_parser.go#L322: 			if p.lexer.HasNewlineBefore {
		ts_parser.go#L325: 			p.lexer.Next()
		ts_parser.go#L328: 			p.lexer.Next()
		ts_parser.go#L329: 			if !p.lexer.IsIdentifierOrKeyword() {
		ts_parser.go#L330: 				p.lexer.Expect(js_lexer.TIdentifier)
		ts_parser.go#L332: 			p.lexer.Next()
		ts_parser.go#L336: 			if p.lexer.HasNewlineBefore {
		ts_parser.go#L339: 			p.lexer.Next()
		ts_parser.go#L340: 			if p.lexer.Token != js_lexer.TCloseBracket {
		ts_parser.go#L343: 			p.lexer.Expect(js_lexer.TCloseBracket)
		ts_parser.go#L348: 			if p.lexer.HasNewlineBefore {
		ts_parser.go#L351: 			p.lexer.ExpectLessThan(false /* isInsideJSXElement */)
		ts_parser.go#L354: 				if p.lexer.Token != js_lexer.TComma {
		ts_parser.go#L357: 				p.lexer.Next()
		ts_parser.go#L359: 			p.lexer.ExpectGreaterThan(false /* isInsideJSXElement */)
		ts_parser.go#L363: 			if p.lexer.HasNewlineBefore || level >= js_ast.LConditional {
		ts_parser.go#L366: 			p.lexer.Next()
		ts_parser.go#L370: 			p.lexer.Expect(js_lexer.TQuestion)
		ts_parser.go#L372: 			p.lexer.Expect(js_lexer.TColon)
		ts_parser.go#L382: 	p.lexer.Expect(js_lexer.TOpenBrace)
		ts_parser.go#L384: 	for p.lexer.Token != js_lexer.TCloseBrace {
		ts_parser.go#L387: 		if p.lexer.Token == js_lexer.TPlus || p.lexer.Token == js_lexer.TMinus {
		ts_parser.go#L388: 			p.lexer.Next()
		ts_parser.go#L393: 		for p.lexer.IsIdentifierOrKeyword() ||
		ts_parser.go#L394: 			p.lexer.Token == js_lexer.TStringLiteral ||
		ts_parser.go#L395: 			p.lexer.Token == js_lexer.TNumericLiteral {
		ts_parser.go#L396: 			p.lexer.Next()
		ts_parser.go#L400: 		if p.lexer.Token == js_lexer.TOpenBracket {
		ts_parser.go#L402: 			p.lexer.Next()
		ts_parser.go#L407: 			if p.lexer.Token == js_lexer.TColon {
		ts_parser.go#L408: 				p.lexer.Next()
		ts_parser.go#L410: 			} else if p.lexer.Token == js_lexer.TIn {
		ts_parser.go#L411: 				p.lexer.Next()
		ts_parser.go#L413: 				if p.lexer.IsContextualKeyword("as") {
		ts_parser.go#L415: 					p.lexer.Next()
		ts_parser.go#L420: 			p.lexer.Expect(js_lexer.TCloseBracket)
		ts_parser.go#L424: 			if p.lexer.Token == js_lexer.TPlus || p.lexer.Token == js_lexer.TMinus {
		ts_parser.go#L425: 				p.lexer.Next()
		ts_parser.go#L433: 		if foundKey && (p.lexer.Token == js_lexer.TQuestion || p.lexer.Token == js_lexer.TExclamation) {
		ts_parser.go#L434: 			p.lexer.Next()
		ts_parser.go#L440: 		switch p.lexer.Token {
		ts_parser.go#L444: 				p.lexer.Expect(js_lexer.TIdentifier)
		ts_parser.go#L446: 			p.lexer.Next()
		ts_parser.go#L452: 			if p.lexer.Token == js_lexer.TColon {
		ts_parser.go#L453: 				p.lexer.Next()
		ts_parser.go#L459: 				p.lexer.Unexpected()
		ts_parser.go#L463: 		switch p.lexer.Token {
		ts_parser.go#L467: 			p.lexer.Next()
		ts_parser.go#L470: 			if !p.lexer.HasNewlineBefore {
		ts_parser.go#L471: 				p.lexer.Unexpected()
		ts_parser.go#L476: 	p.lexer.Expect(js_lexer.TCloseBrace)
		ts_parser.go#L482: 	if p.lexer.Token == js_lexer.TLessThan {
		ts_parser.go#L483: 		p.lexer.Next()
		ts_parser.go#L486: 			p.lexer.Expect(js_lexer.TIdentifier)
		ts_parser.go#L489: 			if p.lexer.Token == js_lexer.TExtends {
		ts_parser.go#L490: 				p.lexer.Next()
		ts_parser.go#L495: 			if p.lexer.Token == js_lexer.TEquals {
		ts_parser.go#L496: 				p.lexer.Next()
		ts_parser.go#L500: 			if p.lexer.Token != js_lexer.TComma {
		ts_parser.go#L503: 			p.lexer.Next()
		ts_parser.go#L504: 			if p.lexer.Token == js_lexer.TGreaterThan {
		ts_parser.go#L509: 		p.lexer.ExpectGreaterThan(false /* isInsideJSXElement */)
		ts_parser.go#L514: 	if p.lexer.Token != js_lexer.TLessThan {
		ts_parser.go#L518: 	p.lexer.Next()
		ts_parser.go#L522: 		if p.lexer.Token != js_lexer.TComma {
		ts_parser.go#L525: 		p.lexer.Next()
		ts_parser.go#L529: 	p.lexer.ExpectGreaterThan(isInsideJSXElement)
		ts_parser.go#L534: 	oldLexer := p.lexer
		ts_parser.go#L535: 	p.lexer.IsLogDisabled = true
		ts_parser.go#L541: 			p.lexer = oldLexer
		ts_parser.go#L551: 		p.lexer.Unexpected()
		ts_parser.go#L556: 	p.lexer.IsLogDisabled = oldLexer.IsLogDisabled
		ts_parser.go#L561: 	oldLexer := p.lexer
		ts_parser.go#L562: 	p.lexer.IsLogDisabled = true
		ts_parser.go#L568: 			p.lexer = oldLexer
		ts_parser.go#L575: 	if p.lexer.Token != js_lexer.TOpenParen {
		ts_parser.go#L576: 		p.lexer.Unexpected()
		ts_parser.go#L581: 	p.lexer.IsLogDisabled = oldLexer.IsLogDisabled
		ts_parser.go#L586: 	oldLexer := p.lexer
		ts_parser.go#L587: 	p.lexer.IsLogDisabled = true
		ts_parser.go#L593: 			p.lexer = oldLexer
		ts_parser.go#L599: 	p.lexer.Expect(js_lexer.TColon)
		ts_parser.go#L603: 	if p.lexer.Token != js_lexer.TEqualsGreaterThan {
		ts_parser.go#L604: 		p.lexer.Unexpected()
		ts_parser.go#L609: 	p.lexer.IsLogDisabled = oldLexer.IsLogDisabled
		ts_parser.go#L614: 	oldLexer := p.lexer
		ts_parser.go#L615: 	p.lexer.IsLogDisabled = true
		ts_parser.go#L621: 			p.lexer = oldLexer
		ts_parser.go#L628: 	p.lexer.Expect(js_lexer.TEqualsGreaterThan)
		ts_parser.go#L632: 	p.lexer.IsLogDisabled = oldLexer.IsLogDisabled
		ts_parser.go#L639: 	switch p.lexer.Token {
		ts_parser.go#L687: 	name := p.lexer.Identifier
		ts_parser.go#L688: 	p.lexer.Expect(js_lexer.TIdentifier)
		ts_parser.go#L696: 	if p.lexer.Token == js_lexer.TExtends {
		ts_parser.go#L697: 		p.lexer.Next()
		ts_parser.go#L700: 			if p.lexer.Token != js_lexer.TComma {
		ts_parser.go#L703: 			p.lexer.Next()
		ts_parser.go#L707: 	if p.lexer.IsContextualKeyword("implements") {
		ts_parser.go#L708: 		p.lexer.Next()
		ts_parser.go#L711: 			if p.lexer.Token != js_lexer.TComma {
		ts_parser.go#L714: 			p.lexer.Next()
		ts_parser.go#L722: 	if opts.isExport && p.lexer.Token == js_lexer.TOpenBrace {
		ts_parser.go#L726: 		if p.lexer.IsContextualKeyword("from") {
		ts_parser.go#L727: 			p.lexer.Next()
		ts_parser.go#L730: 		p.lexer.ExpectOrInsertSemicolon()
		ts_parser.go#L734: 	name := p.lexer.Identifier
		ts_parser.go#L735: 	p.lexer.Expect(js_lexer.TIdentifier)
		ts_parser.go#L742: 	p.lexer.Expect(js_lexer.TEquals)
		ts_parser.go#L744: 	p.lexer.ExpectOrInsertSemicolon()
		ts_parser.go#L750: 		for p.lexer.Token == js_lexer.TAt {
		ts_parser.go#L751: 			p.lexer.Next()
		ts_parser.go#L768: 	p.lexer.Expect(js_lexer.TEnum)
		ts_parser.go#L769: 	nameLoc := p.lexer.Loc()
		ts_parser.go#L770: 	nameText := p.lexer.Identifier
		ts_parser.go#L771: 	p.lexer.Expect(js_lexer.TIdentifier)
		ts_parser.go#L779: 	p.lexer.Expect(js_lexer.TOpenBrace)
		ts_parser.go#L783: 	for p.lexer.Token != js_lexer.TCloseBrace {
		ts_parser.go#L785: 			Loc: p.lexer.Loc(),
		ts_parser.go#L790: 		if p.lexer.Token == js_lexer.TStringLiteral {
		ts_parser.go#L791: 			value.Name = p.lexer.StringLiteral
		ts_parser.go#L792: 		} else if p.lexer.IsIdentifierOrKeyword() {
		ts_parser.go#L793: 			value.Name = js_lexer.StringToUTF16(p.lexer.Identifier)
		ts_parser.go#L795: 			p.lexer.Expect(js_lexer.TIdentifier)
		ts_parser.go#L797: 		p.lexer.Next()
		ts_parser.go#L805: 		if p.lexer.Token == js_lexer.TEquals {
		ts_parser.go#L806: 			p.lexer.Next()
		ts_parser.go#L813: 		if p.lexer.Token != js_lexer.TComma && p.lexer.Token != js_lexer.TSemicolon {
		ts_parser.go#L816: 		p.lexer.Next()
		ts_parser.go#L823: 	p.lexer.Expect(js_lexer.TCloseBrace)
		ts_parser.go#L834: 	p.lexer.Expect(js_lexer.TEquals)
		ts_parser.go#L837: 	name := p.lexer.Identifier
		ts_parser.go#L838: 	value := js_ast.Expr{Loc: p.lexer.Loc(), Data: &js_ast.EIdentifier{Ref: p.storeNameInRef(name)}}
		ts_parser.go#L839: 	p.lexer.Expect(js_lexer.TIdentifier)
		ts_parser.go#L841: 	if name == "require" && p.lexer.Token == js_lexer.TOpenParen {
		ts_parser.go#L843: 		p.lexer.Next()
		ts_parser.go#L844: 		path := js_ast.Expr{Loc: p.lexer.Loc(), Data: &js_ast.EString{Value: p.lexer.StringLiteral}}
		ts_parser.go#L845: 		p.lexer.Expect(js_lexer.TStringLiteral)
		ts_parser.go#L846: 		p.lexer.Expect(js_lexer.TCloseParen)
		ts_parser.go#L854: 		for p.lexer.Token == js_lexer.TDot {
		ts_parser.go#L855: 			p.lexer.Next()
		ts_parser.go#L858: 				Name:    p.lexer.Identifier,
		ts_parser.go#L859: 				NameLoc: p.lexer.Loc(),
		ts_parser.go#L861: 			p.lexer.Expect(js_lexer.TIdentifier)
		ts_parser.go#L865: 	p.lexer.ExpectOrInsertSemicolon()
		ts_parser.go#L882: 	nameLoc := p.lexer.Loc()
		ts_parser.go#L883: 	nameText := p.lexer.Identifier
		ts_parser.go#L884: 	p.lexer.Next()
		ts_parser.go#L890: 	if p.lexer.Token == js_lexer.TDot {
		ts_parser.go#L891: 		dotLoc := p.lexer.Loc()
		ts_parser.go#L892: 		p.lexer.Next()
		ts_parser.go#L898: 	} else if opts.isTypeScriptDeclare && p.lexer.Token != js_lexer.TOpenBrace {
		ts_parser.go#L899: 		p.lexer.ExpectOrInsertSemicolon()
		ts_parser.go#L901: 		p.lexer.Expect(js_lexer.TOpenBrace)
		ts_parser.go#L906: 		p.lexer.Next()