diff options
author | carlo <carlo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-02-25 21:31:01 +0000 |
---|---|---|
committer | carlo <carlo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-02-25 21:31:01 +0000 |
commit | bdf178435b88dae557b318983178357198d7781c (patch) | |
tree | 636bfb8c6f31b9aebb14de82b791b9bf6ddd9e69 /libstdc++-v3 | |
parent | 66b7b559390ed14b18a8b2df021717f45b1df6c2 (diff) | |
download | gcc-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/ChangeLog | 17 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/demangle.h | 13 |
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; |