Skip to content

Commit 8c3e03d

Browse files
committed
Move CRTP BodyTransform next to the only class that uses it
1 parent 1d69bd5 commit 8c3e03d

File tree

2 files changed

+32
-25
lines changed

2 files changed

+32
-25
lines changed

clang/lib/ARCMigrate/TransUnbridgedCasts.cpp

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
#include "clang/AST/Attr.h"
4646
#include "clang/AST/DynamicRecursiveASTVisitor.h"
4747
#include "clang/AST/ParentMap.h"
48+
#include "clang/AST/RecursiveASTVisitor.h"
4849
#include "clang/Analysis/DomainSpecific/CocoaConventions.h"
4950
#include "clang/Basic/SourceManager.h"
5051
#include "clang/Lex/Lexer.h"
@@ -56,6 +57,33 @@ using namespace arcmt;
5657
using namespace trans;
5758

5859
namespace {
60+
// FIXME: UnbridgedCastRewriter should probably just inherit from
61+
// BodyTransform (and this class shouldn't exist in the first place),
62+
// but I have so far been unable to untangle whatever is actually going
63+
// on in TraverseBlockDecl() that makes that not work properly...
64+
template <typename BODY_TRANS>
65+
class UnbridgedCastRewriterWrapper
66+
: public RecursiveASTVisitor<UnbridgedCastRewriterWrapper<BODY_TRANS>> {
67+
MigrationPass &Pass;
68+
Decl *ParentD;
69+
70+
typedef RecursiveASTVisitor<UnbridgedCastRewriterWrapper<BODY_TRANS>> base;
71+
72+
public:
73+
UnbridgedCastRewriterWrapper(MigrationPass &pass)
74+
: Pass(pass), ParentD(nullptr) {}
75+
76+
bool TraverseStmt(Stmt *rootS) {
77+
if (rootS)
78+
BODY_TRANS(Pass).transformBody(rootS, ParentD);
79+
return true;
80+
}
81+
82+
bool TraverseObjCMethodDecl(ObjCMethodDecl *D) {
83+
SaveAndRestore<Decl *> SetParent(ParentD, D);
84+
return base::TraverseObjCMethodDecl(D);
85+
}
86+
};
5987

6088
class UnbridgedCastRewriter : public DynamicRecursiveASTVisitor {
6189
MigrationPass &Pass;
@@ -462,6 +490,6 @@ class UnbridgedCastRewriter : public DynamicRecursiveASTVisitor {
462490
} // end anonymous namespace
463491

464492
void trans::rewriteUnbridgedCasts(MigrationPass &pass) {
465-
BodyTransform_OLD<UnbridgedCastRewriter> trans(pass);
493+
UnbridgedCastRewriterWrapper<UnbridgedCastRewriter> trans(pass);
466494
trans.TraverseDecl(pass.Ctx.getTranslationUnitDecl());
467495
}

clang/lib/ARCMigrate/Transforms.h

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@
99
#ifndef LLVM_CLANG_LIB_ARCMIGRATE_TRANSFORMS_H
1010
#define LLVM_CLANG_LIB_ARCMIGRATE_TRANSFORMS_H
1111

12+
#include "clang/AST/DeclObjC.h"
1213
#include "clang/AST/DynamicRecursiveASTVisitor.h"
14+
#include "clang/AST/ExprObjC.h"
1315
#include "clang/AST/ParentMap.h"
14-
#include "clang/AST/RecursiveASTVisitor.h"
16+
#include "clang/AST/StmtObjC.h"
1517
#include "llvm/ADT/DenseSet.h"
1618
#include "llvm/Support/SaveAndRestore.h"
1719

@@ -182,29 +184,6 @@ bool isGlobalVar(Expr *E);
182184
/// Returns "nil" or "0" if 'nil' macro is not actually defined.
183185
StringRef getNilString(MigrationPass &Pass);
184186

185-
template <typename BODY_TRANS>
186-
class BodyTransform_OLD
187-
: public RecursiveASTVisitor<BodyTransform_OLD<BODY_TRANS>> {
188-
MigrationPass &Pass;
189-
Decl *ParentD;
190-
191-
typedef RecursiveASTVisitor<BodyTransform_OLD<BODY_TRANS>> base;
192-
193-
public:
194-
BodyTransform_OLD(MigrationPass &pass) : Pass(pass), ParentD(nullptr) {}
195-
196-
bool TraverseStmt(Stmt *rootS) {
197-
if (rootS)
198-
BODY_TRANS(Pass).transformBody(rootS, ParentD);
199-
return true;
200-
}
201-
202-
bool TraverseObjCMethodDecl(ObjCMethodDecl *D) {
203-
SaveAndRestore<Decl *> SetParent(ParentD, D);
204-
return base::TraverseObjCMethodDecl(D);
205-
}
206-
};
207-
208187
class BodyTransform : public DynamicRecursiveASTVisitor {
209188
protected:
210189
MigrationPass &Pass;

0 commit comments

Comments
 (0)