forked from OSchip/llvm-project
[clang] Refactoring of conditions so they use isOneOf() instead of multiple is().
llvm-svn: 240008
This commit is contained in:
parent
9869724dcf
commit
e59f8d7f1d
|
@ -870,7 +870,7 @@ private:
|
|||
Contexts.back().InCtorInitializer = true;
|
||||
} else if (Current.is(tok::kw_new)) {
|
||||
Contexts.back().CanBeExpression = false;
|
||||
} else if (Current.is(tok::semi) || Current.is(tok::exclaim)) {
|
||||
} else if (Current.isOneOf(tok::semi, tok::exclaim)) {
|
||||
// This should be the condition or increment in a for-loop.
|
||||
Contexts.back().IsExpression = true;
|
||||
}
|
||||
|
|
|
@ -2009,8 +2009,8 @@ static bool isConfigurationPattern(Token &MacroName, MacroInfo *MI,
|
|||
}
|
||||
|
||||
// #define inline
|
||||
if ((MacroName.is(tok::kw_extern) || MacroName.is(tok::kw_inline) ||
|
||||
MacroName.is(tok::kw_static) || MacroName.is(tok::kw_const)) &&
|
||||
if (MacroName.isOneOf(tok::kw_extern, tok::kw_inline, tok::kw_static,
|
||||
tok::kw_const) &&
|
||||
MI->getNumTokens() == 0) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -726,10 +726,10 @@ MacroArgs *Preprocessor::ReadFunctionLikeMacroArgs(Token &MacroName,
|
|||
|
||||
unsigned NumActuals = 0;
|
||||
while (Tok.isNot(tok::r_paren)) {
|
||||
if (ContainsCodeCompletionTok && (Tok.is(tok::eof) || Tok.is(tok::eod)))
|
||||
if (ContainsCodeCompletionTok && Tok.isOneOf(tok::eof, tok::eod))
|
||||
break;
|
||||
|
||||
assert((Tok.is(tok::l_paren) || Tok.is(tok::comma)) &&
|
||||
assert(Tok.isOneOf(tok::l_paren, tok::comma) &&
|
||||
"only expect argument separators here");
|
||||
|
||||
unsigned ArgTokenStart = ArgTokens.size();
|
||||
|
@ -744,7 +744,7 @@ MacroArgs *Preprocessor::ReadFunctionLikeMacroArgs(Token &MacroName,
|
|||
// an argument value in a macro could expand to ',' or '(' or ')'.
|
||||
LexUnexpandedToken(Tok);
|
||||
|
||||
if (Tok.is(tok::eof) || Tok.is(tok::eod)) { // "#if f(<eof>" & "#if f(\n"
|
||||
if (Tok.isOneOf(tok::eof, tok::eod)) { // "#if f(<eof>" & "#if f(\n"
|
||||
if (!ContainsCodeCompletionTok) {
|
||||
Diag(MacroName, diag::err_unterm_macro_invoc);
|
||||
Diag(MI->getDefinitionLoc(), diag::note_macro_here)
|
||||
|
@ -1747,7 +1747,7 @@ void Preprocessor::ExpandBuiltinMacro(Token &Tok) {
|
|||
Diag(Tok.getLocation(), diag::err_pp_identifier_arg_not_identifier)
|
||||
<< Tok.getKind();
|
||||
// Don't walk past anything that's not a real token.
|
||||
if (Tok.is(tok::eof) || Tok.is(tok::eod) || Tok.isAnnotation())
|
||||
if (Tok.isOneOf(tok::eof, tok::eod) || Tok.isAnnotation())
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -178,20 +178,20 @@ bool TokenConcatenation::AvoidConcat(const Token &PrevPrevTok,
|
|||
|
||||
if (ConcatInfo & aci_avoid_equal) {
|
||||
// If the next token is '=' or '==', avoid concatenation.
|
||||
if (Tok.is(tok::equal) || Tok.is(tok::equalequal))
|
||||
if (Tok.isOneOf(tok::equal, tok::equalequal))
|
||||
return true;
|
||||
ConcatInfo &= ~aci_avoid_equal;
|
||||
}
|
||||
if (Tok.isAnnotation()) {
|
||||
// Modules annotation can show up when generated automatically for includes.
|
||||
assert((Tok.is(tok::annot_module_include) ||
|
||||
Tok.is(tok::annot_module_begin) ||
|
||||
Tok.is(tok::annot_module_end)) &&
|
||||
assert(Tok.isOneOf(tok::annot_module_include, tok::annot_module_begin,
|
||||
tok::annot_module_end) &&
|
||||
"unexpected annotation in AvoidConcat");
|
||||
ConcatInfo = 0;
|
||||
}
|
||||
|
||||
if (ConcatInfo == 0) return false;
|
||||
if (ConcatInfo == 0)
|
||||
return false;
|
||||
|
||||
// Basic algorithm: we look at the first character of the second token, and
|
||||
// determine whether it, if appended to the first token, would form (or
|
||||
|
@ -238,11 +238,11 @@ bool TokenConcatenation::AvoidConcat(const Token &PrevPrevTok,
|
|||
if (Tok.is(tok::numeric_constant))
|
||||
return GetFirstChar(PP, Tok) != '.';
|
||||
|
||||
if (Tok.getIdentifierInfo() || Tok.is(tok::wide_string_literal) ||
|
||||
Tok.is(tok::utf8_string_literal) || Tok.is(tok::utf16_string_literal) ||
|
||||
Tok.is(tok::utf32_string_literal) || Tok.is(tok::wide_char_constant) ||
|
||||
Tok.is(tok::utf8_char_constant) || Tok.is(tok::utf16_char_constant) ||
|
||||
Tok.is(tok::utf32_char_constant))
|
||||
if (Tok.getIdentifierInfo() ||
|
||||
Tok.isOneOf(tok::wide_string_literal, tok::utf8_string_literal,
|
||||
tok::utf16_string_literal, tok::utf32_string_literal,
|
||||
tok::wide_char_constant, tok::utf8_char_constant,
|
||||
tok::utf16_char_constant, tok::utf32_char_constant))
|
||||
return true;
|
||||
|
||||
// If this isn't identifier + string, we're done.
|
||||
|
|
|
@ -185,7 +185,7 @@ void TokenLexer::ExpandFunctionArguments() {
|
|||
if (i != 0 && !Tokens[i-1].is(tok::hashhash) && CurTok.hasLeadingSpace())
|
||||
NextTokGetsSpace = true;
|
||||
|
||||
if (CurTok.is(tok::hash) || CurTok.is(tok::hashat)) {
|
||||
if (CurTok.isOneOf(tok::hash, tok::hashat)) {
|
||||
int ArgNo = Macro->getArgumentNum(Tokens[i+1].getIdentifierInfo());
|
||||
assert(ArgNo != -1 && "Token following # is not an argument?");
|
||||
|
||||
|
|
|
@ -29,8 +29,7 @@ NamedDecl *Parser::ParseCXXInlineMethodDef(AccessSpecifier AS,
|
|||
const VirtSpecifiers& VS,
|
||||
ExprResult& Init) {
|
||||
assert(D.isFunctionDeclarator() && "This isn't a function declarator!");
|
||||
assert((Tok.is(tok::l_brace) || Tok.is(tok::colon) || Tok.is(tok::kw_try) ||
|
||||
Tok.is(tok::equal)) &&
|
||||
assert(Tok.isOneOf(tok::l_brace, tok::colon, tok::kw_try, tok::equal) &&
|
||||
"Current token not a '{', ':', '=', or 'try'!");
|
||||
|
||||
MultiTemplateParamsArg TemplateParams(
|
||||
|
@ -191,7 +190,7 @@ NamedDecl *Parser::ParseCXXInlineMethodDef(AccessSpecifier AS,
|
|||
/// declaration. Now lex its initializer and store its tokens for parsing
|
||||
/// after the class is complete.
|
||||
void Parser::ParseCXXNonStaticMemberInitializer(Decl *VarD) {
|
||||
assert((Tok.is(tok::l_brace) || Tok.is(tok::equal)) &&
|
||||
assert(Tok.isOneOf(tok::l_brace, tok::equal) &&
|
||||
"Current token not a '{' or '='!");
|
||||
|
||||
LateParsedMemberInitializer *MI =
|
||||
|
@ -511,7 +510,7 @@ void Parser::ParseLexedMethodDef(LexedMethod &LM) {
|
|||
|
||||
// Consume the previously pushed token.
|
||||
ConsumeAnyToken(/*ConsumeCodeCompletionTok=*/true);
|
||||
assert((Tok.is(tok::l_brace) || Tok.is(tok::colon) || Tok.is(tok::kw_try))
|
||||
assert(Tok.isOneOf(tok::l_brace, tok::colon, tok::kw_try)
|
||||
&& "Inline method not starting with '{', ':' or 'try'");
|
||||
|
||||
// Parse the method body. Function body parsing code is similar enough
|
||||
|
@ -826,7 +825,7 @@ bool Parser::ConsumeAndStoreFunctionPrologue(CachedTokens &Toks) {
|
|||
}
|
||||
}
|
||||
|
||||
if (Tok.is(tok::identifier) || Tok.is(tok::kw_template)) {
|
||||
if (Tok.isOneOf(tok::identifier, tok::kw_template)) {
|
||||
Toks.push_back(Tok);
|
||||
ConsumeToken();
|
||||
} else if (Tok.is(tok::code_completion)) {
|
||||
|
|
|
@ -285,7 +285,7 @@ unsigned Parser::ParseAttributeArgsCommon(
|
|||
if (AttrKind == AttributeList::UnknownAttribute ||
|
||||
AttrKind == AttributeList::IgnoredAttribute) {
|
||||
const Token &Next = NextToken();
|
||||
IsIdentifierArg = Next.is(tok::r_paren) || Next.is(tok::comma);
|
||||
IsIdentifierArg = Next.isOneOf(tok::r_paren, tok::comma);
|
||||
}
|
||||
|
||||
if (IsIdentifierArg)
|
||||
|
@ -1599,7 +1599,7 @@ void Parser::SkipMalformedDecl() {
|
|||
// a malformed class or function definition or similar.
|
||||
ConsumeBrace();
|
||||
SkipUntil(tok::r_brace);
|
||||
if (Tok.is(tok::comma) || Tok.is(tok::l_brace) || Tok.is(tok::kw_try)) {
|
||||
if (Tok.isOneOf(tok::comma, tok::l_brace, tok::kw_try)) {
|
||||
// This declaration isn't over yet. Keep skipping.
|
||||
continue;
|
||||
}
|
||||
|
@ -1705,7 +1705,7 @@ Parser::DeclGroupPtrTy Parser::ParseDeclGroup(ParsingDeclSpec &DS,
|
|||
// and we don't have any other declarators in this declaration.
|
||||
bool Fixit = !DS.setFunctionSpecNoreturn(Loc, PrevSpec, DiagID);
|
||||
MaybeParseGNUAttributes(D, &LateParsedAttrs);
|
||||
Fixit &= Tok.is(tok::semi) || Tok.is(tok::l_brace) || Tok.is(tok::kw_try);
|
||||
Fixit &= Tok.isOneOf(tok::semi, tok::l_brace, tok::kw_try);
|
||||
|
||||
Diag(Loc, diag::err_c11_noreturn_misplaced)
|
||||
<< (Fixit ? FixItHint::CreateRemoval(Loc) : FixItHint())
|
||||
|
@ -2176,9 +2176,9 @@ void Parser::ParseSpecifierQualifierList(DeclSpec &DS, AccessSpecifier AS,
|
|||
/// int (x)
|
||||
///
|
||||
static bool isValidAfterIdentifierInDeclarator(const Token &T) {
|
||||
return T.is(tok::l_square) || T.is(tok::l_paren) || T.is(tok::r_paren) ||
|
||||
T.is(tok::semi) || T.is(tok::comma) || T.is(tok::equal) ||
|
||||
T.is(tok::kw_asm) || T.is(tok::l_brace) || T.is(tok::colon);
|
||||
return T.isOneOf(tok::l_square, tok::l_paren, tok::r_paren, tok::semi,
|
||||
tok::comma, tok::equal, tok::kw_asm, tok::l_brace,
|
||||
tok::colon);
|
||||
}
|
||||
|
||||
|
||||
|
@ -2438,7 +2438,7 @@ ExprResult Parser::ParseAlignArgument(SourceLocation Start,
|
|||
/// [C++11] 'alignas' '(' assignment-expression ...[opt] ')'
|
||||
void Parser::ParseAlignmentSpecifier(ParsedAttributes &Attrs,
|
||||
SourceLocation *EndLoc) {
|
||||
assert((Tok.is(tok::kw_alignas) || Tok.is(tok::kw__Alignas)) &&
|
||||
assert(Tok.isOneOf(tok::kw_alignas, tok::kw__Alignas) &&
|
||||
"Not an alignment-specifier!");
|
||||
|
||||
IdentifierInfo *KWName = Tok.getIdentifierInfo();
|
||||
|
@ -2481,8 +2481,8 @@ Parser::DiagnoseMissingSemiAfterTagDefinition(DeclSpec &DS, AccessSpecifier AS,
|
|||
bool EnteringContext = (DSContext == DSC_class || DSContext == DSC_top_level);
|
||||
|
||||
if (getLangOpts().CPlusPlus &&
|
||||
(Tok.is(tok::identifier) || Tok.is(tok::coloncolon) ||
|
||||
Tok.is(tok::kw_decltype) || Tok.is(tok::annot_template_id)) &&
|
||||
Tok.isOneOf(tok::identifier, tok::coloncolon, tok::kw_decltype,
|
||||
tok::annot_template_id) &&
|
||||
TryAnnotateCXXScopeToken(EnteringContext)) {
|
||||
SkipMalformedDecl();
|
||||
return true;
|
||||
|
@ -2495,7 +2495,7 @@ Parser::DiagnoseMissingSemiAfterTagDefinition(DeclSpec &DS, AccessSpecifier AS,
|
|||
// Determine whether the following tokens could possibly be a
|
||||
// declarator.
|
||||
bool MightBeDeclarator = true;
|
||||
if (Tok.is(tok::kw_typename) || Tok.is(tok::annot_typename)) {
|
||||
if (Tok.isOneOf(tok::kw_typename, tok::annot_typename)) {
|
||||
// A declarator-id can't start with 'typename'.
|
||||
MightBeDeclarator = false;
|
||||
} else if (AfterScope.is(tok::annot_template_id)) {
|
||||
|
@ -2510,9 +2510,8 @@ Parser::DiagnoseMissingSemiAfterTagDefinition(DeclSpec &DS, AccessSpecifier AS,
|
|||
|
||||
// These tokens cannot come after the declarator-id in a
|
||||
// simple-declaration, and are likely to come after a type-specifier.
|
||||
if (Next.is(tok::star) || Next.is(tok::amp) || Next.is(tok::ampamp) ||
|
||||
Next.is(tok::identifier) || Next.is(tok::annot_cxxscope) ||
|
||||
Next.is(tok::coloncolon)) {
|
||||
if (Next.isOneOf(tok::star, tok::amp, tok::ampamp, tok::identifier,
|
||||
tok::annot_cxxscope, tok::coloncolon)) {
|
||||
// Missing a semicolon.
|
||||
MightBeDeclarator = false;
|
||||
} else if (HasScope) {
|
||||
|
@ -3654,7 +3653,7 @@ void Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS,
|
|||
bool IsScopedUsingClassTag = false;
|
||||
|
||||
// In C++11, recognize 'enum class' and 'enum struct'.
|
||||
if (Tok.is(tok::kw_class) || Tok.is(tok::kw_struct)) {
|
||||
if (Tok.isOneOf(tok::kw_class, tok::kw_struct)) {
|
||||
Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_scoped_enum
|
||||
: diag::ext_scoped_enum);
|
||||
IsScopedUsingClassTag = Tok.is(tok::kw_class);
|
||||
|
@ -4483,7 +4482,7 @@ bool Parser::isConstructorDeclarator(bool IsUnqualified) {
|
|||
}
|
||||
|
||||
// Parse the constructor name.
|
||||
if (Tok.is(tok::identifier) || Tok.is(tok::annot_template_id)) {
|
||||
if (Tok.isOneOf(tok::identifier, tok::annot_template_id)) {
|
||||
// We already know that we have a constructor name; just consume
|
||||
// the token.
|
||||
ConsumeToken();
|
||||
|
@ -5041,8 +5040,8 @@ void Parser::ParseDirectDeclarator(Declarator &D) {
|
|||
// the l_paren token.
|
||||
}
|
||||
|
||||
if (Tok.is(tok::identifier) || Tok.is(tok::kw_operator) ||
|
||||
Tok.is(tok::annot_template_id) || Tok.is(tok::tilde)) {
|
||||
if (Tok.isOneOf(tok::identifier, tok::kw_operator, tok::annot_template_id,
|
||||
tok::tilde)) {
|
||||
// We found something that indicates the start of an unqualified-id.
|
||||
// Parse that unqualified-id.
|
||||
bool AllowConstructorName;
|
||||
|
@ -5145,7 +5144,7 @@ void Parser::ParseDirectDeclarator(Declarator &D) {
|
|||
<< (D.getDeclSpec().isEmpty() ? SourceRange()
|
||||
: D.getDeclSpec().getSourceRange());
|
||||
} else if (getLangOpts().CPlusPlus) {
|
||||
if (Tok.is(tok::period) || Tok.is(tok::arrow))
|
||||
if (Tok.isOneOf(tok::period, tok::arrow))
|
||||
Diag(Tok, diag::err_invalid_operator_on_type) << Tok.is(tok::arrow);
|
||||
else {
|
||||
SourceLocation Loc = D.getCXXScopeSpec().getEndLoc();
|
||||
|
@ -5521,7 +5520,7 @@ void Parser::ParseFunctionDeclarator(Declarator &D,
|
|||
/// true if a ref-qualifier is found.
|
||||
bool Parser::ParseRefQualifier(bool &RefQualifierIsLValueRef,
|
||||
SourceLocation &RefQualifierLoc) {
|
||||
if (Tok.is(tok::amp) || Tok.is(tok::ampamp)) {
|
||||
if (Tok.isOneOf(tok::amp, tok::ampamp)) {
|
||||
Diag(Tok, getLangOpts().CPlusPlus11 ?
|
||||
diag::warn_cxx98_compat_ref_qualifier :
|
||||
diag::ext_ref_qualifier);
|
||||
|
|
|
@ -685,7 +685,7 @@ Decl *Parser::ParseUsingDeclaration(unsigned Context,
|
|||
/// _Static_assert ( constant-expression , string-literal ) ;
|
||||
///
|
||||
Decl *Parser::ParseStaticAssertDeclaration(SourceLocation &DeclEnd){
|
||||
assert((Tok.is(tok::kw_static_assert) || Tok.is(tok::kw__Static_assert)) &&
|
||||
assert(Tok.isOneOf(tok::kw_static_assert, tok::kw__Static_assert) &&
|
||||
"Not a static_assert declaration");
|
||||
|
||||
if (Tok.is(tok::kw__Static_assert) && !getLangOpts().C11)
|
||||
|
@ -753,7 +753,7 @@ Decl *Parser::ParseStaticAssertDeclaration(SourceLocation &DeclEnd){
|
|||
/// 'decltype' ( 'auto' ) [C++1y]
|
||||
///
|
||||
SourceLocation Parser::ParseDecltypeSpecifier(DeclSpec &DS) {
|
||||
assert((Tok.is(tok::kw_decltype) || Tok.is(tok::annot_decltype))
|
||||
assert(Tok.isOneOf(tok::kw_decltype, tok::annot_decltype)
|
||||
&& "Not a decltype specifier");
|
||||
|
||||
ExprResult Result;
|
||||
|
@ -943,7 +943,7 @@ TypeResult Parser::ParseBaseTypeSpecifier(SourceLocation &BaseLoc,
|
|||
// Parse decltype-specifier
|
||||
// tok == kw_decltype is just error recovery, it can only happen when SS
|
||||
// isn't empty
|
||||
if (Tok.is(tok::kw_decltype) || Tok.is(tok::annot_decltype)) {
|
||||
if (Tok.isOneOf(tok::kw_decltype, tok::annot_decltype)) {
|
||||
if (SS.isNotEmpty())
|
||||
Diag(SS.getBeginLoc(), diag::err_unexpected_scope_on_base_decltype)
|
||||
<< FixItHint::CreateRemoval(SS.getRange());
|
||||
|
@ -1058,9 +1058,9 @@ TypeResult Parser::ParseBaseTypeSpecifier(SourceLocation &BaseLoc,
|
|||
}
|
||||
|
||||
void Parser::ParseMicrosoftInheritanceClassAttributes(ParsedAttributes &attrs) {
|
||||
while (Tok.is(tok::kw___single_inheritance) ||
|
||||
Tok.is(tok::kw___multiple_inheritance) ||
|
||||
Tok.is(tok::kw___virtual_inheritance)) {
|
||||
while (Tok.isOneOf(tok::kw___single_inheritance,
|
||||
tok::kw___multiple_inheritance,
|
||||
tok::kw___virtual_inheritance)) {
|
||||
IdentifierInfo *AttrName = Tok.getIdentifierInfo();
|
||||
SourceLocation AttrNameLoc = ConsumeToken();
|
||||
attrs.addNew(AttrName, AttrNameLoc, nullptr, AttrNameLoc, nullptr, 0,
|
||||
|
@ -1232,9 +1232,9 @@ void Parser::ParseClassSpecifier(tok::TokenKind TagTokKind,
|
|||
MaybeParseMicrosoftDeclSpecs(attrs);
|
||||
|
||||
// Parse inheritance specifiers.
|
||||
if (Tok.is(tok::kw___single_inheritance) ||
|
||||
Tok.is(tok::kw___multiple_inheritance) ||
|
||||
Tok.is(tok::kw___virtual_inheritance))
|
||||
if (Tok.isOneOf(tok::kw___single_inheritance,
|
||||
tok::kw___multiple_inheritance,
|
||||
tok::kw___virtual_inheritance))
|
||||
ParseMicrosoftInheritanceClassAttributes(attrs);
|
||||
|
||||
// If C++0x attributes exist here, parse them.
|
||||
|
@ -1250,55 +1250,55 @@ void Parser::ParseClassSpecifier(tok::TokenKind TagTokKind,
|
|||
Tok.isNot(tok::identifier) &&
|
||||
!Tok.isAnnotation() &&
|
||||
Tok.getIdentifierInfo() &&
|
||||
(Tok.is(tok::kw___is_abstract) ||
|
||||
Tok.is(tok::kw___is_arithmetic) ||
|
||||
Tok.is(tok::kw___is_array) ||
|
||||
Tok.is(tok::kw___is_base_of) ||
|
||||
Tok.is(tok::kw___is_class) ||
|
||||
Tok.is(tok::kw___is_complete_type) ||
|
||||
Tok.is(tok::kw___is_compound) ||
|
||||
Tok.is(tok::kw___is_const) ||
|
||||
Tok.is(tok::kw___is_constructible) ||
|
||||
Tok.is(tok::kw___is_convertible) ||
|
||||
Tok.is(tok::kw___is_convertible_to) ||
|
||||
Tok.is(tok::kw___is_destructible) ||
|
||||
Tok.is(tok::kw___is_empty) ||
|
||||
Tok.is(tok::kw___is_enum) ||
|
||||
Tok.is(tok::kw___is_floating_point) ||
|
||||
Tok.is(tok::kw___is_final) ||
|
||||
Tok.is(tok::kw___is_function) ||
|
||||
Tok.is(tok::kw___is_fundamental) ||
|
||||
Tok.is(tok::kw___is_integral) ||
|
||||
Tok.is(tok::kw___is_interface_class) ||
|
||||
Tok.is(tok::kw___is_literal) ||
|
||||
Tok.is(tok::kw___is_lvalue_expr) ||
|
||||
Tok.is(tok::kw___is_lvalue_reference) ||
|
||||
Tok.is(tok::kw___is_member_function_pointer) ||
|
||||
Tok.is(tok::kw___is_member_object_pointer) ||
|
||||
Tok.is(tok::kw___is_member_pointer) ||
|
||||
Tok.is(tok::kw___is_nothrow_assignable) ||
|
||||
Tok.is(tok::kw___is_nothrow_constructible) ||
|
||||
Tok.is(tok::kw___is_nothrow_destructible) ||
|
||||
Tok.is(tok::kw___is_object) ||
|
||||
Tok.is(tok::kw___is_pod) ||
|
||||
Tok.is(tok::kw___is_pointer) ||
|
||||
Tok.is(tok::kw___is_polymorphic) ||
|
||||
Tok.is(tok::kw___is_reference) ||
|
||||
Tok.is(tok::kw___is_rvalue_expr) ||
|
||||
Tok.is(tok::kw___is_rvalue_reference) ||
|
||||
Tok.is(tok::kw___is_same) ||
|
||||
Tok.is(tok::kw___is_scalar) ||
|
||||
Tok.is(tok::kw___is_sealed) ||
|
||||
Tok.is(tok::kw___is_signed) ||
|
||||
Tok.is(tok::kw___is_standard_layout) ||
|
||||
Tok.is(tok::kw___is_trivial) ||
|
||||
Tok.is(tok::kw___is_trivially_assignable) ||
|
||||
Tok.is(tok::kw___is_trivially_constructible) ||
|
||||
Tok.is(tok::kw___is_trivially_copyable) ||
|
||||
Tok.is(tok::kw___is_union) ||
|
||||
Tok.is(tok::kw___is_unsigned) ||
|
||||
Tok.is(tok::kw___is_void) ||
|
||||
Tok.is(tok::kw___is_volatile)))
|
||||
Tok.isOneOf(tok::kw___is_abstract,
|
||||
tok::kw___is_arithmetic,
|
||||
tok::kw___is_array,
|
||||
tok::kw___is_base_of,
|
||||
tok::kw___is_class,
|
||||
tok::kw___is_complete_type,
|
||||
tok::kw___is_compound,
|
||||
tok::kw___is_const,
|
||||
tok::kw___is_constructible,
|
||||
tok::kw___is_convertible,
|
||||
tok::kw___is_convertible_to,
|
||||
tok::kw___is_destructible,
|
||||
tok::kw___is_empty,
|
||||
tok::kw___is_enum,
|
||||
tok::kw___is_floating_point,
|
||||
tok::kw___is_final,
|
||||
tok::kw___is_function,
|
||||
tok::kw___is_fundamental,
|
||||
tok::kw___is_integral,
|
||||
tok::kw___is_interface_class,
|
||||
tok::kw___is_literal,
|
||||
tok::kw___is_lvalue_expr,
|
||||
tok::kw___is_lvalue_reference,
|
||||
tok::kw___is_member_function_pointer,
|
||||
tok::kw___is_member_object_pointer,
|
||||
tok::kw___is_member_pointer,
|
||||
tok::kw___is_nothrow_assignable,
|
||||
tok::kw___is_nothrow_constructible,
|
||||
tok::kw___is_nothrow_destructible,
|
||||
tok::kw___is_object,
|
||||
tok::kw___is_pod,
|
||||
tok::kw___is_pointer,
|
||||
tok::kw___is_polymorphic,
|
||||
tok::kw___is_reference,
|
||||
tok::kw___is_rvalue_expr,
|
||||
tok::kw___is_rvalue_reference,
|
||||
tok::kw___is_same,
|
||||
tok::kw___is_scalar,
|
||||
tok::kw___is_sealed,
|
||||
tok::kw___is_signed,
|
||||
tok::kw___is_standard_layout,
|
||||
tok::kw___is_trivial,
|
||||
tok::kw___is_trivially_assignable,
|
||||
tok::kw___is_trivially_constructible,
|
||||
tok::kw___is_trivially_copyable,
|
||||
tok::kw___is_union,
|
||||
tok::kw___is_unsigned,
|
||||
tok::kw___is_void,
|
||||
tok::kw___is_volatile))
|
||||
// GNU libstdc++ 4.2 and libc++ use certain intrinsic names as the
|
||||
// name of struct templates, but some are keywords in GCC >= 4.3
|
||||
// and Clang. Therefore, when we see the token sequence "struct
|
||||
|
@ -1476,7 +1476,7 @@ void Parser::ParseClassSpecifier(tok::TokenKind TagTokKind,
|
|||
}
|
||||
}
|
||||
|
||||
if (Tok.is(tok::l_brace) || Tok.is(tok::colon))
|
||||
if (Tok.isOneOf(tok::l_brace, tok::colon))
|
||||
TUK = Sema::TUK_Definition;
|
||||
else
|
||||
TUK = Sema::TUK_Reference;
|
||||
|
@ -2220,8 +2220,7 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS,
|
|||
// Access declarations.
|
||||
bool MalformedTypeSpec = false;
|
||||
if (!TemplateInfo.Kind &&
|
||||
(Tok.is(tok::identifier) || Tok.is(tok::coloncolon) ||
|
||||
Tok.is(tok::kw___super))) {
|
||||
Tok.isOneOf(tok::identifier, tok::coloncolon, tok::kw___super)) {
|
||||
if (TryAnnotateCXXScopeToken())
|
||||
MalformedTypeSpec = true;
|
||||
|
||||
|
@ -2274,7 +2273,7 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS,
|
|||
// static_assert-declaration. A templated static_assert declaration is
|
||||
// diagnosed in Parser::ParseSingleDeclarationAfterTemplate.
|
||||
if (!TemplateInfo.Kind &&
|
||||
(Tok.is(tok::kw_static_assert) || Tok.is(tok::kw__Static_assert))) {
|
||||
Tok.isOneOf(tok::kw_static_assert, tok::kw__Static_assert)) {
|
||||
SourceLocation DeclEnd;
|
||||
ParseStaticAssertDeclaration(DeclEnd);
|
||||
return;
|
||||
|
@ -2411,7 +2410,7 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS,
|
|||
if (Tok.is(tok::l_brace) && !getLangOpts().CPlusPlus11) {
|
||||
DefinitionKind = FDK_Definition;
|
||||
} else if (DeclaratorInfo.isFunctionDeclarator()) {
|
||||
if (Tok.is(tok::l_brace) || Tok.is(tok::colon) || Tok.is(tok::kw_try)) {
|
||||
if (Tok.isOneOf(tok::l_brace, tok::colon, tok::kw_try)) {
|
||||
DefinitionKind = FDK_Definition;
|
||||
} else if (Tok.is(tok::equal)) {
|
||||
const Token &KW = NextToken();
|
||||
|
@ -2480,7 +2479,7 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS,
|
|||
|
||||
while (1) {
|
||||
InClassInitStyle HasInClassInit = ICIS_NoInit;
|
||||
if ((Tok.is(tok::equal) || Tok.is(tok::l_brace)) && !HasInitializer) {
|
||||
if (Tok.isOneOf(tok::equal, tok::l_brace) && !HasInitializer) {
|
||||
if (BitfieldSize.get()) {
|
||||
Diag(Tok, diag::err_bitfield_member_init);
|
||||
SkipUntil(tok::comma, StopAtSemi | StopBeforeMatch);
|
||||
|
@ -2657,7 +2656,7 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS,
|
|||
/// be a constant-expression.
|
||||
ExprResult Parser::ParseCXXMemberInitializer(Decl *D, bool IsFunction,
|
||||
SourceLocation &EqualLoc) {
|
||||
assert((Tok.is(tok::equal) || Tok.is(tok::l_brace))
|
||||
assert(Tok.isOneOf(tok::equal, tok::l_brace)
|
||||
&& "Data member initializer not starting with '=' or '{'");
|
||||
|
||||
EnterExpressionEvaluationContext Context(Actions,
|
||||
|
@ -2671,8 +2670,7 @@ ExprResult Parser::ParseCXXMemberInitializer(Decl *D, bool IsFunction,
|
|||
// An initializer of '= delete p, foo' will never be parsed, because
|
||||
// a top-level comma always ends the initializer expression.
|
||||
const Token &Next = NextToken();
|
||||
if (IsFunction || Next.is(tok::semi) || Next.is(tok::comma) ||
|
||||
Next.is(tok::eof)) {
|
||||
if (IsFunction || Next.isOneOf(tok::semi, tok::comma, tok::eof)) {
|
||||
if (IsFunction)
|
||||
Diag(ConsumeToken(), diag::err_default_delete_in_multiple_declaration)
|
||||
<< 1 /* delete */;
|
||||
|
@ -2916,8 +2914,8 @@ void Parser::ParseCXXMemberSpecification(SourceLocation RecordLoc,
|
|||
while (Tok.isNot(tok::r_brace) && !isEofOrEom()) {
|
||||
// Each iteration of this loop reads one member-declaration.
|
||||
|
||||
if (getLangOpts().MicrosoftExt && (Tok.is(tok::kw___if_exists) ||
|
||||
Tok.is(tok::kw___if_not_exists))) {
|
||||
if (getLangOpts().MicrosoftExt && Tok.isOneOf(tok::kw___if_exists,
|
||||
tok::kw___if_not_exists)) {
|
||||
ParseMicrosoftIfExistsClassDeclaration((DeclSpec::TST)TagType, CurAS);
|
||||
continue;
|
||||
}
|
||||
|
@ -3128,7 +3126,7 @@ void Parser::ParseConstructorInitializer(Decl *ConstructorDecl) {
|
|||
break;
|
||||
// If the next token looks like a base or member initializer, assume that
|
||||
// we're just missing a comma.
|
||||
else if (Tok.is(tok::identifier) || Tok.is(tok::coloncolon)) {
|
||||
else if (Tok.isOneOf(tok::identifier, tok::coloncolon)) {
|
||||
SourceLocation Loc = PP.getLocForEndOfToken(PrevTokLocation);
|
||||
Diag(Loc, diag::err_ctor_init_missing_comma)
|
||||
<< FixItHint::CreateInsertion(Loc, ", ");
|
||||
|
@ -3834,7 +3832,7 @@ void Parser::ParseMicrosoftIfExistsClassDeclaration(DeclSpec::TST TagType,
|
|||
|
||||
while (Tok.isNot(tok::r_brace) && !isEofOrEom()) {
|
||||
// __if_exists, __if_not_exists can nest.
|
||||
if ((Tok.is(tok::kw___if_exists) || Tok.is(tok::kw___if_not_exists))) {
|
||||
if (Tok.isOneOf(tok::kw___if_exists, tok::kw___if_not_exists)) {
|
||||
ParseMicrosoftIfExistsClassDeclaration((DeclSpec::TST)TagType, CurAS);
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -470,8 +470,7 @@ class CastExpressionIdValidator : public CorrectionCandidateCallback {
|
|||
if (!AllowNonTypes || !CorrectionCandidateCallback::ValidateCandidate(candidate))
|
||||
return false;
|
||||
|
||||
if (!(NextToken.is(tok::equal) || NextToken.is(tok::arrow) ||
|
||||
NextToken.is(tok::period)))
|
||||
if (!NextToken.isOneOf(tok::equal, tok::arrow, tok::period))
|
||||
return true;
|
||||
|
||||
for (auto *C : candidate) {
|
||||
|
@ -829,11 +828,9 @@ ExprResult Parser::ParseCastExpression(bool isUnaryExpression,
|
|||
}
|
||||
}
|
||||
|
||||
if (Next.is(tok::coloncolon) ||
|
||||
(!ColonIsSacred && Next.is(tok::colon)) ||
|
||||
Next.is(tok::less) ||
|
||||
Next.is(tok::l_paren) ||
|
||||
Next.is(tok::l_brace)) {
|
||||
if ((!ColonIsSacred && Next.is(tok::colon)) ||
|
||||
Next.isOneOf(tok::coloncolon, tok::less, tok::l_paren,
|
||||
tok::l_brace)) {
|
||||
// If TryAnnotateTypeOrScopeToken annotates the token, tail recurse.
|
||||
if (TryAnnotateTypeOrScopeToken())
|
||||
return ExprError();
|
||||
|
@ -931,7 +928,7 @@ ExprResult Parser::ParseCastExpression(bool isUnaryExpression,
|
|||
auto Validator = llvm::make_unique<CastExpressionIdValidator>(
|
||||
Tok, isTypeCast != NotTypeCast, isTypeCast != IsTypeCast);
|
||||
Validator->IsAddressOfOperand = isAddressOfOperand;
|
||||
if (Tok.is(tok::periodstar) || Tok.is(tok::arrowstar)) {
|
||||
if (Tok.isOneOf(tok::periodstar, tok::arrowstar)) {
|
||||
Validator->WantExpressionKeywords = false;
|
||||
Validator->WantRemainingKeywords = false;
|
||||
} else {
|
||||
|
@ -1639,10 +1636,9 @@ Parser::ParseExprAfterUnaryExprOrTypeTrait(const Token &OpTok,
|
|||
ParsedType &CastTy,
|
||||
SourceRange &CastRange) {
|
||||
|
||||
assert((OpTok.is(tok::kw_typeof) || OpTok.is(tok::kw_sizeof) ||
|
||||
OpTok.is(tok::kw___alignof) || OpTok.is(tok::kw_alignof) ||
|
||||
OpTok.is(tok::kw__Alignof) || OpTok.is(tok::kw_vec_step)) &&
|
||||
"Not a typeof/sizeof/alignof/vec_step expression!");
|
||||
assert(OpTok.isOneOf(tok::kw_typeof, tok::kw_sizeof, tok::kw___alignof,
|
||||
tok::kw_alignof, tok::kw__Alignof, tok::kw_vec_step) &&
|
||||
"Not a typeof/sizeof/alignof/vec_step expression!");
|
||||
|
||||
ExprResult Operand;
|
||||
|
||||
|
@ -1650,8 +1646,8 @@ Parser::ParseExprAfterUnaryExprOrTypeTrait(const Token &OpTok,
|
|||
if (Tok.isNot(tok::l_paren)) {
|
||||
// If construct allows a form without parenthesis, user may forget to put
|
||||
// pathenthesis around type name.
|
||||
if (OpTok.is(tok::kw_sizeof) || OpTok.is(tok::kw___alignof) ||
|
||||
OpTok.is(tok::kw_alignof) || OpTok.is(tok::kw__Alignof)) {
|
||||
if (OpTok.isOneOf(tok::kw_sizeof, tok::kw___alignof, tok::kw_alignof,
|
||||
tok::kw__Alignof)) {
|
||||
if (isTypeIdUnambiguously()) {
|
||||
DeclSpec DS(AttrFactory);
|
||||
ParseSpecifierQualifierList(DS);
|
||||
|
@ -1725,9 +1721,8 @@ Parser::ParseExprAfterUnaryExprOrTypeTrait(const Token &OpTok,
|
|||
/// [C++11] 'alignof' '(' type-id ')'
|
||||
/// \endverbatim
|
||||
ExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {
|
||||
assert((Tok.is(tok::kw_sizeof) || Tok.is(tok::kw___alignof) ||
|
||||
Tok.is(tok::kw_alignof) || Tok.is(tok::kw__Alignof) ||
|
||||
Tok.is(tok::kw_vec_step)) &&
|
||||
assert(Tok.isOneOf(tok::kw_sizeof, tok::kw___alignof, tok::kw_alignof,
|
||||
tok::kw__Alignof, tok::kw_vec_step) &&
|
||||
"Not a sizeof/alignof/vec_step expression!");
|
||||
Token OpTok = Tok;
|
||||
ConsumeToken();
|
||||
|
@ -1778,7 +1773,7 @@ ExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {
|
|||
RParenLoc);
|
||||
}
|
||||
|
||||
if (OpTok.is(tok::kw_alignof) || OpTok.is(tok::kw__Alignof))
|
||||
if (OpTok.isOneOf(tok::kw_alignof, tok::kw__Alignof))
|
||||
Diag(OpTok, diag::warn_cxx98_compat_alignof);
|
||||
|
||||
EnterExpressionEvaluationContext Unevaluated(Actions, Sema::Unevaluated,
|
||||
|
@ -1793,8 +1788,7 @@ ExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {
|
|||
CastRange);
|
||||
|
||||
UnaryExprOrTypeTrait ExprKind = UETT_SizeOf;
|
||||
if (OpTok.is(tok::kw_alignof) || OpTok.is(tok::kw___alignof) ||
|
||||
OpTok.is(tok::kw__Alignof))
|
||||
if (OpTok.isOneOf(tok::kw_alignof, tok::kw___alignof, tok::kw__Alignof))
|
||||
ExprKind = UETT_AlignOf;
|
||||
else if (OpTok.is(tok::kw_vec_step))
|
||||
ExprKind = UETT_VecStep;
|
||||
|
@ -1806,7 +1800,7 @@ ExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {
|
|||
CastTy.getAsOpaquePtr(),
|
||||
CastRange);
|
||||
|
||||
if (OpTok.is(tok::kw_alignof) || OpTok.is(tok::kw__Alignof))
|
||||
if (OpTok.isOneOf(tok::kw_alignof, tok::kw__Alignof))
|
||||
Diag(OpTok, diag::ext_alignof_expr) << OpTok.getIdentifierInfo();
|
||||
|
||||
// If we get here, the operand to the sizeof/alignof was an expresion.
|
||||
|
@ -2107,10 +2101,10 @@ Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr,
|
|||
|
||||
// Diagnose use of bridge casts in non-arc mode.
|
||||
bool BridgeCast = (getLangOpts().ObjC2 &&
|
||||
(Tok.is(tok::kw___bridge) ||
|
||||
Tok.is(tok::kw___bridge_transfer) ||
|
||||
Tok.is(tok::kw___bridge_retained) ||
|
||||
Tok.is(tok::kw___bridge_retain)));
|
||||
Tok.isOneOf(tok::kw___bridge,
|
||||
tok::kw___bridge_transfer,
|
||||
tok::kw___bridge_retained,
|
||||
tok::kw___bridge_retain));
|
||||
if (BridgeCast && !getLangOpts().ObjCAutoRefCount) {
|
||||
if (!TryConsumeToken(tok::kw___bridge)) {
|
||||
StringRef BridgeCastName = Tok.getName();
|
||||
|
|
|
@ -254,7 +254,7 @@ bool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS,
|
|||
}
|
||||
|
||||
if (!HasScopeSpecifier &&
|
||||
(Tok.is(tok::kw_decltype) || Tok.is(tok::annot_decltype))) {
|
||||
Tok.isOneOf(tok::kw_decltype, tok::annot_decltype)) {
|
||||
DeclSpec DS(AttrFactory);
|
||||
SourceLocation DeclLoc = Tok.getLocation();
|
||||
SourceLocation EndLoc = ParseDecltypeSpecifier(DS);
|
||||
|
@ -487,7 +487,7 @@ bool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS,
|
|||
// as the name in a nested-name-specifier.
|
||||
Token Identifier = Tok;
|
||||
SourceLocation IdLoc = ConsumeToken();
|
||||
assert((Tok.is(tok::coloncolon) || Tok.is(tok::colon)) &&
|
||||
assert(Tok.isOneOf(tok::coloncolon, tok::colon) &&
|
||||
"NextToken() not working properly!");
|
||||
Token ColonColon = Tok;
|
||||
SourceLocation CCLoc = ConsumeToken();
|
||||
|
@ -892,7 +892,7 @@ Optional<unsigned> Parser::ParseLambdaIntroducer(LambdaIntroducer &Intro,
|
|||
Parens.getCloseLocation(),
|
||||
Exprs);
|
||||
}
|
||||
} else if (Tok.is(tok::l_brace) || Tok.is(tok::equal)) {
|
||||
} else if (Tok.isOneOf(tok::l_brace, tok::equal)) {
|
||||
// Each lambda init-capture forms its own full expression, which clears
|
||||
// Actions.MaybeODRUseExprs. So create an expression evaluation context
|
||||
// to save the necessary state, and restore it later.
|
||||
|
@ -1159,8 +1159,7 @@ ExprResult Parser::ParseLambdaExpressionAfterIntroducer(
|
|||
LParenLoc, FunLocalRangeEnd, D,
|
||||
TrailingReturnType),
|
||||
Attr, DeclEndLoc);
|
||||
} else if (Tok.is(tok::kw_mutable) || Tok.is(tok::arrow) ||
|
||||
Tok.is(tok::kw___attribute) ||
|
||||
} else if (Tok.isOneOf(tok::kw_mutable, tok::arrow, tok::kw___attribute) ||
|
||||
(Tok.is(tok::l_square) && NextToken().is(tok::l_square))) {
|
||||
// It's common to forget that one needs '()' before 'mutable', an attribute
|
||||
// specifier, or the result type. Deal with this.
|
||||
|
|
|
@ -330,7 +330,7 @@ void Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey,
|
|||
|
||||
while (1) {
|
||||
// If this is a method prototype, parse it.
|
||||
if (Tok.is(tok::minus) || Tok.is(tok::plus)) {
|
||||
if (Tok.isOneOf(tok::minus, tok::plus)) {
|
||||
if (Decl *methodPrototype =
|
||||
ParseObjCMethodPrototype(MethodImplKind, false))
|
||||
allMethods.push_back(methodPrototype);
|
||||
|
@ -641,7 +641,7 @@ void Parser::ParseObjCPropertyAttribute(ObjCDeclSpec &DS) {
|
|||
///
|
||||
Decl *Parser::ParseObjCMethodPrototype(tok::ObjCKeywordKind MethodImplKind,
|
||||
bool MethodDefinition) {
|
||||
assert((Tok.is(tok::minus) || Tok.is(tok::plus)) && "expected +/-");
|
||||
assert(Tok.isOneOf(tok::minus, tok::plus) && "expected +/-");
|
||||
|
||||
tok::TokenKind methodType = Tok.getKind();
|
||||
SourceLocation mLoc = ConsumeToken();
|
||||
|
@ -2170,8 +2170,8 @@ ExprResult Parser::ParseObjCAtExpression(SourceLocation AtLoc) {
|
|||
bool Parser::ParseObjCXXMessageReceiver(bool &IsExpr, void *&TypeOrExpr) {
|
||||
InMessageExpressionRAIIObject InMessage(*this, true);
|
||||
|
||||
if (Tok.is(tok::identifier) || Tok.is(tok::coloncolon) ||
|
||||
Tok.is(tok::kw_typename) || Tok.is(tok::annot_cxxscope))
|
||||
if (Tok.isOneOf(tok::identifier, tok::coloncolon, tok::kw_typename,
|
||||
tok::annot_cxxscope))
|
||||
TryAnnotateTypeOrScopeToken();
|
||||
|
||||
if (!Actions.isSimpleTypeSpecifier(Tok.getKind())) {
|
||||
|
@ -2265,7 +2265,7 @@ bool Parser::isStartOfObjCClassMessageMissingOpenBracket() {
|
|||
|
||||
if (!Type.get().isNull() && Type.get()->isObjCObjectOrInterfaceType()) {
|
||||
const Token &AfterNext = GetLookAheadToken(2);
|
||||
if (AfterNext.is(tok::colon) || AfterNext.is(tok::r_square)) {
|
||||
if (AfterNext.isOneOf(tok::colon, tok::r_square)) {
|
||||
if (Tok.is(tok::identifier))
|
||||
TryAnnotateTypeOrScopeToken();
|
||||
|
||||
|
@ -2891,9 +2891,8 @@ void Parser::ParseLexedObjCMethodDefs(LexedMethod &LM, bool parseMethod) {
|
|||
// Consume the previously pushed token.
|
||||
ConsumeAnyToken(/*ConsumeCodeCompletionTok=*/true);
|
||||
|
||||
assert((Tok.is(tok::l_brace) || Tok.is(tok::kw_try) ||
|
||||
Tok.is(tok::colon)) &&
|
||||
"Inline objective-c method not starting with '{' or 'try' or ':'");
|
||||
assert(Tok.isOneOf(tok::l_brace, tok::kw_try, tok::colon) &&
|
||||
"Inline objective-c method not starting with '{' or 'try' or ':'");
|
||||
// Enter a scope for the method or c-function body.
|
||||
ParseScope BodyScope(this,
|
||||
parseMethod
|
||||
|
|
|
@ -119,15 +119,12 @@ namespace {
|
|||
class StatementFilterCCC : public CorrectionCandidateCallback {
|
||||
public:
|
||||
StatementFilterCCC(Token nextTok) : NextToken(nextTok) {
|
||||
WantTypeSpecifiers = nextTok.is(tok::l_paren) || nextTok.is(tok::less) ||
|
||||
nextTok.is(tok::identifier) || nextTok.is(tok::star) ||
|
||||
nextTok.is(tok::amp) || nextTok.is(tok::l_square);
|
||||
WantExpressionKeywords = nextTok.is(tok::l_paren) ||
|
||||
nextTok.is(tok::identifier) ||
|
||||
nextTok.is(tok::arrow) || nextTok.is(tok::period);
|
||||
WantRemainingKeywords = nextTok.is(tok::l_paren) || nextTok.is(tok::semi) ||
|
||||
nextTok.is(tok::identifier) ||
|
||||
nextTok.is(tok::l_brace);
|
||||
WantTypeSpecifiers = nextTok.isOneOf(tok::l_paren, tok::less, tok::l_square,
|
||||
tok::identifier, tok::star, tok::amp);
|
||||
WantExpressionKeywords =
|
||||
nextTok.isOneOf(tok::l_paren, tok::identifier, tok::arrow, tok::period);
|
||||
WantRemainingKeywords =
|
||||
nextTok.isOneOf(tok::l_paren, tok::semi, tok::identifier, tok::l_brace);
|
||||
WantCXXNamedCasts = false;
|
||||
}
|
||||
|
||||
|
@ -1427,7 +1424,7 @@ bool Parser::isForRangeIdentifier() {
|
|||
if (Next.is(tok::colon))
|
||||
return true;
|
||||
|
||||
if (Next.is(tok::l_square) || Next.is(tok::kw_alignas)) {
|
||||
if (Next.isOneOf(tok::l_square, tok::kw_alignas)) {
|
||||
TentativeParsingAction PA(*this);
|
||||
ConsumeToken();
|
||||
SkipCXX11Attributes();
|
||||
|
|
|
@ -62,7 +62,7 @@ Parser::ParseTemplateDeclarationOrSpecialization(unsigned Context,
|
|||
SourceLocation &DeclEnd,
|
||||
AccessSpecifier AS,
|
||||
AttributeList *AccessAttrs) {
|
||||
assert((Tok.is(tok::kw_export) || Tok.is(tok::kw_template)) &&
|
||||
assert(Tok.isOneOf(tok::kw_export, tok::kw_template) &&
|
||||
"Token does not start a template declaration.");
|
||||
|
||||
// Enter template-parameter scope.
|
||||
|
@ -135,7 +135,7 @@ Parser::ParseTemplateDeclarationOrSpecialization(unsigned Context,
|
|||
} else {
|
||||
LastParamListWasEmpty = true;
|
||||
}
|
||||
} while (Tok.is(tok::kw_export) || Tok.is(tok::kw_template));
|
||||
} while (Tok.isOneOf(tok::kw_export, tok::kw_template));
|
||||
|
||||
// Parse the actual template declaration.
|
||||
return ParseSingleDeclarationAfterTemplate(Context,
|
||||
|
@ -367,7 +367,7 @@ Parser::ParseTemplateParameterList(unsigned Depth,
|
|||
// Did we find a comma or the end of the template parameter list?
|
||||
if (Tok.is(tok::comma)) {
|
||||
ConsumeToken();
|
||||
} else if (Tok.is(tok::greater) || Tok.is(tok::greatergreater)) {
|
||||
} else if (Tok.isOneOf(tok::greater, tok::greatergreater)) {
|
||||
// Don't consume this... that's done by template parser.
|
||||
break;
|
||||
} else {
|
||||
|
@ -484,7 +484,7 @@ Decl *Parser::ParseTemplateParameter(unsigned Depth, unsigned Position) {
|
|||
/// 'typename' ...[opt][C++0x] identifier[opt]
|
||||
/// 'typename' identifier[opt] '=' type-id
|
||||
Decl *Parser::ParseTypeParameter(unsigned Depth, unsigned Position) {
|
||||
assert((Tok.is(tok::kw_class) || Tok.is(tok::kw_typename)) &&
|
||||
assert(Tok.isOneOf(tok::kw_class, tok::kw_typename) &&
|
||||
"A type-parameter starts with 'class' or 'typename'");
|
||||
|
||||
// Consume the 'class' or 'typename' keyword.
|
||||
|
@ -506,8 +506,8 @@ Decl *Parser::ParseTypeParameter(unsigned Depth, unsigned Position) {
|
|||
if (Tok.is(tok::identifier)) {
|
||||
ParamName = Tok.getIdentifierInfo();
|
||||
NameLoc = ConsumeToken();
|
||||
} else if (Tok.is(tok::equal) || Tok.is(tok::comma) ||
|
||||
Tok.is(tok::greater) || Tok.is(tok::greatergreater)) {
|
||||
} else if (Tok.isOneOf(tok::equal, tok::comma, tok::greater,
|
||||
tok::greatergreater)) {
|
||||
// Unnamed template parameter. Don't have to do anything here, just
|
||||
// don't consume this token.
|
||||
} else {
|
||||
|
@ -567,7 +567,7 @@ Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {
|
|||
// or greater appear immediately or after 'struct'. In the latter case,
|
||||
// replace the keyword with 'class'.
|
||||
if (!TryConsumeToken(tok::kw_class)) {
|
||||
bool Replace = Tok.is(tok::kw_typename) || Tok.is(tok::kw_struct);
|
||||
bool Replace = Tok.isOneOf(tok::kw_typename, tok::kw_struct);
|
||||
const Token &Next = Tok.is(tok::kw_struct) ? NextToken() : Tok;
|
||||
if (Tok.is(tok::kw_typename)) {
|
||||
Diag(Tok.getLocation(),
|
||||
|
@ -577,9 +577,8 @@ Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {
|
|||
<< (!getLangOpts().CPlusPlus1z
|
||||
? FixItHint::CreateReplacement(Tok.getLocation(), "class")
|
||||
: FixItHint());
|
||||
} else if (Next.is(tok::identifier) || Next.is(tok::comma) ||
|
||||
Next.is(tok::greater) || Next.is(tok::greatergreater) ||
|
||||
Next.is(tok::ellipsis)) {
|
||||
} else if (Next.isOneOf(tok::identifier, tok::comma, tok::greater,
|
||||
tok::greatergreater, tok::ellipsis)) {
|
||||
Diag(Tok.getLocation(), diag::err_class_on_template_template_param)
|
||||
<< (Replace ? FixItHint::CreateReplacement(Tok.getLocation(), "class")
|
||||
: FixItHint::CreateInsertion(Tok.getLocation(), "class "));
|
||||
|
@ -604,8 +603,8 @@ Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {
|
|||
if (Tok.is(tok::identifier)) {
|
||||
ParamName = Tok.getIdentifierInfo();
|
||||
NameLoc = ConsumeToken();
|
||||
} else if (Tok.is(tok::equal) || Tok.is(tok::comma) ||
|
||||
Tok.is(tok::greater) || Tok.is(tok::greatergreater)) {
|
||||
} else if (Tok.isOneOf(tok::equal, tok::comma, tok::greater,
|
||||
tok::greatergreater)) {
|
||||
// Unnamed template parameter. Don't have to do anything here, just
|
||||
// don't consume this token.
|
||||
} else {
|
||||
|
@ -794,16 +793,15 @@ bool Parser::ParseGreaterThanInTemplateList(SourceLocation &RAngleLoc,
|
|||
Token Next = NextToken();
|
||||
if ((RemainingToken == tok::greater ||
|
||||
RemainingToken == tok::greatergreater) &&
|
||||
(Next.is(tok::greater) || Next.is(tok::greatergreater) ||
|
||||
Next.is(tok::greatergreatergreater) || Next.is(tok::equal) ||
|
||||
Next.is(tok::greaterequal) || Next.is(tok::greatergreaterequal) ||
|
||||
Next.is(tok::equalequal)) &&
|
||||
Next.isOneOf(tok::greater, tok::greatergreater,
|
||||
tok::greatergreatergreater, tok::equal, tok::greaterequal,
|
||||
tok::greatergreaterequal, tok::equalequal) &&
|
||||
areTokensAdjacent(Tok, Next))
|
||||
Hint2 = FixItHint::CreateInsertion(Next.getLocation(), " ");
|
||||
|
||||
unsigned DiagId = diag::err_two_right_angle_brackets_need_space;
|
||||
if (getLangOpts().CPlusPlus11 &&
|
||||
(Tok.is(tok::greatergreater) || Tok.is(tok::greatergreatergreater)))
|
||||
Tok.isOneOf(tok::greatergreater, tok::greatergreatergreater))
|
||||
DiagId = diag::warn_cxx98_compat_two_right_angle_brackets;
|
||||
else if (Tok.is(tok::greaterequal))
|
||||
DiagId = diag::err_right_angle_bracket_equal_needs_space;
|
||||
|
@ -1055,8 +1053,7 @@ void Parser::AnnotateTemplateIdTokenAsType() {
|
|||
|
||||
/// \brief Determine whether the given token can end a template argument.
|
||||
static bool isEndOfTemplateArgument(Token Tok) {
|
||||
return Tok.is(tok::comma) || Tok.is(tok::greater) ||
|
||||
Tok.is(tok::greatergreater);
|
||||
return Tok.isOneOf(tok::comma, tok::greater, tok::greatergreater);
|
||||
}
|
||||
|
||||
/// \brief Parse a C++ template template argument.
|
||||
|
@ -1217,7 +1214,7 @@ bool Parser::IsTemplateArgumentList(unsigned Skip) {
|
|||
ConsumeToken();
|
||||
|
||||
// If we have a '>' or a ',' then this is a template argument list.
|
||||
return Tok.is(tok::greater) || Tok.is(tok::comma);
|
||||
return Tok.isOneOf(tok::greater, tok::comma);
|
||||
}
|
||||
|
||||
/// ParseTemplateArgumentList - Parse a C++ template-argument-list
|
||||
|
@ -1339,8 +1336,8 @@ void Parser::ParseLateTemplatedFuncDef(LateParsedTemplate &LPT) {
|
|||
|
||||
// Consume the previously pushed token.
|
||||
ConsumeAnyToken(/*ConsumeCodeCompletionTok=*/true);
|
||||
assert((Tok.is(tok::l_brace) || Tok.is(tok::colon) || Tok.is(tok::kw_try))
|
||||
&& "Inline method not starting with '{', ':' or 'try'");
|
||||
assert(Tok.isOneOf(tok::l_brace, tok::colon, tok::kw_try) &&
|
||||
"Inline method not starting with '{', ':' or 'try'");
|
||||
|
||||
// Parse the method body. Function body parsing code is similar enough
|
||||
// to be re-used for method bodies as well.
|
||||
|
|
|
@ -179,8 +179,8 @@ Parser::TPResult Parser::TryConsumeDeclarationSpecifier() {
|
|||
ConsumeToken();
|
||||
|
||||
// Skip attributes.
|
||||
while (Tok.is(tok::l_square) || Tok.is(tok::kw___attribute) ||
|
||||
Tok.is(tok::kw___declspec) || Tok.is(tok::kw_alignas)) {
|
||||
while (Tok.isOneOf(tok::l_square, tok::kw___attribute, tok::kw___declspec,
|
||||
tok::kw_alignas)) {
|
||||
if (Tok.is(tok::l_square)) {
|
||||
ConsumeBracket();
|
||||
if (!SkipUntil(tok::r_square))
|
||||
|
@ -195,8 +195,8 @@ Parser::TPResult Parser::TryConsumeDeclarationSpecifier() {
|
|||
}
|
||||
}
|
||||
|
||||
if ((Tok.is(tok::identifier) || Tok.is(tok::coloncolon) ||
|
||||
Tok.is(tok::kw_decltype) || Tok.is(tok::annot_template_id)) &&
|
||||
if (Tok.isOneOf(tok::identifier, tok::coloncolon, tok::kw_decltype,
|
||||
tok::annot_template_id) &&
|
||||
TryAnnotateCXXScopeToken())
|
||||
return TPResult::Error;
|
||||
if (Tok.is(tok::annot_cxxscope))
|
||||
|
@ -289,7 +289,7 @@ Parser::TPResult Parser::TryParseInitDeclaratorList() {
|
|||
return TPR;
|
||||
|
||||
// [GNU] simple-asm-expr[opt] attributes[opt]
|
||||
if (Tok.is(tok::kw_asm) || Tok.is(tok::kw___attribute))
|
||||
if (Tok.isOneOf(tok::kw_asm, tok::kw___attribute))
|
||||
return TPResult::True;
|
||||
|
||||
// initializer[opt]
|
||||
|
@ -370,8 +370,7 @@ bool Parser::isCXXConditionDeclaration() {
|
|||
if (TPR == TPResult::Ambiguous) {
|
||||
// '='
|
||||
// [GNU] simple-asm-expr[opt] attributes[opt]
|
||||
if (Tok.is(tok::equal) ||
|
||||
Tok.is(tok::kw_asm) || Tok.is(tok::kw___attribute))
|
||||
if (Tok.isOneOf(tok::equal, tok::kw_asm, tok::kw___attribute))
|
||||
TPR = TPResult::True;
|
||||
else if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace))
|
||||
TPR = TPResult::True;
|
||||
|
@ -448,7 +447,7 @@ bool Parser::isCXXTypeId(TentativeCXXTypeIdContext Context, bool &isAmbiguous) {
|
|||
// the abstract declarator we encounter a '>', '>>' (in C++0x), or
|
||||
// ',', this is a type-id. Otherwise, it's an expression.
|
||||
} else if (Context == TypeIdAsTemplateArgument &&
|
||||
(Tok.is(tok::greater) || Tok.is(tok::comma) ||
|
||||
(Tok.isOneOf(tok::greater, tok::comma) ||
|
||||
(getLangOpts().CPlusPlus11 && Tok.is(tok::greatergreater)))) {
|
||||
TPR = TPResult::True;
|
||||
isAmbiguous = true;
|
||||
|
@ -624,18 +623,15 @@ Parser::isCXX11AttributeSpecifier(bool Disambiguate,
|
|||
|
||||
Parser::TPResult Parser::TryParsePtrOperatorSeq() {
|
||||
while (true) {
|
||||
if (Tok.is(tok::coloncolon) || Tok.is(tok::identifier))
|
||||
if (Tok.isOneOf(tok::coloncolon, tok::identifier))
|
||||
if (TryAnnotateCXXScopeToken(true))
|
||||
return TPResult::Error;
|
||||
|
||||
if (Tok.is(tok::star) || Tok.is(tok::amp) || Tok.is(tok::caret) ||
|
||||
Tok.is(tok::ampamp) ||
|
||||
if (Tok.isOneOf(tok::star, tok::amp, tok::caret, tok::ampamp) ||
|
||||
(Tok.is(tok::annot_cxxscope) && NextToken().is(tok::star))) {
|
||||
// ptr-operator
|
||||
ConsumeToken();
|
||||
while (Tok.is(tok::kw_const) ||
|
||||
Tok.is(tok::kw_volatile) ||
|
||||
Tok.is(tok::kw_restrict))
|
||||
while (Tok.isOneOf(tok::kw_const, tok::kw_volatile, tok::kw_restrict))
|
||||
ConsumeToken();
|
||||
} else {
|
||||
return TPResult::True;
|
||||
|
@ -803,7 +799,7 @@ Parser::TPResult Parser::TryParseDeclarator(bool mayBeAbstract,
|
|||
if (Tok.is(tok::ellipsis))
|
||||
ConsumeToken();
|
||||
|
||||
if ((Tok.is(tok::identifier) || Tok.is(tok::kw_operator) ||
|
||||
if ((Tok.isOneOf(tok::identifier, tok::kw_operator) ||
|
||||
(Tok.is(tok::annot_cxxscope) && (NextToken().is(tok::identifier) ||
|
||||
NextToken().is(tok::kw_operator)))) &&
|
||||
mayHaveIdentifier) {
|
||||
|
@ -833,14 +829,9 @@ Parser::TPResult Parser::TryParseDeclarator(bool mayBeAbstract,
|
|||
// '(' declarator ')'
|
||||
// '(' attributes declarator ')'
|
||||
// '(' abstract-declarator ')'
|
||||
if (Tok.is(tok::kw___attribute) ||
|
||||
Tok.is(tok::kw___declspec) ||
|
||||
Tok.is(tok::kw___cdecl) ||
|
||||
Tok.is(tok::kw___stdcall) ||
|
||||
Tok.is(tok::kw___fastcall) ||
|
||||
Tok.is(tok::kw___thiscall) ||
|
||||
Tok.is(tok::kw___vectorcall) ||
|
||||
Tok.is(tok::kw___unaligned))
|
||||
if (Tok.isOneOf(tok::kw___attribute, tok::kw___declspec, tok::kw___cdecl,
|
||||
tok::kw___stdcall, tok::kw___fastcall, tok::kw___thiscall,
|
||||
tok::kw___vectorcall, tok::kw___unaligned))
|
||||
return TPResult::True; // attributes indicate declaration
|
||||
TPResult TPR = TryParseDeclarator(mayBeAbstract, mayHaveIdentifier);
|
||||
if (TPR != TPResult::Ambiguous)
|
||||
|
@ -1015,9 +1006,8 @@ class TentativeParseCCC : public CorrectionCandidateCallback {
|
|||
public:
|
||||
TentativeParseCCC(const Token &Next) {
|
||||
WantRemainingKeywords = false;
|
||||
WantTypeSpecifiers = Next.is(tok::l_paren) || Next.is(tok::r_paren) ||
|
||||
Next.is(tok::greater) || Next.is(tok::l_brace) ||
|
||||
Next.is(tok::identifier);
|
||||
WantTypeSpecifiers = Next.isOneOf(tok::l_paren, tok::r_paren, tok::greater,
|
||||
tok::l_brace, tok::identifier);
|
||||
}
|
||||
|
||||
bool ValidateCandidate(const TypoCorrection &Candidate) override {
|
||||
|
@ -1201,8 +1191,8 @@ Parser::isCXXDeclarationSpecifier(Parser::TPResult BracedCastResult,
|
|||
|
||||
case tok::coloncolon: { // ::foo::bar
|
||||
const Token &Next = NextToken();
|
||||
if (Next.is(tok::kw_new) || // ::new
|
||||
Next.is(tok::kw_delete)) // ::delete
|
||||
if (Next.isOneOf(tok::kw_new, // ::new
|
||||
tok::kw_delete)) // ::delete
|
||||
return TPResult::False;
|
||||
}
|
||||
// Fall through.
|
||||
|
@ -1603,12 +1593,10 @@ bool Parser::isCXXFunctionDeclarator(bool *IsAmbiguous) {
|
|||
TPR = TPResult::False;
|
||||
else {
|
||||
const Token &Next = NextToken();
|
||||
if (Next.is(tok::amp) || Next.is(tok::ampamp) ||
|
||||
Next.is(tok::kw_const) || Next.is(tok::kw_volatile) ||
|
||||
Next.is(tok::kw_throw) || Next.is(tok::kw_noexcept) ||
|
||||
Next.is(tok::l_square) || isCXX11VirtSpecifier(Next) ||
|
||||
Next.is(tok::l_brace) || Next.is(tok::kw_try) ||
|
||||
Next.is(tok::equal) || Next.is(tok::arrow))
|
||||
if (Next.isOneOf(tok::amp, tok::ampamp, tok::kw_const, tok::kw_volatile,
|
||||
tok::kw_throw, tok::kw_noexcept, tok::l_square,
|
||||
tok::l_brace, tok::kw_try, tok::equal, tok::arrow) ||
|
||||
isCXX11VirtSpecifier(Next))
|
||||
// The next token cannot appear after a constructor-style initializer,
|
||||
// and can appear next in a function definition. This must be a function
|
||||
// declarator.
|
||||
|
@ -1729,8 +1717,8 @@ Parser::TryParseParameterDeclarationClause(bool *InvalidAsDeclaration,
|
|||
// parameter-declaration-clause, and the last param is missing its default
|
||||
// argument.
|
||||
if (VersusTemplateArgument)
|
||||
return (Tok.is(tok::equal) || Tok.is(tok::r_paren)) ? TPResult::True
|
||||
: TPResult::False;
|
||||
return Tok.isOneOf(tok::equal, tok::r_paren) ? TPResult::True
|
||||
: TPResult::False;
|
||||
|
||||
if (Tok.is(tok::equal)) {
|
||||
// '=' assignment-expression
|
||||
|
@ -1783,13 +1771,11 @@ Parser::TPResult Parser::TryParseFunctionDeclarator() {
|
|||
return TPResult::Error;
|
||||
|
||||
// cv-qualifier-seq
|
||||
while (Tok.is(tok::kw_const) ||
|
||||
Tok.is(tok::kw_volatile) ||
|
||||
Tok.is(tok::kw_restrict) )
|
||||
while (Tok.isOneOf(tok::kw_const, tok::kw_volatile, tok::kw_restrict))
|
||||
ConsumeToken();
|
||||
|
||||
// ref-qualifier[opt]
|
||||
if (Tok.is(tok::amp) || Tok.is(tok::ampamp))
|
||||
if (Tok.isOneOf(tok::amp, tok::ampamp))
|
||||
ConsumeToken();
|
||||
|
||||
// exception-specification
|
||||
|
|
|
@ -1007,7 +1007,7 @@ Corrected:
|
|||
|
||||
// Check for a tag type hidden by a non-type decl in a few cases where it
|
||||
// seems likely a type is wanted instead of the non-type that was found.
|
||||
bool NextIsOp = NextToken.is(tok::amp) || NextToken.is(tok::star);
|
||||
bool NextIsOp = NextToken.isOneOf(tok::amp, tok::star);
|
||||
if ((NextToken.is(tok::identifier) ||
|
||||
(NextIsOp &&
|
||||
FirstDecl->getUnderlyingDecl()->isFunctionOrFunctionTemplate())) &&
|
||||
|
|
Loading…
Reference in New Issue