[cfe-commits] r103429 - in /cfe/trunk: include/clang/AST/DeclarationName.h lib/AST/ASTContext.cpp lib/AST/DeclarationName.cpp

Douglas Gregor dgregor at apple.com
Mon May 10 17:06:19 PDT 2010


Very nice, thanks!

On May 10, 2010, at 2:56 PM, Ted Kremenek wrote:

> Author: kremenek
> Date: Mon May 10 15:56:10 2010
> New Revision: 103429
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=103429&view=rev
> Log:
> Allocate most of DeclarationNamesTable using ASTContext's allcocator.  The only things that
> aren't allocated this way are the internal FoldingSets.
> 
> Modified:
>    cfe/trunk/include/clang/AST/DeclarationName.h
>    cfe/trunk/lib/AST/ASTContext.cpp
>    cfe/trunk/lib/AST/DeclarationName.cpp
> 
> Modified: cfe/trunk/include/clang/AST/DeclarationName.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclarationName.h?rev=103429&r1=103428&r2=103429&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/AST/DeclarationName.h (original)
> +++ cfe/trunk/include/clang/AST/DeclarationName.h Mon May 10 15:56:10 2010
> @@ -314,6 +314,7 @@
> /// retrieved using its member functions (e.g.,
> /// getCXXConstructorName).
> class DeclarationNameTable {
> +  ASTContext &Ctx;
>   void *CXXSpecialNamesImpl; // Actually a FoldingSet<CXXSpecialName> *
>   CXXOperatorIdName *CXXOperatorNames; // Operator names
>   void *CXXLiteralOperatorNames; // Actually a CXXOperatorIdName*
> @@ -325,10 +326,6 @@
>   DeclarationNameTable(ASTContext &C);
>   ~DeclarationNameTable();
> 
> -  /// Free all memory allocated associated with this DeclarationTable that
> -  //  is used allocated using the specified ASTContext object.
> -  void DoDestroy(ASTContext &C);
> -
>   /// getIdentifier - Create a declaration name that is a simple
>   /// identifier.
>   DeclarationName getIdentifier(const IdentifierInfo *ID) {
> 
> Modified: cfe/trunk/lib/AST/ASTContext.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=103429&r1=103428&r2=103429&view=diff
> ==============================================================================
> --- cfe/trunk/lib/AST/ASTContext.cpp (original)
> +++ cfe/trunk/lib/AST/ASTContext.cpp Mon May 10 15:56:10 2010
> @@ -110,9 +110,6 @@
>   if (GlobalNestedNameSpecifier)
>     GlobalNestedNameSpecifier->Destroy(*this);
> 
> -  // Deallocate the memory associated with the DeclarationNameTable.
> -  DeclarationNames.DoDestroy(*this);
> -
>   TUDecl->Destroy(*this);
> }
> 
> 
> Modified: cfe/trunk/lib/AST/DeclarationName.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclarationName.cpp?rev=103429&r1=103428&r2=103429&view=diff
> ==============================================================================
> --- cfe/trunk/lib/AST/DeclarationName.cpp (original)
> +++ cfe/trunk/lib/AST/DeclarationName.cpp Mon May 10 15:56:10 2010
> @@ -384,12 +384,12 @@
>   llvm::errs() << '\n';
> }
> 
> -DeclarationNameTable::DeclarationNameTable(ASTContext &C) {
> +DeclarationNameTable::DeclarationNameTable(ASTContext &C) : Ctx(C) {
>   CXXSpecialNamesImpl = new llvm::FoldingSet<CXXSpecialName>;
>   CXXLiteralOperatorNames = new llvm::FoldingSet<CXXLiteralOperatorIdName>;
> 
>   // Initialize the overloaded operator names.
> -  CXXOperatorNames = new (C) CXXOperatorIdName[NUM_OVERLOADED_OPERATORS];
> +  CXXOperatorNames = new (Ctx) CXXOperatorIdName[NUM_OVERLOADED_OPERATORS];
>   for (unsigned Op = 0; Op < NUM_OVERLOADED_OPERATORS; ++Op) {
>     CXXOperatorNames[Op].ExtraKindOrNumArgs
>       = Op + DeclarationNameExtra::CXXConversionFunction;
> @@ -400,36 +400,34 @@
> DeclarationNameTable::~DeclarationNameTable() {
>   llvm::FoldingSet<CXXSpecialName> *SpecialNames =
>     static_cast<llvm::FoldingSet<CXXSpecialName>*>(CXXSpecialNamesImpl);
> -  llvm::FoldingSetIterator<CXXSpecialName>
> -                           SI = SpecialNames->begin(), SE = SpecialNames->end();
> -
> -  while (SI != SE) {
> -    CXXSpecialName *n = &*SI++;
> -    delete n;
> -  }
> -
> -
>   llvm::FoldingSet<CXXLiteralOperatorIdName> *LiteralNames
>     = static_cast<llvm::FoldingSet<CXXLiteralOperatorIdName>*>
> -                                                      (CXXLiteralOperatorNames);
> -  llvm::FoldingSetIterator<CXXLiteralOperatorIdName>
> -                           LI = LiteralNames->begin(), LE = LiteralNames->end();
> +        (CXXLiteralOperatorNames);
> 
> -  while (LI != LE) {
> -    CXXLiteralOperatorIdName *n = &*LI++;
> -    delete n;
> +  if (Ctx.FreeMemory) {
> +    llvm::FoldingSetIterator<CXXSpecialName>
> +      SI = SpecialNames->begin(), SE = SpecialNames->end();
> +
> +    while (SI != SE) {
> +      CXXSpecialName *n = &*SI++;
> +      Ctx.Deallocate(n);
> +    }
> +
> +    llvm::FoldingSetIterator<CXXLiteralOperatorIdName>
> +      LI = LiteralNames->begin(), LE = LiteralNames->end();
> +
> +    while (LI != LE) {
> +      CXXLiteralOperatorIdName *n = &*LI++;
> +      Ctx.Deallocate(n);
> +    }
> +
> +    Ctx.Deallocate(CXXOperatorNames);
>   }
> 
>   delete SpecialNames;
>   delete LiteralNames;
> }
> 
> -void DeclarationNameTable::DoDestroy(ASTContext &C) {
> -  if (C.FreeMemory) {
> -    C.Deallocate(CXXOperatorNames);
> -  }
> -}
> -
> DeclarationName
> DeclarationNameTable::getCXXSpecialName(DeclarationName::NameKind Kind,
>                                         CanQualType Ty) {
> @@ -465,7 +463,7 @@
>   if (CXXSpecialName *Name = SpecialNames->FindNodeOrInsertPos(ID, InsertPos))
>     return DeclarationName(Name);
> 
> -  CXXSpecialName *SpecialName = new CXXSpecialName;
> +  CXXSpecialName *SpecialName = new (Ctx) CXXSpecialName;
>   SpecialName->ExtraKindOrNumArgs = EKind;
>   SpecialName->Type = Ty;
>   SpecialName->FETokenInfo = 0;
> @@ -493,7 +491,7 @@
>                                LiteralNames->FindNodeOrInsertPos(ID, InsertPos))
>     return DeclarationName (Name);
> 
> -  CXXLiteralOperatorIdName *LiteralName = new CXXLiteralOperatorIdName;
> +  CXXLiteralOperatorIdName *LiteralName = new (Ctx) CXXLiteralOperatorIdName;
>   LiteralName->ExtraKindOrNumArgs = DeclarationNameExtra::CXXLiteralOperator;
>   LiteralName->ID = II;
> 
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits





More information about the cfe-commits mailing list