[cfe-commits] r43589 - in /cfe/trunk: Driver/RewriteTest.cpp Parse/ParseObjc.cpp Sema/Sema.h Sema/SemaDecl.cpp include/clang/Parse/Action.h include/clang/Parse/Parser.h
Fariborz Jahanian
fjahanian at apple.com
Wed Oct 31 16:53:01 PDT 2007
Author: fjahanian
Date: Wed Oct 31 18:53:01 2007
New Revision: 43589
URL: http://llvm.org/viewvc/llvm-project?rev=43589&view=rev
Log:
1) More additions for objective-c's qualifier type.
2) Fixed a test failure (which should have failed all along!).
Modified:
cfe/trunk/Driver/RewriteTest.cpp
cfe/trunk/Parse/ParseObjc.cpp
cfe/trunk/Sema/Sema.h
cfe/trunk/Sema/SemaDecl.cpp
cfe/trunk/include/clang/Parse/Action.h
cfe/trunk/include/clang/Parse/Parser.h
Modified: cfe/trunk/Driver/RewriteTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/RewriteTest.cpp?rev=43589&r1=43588&r2=43589&view=diff
==============================================================================
--- cfe/trunk/Driver/RewriteTest.cpp (original)
+++ cfe/trunk/Driver/RewriteTest.cpp Wed Oct 31 18:53:01 2007
@@ -555,8 +555,7 @@
int NumIvars = CDecl->getIntfDeclNumIvars();
// If no ivars and no root or if its root, directly or indirectly,
- // have no ivars (thus not synthesize)
- // then no need to synthesize this class either.
+ // have no ivars (thus not synthesized) then no need to synthesize this class.
if (NumIvars <= 0 && (!RCDecl || !ObjcSynthesizedStructs.count(RCDecl)))
return;
Modified: cfe/trunk/Parse/ParseObjc.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Parse/ParseObjc.cpp?rev=43589&r1=43588&r2=43589&view=diff
==============================================================================
--- cfe/trunk/Parse/ParseObjc.cpp (original)
+++ cfe/trunk/Parse/ParseObjc.cpp Wed Oct 31 18:53:01 2007
@@ -471,14 +471,13 @@
/// objc-type-qualifier
/// objc-type-qualifiers objc-type-qualifier
///
-Parser::TypeTy *Parser::ParseObjCTypeName() {
+Parser::TypeTy *Parser::ParseObjCTypeName(ObjcDeclSpec &DS) {
assert(Tok.is(tok::l_paren) && "expected (");
SourceLocation LParenLoc = ConsumeParen(), RParenLoc;
TypeTy *Ty = 0;
// Parse type qualifiers, in, inout, etc.
- ObjcDeclSpec DS;
ParseObjcTypeQualifierList(DS);
if (isTypeSpecifierQualifier()) {
@@ -528,8 +527,9 @@
{
// Parse the return type.
TypeTy *ReturnType = 0;
+ ObjcDeclSpec DSRet;
if (Tok.is(tok::l_paren))
- ReturnType = ParseObjCTypeName();
+ ReturnType = ParseObjCTypeName(DSRet);
SourceLocation selLoc;
IdentifierInfo *SelIdent = ParseObjCSelector(selLoc);
if (Tok.isNot(tok::colon)) {
@@ -546,12 +546,13 @@
Selector Sel = PP.getSelectorTable().getNullarySelector(SelIdent);
return Actions.ActOnMethodDeclaration(mLoc, Tok.getLocation(),
- mType, ReturnType, Sel,
- 0, 0, MethodAttrs, MethodImplKind);
+ mType, DSRet, ReturnType, Sel,
+ 0, 0, 0, MethodAttrs, MethodImplKind);
}
llvm::SmallVector<IdentifierInfo *, 12> KeyIdents;
llvm::SmallVector<Action::TypeTy *, 12> KeyTypes;
+ llvm::SmallVector<ObjcDeclSpec, 12> ArgTypeQuals;
llvm::SmallVector<IdentifierInfo *, 12> ArgNames;
Action::TypeTy *TypeInfo;
@@ -564,11 +565,14 @@
break;
}
ConsumeToken(); // Eat the ':'.
- if (Tok.is(tok::l_paren)) // Parse the argument type.
- TypeInfo = ParseObjCTypeName();
+ ObjcDeclSpec DSType;
+ if (Tok.is(tok::l_paren)) { // Parse the argument type.
+ TypeInfo = ParseObjCTypeName(DSType);
+ }
else
TypeInfo = 0;
KeyTypes.push_back(TypeInfo);
+ ArgTypeQuals.push_back(DSType);
// If attributes exist before the argument name, parse them.
if (getLang().ObjC2 && Tok.is(tok::kw___attribute))
@@ -613,8 +617,9 @@
Selector Sel = PP.getSelectorTable().getSelector(KeyIdents.size(),
&KeyIdents[0]);
return Actions.ActOnMethodDeclaration(mLoc, Tok.getLocation(),
- mType, ReturnType, Sel,
- &KeyTypes[0], &ArgNames[0],
+ mType, DSRet, ReturnType, Sel,
+ &ArgTypeQuals[0], &KeyTypes[0],
+ &ArgNames[0],
MethodAttrs, MethodImplKind);
}
Modified: cfe/trunk/Sema/Sema.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Sema/Sema.h?rev=43589&r1=43588&r2=43589&view=diff
==============================================================================
--- cfe/trunk/Sema/Sema.h (original)
+++ cfe/trunk/Sema/Sema.h Wed Oct 31 18:53:01 2007
@@ -524,10 +524,11 @@
virtual DeclTy *ActOnMethodDeclaration(
SourceLocation BeginLoc, // location of the + or -.
SourceLocation EndLoc, // location of the ; or {.
- tok::TokenKind MethodType, TypeTy *ReturnType, Selector Sel,
+ tok::TokenKind MethodType, ObjcDeclSpec &ReturnQT, TypeTy *ReturnType,
+ Selector Sel,
// optional arguments. The number of types/arguments is obtained
// from the Sel.getNumArgs().
- TypeTy **ArgTypes, IdentifierInfo **ArgNames,
+ ObjcDeclSpec *ArgQT, TypeTy **ArgTypes, IdentifierInfo **ArgNames,
AttributeList *AttrList, tok::ObjCKeywordKind MethodImplKind);
// ActOnClassMessage - used for both unary and keyword messages.
Modified: cfe/trunk/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Sema/SemaDecl.cpp?rev=43589&r1=43588&r2=43589&view=diff
==============================================================================
--- cfe/trunk/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/Sema/SemaDecl.cpp Wed Oct 31 18:53:01 2007
@@ -1288,6 +1288,9 @@
IDecl->addInstanceVariablesToClass(ivars, numIvars, RBrace);
return;
}
+ // If implementation has empty ivar list, just return.
+ if (numIvars == 0)
+ return;
assert(ivars && "missing @implementation ivars");
@@ -1967,10 +1970,11 @@
Sema::DeclTy *Sema::ActOnMethodDeclaration(
SourceLocation MethodLoc, SourceLocation EndLoc,
- tok::TokenKind MethodType, TypeTy *ReturnType, Selector Sel,
+ tok::TokenKind MethodType, ObjcDeclSpec &ReturnQT, TypeTy *ReturnType,
+ Selector Sel,
// optional arguments. The number of types/arguments is obtained
// from the Sel.getNumArgs().
- TypeTy **ArgTypes, IdentifierInfo **ArgNames,
+ ObjcDeclSpec *ArgQT, TypeTy **ArgTypes, IdentifierInfo **ArgNames,
AttributeList *AttrList, tok::ObjCKeywordKind MethodDeclKind) {
llvm::SmallVector<ParmVarDecl*, 16> Params;
Modified: cfe/trunk/include/clang/Parse/Action.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Parse/Action.h?rev=43589&r1=43588&r2=43589&view=diff
==============================================================================
--- cfe/trunk/include/clang/Parse/Action.h (original)
+++ cfe/trunk/include/clang/Parse/Action.h Wed Oct 31 18:53:01 2007
@@ -21,6 +21,7 @@
namespace clang {
// Semantic.
class DeclSpec;
+ class ObjcDeclSpec;
class Declarator;
class AttributeList;
// Parse.
@@ -529,8 +530,10 @@
SourceLocation BeginLoc, // location of the + or -.
SourceLocation EndLoc, // location of the ; or {.
tok::TokenKind MethodType, // tok::minus for instance, tok::plus for class.
+ ObjcDeclSpec &ReturnQT, // for return type's in inout etc.
TypeTy *ReturnType, // the method return type.
Selector Sel, // a unique name for the method.
+ ObjcDeclSpec *ArgQT, // for arguments' in inout etc.
TypeTy **ArgTypes, // non-zero when Sel.getNumArgs() > 0
IdentifierInfo **ArgNames, // non-zero when Sel.getNumArgs() > 0
AttributeList *AttrList, // optional
Modified: cfe/trunk/include/clang/Parse/Parser.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Parse/Parser.h?rev=43589&r1=43588&r2=43589&view=diff
==============================================================================
--- cfe/trunk/include/clang/Parse/Parser.h (original)
+++ cfe/trunk/include/clang/Parse/Parser.h Wed Oct 31 18:53:01 2007
@@ -293,7 +293,7 @@
IdentifierInfo *ObjcPropertyAttrs[objc_NumAttrs];
bool isObjCPropertyAttribute();
- TypeTy *ParseObjCTypeName();
+ TypeTy *ParseObjCTypeName(ObjcDeclSpec &DS);
void ParseObjCMethodRequirement();
DeclTy *ParseObjCMethodPrototype(DeclTy *classOrCat,
tok::ObjCKeywordKind MethodImplKind = tok::objc_not_keyword);
More information about the cfe-commits
mailing list