Author: Vlad Serebrennikov Date: 2025-04-30T02:31:31+03:00 New Revision: 7ecd81e266174253786e084c100c22c65a214b5d
URL: https://github.com/llvm/llvm-project/commit/7ecd81e266174253786e084c100c22c65a214b5d DIFF: https://github.com/llvm/llvm-project/commit/7ecd81e266174253786e084c100c22c65a214b5d.diff LOG: [clang][NFC] Convert `Parser::ExtraSemiKind` to scoped enum Added: Modified: clang/include/clang/Parse/Parser.h clang/lib/Parse/ParseDecl.cpp clang/lib/Parse/ParseDeclCXX.cpp clang/lib/Parse/ParseObjc.cpp clang/lib/Parse/Parser.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Parse/Parser.h b/clang/include/clang/Parse/Parser.h index dbbb80fdd9943..491abae96160f 100644 --- a/clang/include/clang/Parse/Parser.h +++ b/clang/include/clang/Parse/Parser.h @@ -64,6 +64,14 @@ enum class AnnotatedNameKind { Success }; +/// The kind of extra semi diagnostic to emit. +enum class ExtraSemiKind { + OutsideFunction = 0, + InsideStruct = 1, + InstanceVariableList = 2, + AfterMemberFunctionDefinition = 3 +}; + /// Parser - This implements a parser for the C family of languages. After /// parsing units of the grammar, productions are invoked to handle whatever has /// been read. @@ -1120,14 +1128,6 @@ class Parser : public CodeCompletionHandler { /// to the semicolon, consumes that extra token. bool ExpectAndConsumeSemi(unsigned DiagID , StringRef TokenUsed = ""); - /// The kind of extra semi diagnostic to emit. - enum ExtraSemiKind { - OutsideFunction = 0, - InsideStruct = 1, - InstanceVariableList = 2, - AfterMemberFunctionDefinition = 3 - }; - /// Consume any extra semi-colons until the end of the line. void ConsumeExtraSemi(ExtraSemiKind Kind, DeclSpec::TST T = TST_unspecified); diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp index 69d40baaf4298..7eb6bb97b6622 100644 --- a/clang/lib/Parse/ParseDecl.cpp +++ b/clang/lib/Parse/ParseDecl.cpp @@ -5187,7 +5187,7 @@ void Parser::ParseStructUnionBody(SourceLocation RecordLoc, // Check for extraneous top-level semicolon. if (Tok.is(tok::semi)) { - ConsumeExtraSemi(InsideStruct, TagType); + ConsumeExtraSemi(ExtraSemiKind::InsideStruct, TagType); continue; } diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp index 51fe0663a8d1a..6deb9b73998ae 100644 --- a/clang/lib/Parse/ParseDeclCXX.cpp +++ b/clang/lib/Parse/ParseDeclCXX.cpp @@ -3295,7 +3295,7 @@ Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration( // Consume the ';' - it's optional unless we have a delete or default if (Tok.is(tok::semi)) - ConsumeExtraSemi(AfterMemberFunctionDefinition); + ConsumeExtraSemi(ExtraSemiKind::AfterMemberFunctionDefinition); return DeclGroupPtrTy::make(DeclGroupRef(FunDecl)); } @@ -3649,7 +3649,7 @@ Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclarationWithPragmas( case tok::semi: // Check for extraneous top-level semicolon. - ConsumeExtraSemi(InsideStruct, TagType); + ConsumeExtraSemi(ExtraSemiKind::InsideStruct, TagType); return nullptr; // Handle pragmas that can appear as member declarations. @@ -5313,7 +5313,7 @@ void Parser::ParseMicrosoftIfExistsClassDeclaration( // Check for extraneous top-level semicolon. if (Tok.is(tok::semi)) { - ConsumeExtraSemi(InsideStruct, TagType); + ConsumeExtraSemi(ExtraSemiKind::InsideStruct, TagType); continue; } diff --git a/clang/lib/Parse/ParseObjc.cpp b/clang/lib/Parse/ParseObjc.cpp index d872177b3d7aa..40bc459523e8d 100644 --- a/clang/lib/Parse/ParseObjc.cpp +++ b/clang/lib/Parse/ParseObjc.cpp @@ -1972,7 +1972,7 @@ void Parser::ParseObjCClassInstanceVariables(ObjCContainerDecl *interfaceDecl, // Check for extraneous top-level semicolon. if (Tok.is(tok::semi)) { - ConsumeExtraSemi(InstanceVariableList); + ConsumeExtraSemi(ExtraSemiKind::InstanceVariableList); continue; } diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp index 0954c31519c5a..c45ed4182997b 100644 --- a/clang/lib/Parse/Parser.cpp +++ b/clang/lib/Parse/Parser.cpp @@ -24,6 +24,7 @@ #include "clang/Sema/ParsedTemplate.h" #include "clang/Sema/Scope.h" #include "clang/Sema/SemaCodeCompletion.h" +#include "llvm/ADT/STLForwardCompat.h" #include "llvm/Support/Path.h" #include "llvm/Support/TimeProfiler.h" using namespace clang; @@ -213,7 +214,7 @@ void Parser::ConsumeExtraSemi(ExtraSemiKind Kind, DeclSpec::TST TST) { // C++11 allows extra semicolons at namespace scope, but not in any of the // other contexts. - if (Kind == OutsideFunction && getLangOpts().CPlusPlus) { + if (Kind == ExtraSemiKind::OutsideFunction && getLangOpts().CPlusPlus) { if (getLangOpts().CPlusPlus11) Diag(StartLoc, diag::warn_cxx98_compat_top_level_semi) << FixItHint::CreateRemoval(SourceRange(StartLoc, EndLoc)); @@ -223,10 +224,11 @@ void Parser::ConsumeExtraSemi(ExtraSemiKind Kind, DeclSpec::TST TST) { return; } - if (Kind != AfterMemberFunctionDefinition || HadMultipleSemis) + if (Kind != ExtraSemiKind::AfterMemberFunctionDefinition || HadMultipleSemis) Diag(StartLoc, diag::ext_extra_semi) - << Kind << DeclSpec::getSpecifierName(TST, - Actions.getASTContext().getPrintingPolicy()) + << llvm::to_underlying(Kind) + << DeclSpec::getSpecifierName( + TST, Actions.getASTContext().getPrintingPolicy()) << FixItHint::CreateRemoval(SourceRange(StartLoc, EndLoc)); else // A single semicolon is valid after a member function definition. @@ -902,7 +904,7 @@ Parser::ParseExternalDeclaration(ParsedAttributes &Attrs, // Either a C++11 empty-declaration or attribute-declaration. SingleDecl = Actions.ActOnEmptyDeclaration(getCurScope(), Attrs, Tok.getLocation()); - ConsumeExtraSemi(OutsideFunction); + ConsumeExtraSemi(ExtraSemiKind::OutsideFunction); break; case tok::r_brace: Diag(Tok, diag::err_extraneous_closing_brace); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits