-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[NFC][Clang][Preprocessor] Refine the implementation of isNextPPTokenOneOf #145546
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[NFC][Clang][Preprocessor] Refine the implementation of isNextPPTokenOneOf #145546
Conversation
@llvm/pr-subscribers-clang Author: None (yronglin) ChangesThis PR follow the suggestion(#143898 (comment)) to refine the implementation of In order to reduce the impact, specificed Full diff: https://github.com/llvm/llvm-project/pull/145546.diff 4 Files Affected:
diff --git a/clang/include/clang/Lex/Preprocessor.h b/clang/include/clang/Lex/Preprocessor.h
index 0ec1cb4d0c5d8..d1aa2ecda33dd 100644
--- a/clang/include/clang/Lex/Preprocessor.h
+++ b/clang/include/clang/Lex/Preprocessor.h
@@ -2304,7 +2304,8 @@ class Preprocessor {
/// Check whether the next pp-token is one of the specificed token kind. this
/// method should have no observable side-effect on the lexed tokens.
- template <tok::TokenKind K, tok::TokenKind... Ks> bool isNextPPTokenOneOf() {
+ template <typename... Ks>
+ bool isNextPPTokenOneOf(tok::TokenKind K, Ks... ks) {
// Do some quick tests for rejection cases.
std::optional<Token> Val;
if (CurLexer)
@@ -2335,7 +2336,7 @@ class Preprocessor {
// Okay, we found the token and return. Otherwise we found the end of the
// translation unit.
- return Val->is(K) || (... || Val->is(Ks));
+ return Val->isOneOf(K, ks...);
}
private:
diff --git a/clang/include/clang/Lex/Token.h b/clang/include/clang/Lex/Token.h
index d4dfd7b44d9af..9ae521c3c8f07 100644
--- a/clang/include/clang/Lex/Token.h
+++ b/clang/include/clang/Lex/Token.h
@@ -101,11 +101,8 @@ class Token {
/// "if (Tok.is(tok::l_brace)) {...}".
bool is(tok::TokenKind K) const { return Kind == K; }
bool isNot(tok::TokenKind K) const { return Kind != K; }
- bool isOneOf(tok::TokenKind K1, tok::TokenKind K2) const {
- return is(K1) || is(K2);
- }
template <typename... Ts> bool isOneOf(tok::TokenKind K1, Ts... Ks) const {
- return is(K1) || isOneOf(Ks...);
+ return is(K1) || (is(Ks) || ...);
}
/// Return true if this is a raw identifier (when lexing
diff --git a/clang/lib/Lex/PPDirectives.cpp b/clang/lib/Lex/PPDirectives.cpp
index c8974e5a3528c..b88624b22e622 100644
--- a/clang/lib/Lex/PPDirectives.cpp
+++ b/clang/lib/Lex/PPDirectives.cpp
@@ -183,9 +183,9 @@ static bool isReservedCXXAttributeName(Preprocessor &PP, IdentifierInfo *II) {
AttributeCommonInfo::AttrArgsInfo AttrArgsInfo =
AttributeCommonInfo::getCXX11AttrArgsInfo(II);
if (AttrArgsInfo == AttributeCommonInfo::AttrArgsInfo::Required)
- return PP.isNextPPTokenOneOf<tok::l_paren>();
+ return PP.isNextPPTokenOneOf(tok::l_paren);
- return !PP.isNextPPTokenOneOf<tok::l_paren>() ||
+ return !PP.isNextPPTokenOneOf(tok::l_paren) ||
AttrArgsInfo == AttributeCommonInfo::AttrArgsInfo::Optional;
}
return false;
diff --git a/clang/lib/Lex/Preprocessor.cpp b/clang/lib/Lex/Preprocessor.cpp
index 7fecbe9eee53c..500cf6f8400e0 100644
--- a/clang/lib/Lex/Preprocessor.cpp
+++ b/clang/lib/Lex/Preprocessor.cpp
@@ -813,14 +813,14 @@ bool Preprocessor::HandleIdentifier(Token &Identifier) {
if (!Identifier.isExpandDisabled() && MI->isEnabled()) {
// C99 6.10.3p10: If the preprocessing token immediately after the
// macro name isn't a '(', this macro should not be expanded.
- if (!MI->isFunctionLike() || isNextPPTokenOneOf<tok::l_paren>())
+ if (!MI->isFunctionLike() || isNextPPTokenOneOf(tok::l_paren))
return HandleMacroExpandedIdentifier(Identifier, MD);
} else {
// C99 6.10.3.4p2 says that a disabled macro may never again be
// expanded, even if it's in a context where it could be expanded in the
// future.
Identifier.setFlag(Token::DisableExpand);
- if (MI->isObjectLike() || isNextPPTokenOneOf<tok::l_paren>())
+ if (MI->isObjectLike() || isNextPPTokenOneOf(tok::l_paren))
Diag(Identifier, diag::pp_disabled_macro_expansion);
}
}
|
…enOneOf Signed-off-by: yronglin <yronglin777@gmail.com>
2c7d4f0
to
19b65ac
Compare
Signed-off-by: yronglin <yronglin777@gmail.com>
…OneOf (llvm#145546) This PR follow the suggestion(llvm#143898 (comment)) to refine the implementation of `Preprocessor::isNextPPToken`, also use C++ fold expression to refine `Token::isOneOf`. We don't need `bool isOneOf(tok::TokenKind K1, tok::TokenKind K2) const` anymore. In order to reduce the impact, specificed `TokenKind` is still passed to `Token::isOneOf` and `Preprocessor::isNextPPTokenOneOf` as function parameters. --------- Signed-off-by: yronglin <yronglin777@gmail.com>
This PR follow the suggestion(#143898 (comment)) to refine the implementation of
Preprocessor::isNextPPToken
, also use C++ fold expression to refineToken::isOneOf
. We don't needbool isOneOf(tok::TokenKind K1, tok::TokenKind K2) const
anymore.In order to reduce the impact, specificed
TokenKind
is still passed toToken::isOneOf
andPreprocessor::isNextPPTokenOneOf
as function parameters.