diff options
author | Tom Tromey <tromey@adacore.com> | 2024-12-02 12:37:28 -0700 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2024-12-12 07:41:12 -0700 |
commit | f6dcf290ce55686474bedb3feeadd82f215e170b (patch) | |
tree | 50bb542ba23e4af80284297691d565ca802310ac /gdb/ada-lang.c | |
parent | 267749aeb02ae0bcd040d45cf4157462e571d96b (diff) | |
download | binutils-f6dcf290ce55686474bedb3feeadd82f215e170b.zip binutils-f6dcf290ce55686474bedb3feeadd82f215e170b.tar.gz binutils-f6dcf290ce55686474bedb3feeadd82f215e170b.tar.bz2 |
Use generic_printstr from ada_language::printstr
Currently, if you create a lazy string while in Ada language mode, the
string will be rendered strangely, like:
"["d0"]["9f"]["d1"]["80"]["d0"]["b8"]...
This happens because ada_printstr does not really handle UTF-8
decoding.
This patch changes ada_language::printstr to use generic_printstr when
UTF-8 is used.
Note that this code could probably be improved some more -- the
current patch only addresses the narrow case of the Python API. I've
filed a follow-up bug (PR ada/32413) for the remaining changes.
Approved-By: Andrew Burgess <aburgess@redhat.com>
Diffstat (limited to 'gdb/ada-lang.c')
-rw-r--r-- | gdb/ada-lang.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index bd5dcce..e86b664 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -13800,8 +13800,15 @@ public: const char *encoding, int force_ellipses, const struct value_print_options *options) const override { - ada_printstr (stream, elttype, string, length, encoding, - force_ellipses, options); + /* ada_printstr doesn't handle UTF-8 too well, but we want this + for lazy-string printing. Defer this case to the generic + code. */ + if (encoding != nullptr && strcasecmp (encoding, "UTF-8") == 0) + generic_printstr (stream, elttype, string, length, encoding, + force_ellipses, '"', 0, options); + else + ada_printstr (stream, elttype, string, length, encoding, + force_ellipses, options); } /* See language.h. */ |