summaryrefslogtreecommitdiffstats
path: root/clang/lib/ARCMigrate/Transforms.h
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/ARCMigrate/Transforms.h')
-rw-r--r--clang/lib/ARCMigrate/Transforms.h23
1 files changed, 20 insertions, 3 deletions
diff --git a/clang/lib/ARCMigrate/Transforms.h b/clang/lib/ARCMigrate/Transforms.h
index 4ff35a5daf0..540426b81a2 100644
--- a/clang/lib/ARCMigrate/Transforms.h
+++ b/clang/lib/ARCMigrate/Transforms.h
@@ -79,14 +79,26 @@ public:
};
class MigrationContext {
- MigrationPass &Pass;
std::vector<ASTTraverser *> Traversers;
public:
+ MigrationPass &Pass;
+
+ struct GCAttrOccurrence {
+ enum AttrKind { Weak, Strong } Kind;
+ SourceLocation Loc;
+ QualType ModifiedType;
+ Decl *Dcl;
+ /// \brief true if the attribute is owned, e.g. it is in a body and not just
+ /// in an interface.
+ bool FullyMigratable;
+ };
+ std::vector<GCAttrOccurrence> GCAttrs;
+
+ llvm::DenseSet<unsigned> AttrSet;
+
explicit MigrationContext(MigrationPass &pass) : Pass(pass) {}
~MigrationContext();
-
- MigrationPass &getPass() { return Pass; }
typedef std::vector<ASTTraverser *>::iterator traverser_iterator;
traverser_iterator traversers_begin() { return Traversers.begin(); }
@@ -108,6 +120,11 @@ public:
// GC transformations
+class GCAttrsTraverser : public ASTTraverser {
+public:
+ virtual void traverseTU(MigrationContext &MigrateCtx);
+};
+
class GCCollectableCallsTraverser : public ASTTraverser {
public:
virtual void traverseBody(BodyContext &BodyCtx);
OpenPOWER on IntegriCloud