[clang][NFC] Move isSimpleTypeSpecifier() from Sema to Token (#80101)
So that it can be used by clang-format.
This commit is contained in:
@@ -22,6 +22,7 @@
|
||||
namespace clang {
|
||||
|
||||
class IdentifierInfo;
|
||||
class LangOptions;
|
||||
|
||||
/// Token - This structure provides full information about a lexed token.
|
||||
/// It is not intended to be space efficient, it is intended to return as much
|
||||
@@ -288,6 +289,8 @@ public:
|
||||
/// Return the ObjC keyword kind.
|
||||
tok::ObjCKeywordKind getObjCKeywordID() const;
|
||||
|
||||
bool isSimpleTypeSpecifier(const LangOptions &LangOpts) const;
|
||||
|
||||
/// Return true if this token has trigraphs or escaped newlines in it.
|
||||
bool needsCleaning() const { return getFlag(NeedsCleaning); }
|
||||
|
||||
|
||||
@@ -2683,8 +2683,6 @@ public:
|
||||
|
||||
void DiagnoseUseOfUnimplementedSelectors();
|
||||
|
||||
bool isSimpleTypeSpecifier(const Token &Tok) const;
|
||||
|
||||
ParsedType getTypeName(const IdentifierInfo &II, SourceLocation NameLoc,
|
||||
Scope *S, CXXScopeSpec *SS = nullptr,
|
||||
bool isClassName = false, bool HasTrailingDot = false,
|
||||
|
||||
@@ -74,6 +74,51 @@ tok::ObjCKeywordKind Token::getObjCKeywordID() const {
|
||||
return specId ? specId->getObjCKeywordID() : tok::objc_not_keyword;
|
||||
}
|
||||
|
||||
/// Determine whether the token kind starts a simple-type-specifier.
|
||||
bool Token::isSimpleTypeSpecifier(const LangOptions &LangOpts) const {
|
||||
switch (getKind()) {
|
||||
case tok::annot_typename:
|
||||
case tok::annot_decltype:
|
||||
case tok::annot_pack_indexing_type:
|
||||
return true;
|
||||
|
||||
case tok::kw_short:
|
||||
case tok::kw_long:
|
||||
case tok::kw___int64:
|
||||
case tok::kw___int128:
|
||||
case tok::kw_signed:
|
||||
case tok::kw_unsigned:
|
||||
case tok::kw_void:
|
||||
case tok::kw_char:
|
||||
case tok::kw_int:
|
||||
case tok::kw_half:
|
||||
case tok::kw_float:
|
||||
case tok::kw_double:
|
||||
case tok::kw___bf16:
|
||||
case tok::kw__Float16:
|
||||
case tok::kw___float128:
|
||||
case tok::kw___ibm128:
|
||||
case tok::kw_wchar_t:
|
||||
case tok::kw_bool:
|
||||
case tok::kw__Bool:
|
||||
case tok::kw__Accum:
|
||||
case tok::kw__Fract:
|
||||
case tok::kw__Sat:
|
||||
#define TRANSFORM_TYPE_TRAIT_DEF(_, Trait) case tok::kw___##Trait:
|
||||
#include "clang/Basic/TransformTypeTraits.def"
|
||||
case tok::kw___auto_type:
|
||||
case tok::kw_char16_t:
|
||||
case tok::kw_char32_t:
|
||||
case tok::kw_typeof:
|
||||
case tok::kw_decltype:
|
||||
case tok::kw_char8_t:
|
||||
return getIdentifierInfo()->isKeyword(LangOpts);
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Lexer Class Implementation
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
@@ -1609,7 +1609,7 @@ ExprResult Parser::ParseCastExpression(CastParseKind ParseKind,
|
||||
if (TryAnnotateTypeOrScopeToken())
|
||||
return ExprError();
|
||||
|
||||
if (!Actions.isSimpleTypeSpecifier(Tok))
|
||||
if (!Tok.isSimpleTypeSpecifier(getLangOpts()))
|
||||
// We are trying to parse a simple-type-specifier but might not get such
|
||||
// a token after error recovery.
|
||||
return ExprError();
|
||||
|
||||
@@ -2971,7 +2971,7 @@ bool Parser::ParseObjCXXMessageReceiver(bool &IsExpr, void *&TypeOrExpr) {
|
||||
tok::annot_cxxscope))
|
||||
TryAnnotateTypeOrScopeToken();
|
||||
|
||||
if (!Actions.isSimpleTypeSpecifier(Tok)) {
|
||||
if (!Tok.isSimpleTypeSpecifier(getLangOpts())) {
|
||||
// objc-receiver:
|
||||
// expression
|
||||
// Make sure any typos in the receiver are corrected or diagnosed, so that
|
||||
|
||||
@@ -127,51 +127,6 @@ class TypeNameValidatorCCC final : public CorrectionCandidateCallback {
|
||||
|
||||
} // end anonymous namespace
|
||||
|
||||
/// Determine whether the token kind starts a simple-type-specifier.
|
||||
bool Sema::isSimpleTypeSpecifier(const Token &Tok) const {
|
||||
switch (Tok.getKind()) {
|
||||
case tok::annot_typename:
|
||||
case tok::annot_decltype:
|
||||
case tok::annot_pack_indexing_type:
|
||||
return true;
|
||||
|
||||
case tok::kw_short:
|
||||
case tok::kw_long:
|
||||
case tok::kw___int64:
|
||||
case tok::kw___int128:
|
||||
case tok::kw_signed:
|
||||
case tok::kw_unsigned:
|
||||
case tok::kw_void:
|
||||
case tok::kw_char:
|
||||
case tok::kw_int:
|
||||
case tok::kw_half:
|
||||
case tok::kw_float:
|
||||
case tok::kw_double:
|
||||
case tok::kw___bf16:
|
||||
case tok::kw__Float16:
|
||||
case tok::kw___float128:
|
||||
case tok::kw___ibm128:
|
||||
case tok::kw_wchar_t:
|
||||
case tok::kw_bool:
|
||||
case tok::kw__Bool:
|
||||
case tok::kw__Accum:
|
||||
case tok::kw__Fract:
|
||||
case tok::kw__Sat:
|
||||
#define TRANSFORM_TYPE_TRAIT_DEF(_, Trait) case tok::kw___##Trait:
|
||||
#include "clang/Basic/TransformTypeTraits.def"
|
||||
case tok::kw___auto_type:
|
||||
case tok::kw_char16_t:
|
||||
case tok::kw_char32_t:
|
||||
case tok::kw_typeof:
|
||||
case tok::kw_decltype:
|
||||
case tok::kw_char8_t:
|
||||
return Tok.getIdentifierInfo()->isKeyword(getLangOpts());
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
namespace {
|
||||
enum class UnqualifiedTypeNameLookupResult {
|
||||
NotFound,
|
||||
|
||||
Reference in New Issue
Block a user