From: Tom Tromey <tom@tromey.com>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tom@tromey.com>
Subject: [RFA v2 08/17] Remove some cleanups from gnu-v3-abi.c
Date: Tue, 11 Apr 2017 15:02:00 -0000 [thread overview]
Message-ID: <20170411150112.23207-9-tom@tromey.com> (raw)
In-Reply-To: <20170411150112.23207-1-tom@tromey.com>
This removes some cleanups from gnu-v3-abi.c, by using std::vector
rather than VEC.
gdb/ChangeLog
2017-04-11 Tom Tromey <tom@tromey.com>
* gnu-v3-abi.c (value_and_voffset_p): Remove typedef.
(compare_value_and_voffset): Change type. Update.
(compute_vtable_size): Change type of "offset_vec".
(gnuv3_print_vtable): Use std::vector. Remove cleanups.
(gnuv3_get_typeid): Remove extraneous declaration.
---
gdb/ChangeLog | 8 ++++++++
gdb/gnu-v3-abi.c | 54 ++++++++++++++++++------------------------------------
2 files changed, 26 insertions(+), 36 deletions(-)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 6f16318..d47f796 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,13 @@
2017-04-11 Tom Tromey <tom@tromey.com>
+ * gnu-v3-abi.c (value_and_voffset_p): Remove typedef.
+ (compare_value_and_voffset): Change type. Update.
+ (compute_vtable_size): Change type of "offset_vec".
+ (gnuv3_print_vtable): Use std::vector. Remove cleanups.
+ (gnuv3_get_typeid): Remove extraneous declaration.
+
+2017-04-11 Tom Tromey <tom@tromey.com>
+
* charset.h (wchar_iterator): Fix comment.
2017-04-11 Tom Tromey <tom@tromey.com>
diff --git a/gdb/gnu-v3-abi.c b/gdb/gnu-v3-abi.c
index 6c7f35b..0090990 100644
--- a/gdb/gnu-v3-abi.c
+++ b/gdb/gnu-v3-abi.c
@@ -27,6 +27,7 @@
#include "valprint.h"
#include "c-lang.h"
#include "typeprint.h"
+#include <algorithm>
static struct cp_abi_ops gnu_v3_abi_ops;
@@ -767,9 +768,6 @@ struct value_and_voffset
int max_voffset;
};
-typedef struct value_and_voffset *value_and_voffset_p;
-DEF_VEC_P (value_and_voffset_p);
-
/* Hash function for value_and_voffset. */
static hashval_t
@@ -792,25 +790,18 @@ eq_value_and_voffset (const void *a, const void *b)
== value_address (ovb->value) + value_embedded_offset (ovb->value));
}
-/* qsort comparison function for value_and_voffset. */
+/* Comparison function for value_and_voffset. */
-static int
-compare_value_and_voffset (const void *a, const void *b)
+static bool
+compare_value_and_voffset (const struct value_and_voffset *va,
+ const struct value_and_voffset *vb)
{
- const struct value_and_voffset * const *ova
- = (const struct value_and_voffset * const *) a;
- CORE_ADDR addra = (value_address ((*ova)->value)
- + value_embedded_offset ((*ova)->value));
- const struct value_and_voffset * const *ovb
- = (const struct value_and_voffset * const *) b;
- CORE_ADDR addrb = (value_address ((*ovb)->value)
- + value_embedded_offset ((*ovb)->value));
-
- if (addra < addrb)
- return -1;
- if (addra > addrb)
- return 1;
- return 0;
+ CORE_ADDR addra = (value_address (va->value)
+ + value_embedded_offset (va->value));
+ CORE_ADDR addrb = (value_address (vb->value)
+ + value_embedded_offset (vb->value));
+
+ return addra < addrb;
}
/* A helper function used when printing vtables. This determines the
@@ -821,7 +812,7 @@ compare_value_and_voffset (const void *a, const void *b)
static void
compute_vtable_size (htab_t offset_hash,
- VEC (value_and_voffset_p) **offset_vec,
+ std::vector<value_and_voffset *> *offset_vec,
struct value *value)
{
int i;
@@ -847,7 +838,7 @@ compute_vtable_size (htab_t offset_hash,
current_vo->value = value;
current_vo->max_voffset = -1;
*slot = current_vo;
- VEC_safe_push (value_and_voffset_p, *offset_vec, current_vo);
+ offset_vec->push_back (current_vo);
}
/* Update the value_and_voffset object with the highest vtable
@@ -940,10 +931,7 @@ gnuv3_print_vtable (struct value *value)
struct type *type;
struct value *vtable;
struct value_print_options opts;
- struct cleanup *cleanup;
- VEC (value_and_voffset_p) *result_vec = NULL;
- struct value_and_voffset *iter;
- int i, count;
+ int count;
value = coerce_ref (value);
type = check_typedef (value_type (value));
@@ -978,17 +966,14 @@ gnuv3_print_vtable (struct value *value)
htab_up offset_hash (htab_create_alloc (1, hash_value_and_voffset,
eq_value_and_voffset,
xfree, xcalloc, xfree));
- cleanup = make_cleanup (VEC_cleanup (value_and_voffset_p), &result_vec);
+ std::vector<value_and_voffset *> result_vec;
compute_vtable_size (offset_hash.get (), &result_vec, value);
-
- qsort (VEC_address (value_and_voffset_p, result_vec),
- VEC_length (value_and_voffset_p, result_vec),
- sizeof (value_and_voffset_p),
- compare_value_and_voffset);
+ std::sort (result_vec.begin (), result_vec.end (),
+ compare_value_and_voffset);
count = 0;
- for (i = 0; VEC_iterate (value_and_voffset_p, result_vec, i, iter); ++i)
+ for (value_and_voffset *iter : result_vec)
{
if (iter->max_voffset >= 0)
{
@@ -998,8 +983,6 @@ gnuv3_print_vtable (struct value *value)
++count;
}
}
-
- do_cleanups (cleanup);
}
/* Return a GDB type representing `struct std::type_info', laid out
@@ -1077,7 +1060,6 @@ gnuv3_get_typeid (struct value *value)
struct type *typeinfo_type;
struct type *type;
struct gdbarch *gdbarch;
- struct cleanup *cleanup;
struct value *result;
std::string type_name, canonical;
--
2.9.3
next prev parent reply other threads:[~2017-04-11 15:01 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-11 15:02 [RFA v2 00/17] miscellaneous C++-ification Tom Tromey
2017-04-11 15:01 ` [RFA v2 01/17] Introduce event_location_up Tom Tromey
2017-04-11 15:01 ` [RFA v2 10/17] C++ify mi_parse Tom Tromey
2017-04-12 11:26 ` Pedro Alves
2017-04-12 16:15 ` Tom Tromey
2017-04-12 16:19 ` Pedro Alves
2017-04-12 18:05 ` Tom Tromey
2017-04-12 18:37 ` Pedro Alves
2017-04-12 19:25 ` Tom Tromey
2017-04-13 2:36 ` Pedro Alves
2017-04-13 13:44 ` Tom Tromey
2017-04-11 15:01 ` [RFA v2 16/17] Add a constructor and destructor to linespec_result Tom Tromey
2017-04-12 2:25 ` Simon Marchi
2017-04-12 14:30 ` Tom Tromey
2017-04-11 15:01 ` [RFA v2 09/17] Remove some cleanups from location.c Tom Tromey
2017-04-11 15:01 ` [RFA v2 11/17] Use scoped_restore in more places Tom Tromey
2017-04-11 15:01 ` [RFA v2 04/17] Introduce gdb_dlhandle_up Tom Tromey
2017-04-11 15:01 ` [RFA v2 17/17] Change linespec_result::location to be an event_location_up Tom Tromey
2017-04-12 2:39 ` Simon Marchi
2017-04-11 15:01 ` [RFA v2 02/17] Introduce command_line_up Tom Tromey
2017-04-11 15:01 ` [RFA v2 05/17] Change increment_reading_symtab to return a scoped_restore Tom Tromey
2017-04-12 11:16 ` Pedro Alves
2017-04-12 14:31 ` Tom Tromey
2017-04-11 15:01 ` [RFA v2 12/17] Use std::vector in reread_symbols Tom Tromey
2017-04-11 15:02 ` Tom Tromey [this message]
2017-04-11 15:02 ` [RFA v2 07/17] Fix up wchar_iterator comment Tom Tromey
2017-04-11 15:02 ` [RFA v2 13/17] Use std::vector in find_instruction_backward Tom Tromey
2017-04-11 15:21 ` [RFA v2 06/17] Remove cleanup_iconv Tom Tromey
2017-04-12 11:19 ` Pedro Alves
2017-04-12 15:05 ` Tom Tromey
2017-04-11 15:21 ` [RFA v2 03/17] Change find_pcs_for_symtab_line to return a std::vector Tom Tromey
2017-04-11 15:22 ` [RFA v2 14/17] Use std::vector in compile-loc2c.c Tom Tromey
2017-04-11 15:23 ` [RFA v2 15/17] Change breakpoint event locations to event_location_up Tom Tromey
2017-04-12 2:25 ` Simon Marchi
2017-04-12 2:49 ` [RFA v2 00/17] miscellaneous C++-ification Simon Marchi
2017-04-12 11:38 ` Pedro Alves
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170411150112.23207-9-tom@tromey.com \
--to=tom@tromey.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox