[cfe-commits] r45368 - in /cfe/trunk: Parse/ParseObjc.cpp Parse/Parser.cpp test/Parser/objc-try-catch-1.m
Chris Lattner
sabre at nondot.org
Thu Dec 27 11:57:01 PST 2007
Author: lattner
Date: Thu Dec 27 13:57:00 2007
New Revision: 45368
URL: http://llvm.org/viewvc/llvm-project?rev=45368&view=rev
Log:
- Use Tok.isObjCAtKeyword instead of Tok.getIdentifierInfo()->getObjCKeywordID().
The later fails if the token is not an identifier.
- Replace tabs with spaces.
- Various other cleanups.
Patch by Nico Weber!
Modified:
cfe/trunk/Parse/ParseObjc.cpp
cfe/trunk/Parse/Parser.cpp
cfe/trunk/test/Parser/objc-try-catch-1.m
Modified: cfe/trunk/Parse/ParseObjc.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Parse/ParseObjc.cpp?rev=45368&r1=45367&r2=45368&view=diff
==============================================================================
--- cfe/trunk/Parse/ParseObjc.cpp (original)
+++ cfe/trunk/Parse/ParseObjc.cpp Thu Dec 27 13:57:00 2007
@@ -192,7 +192,7 @@
return 0;
}
DeclTy *ClsType = Actions.ActOnStartClassInterface(
- atLoc, nameId, nameLoc,
+ atLoc, nameId, nameLoc,
superClassId, superClassLoc, &ProtocolRefs[0],
ProtocolRefs.size(), endProtoLoc, attrList);
@@ -223,7 +223,7 @@
/// @optional
///
void Parser::ParseObjCInterfaceDeclList(DeclTy *interfaceDecl,
- tok::ObjCKeywordKind contextKey) {
+ tok::ObjCKeywordKind contextKey) {
llvm::SmallVector<DeclTy*, 32> allMethods;
llvm::SmallVector<DeclTy*, 16> allProperties;
tok::ObjCKeywordKind MethodImplKind = tok::objc_not_keyword;
@@ -239,14 +239,14 @@
break;
} else if (ocKind == tok::objc_required) { // protocols only
ConsumeToken();
- MethodImplKind = ocKind;
- if (contextKey != tok::objc_protocol)
- Diag(AtLoc, diag::err_objc_protocol_required);
+ MethodImplKind = ocKind;
+ if (contextKey != tok::objc_protocol)
+ Diag(AtLoc, diag::err_objc_protocol_required);
} else if (ocKind == tok::objc_optional) { // protocols only
ConsumeToken();
- MethodImplKind = ocKind;
- if (contextKey != tok::objc_protocol)
- Diag(AtLoc, diag::err_objc_protocol_optional);
+ MethodImplKind = ocKind;
+ if (contextKey != tok::objc_protocol)
+ Diag(AtLoc, diag::err_objc_protocol_optional);
} else if (ocKind == tok::objc_property) {
allProperties.push_back(ParseObjCPropertyDecl(interfaceDecl, AtLoc));
continue;
@@ -327,9 +327,9 @@
}
else {
Diag(loc, diag::err_expected_ident);
- SkipUntil(tok::r_paren,true,true);
- break;
- }
+ SkipUntil(tok::r_paren,true,true);
+ break;
+ }
}
else {
Diag(loc, diag::err_objc_expected_equal);
@@ -409,7 +409,7 @@
/// __attribute__((deprecated))
///
Parser::DeclTy *Parser::ParseObjCMethodPrototype(DeclTy *IDecl,
- tok::ObjCKeywordKind MethodImplKind) {
+ tok::ObjCKeywordKind MethodImplKind) {
assert((Tok.is(tok::minus) || Tok.is(tok::plus)) && "expected +/-");
tok::TokenKind methodType = Tok.getKind();
@@ -501,7 +501,7 @@
///
void Parser::ParseObjcTypeQualifierList(ObjcDeclSpec &DS) {
while (1) {
- if (!Tok.is(tok::identifier))
+ if (Tok.isNot(tok::identifier))
return;
const IdentifierInfo *II = Tok.getIdentifierInfo();
@@ -587,7 +587,7 @@
Parser::DeclTy *Parser::ParseObjCMethodDecl(SourceLocation mLoc,
tok::TokenKind mType,
DeclTy *IDecl,
- tok::ObjCKeywordKind MethodImplKind)
+ tok::ObjCKeywordKind MethodImplKind)
{
// Parse the return type.
TypeTy *ReturnType = 0;
@@ -796,8 +796,8 @@
}
ParseStructDeclaration(interfaceDecl, IvarDecls);
for (unsigned i = 0; i < IvarDecls.size(); i++) {
- AllIvarDecls.push_back(IvarDecls[i]);
- AllVisibilities.push_back(visibility);
+ AllIvarDecls.push_back(IvarDecls[i]);
+ AllVisibilities.push_back(visibility);
}
IvarDecls.clear();
@@ -967,7 +967,7 @@
superClassLoc = ConsumeToken(); // Consume super class name
}
DeclTy *ImplClsType = Actions.ActOnStartClassImplementation(
- atLoc, nameId, nameLoc,
+ atLoc, nameId, nameLoc,
superClassId, superClassLoc);
if (Tok.is(tok::l_brace)) // we have ivars
@@ -1127,7 +1127,7 @@
TryBody = Actions.ActOnNullStmt(Tok.getLocation());
while (Tok.is(tok::at)) {
SourceLocation AtCatchFinallyLoc = ConsumeToken();
- if (Tok.getIdentifierInfo()->getObjCKeywordID() == tok::objc_catch) {
+ if (Tok.isObjCAtKeyword(tok::objc_catch)) {
StmtTy *FirstPart = 0;
ConsumeToken(); // consume catch
if (Tok.is(tok::l_paren)) {
@@ -1161,7 +1161,7 @@
}
catch_or_finally_seen = true;
}
- else if (Tok.getIdentifierInfo()->getObjCKeywordID() == tok::objc_finally) {
+ else if (Tok.isObjCAtKeyword(tok::objc_finally)) {
ConsumeToken(); // consume finally
StmtResult FinallyBody = ParseCompoundStatementBody();
if (FinallyBody.isInvalid)
@@ -1478,7 +1478,7 @@
Diag(Tok, diag::err_expected_colon);
break;
}
- nColons++;
+ nColons++;
ConsumeToken(); // Eat the ':'.
if (Tok.is(tok::r_paren))
break;
Modified: cfe/trunk/Parse/Parser.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Parse/Parser.cpp?rev=45368&r1=45367&r2=45368&view=diff
==============================================================================
--- cfe/trunk/Parse/Parser.cpp (original)
+++ cfe/trunk/Parse/Parser.cpp Thu Dec 27 13:57:00 2007
@@ -374,8 +374,12 @@
// ObjC2 allows prefix attributes on class interfaces.
if (getLang().ObjC2 && Tok.is(tok::at)) {
SourceLocation AtLoc = ConsumeToken(); // the "@"
- if (Tok.getIdentifierInfo()->getObjCKeywordID() == tok::objc_interface)
- return ParseObjCAtInterfaceDeclaration(AtLoc, DS.getAttributes());
+ if (!Tok.isObjCAtKeyword(tok::objc_interface)) {
+ Diag(Tok, diag::err_objc_expected_property_attr);//FIXME:better diagnostic
+ SkipUntil(tok::semi); // FIXME: better skip?
+ return 0;
+ }
+ return ParseObjCAtInterfaceDeclaration(AtLoc, DS.getAttributes());
}
// Parse the first declarator.
Modified: cfe/trunk/test/Parser/objc-try-catch-1.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/objc-try-catch-1.m?rev=45368&r1=45367&r2=45368&view=diff
==============================================================================
--- cfe/trunk/test/Parser/objc-try-catch-1.m (original)
+++ cfe/trunk/test/Parser/objc-try-catch-1.m Thu Dec 27 13:57:00 2007
@@ -10,29 +10,43 @@
void * foo()
{
- @try {
- return proc();
- }
- @catch (Frob* ex) {
- @throw;
- }
- @catch (Frob1* ex) {
- @throw proc();
- }
- @finally {
- @try {
- return proc();
- }
- @catch (Frob* ex) {
- @throw 1,2;
- }
- @catch(...) {
- @throw (4,3,proc());
- }
- }
-
- @try { // expected-error {{@try statment without a @catch and @finally clause}}
- return proc();
- }
+ @try {
+ return proc();
+ }
+ @catch (Frob* ex) {
+ @throw;
+ }
+ @catch (Frob1* ex) {
+ @throw proc();
+ }
+ @finally {
+ @try {
+ return proc();
+ }
+ @catch (Frob* ex) {
+ @throw 1,2;
+ }
+ @catch(...) {
+ @throw (4,3,proc());
+ }
+ }
+
+ @try { // expected-error {{@try statment without a @catch and @finally clause}}
+ return proc();
+ }
+}
+
+
+void bar()
+{
+ @try {}// expected-error {{@try statment without a @catch and @finally clause}}
+ @"s" {} // expected-warning {{result unused}} expected-error {{expected ';'}}
+}
+
+void baz()
+{
+ @try {}// expected-error {{@try statment without a @catch and @finally clause}}
+ @try {}// expected-error {{undeclared identifier}}
+ @finally {}
}
More information about the cfe-commits
mailing list