- Various comment typo fixes in Sema.h

- Simplify ParseDeclCXX to use early exit on error instead of nesting.
- Change ParseDeclCXX to using the 'skip on error' form of ExpectAndConsume.
- If we don't see the ; in a using directive, still call the action, for 
  hopefully better error recovery.

llvm-svn: 61801
This commit is contained in:
Chris Lattner 2009-01-06 07:27:21 +00:00
parent 8dca2e9a4e
commit ce1da2cfca
3 changed files with 20 additions and 21 deletions

View File

@ -174,30 +174,28 @@ Parser::DeclTy *Parser::ParseUsingDirective(unsigned Context,
SourceLocation IdentLoc = SourceLocation();
// Parse namespace-name.
if (!SS.isInvalid() && Tok.is(tok::identifier)) {
// Parse identifier.
NamespcName = Tok.getIdentifierInfo();
IdentLoc = ConsumeToken();
// Parse (optional) attributes (most likely GNU strong-using extension)
if (Tok.is(tok::kw___attribute)) {
AttrList = ParseAttributes();
}
// Eat ';'.
if (ExpectAndConsume(tok::semi, diag::err_expected_semi_after,
AttrList? "attributes list" : "namespace name")) {
SkipUntil(tok::semi);
return 0;
}
} else {
if (SS.isInvalid() || Tok.isNot(tok::identifier)) {
Diag(Tok, diag::err_expected_namespace_name);
// If there was invalid namespace name, skip to end of decl, and eat ';'.
SkipUntil(tok::semi);
// FIXME: Are there cases, when we would like to call ActOnUsingDirective?
return 0;
}
// Parse identifier.
NamespcName = Tok.getIdentifierInfo();
IdentLoc = ConsumeToken();
// Parse (optional) attributes (most likely GNU strong-using extension).
if (Tok.is(tok::kw___attribute))
AttrList = ParseAttributes();
// Eat ';'.
ExpectAndConsume(tok::semi, diag::err_expected_semi_after,
AttrList ? "attributes list" : "namespace name", tok::semi);
return Actions.ActOnUsingDirective(CurScope, UsingLoc, NamespcLoc, SS,
IdentLoc ,NamespcName, AttrList);
IdentLoc, NamespcName, AttrList);
}
/// ParseUsingDeclaration - Parse C++ using-declaration. Assumes that

View File

@ -482,16 +482,16 @@ public:
SourceLocation MemberLoc,
IdentifierInfo &Member);
/// Helpers for dealing with function parameters
/// Helpers for dealing with function parameters.
bool CheckParmsForFunctionDef(FunctionDecl *FD);
void CheckCXXDefaultArguments(FunctionDecl *FD);
void CheckExtraCXXDefaultArguments(Declarator &D);
// FIXME: NamespaceNameOnly parameter is added temporarily
// we will need a better way to specify lookup criteria for things
// like template specializations, explicit template instatatiation etc.
// like template specializations, explicit template instantiations, etc.
/// More parsing and symbol table subroutines...
/// More parsing and symbol table subroutines.
Decl *LookupDecl(DeclarationName Name, unsigned NSI, Scope *S,
const DeclContext *LookupCtx = 0,
bool enableLazyBuiltinCreation = true,
@ -522,7 +522,7 @@ public:
NamespaceDecl *GetStdNamespace();
/// CheckProtocolMethodDefs - This routine checks unimpletented
/// CheckProtocolMethodDefs - This routine checks unimplemented
/// methods declared in protocol, and those referenced by it.
/// \param IDecl - Used for checking for methods which may have been
/// inherited.

View File

@ -28,5 +28,6 @@ namespace D {
using namespace ! ; // expected-error{{expected namespace name}}
using namespace A ; // expected-error{{expected namespace name}}
using namespace ::A B ; // expected-error{{expected ';' after namespace name}}
using namespace ::A // expected-error{{expected namespace name}}
B ; // expected-error{{expected ';' after namespace name}}