[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