]> granicus.if.org Git - clang/commitdiff
Store the SourceLocation of right parentheses in member initializers. Patch by Anders...
authorAnders Carlsson <andersca@mac.com>
Sat, 29 Aug 2009 01:31:33 +0000 (01:31 +0000)
committerAnders Carlsson <andersca@mac.com>
Sat, 29 Aug 2009 01:31:33 +0000 (01:31 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80416 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/DeclCXX.h
lib/AST/DeclCXX.cpp
lib/Sema/SemaDeclCXX.cpp

index c89ba8597a27cd624a4d8dde6c796ca8bb82047e..0c7fc6ceb2df04ed3fb480ff714f40f312a863fb 100644 (file)
@@ -841,18 +841,21 @@ class CXXBaseOrMemberInitializer {
   /// IdLoc - Location of the id in ctor-initializer list.
   SourceLocation IdLoc;
 
+  /// RParenLoc - Location of the right paren of the ctor-initializer.
+  SourceLocation RParenLoc;
+
 public:
   /// CXXBaseOrMemberInitializer - Creates a new base-class initializer.
   explicit 
   CXXBaseOrMemberInitializer(QualType BaseType, Expr **Args, unsigned NumArgs,
                              CXXConstructorDecl *C,
-                             SourceLocation L);
+                             SourceLocation L, SourceLocation R);
 
   /// CXXBaseOrMemberInitializer - Creates a new member initializer.
   explicit 
   CXXBaseOrMemberInitializer(FieldDecl *Member, Expr **Args, unsigned NumArgs,
                              CXXConstructorDecl *C,
-                             SourceLocation L);
+                             SourceLocation L, SourceLocation R);
 
   /// ~CXXBaseOrMemberInitializer - Destroy the base or member initializer.
   ~CXXBaseOrMemberInitializer();
@@ -923,6 +926,7 @@ public:
   const CXXConstructorDecl *getConstructor() const { return CtorToCall; }
   
   SourceLocation getSourceLocation() const { return IdLoc; }
+  SourceLocation getRParenLoc() const { return RParenLoc; }
   
   /// arg_begin() - Retrieve an iterator to the first initializer argument.
   arg_iterator       arg_begin()       { return Args; }
index d41e0965bcedcf45f0d9703f89f04563e217e8e4..3717126ec8ef65fd448434dca24c1279c0e0ff5a 100644 (file)
@@ -400,8 +400,8 @@ QualType CXXMethodDecl::getThisType(ASTContext &C) const {
 CXXBaseOrMemberInitializer::
 CXXBaseOrMemberInitializer(QualType BaseType, Expr **Args, unsigned NumArgs,
                            CXXConstructorDecl *C,
-                           SourceLocation L) 
-  : Args(0), NumArgs(0), IdLoc(L) {
+                           SourceLocation L, SourceLocation R
+  : Args(0), NumArgs(0), IdLoc(L), RParenLoc(R) {
   BaseOrMember = reinterpret_cast<uintptr_t>(BaseType.getTypePtr());
   assert((BaseOrMember & 0x01) == 0 && "Invalid base class type pointer");
   BaseOrMember |= 0x01;
@@ -419,8 +419,8 @@ CXXBaseOrMemberInitializer(QualType BaseType, Expr **Args, unsigned NumArgs,
 CXXBaseOrMemberInitializer::
 CXXBaseOrMemberInitializer(FieldDecl *Member, Expr **Args, unsigned NumArgs,
                            CXXConstructorDecl *C,
-                           SourceLocation L)
-  : Args(0), NumArgs(0), IdLoc(L) {
+                           SourceLocation L, SourceLocation R)
+  : Args(0), NumArgs(0), IdLoc(L), RParenLoc(R) {
   BaseOrMember = reinterpret_cast<uintptr_t>(Member);
   assert((BaseOrMember & 0x01) == 0 && "Invalid member pointer");  
 
@@ -622,6 +622,7 @@ CXXConstructorDecl::setBaseOrMemberInitializers(
       CXXBaseOrMemberInitializer *Member = 
         new (C) CXXBaseOrMemberInitializer(VBase->getType(), 0, 0,
                                            VBaseDecl->getDefaultConstructor(C),
+                                           SourceLocation(),
                                            SourceLocation());
       AllToInit.push_back(Member);
     }
@@ -648,6 +649,7 @@ CXXConstructorDecl::setBaseOrMemberInitializers(
       CXXBaseOrMemberInitializer *Member = 
       new (C) CXXBaseOrMemberInitializer(Base->getType(), 0, 0,
                                          BaseDecl->getDefaultConstructor(C),
+                                         SourceLocation(),
                                          SourceLocation());
       AllToInit.push_back(Member);
     }
@@ -690,6 +692,7 @@ CXXConstructorDecl::setBaseOrMemberInitializers(
       CXXBaseOrMemberInitializer *Member = 
         new (C) CXXBaseOrMemberInitializer((*Field), 0, 0,
                                            Ctor,
+                                           SourceLocation(),
                                            SourceLocation());
       AllToInit.push_back(Member);
     } 
index 377a9deb41051d314a0ec698beff14e680bb43a5..89ea7cce27b3d7e1481e4a1ec18189abd9ec1944 100644 (file)
@@ -797,7 +797,7 @@ Sema::BuildMemberInitializer(FieldDecl *Member, Expr **Args,
   }
   // FIXME: Perform direct initialization of the member.
   return new (Context) CXXBaseOrMemberInitializer(Member, (Expr **)Args, 
-                                                  NumArgs, C, IdLoc);
+                                                  NumArgs, C, IdLoc, RParenLoc);
 }
 
 Sema::MemInitResult
@@ -880,7 +880,7 @@ Sema::BuildBaseInitializer(QualType BaseType, Expr **Args,
   }
 
   return new (Context) CXXBaseOrMemberInitializer(BaseType, (Expr **)Args, 
-                                                  NumArgs, C, IdLoc);
+                                                  NumArgs, C, IdLoc, RParenLoc);
 }
 
 void