From: Steve Naroff Date: Tue, 30 Oct 2007 03:43:13 +0000 (+0000) Subject: Remove a couple FIXME's for rewriting ObjC interfaces (which are now being rewritten... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2feac5e559ca5c9693a3a19905ab106b9c52e193;p=clang Remove a couple FIXME's for rewriting ObjC interfaces (which are now being rewritten properly). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43494 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Driver/RewriteTest.cpp b/Driver/RewriteTest.cpp index 8063574750..be09eede31 100644 --- a/Driver/RewriteTest.cpp +++ b/Driver/RewriteTest.cpp @@ -19,6 +19,7 @@ #include "clang/Basic/IdentifierTable.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/SmallPtrSet.h" +#include "clang/Lex/Lexer.h" using namespace clang; using llvm::utostr; @@ -271,18 +272,12 @@ void RewriteTest::RewriteInterfaceDecl(ObjcInterfaceDecl *ClassDecl) { const char *startBuf = SM->getCharacterData(LocStart); const char *endBuf = SM->getCharacterData(LocEnd); - // FIXME: need to consider empty class decls (no vars, methods)... - // @interface NSConstantString : NSSimpleCString - // @end - - if (*endBuf != '>' && *endBuf != '}') - // we have an identifier - scan ahead until the end of token. - endBuf = strchr(endBuf, ' '); // FIXME: implement correctly. + endBuf += Lexer::MeasureTokenLength(LocEnd, *SM); std::string ResultStr; SynthesizeObjcInternalStruct(ClassDecl, ResultStr); - Rewrite.ReplaceText(LocStart, endBuf-startBuf+1, + Rewrite.ReplaceText(LocStart, endBuf-startBuf, ResultStr.c_str(), ResultStr.size()); int nInstanceMethods = ClassDecl->getNumInstanceMethods(); @@ -307,6 +302,8 @@ void RewriteTest::RewriteInterfaceDecl(ObjcInterfaceDecl *ClassDecl) { // FIXME: handle methods that are declared across multiple lines. } + // Lastly, comment out the @end. + Rewrite.ReplaceText(ClassDecl->getAtEndLoc(), 0, "// ", 3); } //===----------------------------------------------------------------------===// diff --git a/Parse/ParseObjc.cpp b/Parse/ParseObjc.cpp index 0c0c165c2a..b2323a2e10 100644 --- a/Parse/ParseObjc.cpp +++ b/Parse/ParseObjc.cpp @@ -271,10 +271,11 @@ void Parser::ParseObjCInterfaceDeclList(DeclTy *interfaceDecl, ParseDeclarationOrFunctionDefinition(); } } - if (allMethods.size()) - /// Insert collected methods declarations into the @interface object. - Actions.ActOnAddMethodsToObjcDecl(CurScope, interfaceDecl, &allMethods[0], - allMethods.size(), AtEndLoc); + /// Insert collected methods declarations into the @interface object. + /// This action is executed even if we don't have any methods (so the @end + /// can be recorded properly). + Actions.ActOnAddMethodsToObjcDecl(CurScope, interfaceDecl, &allMethods[0], + allMethods.size(), AtEndLoc); } /// Parse property attribute declarations. diff --git a/Sema/SemaDecl.cpp b/Sema/SemaDecl.cpp index be34dfb004..8d3887afd5 100644 --- a/Sema/SemaDecl.cpp +++ b/Sema/SemaDecl.cpp @@ -1861,7 +1861,7 @@ void Sema::ActOnAddMethodsToObjcDecl(Scope* S, DeclTy *classDecl, // should be true. if (!ClassDecl) return; - + llvm::SmallVector insMethods; llvm::SmallVector clsMethods; diff --git a/clang.xcodeproj/project.pbxproj b/clang.xcodeproj/project.pbxproj index fe4cf8d85b..de41b4628d 100644 --- a/clang.xcodeproj/project.pbxproj +++ b/clang.xcodeproj/project.pbxproj @@ -756,7 +756,6 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "clang" */; - compatibilityVersion = "Xcode 2.4"; hasScannedForEncodings = 1; mainGroup = 08FB7794FE84155DC02AAC07 /* clang */; projectDirPath = "";