r189682 - ObjectiveC migrator: infer NS_ENUM even when user
Fariborz Jahanian
fjahanian at apple.com
Fri Aug 30 10:46:01 PDT 2013
Author: fjahanian
Date: Fri Aug 30 12:46:01 2013
New Revision: 189682
URL: http://llvm.org/viewvc/llvm-project?rev=189682&view=rev
Log:
ObjectiveC migrator: infer NS_ENUM even when user
specified NSUInteger as the followup typedef.
With this change, NS_OPTIONS is only inferred
based on looking up how enumerators are speficied
(if they her hexadecimal, power of 2, or have
bitwise constant expressions).
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=189682&r1=189681&r2=189682&view=diff
==============================================================================
--- cfe/trunk/lib/ARCMigrate/ObjCMT.cpp (original)
+++ cfe/trunk/lib/ARCMigrate/ObjCMT.cpp Fri Aug 30 12:46:01 2013
@@ -497,9 +497,16 @@ static bool rewriteToObjCInterfaceDecl(c
static bool rewriteToNSEnumDecl(const EnumDecl *EnumDcl,
const TypedefDecl *TypedefDcl,
const NSAPI &NS, edit::Commit &commit,
- bool IsNSIntegerType) {
- std::string ClassString =
- IsNSIntegerType ? "typedef NS_ENUM(NSInteger, " : "typedef NS_OPTIONS(NSUInteger, ";
+ bool IsNSIntegerType,
+ bool NSOptions) {
+ std::string ClassString;
+ if (NSOptions)
+ ClassString = "typedef NS_OPTIONS(NSUInteger, ";
+ else
+ ClassString =
+ IsNSIntegerType ? "typedef NS_ENUM(NSInteger, "
+ : "typedef NS_ENUM(NSUInteger, ";
+
ClassString += TypedefDcl->getIdentifier()->getName();
ClassString += ')';
SourceRange R(EnumDcl->getLocStart(), EnumDcl->getLocStart());
@@ -653,12 +660,9 @@ void ObjCMigrateASTConsumer::migrateNSEn
}
return;
}
- if (IsNSIntegerType && UseNSOptionsMacro(PP, Ctx, EnumDcl)) {
- // We may still use NS_OPTIONS based on what we find in the enumertor list.
- IsNSIntegerType = false;
- IsNSUIntegerType = true;
- }
+ // We may still use NS_OPTIONS based on what we find in the enumertor list.
+ bool NSOptions = UseNSOptionsMacro(PP, Ctx, EnumDcl);
// NS_ENUM must be available.
if (IsNSIntegerType && !Ctx.Idents.get("NS_ENUM").hasMacroDefinition())
return;
@@ -666,7 +670,7 @@ void ObjCMigrateASTConsumer::migrateNSEn
if (IsNSUIntegerType && !Ctx.Idents.get("NS_OPTIONS").hasMacroDefinition())
return;
edit::Commit commit(*Editor);
- rewriteToNSEnumDecl(EnumDcl, TypedefDcl, *NSAPIObj, commit, IsNSIntegerType);
+ rewriteToNSEnumDecl(EnumDcl, TypedefDcl, *NSAPIObj, commit, IsNSIntegerType, NSOptions);
Editor->commit(commit);
}
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=189682&r1=189681&r2=189682&view=diff
==============================================================================
--- cfe/trunk/test/ARCMT/objcmt-ns-macros.m (original)
+++ cfe/trunk/test/ARCMT/objcmt-ns-macros.m Fri Aug 30 12:46:01 2013
@@ -92,3 +92,21 @@ enum {
UIView1 = 0XBADBEEF
};
typedef NSInteger UIStyle;
+
+enum {
+ NSTIFFFileType,
+ NSBMPFileType,
+ NSGIFFileType,
+ NSJPEGFileType,
+ NSPNGFileType,
+ NSJPEG2000FileType
+};
+typedef NSUInteger NSBitmapImageFileType;
+
+enum {
+ NSWarningAlertStyle = 0,
+ NSInformationalAlertStyle = 1,
+ NSCriticalAlertStyle = 2
+};
+typedef NSUInteger NSAlertStyle;
+
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=189682&r1=189681&r2=189682&view=diff
==============================================================================
--- cfe/trunk/test/ARCMT/objcmt-ns-macros.m.result (original)
+++ cfe/trunk/test/ARCMT/objcmt-ns-macros.m.result Fri Aug 30 12:46:01 2013
@@ -15,7 +15,7 @@ typedef NS_ENUM(NSInteger, wibble) {
};
-typedef NS_OPTIONS(NSUInteger, UITableViewCellStyle) {
+typedef NS_ENUM(NSUInteger, UITableViewCellStyle) {
UIViewAutoresizingNone = 0,
UIViewAutoresizingFlexibleLeftMargin,
UIViewAutoresizingFlexibleWidth,
@@ -92,3 +92,21 @@ typedef NS_OPTIONS(NSUInteger, UIStyle)
UIView1 = 0XBADBEEF
};
+
+typedef NS_ENUM(NSUInteger, NSBitmapImageFileType) {
+ NSTIFFFileType,
+ NSBMPFileType,
+ NSGIFFileType,
+ NSJPEGFileType,
+ NSPNGFileType,
+ NSJPEG2000FileType
+};
+
+
+typedef NS_ENUM(NSUInteger, NSAlertStyle) {
+ NSWarningAlertStyle = 0,
+ NSInformationalAlertStyle = 1,
+ NSCriticalAlertStyle = 2
+};
+
+
More information about the cfe-commits
mailing list