From 8a3df5acae7ad08f691b449c7e6f8e38fb1b8cb1 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 25 Jun 2021 08:01:15 -0600 Subject: [PATCH] Add non-wrapping mode to ada_decode When ada_decode encounters a name that it cannot decode, it simply wraps it in <...>, which is used elsewhere in the Ada code to indicate that a verbatim match should be done. A subequent patch needed the ability to suppress this wrapping, so this patch adds a new mode to ada_decode. 2021-06-25 Tom Tromey * ada-lang.c (ada_decode): Add wrap parameter. * ada-lang.h (ada_decode): Add wrap parameter. --- gdb/ChangeLog | 5 +++++ gdb/ada-lang.c | 10 +++++----- gdb/ada-lang.h | 7 ++++++- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 820a9d36b45..9d56f1c7bc3 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2021-06-25 Tom Tromey + + * ada-lang.c (ada_decode): Add wrap parameter. + * ada-lang.h (ada_decode): Add wrap parameter. + 2021-06-25 Luis Machado * corelow.c (core_target::core_target) Update to read target diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 6ed6b65e705..49a7d5b36b6 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -976,12 +976,10 @@ ada_remove_po_subprogram_suffix (const char *encoded, int *len) *len = *len - 1; } -/* If ENCODED follows the GNAT entity encoding conventions, then return - the decoded form of ENCODED. Otherwise, return "<%s>" where "%s" is - replaced by ENCODED. */ +/* See ada-lang.h. */ std::string -ada_decode (const char *encoded) +ada_decode (const char *encoded, bool wrap) { int i, j; int len0; @@ -1216,12 +1214,14 @@ ada_decode (const char *encoded) return decoded; Suppress: + if (!wrap) + return {}; + if (encoded[0] == '<') decoded = encoded; else decoded = '<' + std::string(encoded) + '>'; return decoded; - } /* Table for keeping permanent unique copies of decoded names. Once diff --git a/gdb/ada-lang.h b/gdb/ada-lang.h index 156c9b0cec7..a89ed29119a 100644 --- a/gdb/ada-lang.h +++ b/gdb/ada-lang.h @@ -216,7 +216,12 @@ extern struct type *ada_get_decoded_type (struct type *type); extern const char *ada_decode_symbol (const struct general_symbol_info *); -extern std::string ada_decode (const char*); +/* Decode the GNAT-encoded name NAME, returning the decoded name. If + the name does not appear to be GNAT-encoded, then the result + depends on WRAP. If WRAP is true (the default), then the result is + simply wrapped in <...>. If WRAP is false, then the empty string + will be returned. */ +extern std::string ada_decode (const char *name, bool wrap = true); extern std::vector ada_lookup_symbol_list (const char *, const struct block *, domain_enum); -- 2.30.2