summaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorcarlo <carlo@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-25 21:31:01 +0000
committercarlo <carlo@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-25 21:31:01 +0000
commitbdf178435b88dae557b318983178357198d7781c (patch)
tree636bfb8c6f31b9aebb14de82b791b9bf6ddd9e69 /libstdc++-v3
parent66b7b559390ed14b18a8b2df021717f45b1df6c2 (diff)
downloadgcc-bdf178435b88dae557b318983178357198d7781c.tar.gz
* bits/demangle.h
namespace __gnu_cxx::demangler (session<Allocator>::qualifier_list_Allocator): Add (session<Allocator>::M_qualifier_list_alloc): Add (session<Allocator>::decode_type_with_postfix): Use M_qualifier_list_alloc instead of calling operator new/delete. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@78457 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog17
-rw-r--r--libstdc++-v3/include/bits/demangle.h13
2 files changed, 24 insertions, 6 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 7751810a5c6..2c1683878d3 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,12 @@
+2004-02-25 Carlo Wood <carlo@alinoe.com>
+
+ * bits/demangle.h
+ namespace __gnu_cxx::demangler
+ (session<Allocator>::qualifier_list_Allocator): Add
+ (session<Allocator>::M_qualifier_list_alloc): Add
+ (session<Allocator>::decode_type_with_postfix):
+ Use M_qualifier_list_alloc instead of calling operator new/delete.
+
2004-02-24 Paolo Carlini <pcarlini@suse.de>
PR libstdc++/14252
@@ -163,7 +172,7 @@
* docs/html/ext/mt_allocator.html: Change due to that deallocated
blocks now are added to the front of freelists. The reason to this
approach is also explained.
-
+
2004-02-17 Paolo Carlini <pcarlini@suse.de>
* include/bits/locale_facets.tcc (num_get<>::_M_extract_float,
@@ -776,11 +785,11 @@
2004-01-29 Stephen M. Webb <stephen.webb@bregmasoft.com>
* config/local/generic/c_locale.h: Change ::malloc() to new char[].
- * config/local/gnu/c_locale.h: Change ::malloc() to new char[].
- * include/bits/stl_tempbuf.h: Convert _Temporary_buffer to use
+ * config/local/gnu/c_locale.h: Change ::malloc() to new char[].
+ * include/bits/stl_tempbuf.h: Convert _Temporary_buffer to use
std::get_temporary_buffer() instead of duplicating its code.
Update to C++STYLE conventions.
- * include/std/std_memory.h (get_temporary_buffer): Use ::operator
+ * include/std/std_memory.h (get_temporary_buffer): Use ::operator
new() instead of std::malloc().
(return_temporary_buffer): Use ::operator delete() instead of
std::free().
diff --git a/libstdc++-v3/include/bits/demangle.h b/libstdc++-v3/include/bits/demangle.h
index 021276ae21a..68cdabea6bd 100644
--- a/libstdc++-v3/include/bits/demangle.h
+++ b/libstdc++-v3/include/bits/demangle.h
@@ -378,6 +378,9 @@ namespace __gnu_cxx
int M_template_arg_pos_offset;
std::vector<substitution_st, subst_Allocator> M_substitutions_pos;
implementation_details const& M_implementation_details;
+ typedef typename Allocator::template
+ rebind<qualifier_list<Allocator> >::other qualifier_list_Allocator;
+ qualifier_list_Allocator M_qualifier_list_alloc;
#if _GLIBCXX_DEMANGLER_CWDEBUG
bool M_inside_add_substitution;
#endif
@@ -1849,7 +1852,10 @@ namespace __gnu_cxx
++M_inside_type;
bool recursive_template_param_or_substitution_call;
if (!(recursive_template_param_or_substitution_call = qualifiers))
- qualifiers = new qualifier_list<Allocator>(*this);
+ {
+ qualifier_list<Allocator>* raw_qualifiers = M_qualifier_list_alloc.allocate(1);
+ qualifiers = new (raw_qualifiers) qualifier_list<Allocator>(*this);
+ }
// First eat all qualifiers.
bool failure = false;
for(;;) // So we can use 'continue' to eat the next qualifier.
@@ -2181,7 +2187,10 @@ namespace __gnu_cxx
decode_type_exit:
--M_inside_type;
if (!recursive_template_param_or_substitution_call)
- delete qualifiers;
+ {
+ qualifiers->~qualifier_list<Allocator>();
+ M_qualifier_list_alloc.deallocate(qualifiers, 1);
+ }
if (failure)
_GLIBCXX_DEMANGLER_FAILURE;
_GLIBCXX_DEMANGLER_RETURN2;