From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 117124 invoked by alias); 12 Sep 2017 18:57:50 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 116974 invoked by uid 89); 12 Sep 2017 18:57:49 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.7 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_STOCKGEN,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: gproxy4-pub.mail.unifiedlayer.com Received: from gproxy4-pub.mail.unifiedlayer.com (HELO gproxy4-pub.mail.unifiedlayer.com) (69.89.23.142) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 12 Sep 2017 18:57:47 +0000 Received: from cmgw3 (unknown [10.0.90.84]) by gproxy4.mail.unifiedlayer.com (Postfix) with ESMTP id B7CF9175E06 for ; Tue, 12 Sep 2017 12:57:45 -0600 (MDT) Received: from box522.bluehost.com ([74.220.219.122]) by cmgw3 with id 8ixi1w00Z2f2jeq01ixlsp; Tue, 12 Sep 2017 12:57:45 -0600 X-Authority-Analysis: v=2.2 cv=K/VSJ2eI c=1 sm=1 tr=0 a=GsOEXm/OWkKvwdLVJsfwcA==:117 a=GsOEXm/OWkKvwdLVJsfwcA==:17 a=2JCJgTwv5E4A:10 a=zstS-IiYAAAA:8 a=Ofg9-525leZcB3f9GGYA:9 a=b1ybIOXnrMgszxHn:21 a=4HrNNL3yaxSvvdjF:21 a=4G6NA9xxw8l3yy4pmD5M:22 Received: from 75-166-76-94.hlrn.qwest.net ([75.166.76.94]:46142 helo=bapiya.Home) by box522.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.87) (envelope-from ) id 1drqNS-001eRR-I8; Tue, 12 Sep 2017 12:57:42 -0600 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [RFA 10/11] Use a std::vector for ada_exceptions_list Date: Tue, 12 Sep 2017 18:57:00 -0000 Message-Id: <20170912185736.20436-11-tom@tromey.com> In-Reply-To: <20170912185736.20436-1-tom@tromey.com> References: <20170912185736.20436-1-tom@tromey.com> X-BWhitelist: no X-Exim-ID: 1drqNS-001eRR-I8 X-Source-Sender: 75-166-76-94.hlrn.qwest.net (bapiya.Home) [75.166.76.94]:46142 X-Source-Auth: tom+tromey.com X-Email-Count: 11 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTIyLmJsdWVob3N0LmNvbQ== X-Local-Domain: yes X-SW-Source: 2017-09/txt/msg00344.txt.bz2 Change ada_exceptions_list to return a std::vector and fix up the users. This allows removing a cleanup in MI. ChangeLog 2017-09-12 Tom Tromey * mi/mi-cmd-info.c (mi_cmd_info_ada_exceptions): Update. * ada-lang.h (struct ada_exc_info): Remove typedef. Declare operator< and operator==. (ada_exceptions_list): Return a std::vector. * ada-lang.c (ada_exc_info::operator<): Rename from compare_ada_exception_info. (ada_exc_info::operator==): New. (sort_remove_dups_ada_exceptions_list): Change type of "exceptions". (ada_add_standard_exceptions, ada_add_exceptions_from_frame) (ada_add_global_exceptions): Likewise. (ada_exceptions_list_1): Return a std::vector. (ada_exceptions_list): Likewise. --- gdb/ChangeLog | 16 ++++++++++ gdb/ada-lang.c | 88 ++++++++++++++++++++-------------------------------- gdb/ada-lang.h | 9 +++--- gdb/mi/mi-cmd-info.c | 17 +++------- 4 files changed, 60 insertions(+), 70 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 54928fc..ee965c4 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,21 @@ 2017-09-12 Tom Tromey + * mi/mi-cmd-info.c (mi_cmd_info_ada_exceptions): Update. + * ada-lang.h (struct ada_exc_info): Remove typedef. Declare + operator< and operator==. + (ada_exceptions_list): Return a std::vector. + * ada-lang.c (ada_exc_info::operator<): Rename from + compare_ada_exception_info. + (ada_exc_info::operator==): New. + (sort_remove_dups_ada_exceptions_list): Change type of + "exceptions". + (ada_add_standard_exceptions, ada_add_exceptions_from_frame) + (ada_add_global_exceptions): Likewise. + (ada_exceptions_list_1): Return a std::vector. + (ada_exceptions_list): Likewise. + +2017-09-12 Tom Tromey + * mi/mi-main.c (struct print_one_inferior_data) : Now a 'std::set *'. (print_one_inferior): Update. diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 64f1a33..cafba2d 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -62,6 +62,7 @@ #include "cli/cli-utils.h" #include "common/function-view.h" #include "common/byte-vector.h" +#include /* Define whether or not the C operator '/' truncates towards zero for differently signed operands (truncation direction is undefined in C). @@ -13121,23 +13122,23 @@ ada_is_non_standard_exception_sym (struct symbol *sym) The comparison is determined first by exception name, and then by exception address. */ -static int -compare_ada_exception_info (const void *a, const void *b) +bool +ada_exc_info::operator< (const ada_exc_info &other) { - const struct ada_exc_info *exc_a = (struct ada_exc_info *) a; - const struct ada_exc_info *exc_b = (struct ada_exc_info *) b; int result; - result = strcmp (exc_a->name, exc_b->name); - if (result != 0) - return result; - - if (exc_a->addr < exc_b->addr) - return -1; - if (exc_a->addr > exc_b->addr) - return 1; + result = strcmp (name, other.name); + if (result < 0) + return true; + if (result == 0 && addr < other.addr) + return true; + return false; +} - return 0; +bool +ada_exc_info::operator== (const ada_exc_info &other) +{ + return strcmp (name, other.name) == 0 && addr == other.addr; } /* Sort EXCEPTIONS using compare_ada_exception_info as the comparison @@ -13146,23 +13147,12 @@ compare_ada_exception_info (const void *a, const void *b) All duplicates are also removed. */ static void -sort_remove_dups_ada_exceptions_list (VEC(ada_exc_info) **exceptions, +sort_remove_dups_ada_exceptions_list (std::vector *exceptions, int skip) { - struct ada_exc_info *to_sort - = VEC_address (ada_exc_info, *exceptions) + skip; - int to_sort_len - = VEC_length (ada_exc_info, *exceptions) - skip; - int i, j; - - qsort (to_sort, to_sort_len, sizeof (struct ada_exc_info), - compare_ada_exception_info); - - for (i = 1, j = 1; i < to_sort_len; i++) - if (compare_ada_exception_info (&to_sort[i], &to_sort[j - 1]) != 0) - to_sort[j++] = to_sort[i]; - to_sort_len = j; - VEC_truncate(ada_exc_info, *exceptions, skip + to_sort_len); + std::sort (exceptions->begin () + skip, exceptions->end ()); + exceptions->erase (std::unique (exceptions->begin () + skip, exceptions->end ()), + exceptions->end ()); } /* Add all exceptions defined by the Ada standard whose name match @@ -13177,7 +13167,7 @@ sort_remove_dups_ada_exceptions_list (VEC(ada_exc_info) **exceptions, static void ada_add_standard_exceptions (compiled_regex *preg, - VEC(ada_exc_info) **exceptions) + std::vector *exceptions) { int i; @@ -13194,7 +13184,7 @@ ada_add_standard_exceptions (compiled_regex *preg, struct ada_exc_info info = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)}; - VEC_safe_push (ada_exc_info, *exceptions, &info); + exceptions->push_back (info); } } } @@ -13213,7 +13203,7 @@ ada_add_standard_exceptions (compiled_regex *preg, static void ada_add_exceptions_from_frame (compiled_regex *preg, struct frame_info *frame, - VEC(ada_exc_info) **exceptions) + std::vector *exceptions) { const struct block *block = get_frame_block (frame, 0); @@ -13236,7 +13226,7 @@ ada_add_exceptions_from_frame (compiled_regex *preg, struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)}; - VEC_safe_push (ada_exc_info, *exceptions, &info); + exceptions->push_back (info); } } } @@ -13276,7 +13266,7 @@ name_matches_regex (const char *name, compiled_regex *preg) static void ada_add_global_exceptions (compiled_regex *preg, - VEC(ada_exc_info) **exceptions) + std::vector *exceptions) { struct objfile *objfile; struct compunit_symtab *s; @@ -13311,7 +13301,7 @@ ada_add_global_exceptions (compiled_regex *preg, struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)}; - VEC_safe_push (ada_exc_info, *exceptions, &info); + exceptions->push_back (info); } } } @@ -13323,12 +13313,10 @@ ada_add_global_exceptions (compiled_regex *preg, If not NULL, PREG is used to filter out exceptions whose names do not match. Otherwise, all exceptions are listed. */ -static VEC(ada_exc_info) * +static std::vector ada_exceptions_list_1 (compiled_regex *preg) { - VEC(ada_exc_info) *result = NULL; - struct cleanup *old_chain - = make_cleanup (VEC_cleanup (ada_exc_info), &result); + std::vector result; int prev_len; /* First, list the known standard exceptions. These exceptions @@ -13342,21 +13330,20 @@ ada_exceptions_list_1 (compiled_regex *preg) if (has_stack_frames ()) { - prev_len = VEC_length (ada_exc_info, result); + prev_len = result.size (); ada_add_exceptions_from_frame (preg, get_selected_frame (NULL), &result); - if (VEC_length (ada_exc_info, result) > prev_len) + if (result.size () > prev_len) sort_remove_dups_ada_exceptions_list (&result, prev_len); } /* Add all exceptions whose scope is global. */ - prev_len = VEC_length (ada_exc_info, result); + prev_len = result.size (); ada_add_global_exceptions (preg, &result); - if (VEC_length (ada_exc_info, result) > prev_len) + if (result.size () > prev_len) sort_remove_dups_ada_exceptions_list (&result, prev_len); - discard_cleanups (old_chain); return result; } @@ -13374,7 +13361,7 @@ ada_exceptions_list_1 (compiled_regex *preg) alphabetical order; - Exceptions whose scope is global, in alphabetical order. */ -VEC(ada_exc_info) * +std::vector ada_exceptions_list (const char *regexp) { if (regexp == NULL) @@ -13389,14 +13376,9 @@ ada_exceptions_list (const char *regexp) static void info_exceptions_command (char *regexp, int from_tty) { - VEC(ada_exc_info) *exceptions; - struct cleanup *cleanup; struct gdbarch *gdbarch = get_current_arch (); - int ix; - struct ada_exc_info *info; - exceptions = ada_exceptions_list (regexp); - cleanup = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions); + std::vector exceptions = ada_exceptions_list (regexp); if (regexp != NULL) printf_filtered @@ -13404,10 +13386,8 @@ info_exceptions_command (char *regexp, int from_tty) else printf_filtered (_("All defined Ada exceptions:\n")); - for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++) - printf_filtered ("%s: %s\n", info->name, paddress (gdbarch, info->addr)); - - do_cleanups (cleanup); + for (ada_exc_info &info : exceptions) + printf_filtered ("%s: %s\n", info.name, paddress (gdbarch, info.addr)); } /* Operators */ diff --git a/gdb/ada-lang.h b/gdb/ada-lang.h index f5b3bca..f92b88d 100644 --- a/gdb/ada-lang.h +++ b/gdb/ada-lang.h @@ -379,18 +379,19 @@ extern void create_ada_exception_catchpoint /* Some information about a given Ada exception. */ -typedef struct ada_exc_info +struct ada_exc_info { /* The name of the exception. */ const char *name; /* The address of the symbol corresponding to that exception. */ CORE_ADDR addr; -} ada_exc_info; -DEF_VEC_O(ada_exc_info); + bool operator< (const ada_exc_info &); + bool operator== (const ada_exc_info &); +}; -extern VEC(ada_exc_info) *ada_exceptions_list (const char *regexp); +extern std::vector ada_exceptions_list (const char *regexp); /* Tasking-related: ada-tasks.c */ diff --git a/gdb/mi/mi-cmd-info.c b/gdb/mi/mi-cmd-info.c index fa0d16e..33c64f0 100644 --- a/gdb/mi/mi-cmd-info.c +++ b/gdb/mi/mi-cmd-info.c @@ -30,10 +30,6 @@ mi_cmd_info_ada_exceptions (const char *command, char **argv, int argc) struct ui_out *uiout = current_uiout; struct gdbarch *gdbarch = get_current_arch (); char *regexp; - struct cleanup *old_chain; - VEC(ada_exc_info) *exceptions; - int ix; - struct ada_exc_info *info; switch (argc) { @@ -48,24 +44,21 @@ mi_cmd_info_ada_exceptions (const char *command, char **argv, int argc) break; } - exceptions = ada_exceptions_list (regexp); - old_chain = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions); + std::vector exceptions = ada_exceptions_list (regexp); ui_out_emit_table table_emitter (uiout, 2, - VEC_length (ada_exc_info, exceptions), + exceptions.size (), "ada-exceptions"); uiout->table_header (1, ui_left, "name", "Name"); uiout->table_header (1, ui_left, "address", "Address"); uiout->table_body (); - for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++) + for (ada_exc_info &info : exceptions) { ui_out_emit_tuple tuple_emitter (uiout, NULL); - uiout->field_string ("name", info->name); - uiout->field_core_addr ("address", gdbarch, info->addr); + uiout->field_string ("name", info.name); + uiout->field_core_addr ("address", gdbarch, info.addr); } - - do_cleanups (old_chain); } /* Implement the "-info-gdb-mi-command" GDB/MI command. */ -- 2.9.4