@@ -6713,50 +6713,60 @@ func (p *parser) parseDecorator() js_ast.Expr {
6713
6713
6714
6714
memberExpr := js_ast.Expr{Loc: nameRange.Loc, Data: &js_ast.EIdentifier{Ref: p.storeNameInRef(name)}}
6715
6715
6716
- // "@x<y>() class{}"
6717
- if p.options.ts.Parse {
6718
- p.skipTypeScriptTypeArguments(skipTypeScriptTypeArgumentsOpts{})
6719
- }
6720
-
6721
- for p.lexer.Token == js_lexer.TDot {
6722
- p.lexer.Next()
6723
-
6724
- if p.lexer.Token == js_lexer.TPrivateIdentifier {
6725
- name := p.lexer.Identifier
6726
- memberExpr.Data = &js_ast.EIndex{
6727
- Target: memberExpr,
6728
- Index: js_ast.Expr{Loc: p.lexer.Loc(), Data: &js_ast.EPrivateIdentifier{Ref: p.storeNameInRef(name)}},
6716
+ loop:
6717
+ for {
6718
+ switch p.lexer.Token {
6719
+ case js_lexer.TExclamation:
6720
+ // Skip over TypeScript non-null assertions
6721
+ if p.lexer.HasNewlineBefore {
6722
+ break loop
6723
+ }
6724
+ if !p.options.ts.Parse {
6725
+ p.lexer.Unexpected()
6729
6726
}
6730
- p.reportPrivateNameUsage(name.String)
6731
6727
p.lexer.Next()
6732
- } else {
6733
- memberExpr.Data = &js_ast.EDot{
6734
- Target: memberExpr,
6735
- Name: p.lexer.Identifier.String,
6736
- NameLoc: p.lexer.Loc(),
6728
+
6729
+ case js_lexer.TDot:
6730
+ p.lexer.Next()
6731
+
6732
+ if p.lexer.Token == js_lexer.TPrivateIdentifier {
6733
+ name := p.lexer.Identifier
6734
+ memberExpr.Data = &js_ast.EIndex{
6735
+ Target: memberExpr,
6736
+ Index: js_ast.Expr{Loc: p.lexer.Loc(), Data: &js_ast.EPrivateIdentifier{Ref: p.storeNameInRef(name)}},
6737
+ }
6738
+ p.reportPrivateNameUsage(name.String)
6739
+ p.lexer.Next()
6740
+ } else {
6741
+ memberExpr.Data = &js_ast.EDot{
6742
+ Target: memberExpr,
6743
+ Name: p.lexer.Identifier.String,
6744
+ NameLoc: p.lexer.Loc(),
6745
+ }
6746
+ p.lexer.Expect(js_lexer.TIdentifier)
6737
6747
}
6738
- p.lexer.Expect(js_lexer.TIdentifier)
6739
- }
6740
6748
6741
- // "@x.y<z>() class{}"
6742
- if p.options.ts.Parse {
6743
- p.skipTypeScriptTypeArguments(skipTypeScriptTypeArgumentsOpts{})
6744
- }
6745
- }
6749
+ case js_lexer.TQuestionDot:
6750
+ // The grammar for "DecoratorMemberExpression" currently forbids "?."
6751
+ p.lexer.Expect(js_lexer.TDot)
6746
6752
6747
- // The grammar for "DecoratorMemberExpression" currently forbids "?."
6748
- if p.lexer.Token == js_lexer.TQuestionDot {
6749
- p.lexer.Expect(js_lexer.TDot)
6750
- }
6753
+ case js_lexer.TOpenParen:
6754
+ args, closeParenLoc, isMultiLine := p.parseCallArgs()
6755
+ memberExpr.Data = &js_ast.ECall{
6756
+ Target: memberExpr,
6757
+ Args: args,
6758
+ CloseParenLoc: closeParenLoc,
6759
+ IsMultiLine: isMultiLine,
6760
+ Kind: js_ast.TargetWasOriginallyPropertyAccess,
6761
+ }
6762
+ break loop
6751
6763
6752
- if p.lexer.Token == js_lexer.TOpenParen {
6753
- args, closeParenLoc, isMultiLine := p.parseCallArgs()
6754
- memberExpr.Data = &js_ast.ECall{
6755
- Target: memberExpr,
6756
- Args: args,
6757
- CloseParenLoc: closeParenLoc,
6758
- IsMultiLine: isMultiLine,
6759
- Kind: js_ast.TargetWasOriginallyPropertyAccess,
6764
+ default:
6765
+ // "@x<y>"
6766
+ // "@x.y<z>"
6767
+ if !p.skipTypeScriptTypeArguments(skipTypeScriptTypeArgumentsOpts{}) {
6768
+ break loop
6769
+ }
6760
6770
}
6761
6771
}
6762
6772
0 commit comments