[cfe-commits] r155949 - /cfe/trunk/lib/Sema/SemaExprObjC.cpp

Patrick Beard pcbeard at mac.com
Tue May 1 14:47:19 PDT 2012


Author: pcbeard
Date: Tue May  1 16:47:19 2012
New Revision: 155949

URL: http://llvm.org/viewvc/llvm-project?rev=155949&view=rev
Log:
Clean up changes suggested by Douglas Gregor:

BuildObjCNumericLiteral() and BuildObjCBoxedExpr() now both using
PerformCopyInitialization() rather than PerformImplicitConversion(),
which suppresses errors.

In BuildObjCBoxedExpr(): no longer calling .getCanonicalType(),
ValueType->getAs() will remove the minimal amount of sugar.
Using ValueType->isBuiltinType() instead of isa<BuiltinType>(ValueType).


Modified:
    cfe/trunk/lib/Sema/SemaExprObjC.cpp

Modified: cfe/trunk/lib/Sema/SemaExprObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprObjC.cpp?rev=155949&r1=155948&r2=155949&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExprObjC.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExprObjC.cpp Tue May  1 16:47:19 2012
@@ -237,9 +237,6 @@
 /// BuildObjCNumericLiteral - builds an ObjCBoxedExpr AST node for the
 /// numeric literal expression. Type of the expression will be "NSNumber *".
 ExprResult Sema::BuildObjCNumericLiteral(SourceLocation AtLoc, Expr *Number) {
-  // compute the effective range of the literal, including the leading '@'.
-  SourceRange SR(AtLoc, Number->getSourceRange().getEnd());
-    
   // Determine the type of the literal.
   QualType NumberType = Number->getType();
   if (CharacterLiteral *Char = dyn_cast<CharacterLiteral>(Number)) {
@@ -266,21 +263,27 @@
   
   // Look for the appropriate method within NSNumber.
   // Construct the literal.
+  SourceRange NR(Number->getSourceRange());
   ObjCMethodDecl *Method = getNSNumberFactoryMethod(*this, AtLoc, NumberType,
-                                                    true, Number->getSourceRange());
+                                                    true, NR);
   if (!Method)
     return ExprError();
 
   // Convert the number to the type that the parameter expects.
-  QualType ArgType = Method->param_begin()[0]->getType();
-  ExprResult ConvertedNumber = PerformImplicitConversion(Number, ArgType,
-                                                         AA_Sending);
+  ParmVarDecl *ParamDecl = Method->param_begin()[0];
+  InitializedEntity Entity = InitializedEntity::InitializeParameter(Context,
+                                                                    ParamDecl);
+  ExprResult ConvertedNumber = PerformCopyInitialization(Entity,
+                                                         SourceLocation(),
+                                                         Owned(Number));
   if (ConvertedNumber.isInvalid())
     return ExprError();
   Number = ConvertedNumber.get();
   
+  // Use the effective source range of the literal, including the leading '@'.
   return MaybeBindToTemporary(
-           new (Context) ObjCBoxedExpr(Number, NSNumberPointer, Method, SR));
+           new (Context) ObjCBoxedExpr(Number, NSNumberPointer, Method,
+                                       SourceRange(AtLoc, NR.getEnd())));
 }
 
 ExprResult Sema::ActOnObjCBoolLiteral(SourceLocation AtLoc, 
@@ -408,7 +411,7 @@
     return ExprError();
   }
   ValueExpr = RValue.get();
-  QualType ValueType(ValueExpr->getType().getCanonicalType());
+  QualType ValueType(ValueExpr->getType());
   if (const PointerType *PT = ValueType->getAs<PointerType>()) {
     QualType PointeeType = PT->getPointeeType();
     if (Context.hasSameUnqualifiedType(PointeeType, Context.CharTy)) {
@@ -475,7 +478,7 @@
       BoxingMethod = StringWithUTF8StringMethod;
       BoxedType = NSStringPointer;
     }
-  } else if (isa<BuiltinType>(ValueType)) {
+  } else if (ValueType->isBuiltinType()) {
     // The other types we support are numeric, char and BOOL/bool. We could also
     // provide limited support for structure types, such as NSRange, NSRect, and
     // NSSize. See NSValue (NSValueGeometryExtensions) in <Foundation/NSGeometry.h>
@@ -519,9 +522,12 @@
   }
   
   // Convert the expression to the type that the parameter requires.
-  QualType ArgType = BoxingMethod->param_begin()[0]->getType();
-  ExprResult ConvertedValueExpr = PerformImplicitConversion(ValueExpr, ArgType,
-                                                            AA_Sending);
+  ParmVarDecl *ParamDecl = BoxingMethod->param_begin()[0];
+  InitializedEntity Entity = InitializedEntity::InitializeParameter(Context,
+                                                                    ParamDecl);
+  ExprResult ConvertedValueExpr = PerformCopyInitialization(Entity,
+                                                            SourceLocation(),
+                                                            Owned(ValueExpr));
   if (ConvertedValueExpr.isInvalid())
     return ExprError();
   ValueExpr = ConvertedValueExpr.get();





More information about the cfe-commits mailing list