| 241 | |
| 242 | private: |
| 243 | EnumDecl parseEnum() { |
| 244 | EnumDecl decl; |
| 245 | decl.line = token_.line; |
| 246 | decl.name = expect(Tok::Ident, "enum name").text; |
| 247 | expect(Tok::Colon); |
| 248 | decl.underlying = expect(Tok::Ident, "enum underlying type").text; |
| 249 | expect(Tok::LBrace); |
| 250 | std::unordered_set<std::string> names; |
| 251 | while (token_.kind != Tok::RBrace) { |
| 252 | EnumMember member; |
| 253 | member.line = token_.line; |
| 254 | member.name = expect(Tok::Ident, "enum member").text; |
| 255 | ensureUnique(names, member.name, "enum member", member.line); |
| 256 | expect(Tok::Equal); |
| 257 | member.value = expect(Tok::Int, "enum value").text; |
| 258 | expect(Tok::Semi); |
| 259 | decl.members.push_back(std::move(member)); |
| 260 | } |
| 261 | expect(Tok::RBrace); |
| 262 | optionalSemi(); |
| 263 | return decl; |
| 264 | } |
| 265 | |
| 266 | StructDecl parseStruct() { |
| 267 | StructDecl decl; |
nothing calls this directly
no outgoing calls
no test coverage detected