| 667 | } |
| 668 | |
| 669 | static Token ParseDeclName( |
| 670 | Parser* parser) |
| 671 | { |
| 672 | Token name; |
| 673 | if (AdvanceIf(parser, "operator")) |
| 674 | { |
| 675 | name = parser->ReadToken(); |
| 676 | switch (name.Type) |
| 677 | { |
| 678 | case TokenType::OpAdd: case TokenType::OpSub: case TokenType::OpMul: case TokenType::OpDiv: |
| 679 | case TokenType::OpMod: case TokenType::OpNot: case TokenType::OpBitNot: case TokenType::OpLsh: case TokenType::OpRsh: |
| 680 | case TokenType::OpEql: case TokenType::OpNeq: case TokenType::OpGreater: case TokenType::OpLess: case TokenType::OpGeq: |
| 681 | case TokenType::OpLeq: case TokenType::OpAnd: case TokenType::OpOr: case TokenType::OpBitXor: case TokenType::OpBitAnd: |
| 682 | case TokenType::OpBitOr: case TokenType::OpInc: case TokenType::OpDec: |
| 683 | break; |
| 684 | default: |
| 685 | parser->sink->diagnose(name.Position, Diagnostics::invalidOperator, name.Content); |
| 686 | break; |
| 687 | } |
| 688 | } |
| 689 | else |
| 690 | { |
| 691 | name = parser->ReadToken(TokenType::Identifier); |
| 692 | } |
| 693 | return name; |
| 694 | } |
| 695 | |
| 696 | struct DeclaratorInfo |
| 697 | { |
no test coverage detected