[cfe-commits] r153535 - in /cfe/trunk: lib/Rewrite/RewriteModernObjC.cpp test/Rewriter/objc-bool-literal-check-modern.mm test/Rewriter/objc-bool-literal-modern.mm

Fariborz Jahanian fjahanian at apple.com
Tue Mar 27 13:17:30 PDT 2012


Author: fjahanian
Date: Tue Mar 27 15:17:30 2012
New Revision: 153535

URL: http://llvm.org/viewvc/llvm-project?rev=153535&view=rev
Log:
modern objective-c translator: writing objc boolean literals.
// rdar://11124775

Added:
    cfe/trunk/test/Rewriter/objc-bool-literal-check-modern.mm
    cfe/trunk/test/Rewriter/objc-bool-literal-modern.mm
Modified:
    cfe/trunk/lib/Rewrite/RewriteModernObjC.cpp

Modified: cfe/trunk/lib/Rewrite/RewriteModernObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Rewrite/RewriteModernObjC.cpp?rev=153535&r1=153534&r2=153535&view=diff
==============================================================================
--- cfe/trunk/lib/Rewrite/RewriteModernObjC.cpp (original)
+++ cfe/trunk/lib/Rewrite/RewriteModernObjC.cpp Tue Mar 27 15:17:30 2012
@@ -317,6 +317,7 @@
     Stmt *RewriteAtSelector(ObjCSelectorExpr *Exp);
     Stmt *RewriteMessageExpr(ObjCMessageExpr *Exp);
     Stmt *RewriteObjCStringLiteral(ObjCStringLiteral *Exp);
+    Stmt *RewriteObjCBoolLiteralExpr(ObjCBoolLiteralExpr *Exp);
     Stmt *RewriteObjCProtocolExpr(ObjCProtocolExpr *Exp);
     Stmt *RewriteObjCTryStmt(ObjCAtTryStmt *S);
     Stmt *RewriteObjCSynchronizedStmt(ObjCAtSynchronizedStmt *S);
@@ -2450,6 +2451,21 @@
   return cast;
 }
 
+Stmt *RewriteModernObjC::RewriteObjCBoolLiteralExpr(ObjCBoolLiteralExpr *Exp) {
+  unsigned IntSize =
+    static_cast<unsigned>(Context->getTypeSize(Context->IntTy));
+  
+  Expr *FlagExp = IntegerLiteral::Create(*Context, 
+                                         llvm::APInt(IntSize, Exp->getValue()), 
+                                         Context->IntTy, Exp->getLocation());
+  CastExpr *cast = NoTypeInfoCStyleCastExpr(Context, Context->ObjCBuiltinBoolTy,
+                                            CK_BitCast, FlagExp);
+  ParenExpr *PE = new (Context) ParenExpr(Exp->getLocation(), Exp->getExprLoc(), 
+                                          cast);
+  ReplaceStmt(Exp, PE);
+  return PE;
+}
+
 // struct objc_super { struct objc_object *receiver; struct objc_class *super; };
 QualType RewriteModernObjC::getSuperStructType() {
   if (!SuperStructDecl) {
@@ -4741,6 +4757,9 @@
 
   if (ObjCStringLiteral *AtString = dyn_cast<ObjCStringLiteral>(S))
     return RewriteObjCStringLiteral(AtString);
+  
+  if (ObjCBoolLiteralExpr *BoolLitExpr = dyn_cast<ObjCBoolLiteralExpr>(S))
+    return RewriteObjCBoolLiteralExpr(BoolLitExpr);
 
   if (ObjCMessageExpr *MessExpr = dyn_cast<ObjCMessageExpr>(S)) {
 #if 0

Added: cfe/trunk/test/Rewriter/objc-bool-literal-check-modern.mm
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Rewriter/objc-bool-literal-check-modern.mm?rev=153535&view=auto
==============================================================================
--- cfe/trunk/test/Rewriter/objc-bool-literal-check-modern.mm (added)
+++ cfe/trunk/test/Rewriter/objc-bool-literal-check-modern.mm Tue Mar 27 15:17:30 2012
@@ -0,0 +1,29 @@
+// RUN: %clang_cc1 -E %s -o %t.mm
+// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %t.mm -o - | FileCheck %s 
+// rdar://11124775
+
+typedef signed char BOOL;
+
+BOOL yes() {
+  return __objc_yes;
+}
+
+BOOL no() {
+  return __objc_no;
+}
+
+BOOL which (int flag) {
+  return flag ? yes() : no();
+}
+
+int main() {
+  which (__objc_yes);
+  which (__objc_no);
+  return __objc_yes;
+}
+
+// CHECK: return ((signed char)1);
+// CHECK: return ((signed char)0);
+// CHECK: which (((signed char)1));
+// CHECK: which (((signed char)0));
+// CHECK: return ((signed char)1);

Added: cfe/trunk/test/Rewriter/objc-bool-literal-modern.mm
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Rewriter/objc-bool-literal-modern.mm?rev=153535&view=auto
==============================================================================
--- cfe/trunk/test/Rewriter/objc-bool-literal-modern.mm (added)
+++ cfe/trunk/test/Rewriter/objc-bool-literal-modern.mm Tue Mar 27 15:17:30 2012
@@ -0,0 +1,23 @@
+// RUN: %clang_cc1 -x objective-c++ -fms-extensions -rewrite-objc %s -o %t-rw.cpp 
+// RUN: %clang_cc1 -fsyntax-only -D"__declspec(X)=" %t-rw.cpp
+// rdar://11124775
+
+typedef signed char BOOL;
+
+BOOL yes() {
+  return __objc_yes;
+}
+
+BOOL no() {
+  return __objc_no;
+}
+
+BOOL which (int flag) {
+  return flag ? yes() : no();
+}
+
+int main() {
+  which (__objc_yes);
+  which (__objc_no);
+  return __objc_yes;
+}





More information about the cfe-commits mailing list