[cfe-commits] r79965 - /cfe/trunk/include/clang/AST/Decl.h

Anders Carlsson andersca at mac.com
Mon Aug 24 18:11:15 PDT 2009


Author: andersca
Date: Mon Aug 24 20:11:14 2009
New Revision: 79965

URL: http://llvm.org/viewvc/llvm-project?rev=79965&view=rev
Log:
Add Decl getter/setters for uninstantiated default arguments for function parameters.

Modified:
    cfe/trunk/include/clang/AST/Decl.h

Modified: cfe/trunk/include/clang/AST/Decl.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Decl.h?rev=79965&r1=79964&r2=79965&view=diff

==============================================================================
--- cfe/trunk/include/clang/AST/Decl.h (original)
+++ cfe/trunk/include/clang/AST/Decl.h Mon Aug 24 20:11:14 2009
@@ -285,11 +285,16 @@
   /// \brief Placeholder type used in Init to denote an unparsed C++ default
   /// argument.
   struct UnparsedDefaultArgument;
-  
+
+  /// \brief Placeholder type used in Init to denote an uninstantiated C++ 
+  /// default argument.
+  struct UninstantiatedDefaultArgument;
+
   /// \brief The initializer for this variable or, for a ParmVarDecl, the 
   /// C++ default argument.
-  mutable llvm::PointerUnion3<Stmt *, EvaluatedStmt *, UnparsedDefaultArgument*>
-    Init;
+  mutable llvm::PointerUnion4<Stmt *, EvaluatedStmt *, 
+                              UnparsedDefaultArgument *, 
+                              UninstantiatedDefaultArgument *> Init;
   
 private:
   // FIXME: This can be packed into the bitfields in Decl.
@@ -600,20 +605,32 @@
     
   const Expr *getDefaultArg() const { 
     assert(!hasUnparsedDefaultArg() && "Default argument is not yet parsed!");
+    assert(!hasUninstantiatedDefaultArg() && 
+           "Default argument is not yet instantiated!");
     return getInit();
   }
   Expr *getDefaultArg() { 
     assert(!hasUnparsedDefaultArg() && "Default argument is not yet parsed!");
+    assert(!hasUninstantiatedDefaultArg() && 
+           "Default argument is not yet instantiated!");
     return getInit();
   }
   void setDefaultArg(Expr *defarg) { 
     Init = reinterpret_cast<Stmt *>(defarg);
   }
 
+  void setUninstantiatedDefaultArg(Expr *arg) {
+    Init = reinterpret_cast<UninstantiatedDefaultArgument *>(arg);
+  }
+  Expr *getUninstantiatedDefaultArg() {
+    return (Expr *)Init.get<UninstantiatedDefaultArgument *>();
+  }
+  
   /// hasDefaultArg - Determines whether this parameter has a default argument,
   /// either parsed or not.
   bool hasDefaultArg() const {
-    return getInit() || hasUnparsedDefaultArg();
+    return getInit() || hasUnparsedDefaultArg() || 
+      hasUninstantiatedDefaultArg();
   }
   
   /// hasUnparsedDefaultArg - Determines whether this parameter has a
@@ -630,6 +647,10 @@
     return Init.is<UnparsedDefaultArgument*>();
   }
 
+  bool hasUninstantiatedDefaultArg() const {
+    return Init.is<UninstantiatedDefaultArgument*>();
+  }
+  
   /// setUnparsedDefaultArg - Specify that this parameter has an
   /// unparsed default argument. The argument will be replaced with a
   /// real default argument via setDefaultArg when the class





More information about the cfe-commits mailing list