From 89585e800122de7ee4ca74dfca1c86a11685528f Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Mon, 30 Apr 2012 19:46:53 +0000 Subject: [PATCH] minor refactoring of modern objc translator. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@155843 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Rewrite/RewriteModernObjC.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/Rewrite/RewriteModernObjC.cpp b/lib/Rewrite/RewriteModernObjC.cpp index d463cb021c..5cd6836cc3 100644 --- a/lib/Rewrite/RewriteModernObjC.cpp +++ b/lib/Rewrite/RewriteModernObjC.cpp @@ -3494,6 +3494,22 @@ bool RewriteModernObjC::BufferContainsPPDirectives(const char *startBuf, return false; } +static bool IsTagDefinedInsideClass(ASTContext *Context, + ObjCInterfaceDecl *IDecl, TagDecl *Tag) { + if (!IDecl) + return false; + SourceLocation TagLocation; + if (RecordDecl *RD = dyn_cast(Tag)) { + RD = RD->getDefinition(); + if (!RD) + return false; + TagLocation = RD->getLocation(); + return Context->getSourceManager().isBeforeInTranslationUnit( + IDecl->getLocation(), TagLocation); + } + return false; +} + /// RewriteObjCFieldDeclType - This routine rewrites a type into the buffer. /// It handles elaborated types, as well as enum types in the process. bool RewriteModernObjC::RewriteObjCFieldDeclType(QualType &Type, @@ -7248,11 +7264,7 @@ Stmt *RewriteModernObjC::RewriteObjCIvarRefExpr(ObjCIvarRefExpr *IV) { if (IvarT->isRecordType()) { RecordDecl *RD = IvarT->getAs()->getDecl(); - RD = RD->getDefinition(); - bool structIsInside = RD && - Context->getSourceManager().isBeforeInTranslationUnit( - iFaceDecl->getDecl()->getLocation(), RD->getLocation()); - if (structIsInside) { + if (IsTagDefinedInsideClass(Context, iFaceDecl->getDecl(), RD)) { // decltype(((Foo_IMPL*)0)->bar) * std::string RecName = iFaceDecl->getDecl()->getName(); RecName += "_IMPL"; -- 2.40.0