Author: Benjamin Kramer Date: 2022-03-05T18:00:16+01:00 New Revision: a887b95edf34117b0274e5c9443ef6afa58b058a
URL: https://github.com/llvm/llvm-project/commit/a887b95edf34117b0274e5c9443ef6afa58b058a DIFF: https://github.com/llvm/llvm-project/commit/a887b95edf34117b0274e5c9443ef6afa58b058a.diff LOG: [clang-format] Turn global COperatorsFollowingVar vector into a switch LLVM optimizes this into a bit test. NFCI. Added: Modified: clang/lib/Format/FormatToken.h clang/lib/Format/UnwrappedLineParser.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/FormatToken.h b/clang/lib/Format/FormatToken.h index e72df7d377823..b00b8ab7b927c 100644 --- a/clang/lib/Format/FormatToken.h +++ b/clang/lib/Format/FormatToken.h @@ -134,34 +134,6 @@ namespace format { TYPE(CSharpGenericTypeConstraintComma) \ TYPE(Unknown) -/// Sorted operators that can follow a C variable. -static const std::vector<clang::tok::TokenKind> COperatorsFollowingVar = [] { - std::vector<clang::tok::TokenKind> ReturnVal = { - tok::l_square, tok::r_square, - tok::l_paren, tok::r_paren, - tok::r_brace, tok::period, - tok::ellipsis, tok::ampamp, - tok::ampequal, tok::star, - tok::starequal, tok::plus, - tok::plusplus, tok::plusequal, - tok::minus, tok::arrow, - tok::minusminus, tok::minusequal, - tok::exclaim, tok::exclaimequal, - tok::slash, tok::slashequal, - tok::percent, tok::percentequal, - tok::less, tok::lessless, - tok::lessequal, tok::lesslessequal, - tok::greater, tok::greatergreater, - tok::greaterequal, tok::greatergreaterequal, - tok::caret, tok::caretequal, - tok::pipe, tok::pipepipe, - tok::pipeequal, tok::question, - tok::semi, tok::equal, - tok::equalequal, tok::comma}; - assert(std::is_sorted(ReturnVal.begin(), ReturnVal.end())); - return ReturnVal; -}(); - /// Determines the semantic type of a syntactic token, e.g. whether "<" is a /// template opener or binary operator. enum TokenType : uint8_t { diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp index 68b0e2a630bcd..646374c0cd626 100644 --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -2816,6 +2816,57 @@ void UnwrappedLineParser::parseSwitch() { NestedTooDeep.pop_back(); } +// Operators that can follow a C variable. +static bool isCOperatorFollowingVar(tok::TokenKind kind) { + switch (kind) { + case tok::ampamp: + case tok::ampequal: + case tok::arrow: + case tok::caret: + case tok::caretequal: + case tok::comma: + case tok::ellipsis: + case tok::equal: + case tok::equalequal: + case tok::exclaim: + case tok::exclaimequal: + case tok::greater: + case tok::greaterequal: + case tok::greatergreater: + case tok::greatergreaterequal: + case tok::l_paren: + case tok::l_square: + case tok::less: + case tok::lessequal: + case tok::lessless: + case tok::lesslessequal: + case tok::minus: + case tok::minusequal: + case tok::minusminus: + case tok::percent: + case tok::percentequal: + case tok::period: + case tok::pipe: + case tok::pipeequal: + case tok::pipepipe: + case tok::plus: + case tok::plusequal: + case tok::plusplus: + case tok::question: + case tok::r_brace: + case tok::r_paren: + case tok::r_square: + case tok::semi: + case tok::slash: + case tok::slashequal: + case tok::star: + case tok::starequal: + return true; + default: + return false; + } +} + void UnwrappedLineParser::parseAccessSpecifier() { FormatToken *AccessSpecifierCandidate = FormatTok; nextToken(); @@ -2827,9 +2878,7 @@ void UnwrappedLineParser::parseAccessSpecifier() { nextToken(); addUnwrappedLine(); } else if (!FormatTok->is(tok::coloncolon) && - !std::binary_search(COperatorsFollowingVar.begin(), - COperatorsFollowingVar.end(), - FormatTok->Tok.getKind())) { + !isCOperatorFollowingVar(FormatTok->Tok.getKind())) { // Not a variable name nor namespace name. addUnwrappedLine(); } else if (AccessSpecifierCandidate) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits