summaryrefslogtreecommitdiffstats
path: root/clang/lib/ARCMigrate/Transforms.h
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-11-06 18:58:03 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-11-06 18:58:03 +0000
commite43ae79038cacc883e0a1fd0aaf0b0a6034f1346 (patch)
treec6579d47ca004e669fd3285fe533d8ff5b10911e /clang/lib/ARCMigrate/Transforms.h
parentaaa999660bd94735a369cd6edf185718015ee71d (diff)
downloadbcm5719-llvm-e43ae79038cacc883e0a1fd0aaf0b0a6034f1346.tar.gz
bcm5719-llvm-e43ae79038cacc883e0a1fd0aaf0b0a6034f1346.zip
[arcmt] Collect all the places where GC attributes __strong/__weak occur.
llvm-svn: 143883
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