]> granicus.if.org Git - clang/commitdiff
Make the CXXDefaultArgExpr constructor protected and add a static Create function.
authorAnders Carlsson <andersca@mac.com>
Fri, 14 Aug 2009 18:30:22 +0000 (18:30 +0000)
committerAnders Carlsson <andersca@mac.com>
Fri, 14 Aug 2009 18:30:22 +0000 (18:30 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@79013 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/ExprCXX.h
lib/Sema/SemaDeclCXX.cpp
lib/Sema/SemaExpr.cpp
lib/Sema/SemaOverload.cpp
lib/Sema/TreeTransform.h

index c80169269bbaf6891298423511e397baa6f5a7c3..0f1354754b3c0b4ac9fe1b7490e60ca9c38bb8ce 100644 (file)
@@ -382,14 +382,20 @@ public:
 /// supply arguments for all of the parameters.
 class CXXDefaultArgExpr : public Expr {
   ParmVarDecl *Param;
+    
+protected:
+  CXXDefaultArgExpr(StmtClass SC, ParmVarDecl *param) 
+    : Expr(SC, param->hasUnparsedDefaultArg() ? 
+           param->getType().getNonReferenceType()
+           : param->getDefaultArg()->getType()),
+    Param(param) { }
+    
 public:
   // Param is the parameter whose default argument is used by this
   // expression.
-  explicit CXXDefaultArgExpr(ParmVarDecl *param) 
-    : Expr(CXXDefaultArgExprClass, 
-           param->hasUnparsedDefaultArg()? param->getType().getNonReferenceType()
-                                         : param->getDefaultArg()->getType()),
-      Param(param) { }
+  static CXXDefaultArgExpr *Create(ASTContext &C, ParmVarDecl *Param) {
+    return new (C) CXXDefaultArgExpr(CXXDefaultArgExprClass, Param);
+  }
 
   // Retrieve the parameter that the argument was created from.
   const ParmVarDecl *getParam() const { return Param; }
index c452c05f0f6c67b17cba981cd738f3a98a2235aa..a8afa4f1de2d54dee1e2b802e5ac2bbeb19a1c4b 100644 (file)
@@ -2394,7 +2394,7 @@ Expr *Sema::BuildCXXConstructExpr(ASTContext &C,
       for (unsigned I = 0, N = E->getNumTemporaries(); I != N; ++I)
         ExprTemporaries.push_back(E->getTemporary(I));
     }
-    Expr *Arg = new (C) CXXDefaultArgExpr(FDecl->getParamDecl(j));
+    Expr *Arg = CXXDefaultArgExpr::Create(C, FDecl->getParamDecl(j));
     Temp->setArg(j, Arg);
   }
   return Temp;
index e9b1dd486ac75b517c1508a5b4969ee191028351..ced300b4d7312fb94b21dc1bfb71fa0cacd9d388 100644 (file)
@@ -2657,7 +2657,7 @@ Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn,
       }
   
       // We already type-checked the argument, so we know it works.
-      Arg = new (Context) CXXDefaultArgExpr(FDecl->getParamDecl(i));
+      Arg = CXXDefaultArgExpr::Create(Context, FDecl->getParamDecl(i));
     }
     
     QualType ArgType = Arg->getType();
index d7d2610742c7ce379a537a5b9442e71e32fa53b3..faf4d82a8b147ae9ca7129bec81b1455443d2596 100644 (file)
@@ -4531,7 +4531,7 @@ Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Object,
       QualType ProtoArgType = Proto->getArgType(i);
       IsError |= PerformCopyInitialization(Arg, ProtoArgType, "passing");
     } else {
-      Arg = new (Context) CXXDefaultArgExpr(Method->getParamDecl(i));
+      Arg = CXXDefaultArgExpr::Create(Context, Method->getParamDecl(i));
     }
 
     TheCall->setArg(i + 1, Arg);
index 6b1c12bfa8e942f07fa051f54ac1f2d4bbfd2497..3be044ca91bd8be058be7312347443a06a2f8a43 100644 (file)
@@ -1021,7 +1021,7 @@ public:
   /// require any semantic analysis. Subclasses may override this routine to
   /// provide different behavior.
   OwningExprResult RebuildCXXDefaultArgExpr(ParmVarDecl *Param) {
-    return getSema().Owned(new (getSema().Context) CXXDefaultArgExpr(Param));
+    return getSema().Owned(CXXDefaultArgExpr::Create(getSema().Context, Param));
   }
 
   /// \brief Build a new C++ zero-initialization expression.