r188470 - ObjectiveC migrator: In deciding NS_OPTION over
Fariborz Jahanian
fjahanian at apple.com
Thu Aug 15 11:46:37 PDT 2013
Author: fjahanian
Date: Thu Aug 15 13:46:37 2013
New Revision: 188470
URL: http://llvm.org/viewvc/llvm-project?rev=188470&view=rev
Log:
ObjectiveC migrator: In deciding NS_OPTION over
NS_ENUM, at least one power of 2 enumerator
must be greater than two.
Modified:
cfe/trunk/lib/ARCMigrate/ObjCMT.cpp
cfe/trunk/test/ARCMT/objcmt-ns-macros.m
cfe/trunk/test/ARCMT/objcmt-ns-macros.m.result
Modified: cfe/trunk/lib/ARCMigrate/ObjCMT.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ARCMigrate/ObjCMT.cpp?rev=188470&r1=188469&r2=188470&view=diff
==============================================================================
--- cfe/trunk/lib/ARCMigrate/ObjCMT.cpp (original)
+++ cfe/trunk/lib/ARCMigrate/ObjCMT.cpp Thu Aug 15 13:46:37 2013
@@ -493,6 +493,7 @@ static bool rewriteToNSMacroDecl(const E
static bool UseNSOptionsMacro(ASTContext &Ctx,
const EnumDecl *EnumDcl) {
bool PowerOfTwo = true;
+ uint64_t MaxPowerOfTwoVal = 0;
for (EnumDecl::enumerator_iterator EI = EnumDcl->enumerator_begin(),
EE = EnumDcl->enumerator_end(); EI != EE; ++EI) {
EnumConstantDecl *Enumerator = (*EI);
@@ -507,10 +508,14 @@ static bool UseNSOptionsMacro(ASTContext
return true;
uint64_t EnumVal = Enumerator->getInitVal().getZExtValue();
- if (PowerOfTwo && EnumVal && !llvm::isPowerOf2_64(EnumVal))
- PowerOfTwo = false;
+ if (PowerOfTwo && EnumVal) {
+ if (!llvm::isPowerOf2_64(EnumVal))
+ PowerOfTwo = false;
+ else if (EnumVal > MaxPowerOfTwoVal)
+ MaxPowerOfTwoVal = EnumVal;
+ }
}
- return PowerOfTwo;
+ return PowerOfTwo ? ((MaxPowerOfTwoVal > 2) ? true : false) : false;
}
void ObjCMigrateASTConsumer::migrateProtocolConformance(ASTContext &Ctx,
Modified: cfe/trunk/test/ARCMT/objcmt-ns-macros.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/objcmt-ns-macros.m?rev=188470&r1=188469&r2=188470&view=diff
==============================================================================
--- cfe/trunk/test/ARCMT/objcmt-ns-macros.m (original)
+++ cfe/trunk/test/ARCMT/objcmt-ns-macros.m Thu Aug 15 13:46:37 2013
@@ -64,3 +64,9 @@ enum {
UNTwo
};
+// Should use NS_ENUM even though it is all power of 2.
+enum {
+ UIKOne = 0x1,
+ UIKTwo = 0x2,
+};
+typedef NSInteger UIK;
Modified: cfe/trunk/test/ARCMT/objcmt-ns-macros.m.result
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/objcmt-ns-macros.m.result?rev=188470&r1=188469&r2=188470&view=diff
==============================================================================
--- cfe/trunk/test/ARCMT/objcmt-ns-macros.m.result (original)
+++ cfe/trunk/test/ARCMT/objcmt-ns-macros.m.result Thu Aug 15 13:46:37 2013
@@ -64,3 +64,9 @@ enum {
UNTwo
};
+// Should use NS_ENUM even though it is all power of 2.
+typedef NS_ENUM(NSInteger, UIK) {
+ UIKOne = 0x1,
+ UIKTwo = 0x2,
+};
+
More information about the cfe-commits
mailing list