(literalFields *literalFieldSet, tok *token, next *token)
| 395 | } |
| 396 | |
| 397 | func (p *parser) parseObjectRemainderField(literalFields *literalFieldSet, tok *token, next *token) (*ast.ObjectField, errors.StaticError) { |
| 398 | var kind ast.ObjectFieldKind |
| 399 | var fodder1 ast.Fodder |
| 400 | var expr1 ast.Node |
| 401 | var id *ast.Identifier |
| 402 | var fodder2 ast.Fodder |
| 403 | var err errors.StaticError |
| 404 | |
| 405 | switch next.kind { |
| 406 | case tokenIdentifier: |
| 407 | kind = ast.ObjectFieldID |
| 408 | id = (*ast.Identifier)(&next.data) |
| 409 | fodder1 = next.fodder |
| 410 | case tokenStringDouble, tokenStringSingle, |
| 411 | tokenStringBlock, tokenVerbatimStringDouble, tokenVerbatimStringSingle: |
| 412 | kind = ast.ObjectFieldStr |
| 413 | expr1, err = tokenStringToAst(next) |
| 414 | if err != nil { |
| 415 | return nil, err |
| 416 | } |
| 417 | default: |
| 418 | fodder1 = next.fodder |
| 419 | kind = ast.ObjectFieldExpr |
| 420 | var err errors.StaticError |
| 421 | expr1, err = p.parse(iast.MaxPrecedence) |
| 422 | if err != nil { |
| 423 | return nil, err |
| 424 | } |
| 425 | bracketR, err := p.popExpect(tokenBracketR) |
| 426 | if err != nil { |
| 427 | return nil, err |
| 428 | } |
| 429 | fodder2 = bracketR.fodder |
| 430 | } |
| 431 | |
| 432 | isMethod := false |
| 433 | methComma := false |
| 434 | var parenL *token |
| 435 | var parenR *token |
| 436 | var params []ast.Parameter |
| 437 | if p.peek().kind == tokenParenL { |
| 438 | parenL = p.pop() |
| 439 | var err errors.StaticError |
| 440 | parenR, params, methComma, err = p.parseParameters("method parameter") |
| 441 | if err != nil { |
| 442 | return nil, err |
| 443 | } |
| 444 | isMethod = true |
| 445 | } |
| 446 | |
| 447 | opFodder, plusSugar, hide, err := p.parseObjectAssignmentOp() |
| 448 | if err != nil { |
| 449 | return nil, err |
| 450 | } |
| 451 | |
| 452 | if plusSugar && isMethod { |
| 453 | return nil, errors.MakeStaticError( |
| 454 | fmt.Sprintf("Cannot use +: syntax sugar in a method: %v", next.data), next.loc) |
no test coverage detected