/// really isn't safe to use that way.
explicit TemplateArgumentList(const TemplateArgumentList *Other);
+ /// Used to release the memory associated with a TemplateArgumentList
+ /// object. FIXME: This is currently not called anywhere, but the
+ /// memory will still be freed when using a BumpPtrAllocator.
+ void Destroy(ASTContext &C);
+
~TemplateArgumentList();
/// \brief Retrieve the template argument at a given index.
// If this does take ownership of the arguments, then we have to new them
// and copy over.
- TemplateArgument *NewArgs = new TemplateArgument[Builder.flatSize()];
+ TemplateArgument *NewArgs =
+ new (Context) TemplateArgument[Builder.flatSize()];
std::copy(Builder.getFlatArguments(),
Builder.getFlatArguments()+Builder.flatSize(), NewArgs);
FlatArguments.setPointer(NewArgs);
StructuredArguments.setPointer(NewArgs);
StructuredArguments.setInt(0);
} else {
- TemplateArgument *NewSArgs = new TemplateArgument[Builder.flatSize()];
+ TemplateArgument *NewSArgs =
+ new (Context) TemplateArgument[Builder.flatSize()];
std::copy(Builder.getFlatArguments(),
Builder.getFlatArguments()+Builder.flatSize(), NewSArgs);
StructuredArguments.setPointer(NewSArgs);
StructuredArguments(Other->StructuredArguments.getPointer(), false),
NumStructuredArguments(Other->NumStructuredArguments) { }
-TemplateArgumentList::~TemplateArgumentList() {
+void TemplateArgumentList::Destroy(ASTContext &C) {
if (FlatArguments.getInt())
- delete [] FlatArguments.getPointer();
+ C.Deallocate((void*)FlatArguments.getPointer());
if (StructuredArguments.getInt())
- delete [] StructuredArguments.getPointer();
+ C.Deallocate((void*)StructuredArguments.getPointer());
}
+TemplateArgumentList::~TemplateArgumentList() {}
+
//===----------------------------------------------------------------------===//
// ClassTemplateSpecializationDecl Implementation
//===----------------------------------------------------------------------===//