diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2012-04-03 17:35:38 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2012-04-03 17:35:38 +0000 |
commit | b3f904f79bbe55f3e088d7174d64d20d186914a1 (patch) | |
tree | bf4d85f32fffb5cc41a19ebbd90ade4df17aa15e /lib/Rewrite/RewriteModernObjC.cpp | |
parent | 14e645557ae91c6770d62beb00a1c522e0bfd5d6 (diff) |
modern objective-c translator: rewriter linkage spec.
// rdar://11169733
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153960 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Rewrite/RewriteModernObjC.cpp')
-rw-r--r-- | lib/Rewrite/RewriteModernObjC.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/Rewrite/RewriteModernObjC.cpp b/lib/Rewrite/RewriteModernObjC.cpp index 91e89d1759..45369a95de 100644 --- a/lib/Rewrite/RewriteModernObjC.cpp +++ b/lib/Rewrite/RewriteModernObjC.cpp @@ -329,6 +329,7 @@ namespace { Stmt *RewriteBreakStmt(BreakStmt *S); Stmt *RewriteContinueStmt(ContinueStmt *S); void RewriteCastExpr(CStyleCastExpr *CE); + void RewriteLinkageSpec(LinkageSpecDecl *LSD); // Block rewriting. void RewriteBlocksInFunctionProtoType(QualType funcType, NamedDecl *D); @@ -672,6 +673,7 @@ void RewriteModernObjC::HandleTopLevelSingleDecl(Decl *D) { if (PD->isThisDeclarationADefinition()) RewriteProtocolDecl(PD); } else if (LinkageSpecDecl *LSD = dyn_cast<LinkageSpecDecl>(D)) { + RewriteLinkageSpec(LSD); // Recurse into linkage specifications for (DeclContext::decl_iterator DI = LSD->decls_begin(), DIEnd = LSD->decls_end(); @@ -693,6 +695,12 @@ void RewriteModernObjC::HandleTopLevelSingleDecl(Decl *D) { RewriteForwardClassDecl(DG); continue; } + else { + // Keep track of all interface declarations seen. + ObjCInterfacesSeen.push_back(IFace); + ++DI; + continue; + } } if (ObjCProtocolDecl *Proto = dyn_cast<ObjCProtocolDecl>((*DI))) { @@ -1058,6 +1066,22 @@ RewriteModernObjC::RewriteForwardProtocolDecl(const llvm::SmallVector<Decl*, 8> ReplaceText(LocStart, 0, "// "); } +void +RewriteModernObjC::RewriteLinkageSpec(LinkageSpecDecl *LSD) { + SourceLocation LocStart = LSD->getExternLoc(); + if (LocStart.isInvalid()) + llvm_unreachable("Invalid extern SourceLocation"); + + ReplaceText(LocStart, 0, "// "); + if (!LSD->hasBraces()) + return; + // FIXME. We don't rewrite well if '{' is not on same line as 'extern'. + SourceLocation LocRBrace = LSD->getRBraceLoc(); + if (LocRBrace.isInvalid()) + llvm_unreachable("Invalid rbrace SourceLocation"); + ReplaceText(LocRBrace, 0, "// "); +} + void RewriteModernObjC::RewriteTypeIntoString(QualType T, std::string &ResultStr, const FunctionType *&FPRetType) { if (T->isObjCQualifiedIdType()) |