]> granicus.if.org Git - clang/commitdiff
[arcmt] Refactor PropertiesRewriter to use MigrationContext.
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Sun, 6 Nov 2011 18:57:57 +0000 (18:57 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Sun, 6 Nov 2011 18:57:57 +0000 (18:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@143882 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ARCMigrate/TransProperties.cpp
lib/ARCMigrate/Transforms.cpp
lib/ARCMigrate/Transforms.h

index db34ee27a569a8d5467e17b6edc5923fe84d1a78..6f9166fb9839c65f28a27af9e3b6485d89232c58 100644 (file)
@@ -526,6 +526,8 @@ public:
 
 } // anonymous namespace
 
-void trans::rewriteProperties(MigrationPass &pass) {
-  ImplementationChecker(pass).TraverseDecl(pass.Ctx.getTranslationUnitDecl());
+void PropertyRewriteTraverser::traverseObjCImplementation(
+                                           ObjCImplementationContext &ImplCtx) {
+  PropertiesRewriter(ImplCtx.getMigrationContext().getPass())
+                                  .doTransform(ImplCtx.getImplementationDecl());
 }
index d0c9bc69c8552ad2bc7c5673935349aa654041db..5ea454a917d8d42831161cf96f79d0876dc28cc0 100644 (file)
@@ -302,6 +302,16 @@ class ASTTransform : public RecursiveASTVisitor<ASTTransform> {
 public:
   ASTTransform(MigrationContext &MigrateCtx) : MigrateCtx(MigrateCtx) { }
 
+  bool TraverseObjCImplementationDecl(ObjCImplementationDecl *D) {
+    ObjCImplementationContext ImplCtx(MigrateCtx, D);
+    for (MigrationContext::traverser_iterator
+           I = MigrateCtx.traversers_begin(),
+           E = MigrateCtx.traversers_end(); I != E; ++I)
+      (*I)->traverseObjCImplementation(ImplCtx);
+
+    return true;
+  }
+
   bool TraverseStmt(Stmt *rootS) {
     if (!rootS)
       return true;
@@ -358,13 +368,13 @@ static void traverseAST(MigrationPass &pass) {
   if (pass.isGCMigration()) {
     MigrateCtx.addTraverser(new GCCollectableCallsTraverser);
   }
+  MigrateCtx.addTraverser(new PropertyRewriteTraverser());
 
   MigrateCtx.traverse(pass.Ctx.getTranslationUnitDecl());
 }
 
 static void independentTransforms(MigrationPass &pass) {
   rewriteAutoreleasePool(pass);
-  rewriteProperties(pass);
   removeRetainReleaseDeallocFinalize(pass);
   rewriteUnusedInitDelegate(pass);
   removeZeroOutPropsInDeallocFinalize(pass);
index 515844656a0f4a45b4a19b79dacf685157752cf8..4ff35a5daf0d9d4dad1df6811c3b077f237656ed 100644 (file)
@@ -37,7 +37,6 @@ void rewriteUnbridgedCasts(MigrationPass &pass);
 void makeAssignARCSafe(MigrationPass &pass);
 void removeRetainReleaseDeallocFinalize(MigrationPass &pass);
 void removeZeroOutPropsInDeallocFinalize(MigrationPass &pass);
-void rewriteProperties(MigrationPass &pass);
 void rewriteBlockObjCVariable(MigrationPass &pass);
 void rewriteUnusedInitDelegate(MigrationPass &pass);
 void checkAPIUses(MigrationPass &pass);
@@ -58,10 +57,25 @@ public:
   Stmt *getTopStmt() { return TopStmt; }
 };
 
+class ObjCImplementationContext {
+  MigrationContext &MigrateCtx;
+  ObjCImplementationDecl *ImpD;
+
+public:
+  ObjCImplementationContext(MigrationContext &MigrateCtx,
+                            ObjCImplementationDecl *D)
+    : MigrateCtx(MigrateCtx), ImpD(D) {}
+
+  MigrationContext &getMigrationContext() { return MigrateCtx; }
+  ObjCImplementationDecl *getImplementationDecl() { return ImpD; }
+};
+
 class ASTTraverser {
 public:
   virtual ~ASTTraverser();
+  virtual void traverseTU(MigrationContext &MigrateCtx) { }
   virtual void traverseBody(BodyContext &BodyCtx) { }
+  virtual void traverseObjCImplementation(ObjCImplementationContext &ImplCtx) {}
 };
 
 class MigrationContext {
@@ -87,6 +101,11 @@ public:
   void traverse(TranslationUnitDecl *TU);
 };
 
+class PropertyRewriteTraverser : public ASTTraverser {
+public:
+  virtual void traverseObjCImplementation(ObjCImplementationContext &ImplCtx);
+};
+
 // GC transformations
 
 class GCCollectableCallsTraverser : public ASTTraverser {