]> granicus.if.org Git - clang/commitdiff
Some small tweaks to the recent Objc support...
authorSteve Naroff <snaroff@apple.com>
Mon, 10 Sep 2007 20:51:04 +0000 (20:51 +0000)
committerSteve Naroff <snaroff@apple.com>
Mon, 10 Sep 2007 20:51:04 +0000 (20:51 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41803 91177308-0d34-0410-b5e6-96231b3b80d8

Driver/ASTStreamers.cpp
Parse/ParseObjc.cpp
Parse/Parser.cpp
Sema/SemaDecl.cpp
clang.xcodeproj/project.pbxproj

index d4c55ad681a5dcc4db9ec1985a18d7acf83ff244..6fe6fac41112344f1f2090740b18f1a1237667b8 100644 (file)
@@ -99,6 +99,12 @@ static void PrintTypeDefDecl(TypedefDecl *TD) {
   fprintf(stderr, "typedef %s;\n", S.c_str());
 }
 
+static void PrintObjcInterfaceDecl(ObjcInterfaceDecl *OID) {
+  std::string S = OID->getName();
+  fprintf(stderr, "@interface %s;\n", S.c_str());
+  // FIXME: implement the rest...
+}
+
 void clang::PrintASTs(Preprocessor &PP, unsigned MainFileID, bool Stats) {
   ASTContext Context(PP.getTargetInfo(), PP.getIdentifierTable());
   ASTStreamerTy *Streamer = ASTStreamer_Init(PP, Context, MainFileID);
@@ -114,6 +120,8 @@ void clang::PrintASTs(Preprocessor &PP, unsigned MainFileID, bool Stats) {
       }
     } else if (TypedefDecl *TD = dyn_cast<TypedefDecl>(D)) {
       PrintTypeDefDecl(TD);
+    } else if (ObjcInterfaceDecl *OID = dyn_cast<ObjcInterfaceDecl>(D)) {
+      PrintObjcInterfaceDecl(OID);
     } else {
       fprintf(stderr, "Read top-level variable decl: '%s'\n", D->getName());
     }
index 19594d89911a35dd8e21f717e5c84c21ec8de974..803fe2f6707cea710ded399067c7f216891c3a28 100644 (file)
@@ -195,7 +195,7 @@ Parser::DeclTy *Parser::ParseObjCAtInterfaceDeclaration(
   // The @ sign was already consumed by ParseObjCInterfaceDeclList().
   if (Tok.isObjCAtKeyword(tok::objc_end)) {
     ConsumeToken(); // the "end" identifier
-    return 0;
+    return ClsType;
   }
   Diag(Tok, diag::err_objc_missing_end);
   return 0;
@@ -370,7 +370,7 @@ Parser::DeclTy *Parser::ParseObjCMethodPrototype(DeclTy *CDecl) {
   
   DeclTy *MDecl = ParseObjCMethodDecl(methodType, methodLoc);
   // Since this rule is used for both method declarations and definitions,
-  // the caller is responsible for consuming the ';'.
+  // the caller is (optionally) responsible for consuming the ';'.
   return MDecl;
 }
 
index 9743da73f1b8eb360f7b7a55ad297651f1fa0b1c..da1bb527d9a3386eb77172e6e9ee43b623a43070 100644 (file)
@@ -343,8 +343,7 @@ Parser::DeclTy *Parser::ParseExternalDeclaration() {
     return 0;
   case tok::at:
     // @ is not a legal token unless objc is enabled, no need to check.
-    ParseObjCAtDirectives();
-    return 0;
+    return ParseObjCAtDirectives();
   case tok::minus:
     if (getLang().ObjC1) {
       ParseObjCInstanceMethodDefinition();
@@ -549,6 +548,7 @@ void Parser::ParseKNRParamDeclarations(Declarator &D) {
       // Ask the actions module to compute the type for this declarator.
       Action::TypeResult TR =
         Actions.ParseParamDeclaratorType(CurScope, ParmDeclarator);
+
       if (!TR.isInvalid && 
           // A missing identifier has already been diagnosed.
           ParmDeclarator.getIdentifier()) {
index 3315f38b0fa0e039c5513ab7807476610be64642..71fc0b44710678ebb9366d9da5b7560a35fcc546 100644 (file)
@@ -865,6 +865,7 @@ Sema::ObjcClassDeclaration(Scope *S, SourceLocation AtClassLoc,
   for (unsigned i = 0; i != NumElts; ++i) {
     ObjcInterfaceDecl *IDecl;
       
+    // FIXME: before we create one, look up the interface decl in a hash table.
     IDecl = new ObjcInterfaceDecl(SourceLocation(), IdentList[i], true);
     // Chain & install the interface decl into the identifier.
     IDecl->setNext(IdentList[i]->getFETokenInfo<Decl>());
index 0ca23958c7d4da21dd41f84d48841bdb04ff2f4c..f0f4c3f0b957f8f6ef2e463556fe10f832bf59b1 100644 (file)
                08FB7793FE84155DC02AAC07 /* Project object */ = {
                        isa = PBXProject;
                        buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "clang" */;
-                       compatibilityVersion = "Xcode 2.4";
                        hasScannedForEncodings = 1;
                        mainGroup = 08FB7794FE84155DC02AAC07 /* clang */;
                        projectDirPath = "";