diff options
-rw-r--r-- | Parse/ParseObjc.cpp | 11 | ||||
-rw-r--r-- | Parse/Parser.cpp | 4 |
2 files changed, 9 insertions, 6 deletions
diff --git a/Parse/ParseObjc.cpp b/Parse/ParseObjc.cpp index 803d820b21..4b3c600794 100644 --- a/Parse/ParseObjc.cpp +++ b/Parse/ParseObjc.cpp @@ -122,15 +122,18 @@ Parser::DeclTy *Parser::ParseObjCAtInterfaceDeclaration( IdentifierInfo *nameId = Tok.getIdentifierInfo(); SourceLocation nameLoc = ConsumeToken(); - if (Tok.getKind() == tok::l_paren) { // we have a category + if (Tok.getKind() == tok::l_paren) { // we have a category. SourceLocation lparenLoc = ConsumeParen(); SourceLocation categoryLoc, rparenLoc; IdentifierInfo *categoryId = 0; - // OBJC2: The cateogry name is optional (not an error). + // For ObjC2, the category name is optional (not an error). if (Tok.getKind() == tok::identifier) { categoryId = Tok.getIdentifierInfo(); categoryLoc = ConsumeToken(); + } else if (!getLang().ObjC2) { + Diag(Tok, diag::err_expected_ident); // missing category name. + return 0; } if (Tok.getKind() != tok::r_paren) { Diag(Tok, diag::err_expected_rparen); @@ -268,7 +271,7 @@ void Parser::ParseObjCMethodPrototype() { ParseObjCMethodDecl(methodType, methodLoc); // If attributes exist after the method, parse them. - if (Tok.getKind() == tok::kw___attribute) + if (getLang().ObjC2 && Tok.getKind() == tok::kw___attribute) ParseAttributes(); // Consume the ';'. @@ -387,7 +390,7 @@ void Parser::ParseObjCMethodDecl(tok::TokenKind mType, SourceLocation mLoc) { ParseObjCTypeName(); // If attributes exist before the argument name, parse them. - if (Tok.getKind() == tok::kw___attribute) + if (getLang().ObjC2 && Tok.getKind() == tok::kw___attribute) ParseAttributes(); if (Tok.getKind() != tok::identifier) { diff --git a/Parse/Parser.cpp b/Parse/Parser.cpp index 6ee190ebf5..e4f1138521 100644 --- a/Parse/Parser.cpp +++ b/Parse/Parser.cpp @@ -370,8 +370,8 @@ Parser::DeclTy *Parser::ParseDeclarationOrFunctionDefinition() { return Actions.ParsedFreeStandingDeclSpec(CurScope, DS); } - // OBJC: This grammar hack allows prefix attributes on class interfaces. - if (Tok.getKind() == tok::at) { + // ObjC2 allows prefix attributes on class interfaces. + if (getLang().ObjC2 && Tok.getKind() == tok::at) { SourceLocation AtLoc = ConsumeToken(); // the "@" if (Tok.getIdentifierInfo()->getObjCKeywordID() == tok::objc_interface) return ParseObjCAtInterfaceDeclaration(AtLoc, DS.getAttributes()); |