]> granicus.if.org Git - clang/commitdiff
[objcmt] When using NSNumber numberWithInteger:/numberWithUnsignedInteger: be
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Tue, 15 May 2012 22:59:54 +0000 (22:59 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Tue, 15 May 2012 22:59:54 +0000 (22:59 +0000)
more liberal in rewriting when the parameter is an enum constant.

Part of rdar://11438360

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@156873 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Edit/RewriteObjCFoundationAPI.cpp

index 38584d65ef4c77ee918ab1ac38f318f78a7e6c74..5f7bef6f547003101e6ef49d051213f1e57334e2 100644 (file)
@@ -684,6 +684,14 @@ static void objectifyExpr(const Expr *E, Commit &commit) {
 // rewriteToNumericBoxedExpression.
 //===----------------------------------------------------------------------===//
 
+static bool isEnumConstant(const Expr *E) {
+  if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E->IgnoreParenImpCasts()))
+    if (const ValueDecl *VD = DRE->getDecl())
+      return isa<EnumConstantDecl>(VD);
+
+  return false;
+}
+
 static bool rewriteToNumericBoxedExpression(const ObjCMessageExpr *Msg,
                                             const NSAPI &NS, Commit &commit) {
   if (Msg->getNumArgs() != 1)
@@ -725,7 +733,7 @@ static bool rewriteToNumericBoxedExpression(const ObjCMessageExpr *Msg,
       if ((MK == NSAPI::NSNumberWithInteger ||
            MK == NSAPI::NSNumberWithUnsignedInteger) &&
           !isTruncated) {
-        if (OrigTy->getAs<EnumType>())
+        if (OrigTy->getAs<EnumType>() || isEnumConstant(OrigArg))
           break;
         if ((MK==NSAPI::NSNumberWithInteger) == OrigTy->isSignedIntegerType() &&
             OrigTySize >= Ctx.getTypeSize(Ctx.IntTy))