// C++ Expressions
OwningExprResult ParseCXXIdExpression();
- /// MaybeParseCXXScopeSpecifier - Parse global scope or nested-name-specifier.
- /// Returns true if a nested-name-specifier was parsed from the token stream.
- /// Note that this routine will not parse ::new or ::delete.
+ /// ParseOptionalCXXScopeSpecifier - Parse global scope or
+ /// nested-name-specifier if present. Returns true if a nested-name-specifier
+ /// was parsed from the token stream. Note that this routine will not parse
+ /// ::new or ::delete, it will just leave them in the token stream.
///
- bool MaybeParseCXXScopeSpecifier(CXXScopeSpec &SS);
+ bool ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS);
//===--------------------------------------------------------------------===//
// C++ 5.2p1: C++ Casts
SourceLocation L, SourceLocation R);
void ParseDeclarationSpecifiers(DeclSpec &DS,
TemplateParameterLists *TemplateParams = 0);
- bool MaybeParseTypeSpecifier(DeclSpec &DS, int &isInvalid,
- const char *&PrevSpec,
- TemplateParameterLists *TemplateParams = 0);
+ bool ParseOptionalTypeSpecifier(DeclSpec &DS, int &isInvalid,
+ const char *&PrevSpec,
+ TemplateParameterLists *TemplateParams = 0);
void ParseSpecifierQualifierList(DeclSpec &DS);
void ParseObjCTypeQualifierList(ObjCDeclSpec &DS);
default:
// Try to parse a type-specifier; if we found one, continue. If it's not
// a type, this falls through.
- if (MaybeParseTypeSpecifier(DS, isInvalid, PrevSpec, TemplateParams))
+ if (ParseOptionalTypeSpecifier(DS, isInvalid, PrevSpec, TemplateParams))
continue;
DoneWithDeclSpec:
}
}
-/// MaybeParseTypeSpecifier - Try to parse a single type-specifier. We
+/// ParseOptionalTypeSpecifier - Try to parse a single type-specifier. We
/// primarily follow the C++ grammar with additions for C99 and GNU,
/// which together subsume the C grammar. Note that the C++
/// type-specifier also includes the C type-qualifier (for const,
/// [GNU] typeof-specifier
/// [OBJC] class-name objc-protocol-refs[opt] [TODO]
/// [OBJC] typedef-name objc-protocol-refs[opt] [TODO]
-bool Parser::MaybeParseTypeSpecifier(DeclSpec &DS, int& isInvalid,
- const char *&PrevSpec,
- TemplateParameterLists *TemplateParams) {
+bool Parser::ParseOptionalTypeSpecifier(DeclSpec &DS, int& isInvalid,
+ const char *&PrevSpec,
+ TemplateParameterLists *TemplateParams){
SourceLocation Loc = Tok.getLocation();
switch (Tok.getKind()) {
// Annotate typenames and C++ scope specifiers. If we get one, just
// recurse to handle whatever we get.
if (TryAnnotateTypeOrScopeToken())
- return MaybeParseTypeSpecifier(DS, isInvalid, PrevSpec, TemplateParams);
+ return ParseOptionalTypeSpecifier(DS, isInvalid, PrevSpec,TemplateParams);
// Otherwise, not a type specifier.
return false;
case tok::coloncolon: // ::foo::bar
// Annotate typenames and C++ scope specifiers. If we get one, just
// recurse to handle whatever we get.
if (TryAnnotateTypeOrScopeToken())
- return MaybeParseTypeSpecifier(DS, isInvalid, PrevSpec, TemplateParams);
+ return ParseOptionalTypeSpecifier(DS, isInvalid, PrevSpec,TemplateParams);
// Otherwise, not a type specifier.
return false;
Attr = ParseAttributes();
CXXScopeSpec SS;
- if (getLang().CPlusPlus && MaybeParseCXXScopeSpecifier(SS)) {
+ if (getLang().CPlusPlus && ParseOptionalCXXScopeSpecifier(SS)) {
if (Tok.isNot(tok::identifier)) {
Diag(Tok, diag::err_expected_ident);
if (Tok.isNot(tok::l_brace)) {
if (getLang().CPlusPlus) {
if (D.mayHaveIdentifier()) {
- bool afterCXXScope = MaybeParseCXXScopeSpecifier(D.getCXXScopeSpec());
+ bool afterCXXScope = ParseOptionalCXXScopeSpecifier(D.getCXXScopeSpec());
if (afterCXXScope) {
// Change the declaration context for name lookup, until this function
// is exited (and the declarator has been parsed).
CXXScopeSpec SS;
// Parse (optional) nested-name-specifier.
- MaybeParseCXXScopeSpecifier(SS);
+ ParseOptionalCXXScopeSpecifier(SS);
AttributeList *AttrList = 0;
IdentifierInfo *NamespcName = 0;
// Parse the (optional) nested-name-specifier.
CXXScopeSpec SS;
- if (getLang().CPlusPlus && MaybeParseCXXScopeSpecifier(SS)) {
+ if (getLang().CPlusPlus && ParseOptionalCXXScopeSpecifier(SS)) {
if (Tok.isNot(tok::identifier))
Diag(Tok, diag::err_expected_ident);
}
// Parse optional '::' and optional nested-name-specifier.
CXXScopeSpec SS;
- MaybeParseCXXScopeSpecifier(SS);
+ ParseOptionalCXXScopeSpecifier(SS);
// The location of the base class itself.
SourceLocation BaseLoc = Tok.getLocation();
#include "AstGuard.h"
using namespace clang;
-/// MaybeParseCXXScopeSpecifier - Parse global scope or nested-name-specifier.
-/// Returns true if a nested-name-specifier was parsed from the token stream.
-///
-/// Note that this routine will not parse ::new or ::delete.
+/// ParseOptionalCXXScopeSpecifier - Parse global scope or
+/// nested-name-specifier if present. Returns true if a nested-name-specifier
+/// was parsed from the token stream. Note that this routine will not parse
+/// ::new or ::delete, it will just leave them in the token stream.
///
/// '::'[opt] nested-name-specifier
/// '::'
/// nested-name-specifier identifier '::'
/// nested-name-specifier 'template'[opt] simple-template-id '::' [TODO]
///
-bool Parser::MaybeParseCXXScopeSpecifier(CXXScopeSpec &SS) {
+bool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS) {
assert(getLang().CPlusPlus &&
"Call sites of this function should be guarded by checking for C++");
// '::' unqualified-id
//
CXXScopeSpec SS;
- MaybeParseCXXScopeSpecifier(SS);
+ ParseOptionalCXXScopeSpecifier(SS);
// unqualified-id:
// identifier
int isInvalid = 0;
// Parse one or more of the type specifiers.
- if (!MaybeParseTypeSpecifier(DS, isInvalid, PrevSpec)) {
+ if (!ParseOptionalTypeSpecifier(DS, isInvalid, PrevSpec)) {
Diag(Tok, diag::err_operator_missing_type_specifier);
return true;
}
- while (MaybeParseTypeSpecifier(DS, isInvalid, PrevSpec)) ;
+
+ while (ParseOptionalTypeSpecifier(DS, isInvalid, PrevSpec));
return false;
}
// FIXME: Implement template-ids
CXXScopeSpec SS;
if (getLang().CPlusPlus)
- MaybeParseCXXScopeSpecifier(SS);
+ ParseOptionalCXXScopeSpecifier(SS);
if (Tok.is(tok::identifier)) {
// Determine whether the identifier is a type name.
"Cannot be a type or scope token!");
CXXScopeSpec SS;
- if (!MaybeParseCXXScopeSpecifier(SS))
+ if (!ParseOptionalCXXScopeSpecifier(SS))
return false;
// Push the current token back into the token stream (or revert it if it is