MCPcopy Create free account
hub / github.com/dop251/goja / parseObjectProperty

Method parseObjectProperty

parser/expression.go:395–481  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

393}
394
395func (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 }

Callers 1

parseObjectLiteralMethod · 0.95

Calls 9

nextMethod · 0.95
parseMethodDefinitionMethod · 0.95
isBindingIdMethod · 0.95
errorUnexpectedTokenMethod · 0.95
expectMethod · 0.95
IsIdFunction · 0.92
Idx0Method · 0.65

Tested by

no test coverage detected