Skip to content

Commit 32fc371

Browse files
eddybJeff Law
authored and
Jeff Law
committed
[PATCH] Refactor rust-demangle to be independent of C++ demangling.
* demangle.h (rust_demangle_callback): Add. * cplus-dem.c (cplus_demangle): Use rust_demangle directly. (rust_demangle): Remove. * rust-demangle.c (is_prefixed_hash): Rename to is_legacy_prefixed_hash. (parse_lower_hex_nibble): Rename to decode_lower_hex_nibble. (parse_legacy_escape): Rename to decode_legacy_escape. (rust_is_mangled): Remove. (struct rust_demangler): Add. (peek): Add. (next): Add. (struct rust_mangled_ident): Add. (parse_ident): Add. (rust_demangle_sym): Remove. (print_str): Add. (PRINT): Add. (print_ident): Add. (rust_demangle_callback): Add. (struct str_buf): Add. (str_buf_reserve): Add. (str_buf_append): Add. (str_buf_demangle_callback): Add. (rust_demangle): Add. * rust-demangle.h: Remove. From-SVN: r278358
1 parent f73cb38 commit 32fc371

File tree

6 files changed

+436
-266
lines changed

6 files changed

+436
-266
lines changed

include/ChangeLog

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
2019-10-22 Eduard-Mihai Burtescu <eddyb@lyken.rs>
2+
3+
* demangle.h (rust_demangle_callback): Add.
4+
15
2019-11-13 Andrew Stubbs <ams@codesourcery.com>
26
Kwok Cheung Yeung <kcy@codesourcery.com>
37
Julian Brown <julian@codesourcery.com>

include/demangle.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,11 @@ ada_demangle (const char *mangled, int options);
159159
extern char *
160160
dlang_demangle (const char *mangled, int options);
161161

162+
extern int
163+
rust_demangle_callback (const char *mangled, int options,
164+
demangle_callbackref callback, void *opaque);
165+
166+
162167
extern char *
163168
rust_demangle (const char *mangled, int options);
164169

libiberty/ChangeLog

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,28 @@
1+
2019-10-22 Eduard-Mihai Burtescu <eddyb@lyken.rs>
2+
3+
* cplus-dem.c (cplus_demangle): Use rust_demangle directly.
4+
(rust_demangle): Remove.
5+
* rust-demangle.c (is_prefixed_hash): Rename to is_legacy_prefixed_hash.
6+
(parse_lower_hex_nibble): Rename to decode_lower_hex_nibble.
7+
(parse_legacy_escape): Rename to decode_legacy_escape.
8+
(rust_is_mangled): Remove.
9+
(struct rust_demangler): Add.
10+
(peek): Add.
11+
(next): Add.
12+
(struct rust_mangled_ident): Add.
13+
(parse_ident): Add.
14+
(rust_demangle_sym): Remove.
15+
(print_str): Add.
16+
(PRINT): Add.
17+
(print_ident): Add.
18+
(rust_demangle_callback): Add.
19+
(struct str_buf): Add.
20+
(str_buf_reserve): Add.
21+
(str_buf_append): Add.
22+
(str_buf_demangle_callback): Add.
23+
(rust_demangle): Add.
24+
* rust-demangle.h: Remove.
25+
126
2019-11-15 Miguel Saldivar <saldivarcher@gmail.com>
227

328
* testsuite/demangle-expected: Fix test.

libiberty/cplus-dem.c

Lines changed: 11 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ void * realloc ();
5252
#define CURRENT_DEMANGLING_STYLE options
5353

5454
#include "libiberty.h"
55-
#include "rust-demangle.h"
5655

5756
enum demangling_styles current_demangling_style = auto_demangling;
5857

@@ -160,27 +159,20 @@ cplus_demangle (const char *mangled, int options)
160159
if ((options & DMGL_STYLE_MASK) == 0)
161160
options |= (int) current_demangling_style & DMGL_STYLE_MASK;
162161

162+
/* The Rust demangling is implemented elsewhere.
163+
Legacy Rust symbols overlap with GNU_V3, so try Rust first. */
164+
if (RUST_DEMANGLING || AUTO_DEMANGLING)
165+
{
166+
ret = rust_demangle (mangled, options);
167+
if (ret || RUST_DEMANGLING)
168+
return ret;
169+
}
170+
163171
/* The V3 ABI demangling is implemented elsewhere. */
164-
if (GNU_V3_DEMANGLING || RUST_DEMANGLING || AUTO_DEMANGLING)
172+
if (GNU_V3_DEMANGLING || AUTO_DEMANGLING)
165173
{
166174
ret = cplus_demangle_v3 (mangled, options);
167-
if (GNU_V3_DEMANGLING)
168-
return ret;
169-
170-
if (ret)
171-
{
172-
/* Rust symbols are GNU_V3 mangled plus some extra subtitutions.
173-
The subtitutions are always smaller, so do in place changes. */
174-
if (rust_is_mangled (ret))
175-
rust_demangle_sym (ret);
176-
else if (RUST_DEMANGLING)
177-
{
178-
free (ret);
179-
ret = NULL;
180-
}
181-
}
182-
183-
if (ret || RUST_DEMANGLING)
175+
if (ret || GNU_V3_DEMANGLING)
184176
return ret;
185177
}
186178

@@ -204,27 +196,6 @@ cplus_demangle (const char *mangled, int options)
204196
return (ret);
205197
}
206198

207-
char *
208-
rust_demangle (const char *mangled, int options)
209-
{
210-
/* Rust symbols are GNU_V3 mangled plus some extra subtitutions. */
211-
char *ret = cplus_demangle_v3 (mangled, options);
212-
213-
/* The Rust subtitutions are always smaller, so do in place changes. */
214-
if (ret != NULL)
215-
{
216-
if (rust_is_mangled (ret))
217-
rust_demangle_sym (ret);
218-
else
219-
{
220-
free (ret);
221-
ret = NULL;
222-
}
223-
}
224-
225-
return ret;
226-
}
227-
228199
/* Demangle ada names. The encoding is documented in gcc/ada/exp_dbug.ads. */
229200

230201
char *

0 commit comments

Comments
 (0)