forked from OSchip/llvm-project
ObjectiveC migrator: In deciding NS_OPTION over
NS_ENUM, at least one power of 2 enumerator must be greater than two. llvm-svn: 188470
This commit is contained in:
parent
2851907cdb
commit
be7bc11f94
|
@ -493,6 +493,7 @@ static bool rewriteToNSMacroDecl(const EnumDecl *EnumDcl,
|
|||
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 &Ctx,
|
|||
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,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue