()
| 393 | } |
| 394 | |
| 395 | func (self *_parser) parseObjectProperty() ast.Property { |
| 396 | if self.token == token.ELLIPSIS { |
| 397 | self.next() |
| 398 | return &ast.SpreadElement{ |
| 399 | Expression: self.parseAssignmentExpression(), |
| 400 | } |
| 401 | } |
| 402 | keyStartIdx := self.idx |
| 403 | generator := false |
| 404 | if self.token == token.MULTIPLY { |
| 405 | generator = true |
| 406 | self.next() |
| 407 | } |
| 408 | literal, parsedLiteral, value, tkn := self.parseObjectPropertyKey() |
| 409 | if value == nil { |
| 410 | return nil |
| 411 | } |
| 412 | if token.IsId(tkn) || tkn == token.STRING || tkn == token.NUMBER || tkn == token.ILLEGAL { |
| 413 | if generator { |
| 414 | return &ast.PropertyKeyed{ |
| 415 | Key: value, |
| 416 | Kind: ast.PropertyKindMethod, |
| 417 | Value: self.parseMethodDefinition(keyStartIdx, ast.PropertyKindMethod, true, false), |
| 418 | Computed: tkn == token.ILLEGAL, |
| 419 | } |
| 420 | } |
| 421 | switch { |
| 422 | case self.token == token.LEFT_PARENTHESIS: |
| 423 | return &ast.PropertyKeyed{ |
| 424 | Key: value, |
| 425 | Kind: ast.PropertyKindMethod, |
| 426 | Value: self.parseMethodDefinition(keyStartIdx, ast.PropertyKindMethod, false, false), |
| 427 | Computed: tkn == token.ILLEGAL, |
| 428 | } |
| 429 | case self.token == token.COMMA || self.token == token.RIGHT_BRACE || self.token == token.ASSIGN: // shorthand property |
| 430 | if self.isBindingId(tkn) { |
| 431 | var initializer ast.Expression |
| 432 | if self.token == token.ASSIGN { |
| 433 | // allow the initializer syntax here in case the object literal |
| 434 | // needs to be reinterpreted as an assignment pattern, enforce later if it doesn't. |
| 435 | self.next() |
| 436 | initializer = self.parseAssignmentExpression() |
| 437 | } |
| 438 | return &ast.PropertyShort{ |
| 439 | Name: ast.Identifier{ |
| 440 | Name: parsedLiteral, |
| 441 | Idx: value.Idx0(), |
| 442 | }, |
| 443 | Initializer: initializer, |
| 444 | } |
| 445 | } else { |
| 446 | self.errorUnexpectedToken(self.token) |
| 447 | } |
| 448 | case (literal == "get" || literal == "set" || tkn == token.ASYNC) && self.token != token.COLON: |
| 449 | _, _, keyValue, tkn1 := self.parseObjectPropertyKey() |
| 450 | if keyValue == nil { |
| 451 | return nil |
| 452 | } |
no test coverage detected