summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2013-07-23 19:31:17 +0000
committerFariborz Jahanian <fjahanian@apple.com>2013-07-23 19:31:17 +0000
commit4f3a64fd6e9dff09da70c4185243905dbfe9910c (patch)
tree0833e69f1cdb1ae8201024b5475c7d890560757f /clang
parentb7243381c2b7a7214af5e1f8d557f2d9b85642bf (diff)
downloadbcm5719-llvm-4f3a64fd6e9dff09da70c4185243905dbfe9910c.tar.gz
bcm5719-llvm-4f3a64fd6e9dff09da70c4185243905dbfe9910c.zip
ObjC migrator: Define family of methods
which are candidate for migrating to 'instancetype'. wip. llvm-svn: 186981
Diffstat (limited to 'clang')
-rw-r--r--clang/include/clang/Basic/IdentifierTable.h16
-rw-r--r--clang/lib/Basic/IdentifierTable.cpp33
2 files changed, 49 insertions, 0 deletions
diff --git a/clang/include/clang/Basic/IdentifierTable.h b/clang/include/clang/Basic/IdentifierTable.h
index a195fc33d7d..86f9d9b61e1 100644
--- a/clang/include/clang/Basic/IdentifierTable.h
+++ b/clang/include/clang/Basic/IdentifierTable.h
@@ -578,6 +578,20 @@ enum { ObjCMethodFamilyBitWidth = 4 };
/// \brief An invalid value of ObjCMethodFamily.
enum { InvalidObjCMethodFamily = (1 << ObjCMethodFamilyBitWidth) - 1 };
+/// \brief A family of Objective-C methods.
+///
+/// These are family of methods whose result type is initially 'id', but
+/// but are candidate for the result type to be changed to 'instancetype'.
+enum ObjCInstanceTypeFamily {
+ OIT_None,
+ OIT_Array,
+ OIT_Dictionary,
+ OIT_MemManage,
+ OIT_NSString,
+ OIT_NSSet,
+ OIT_NSURL
+};
+
/// \brief Smart pointer class that efficiently represents Objective-C method
/// names.
///
@@ -623,6 +637,8 @@ class Selector {
}
static ObjCMethodFamily getMethodFamilyImpl(Selector sel);
+
+ static ObjCInstanceTypeFamily getInstTypeMethodFamilyImpl(Selector sel);
public:
friend class SelectorTable; // only the SelectorTable can create these
diff --git a/clang/lib/Basic/IdentifierTable.cpp b/clang/lib/Basic/IdentifierTable.cpp
index b8ba4ba4d51..faff4d88635 100644
--- a/clang/lib/Basic/IdentifierTable.cpp
+++ b/clang/lib/Basic/IdentifierTable.cpp
@@ -452,6 +452,39 @@ ObjCMethodFamily Selector::getMethodFamilyImpl(Selector sel) {
return OMF_None;
}
+ObjCInstanceTypeFamily Selector::getInstTypeMethodFamilyImpl(Selector sel) {
+ IdentifierInfo *first = sel.getIdentifierInfoForSlot(0);
+ if (!first) return OIT_None;
+
+ StringRef name = first->getName();
+
+ if (name.empty()) return OIT_None;
+ switch (name.front()) {
+ case 'a':
+ if (startsWithWord(name, "alloc")) return OIT_MemManage;
+ else
+ if (startsWithWord(name, "array")) return OIT_Array;
+ break;
+ case 'd':
+ if (startsWithWord(name, "dictionary")) return OIT_Dictionary;
+ break;
+ case 'i':
+ if (startsWithWord(name, "init")) return OIT_MemManage;
+ break;
+ case 's':
+ if (startsWithWord(name, "string")) return OIT_NSString;
+ else
+ if (startsWithWord(name, "set")) return OIT_NSSet;
+ break;
+ case 'U':
+ if (startsWithWord(name, "URL")) return OIT_NSURL;
+ break;
+ default:
+ break;
+ }
+ return OIT_None;
+}
+
namespace {
struct SelectorTableImpl {
llvm::FoldingSet<MultiKeywordSelector> Table;
OpenPOWER on IntegriCloud