@@ -2014,9 +2014,13 @@ func (p *parser) parseProperty(startLoc logger.Loc, kind js_ast.PropertyKind, op
2014
2014
if !opts.isClass && kind == js_ast.PropertyNormal && p.lexer.Token != js_lexer.TColon &&
2015
2015
p.lexer.Token != js_lexer.TOpenParen && p.lexer.Token != js_lexer.TLessThan &&
2016
2016
!opts.isGenerator && !opts.isAsync && js_lexer.Keywords[name.String] == js_lexer.T(0) {
2017
- if (p.fnOrArrowDataParse.await != allowIdent && name.String == "await") || (p.fnOrArrowDataParse.yield != allowIdent && name.String == "yield") {
2017
+
2018
+ // Forbid invalid identifiers
2019
+ if (p.fnOrArrowDataParse.await != allowIdent && name.String == "await") ||
2020
+ (p.fnOrArrowDataParse.yield != allowIdent && name.String == "yield") {
2018
2021
p.log.AddError(&p.tracker, nameRange, fmt.Sprintf("Cannot use %q as an identifier here:", name.String))
2019
2022
}
2023
+
2020
2024
ref := p.storeNameInRef(name)
2021
2025
value := js_ast.Expr{Loc: key.Loc, Data: &js_ast.EIdentifier{Ref: ref}}
2022
2026
@@ -2323,20 +2327,26 @@ func (p *parser) parsePropertyBinding() js_ast.PropertyBinding {
2323
2327
2324
2328
default:
2325
2329
name := p.lexer.Identifier
2326
- loc := p.lexer.Loc ()
2330
+ nameRange := p.lexer.Range ()
2327
2331
if !p.lexer.IsIdentifierOrKeyword() {
2328
2332
p.lexer.Expect(js_lexer.TIdentifier)
2329
2333
}
2330
2334
p.lexer.Next()
2331
2335
if p.isMangledProp(name.String) {
2332
- key = js_ast.Expr{Loc: loc , Data: &js_ast.EMangledProp{Ref: p.storeNameInRef(name)}}
2336
+ key = js_ast.Expr{Loc: nameRange.Loc , Data: &js_ast.EMangledProp{Ref: p.storeNameInRef(name)}}
2333
2337
} else {
2334
- key = js_ast.Expr{Loc: loc , Data: &js_ast.EString{Value: helpers.StringToUTF16(name.String)}}
2338
+ key = js_ast.Expr{Loc: nameRange.Loc , Data: &js_ast.EString{Value: helpers.StringToUTF16(name.String)}}
2335
2339
}
2336
2340
2337
2341
if p.lexer.Token != js_lexer.TColon && p.lexer.Token != js_lexer.TOpenParen {
2342
+ // Forbid invalid identifiers
2343
+ if (p.fnOrArrowDataParse.await != allowIdent && name.String == "await") ||
2344
+ (p.fnOrArrowDataParse.yield != allowIdent && name.String == "yield") {
2345
+ p.log.AddError(&p.tracker, nameRange, fmt.Sprintf("Cannot use %q as an identifier here:", name.String))
2346
+ }
2347
+
2338
2348
ref := p.storeNameInRef(name)
2339
- value := js_ast.Binding{Loc: loc , Data: &js_ast.BIdentifier{Ref: ref}}
2349
+ value := js_ast.Binding{Loc: nameRange.Loc , Data: &js_ast.BIdentifier{Ref: ref}}
2340
2350
2341
2351
var defaultValueOrNil js_ast.Expr
2342
2352
if p.lexer.Token == js_lexer.TEquals {
@@ -5230,10 +5240,13 @@ func (p *parser) parseBinding() js_ast.Binding {
5230
5240
switch p.lexer.Token {
5231
5241
case js_lexer.TIdentifier:
5232
5242
name := p.lexer.Identifier
5243
+
5244
+ // Forbid invalid identifiers
5233
5245
if (p.fnOrArrowDataParse.await != allowIdent && name.String == "await") ||
5234
5246
(p.fnOrArrowDataParse.yield != allowIdent && name.String == "yield") {
5235
5247
p.log.AddError(&p.tracker, p.lexer.Range(), fmt.Sprintf("Cannot use %q as an identifier here:", name.String))
5236
5248
}
5249
+
5237
5250
ref := p.storeNameInRef(name)
5238
5251
p.lexer.Next()
5239
5252
return js_ast.Binding{Loc: loc, Data: &js_ast.BIdentifier{Ref: ref}}
0 commit comments