File indexing completed on 2026-05-10 08:36:20
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_INTEGRAL_LITERAL_EXPRESSION_MATCHER_H
0010 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_INTEGRAL_LITERAL_EXPRESSION_MATCHER_H
0011
0012 #include <clang/Lex/Token.h>
0013 #include <llvm/ADT/ArrayRef.h>
0014
0015 namespace clang::tidy::modernize {
0016
0017 enum class LiteralSize {
0018 Unknown = 0,
0019 Int,
0020 UnsignedInt,
0021 Long,
0022 UnsignedLong,
0023 LongLong,
0024 UnsignedLongLong
0025 };
0026
0027
0028
0029
0030 class IntegralLiteralExpressionMatcher {
0031 public:
0032 IntegralLiteralExpressionMatcher(ArrayRef<Token> Tokens, bool CommaAllowed)
0033 : Current(Tokens.begin()), End(Tokens.end()), CommaAllowed(CommaAllowed) {
0034 }
0035
0036 bool match();
0037 LiteralSize largestLiteralSize() const;
0038
0039 private:
0040 bool advance();
0041 bool consume(tok::TokenKind Kind);
0042 template <typename NonTerminalFunctor, typename IsKindFunctor>
0043 bool nonTerminalChainedExpr(const NonTerminalFunctor &NonTerminal,
0044 const IsKindFunctor &IsKind);
0045 template <tok::TokenKind Kind, typename NonTerminalFunctor>
0046 bool nonTerminalChainedExpr(const NonTerminalFunctor &NonTerminal);
0047 template <tok::TokenKind K1, tok::TokenKind K2, tok::TokenKind... Ks,
0048 typename NonTerminalFunctor>
0049 bool nonTerminalChainedExpr(const NonTerminalFunctor &NonTerminal);
0050
0051 bool unaryOperator();
0052 bool unaryExpr();
0053 bool multiplicativeExpr();
0054 bool additiveExpr();
0055 bool shiftExpr();
0056 bool compareExpr();
0057 bool relationalExpr();
0058 bool equalityExpr();
0059 bool andExpr();
0060 bool exclusiveOrExpr();
0061 bool inclusiveOrExpr();
0062 bool logicalAndExpr();
0063 bool logicalOrExpr();
0064 bool conditionalExpr();
0065 bool commaExpr();
0066 bool expr();
0067
0068 ArrayRef<Token>::iterator Current;
0069 ArrayRef<Token>::iterator End;
0070 LiteralSize LargestSize{LiteralSize::Unknown};
0071 bool CommaAllowed;
0072 };
0073
0074 }
0075
0076 #endif