Skip to content

Commit dd19fb7

Browse files
tromeynikic
authored andcommitted
Add Rust support to Mangled
This adds Rust support to Mangled. I am not completely certain that this is needed (or alternatively that it does enough, maybe Mangled::GuessLanguage needs a Rust case). This should be checked before attempting to upstream.
1 parent accc618 commit dd19fb7

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

lldb/source/Core/Mangled.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,35 @@ get_demangled_name_without_arguments(ConstString mangled,
123123
return g_last_mangled;
124124
}
125125

126+
static void remove_rust_hash(char *str) {
127+
char *iter = str + strlen(str) - 1;
128+
size_t hashcount = 0;
129+
while (true) {
130+
if (iter == str) {
131+
// Hit the start of the string too early.
132+
return;
133+
}
134+
if ((*iter >= '0' && *iter <= '9') ||
135+
(*iter >= 'a' && *iter <= 'f')) {
136+
++hashcount;
137+
--iter;
138+
if (hashcount > 16) {
139+
// Too many hash chars.
140+
return;
141+
}
142+
} else {
143+
// Not a hash char.
144+
break;
145+
}
146+
}
147+
if (*iter != 'h' || hashcount < 5 || str + 2 >= iter ||
148+
iter[-1] != ':' || iter[-2] != ':') {
149+
return;
150+
}
151+
iter[-2] = '\0';
152+
}
153+
154+
126155
#pragma mark Mangled
127156
// Default constructor
128157
Mangled::Mangled() : m_mangled(), m_demangled() {}
@@ -364,6 +393,11 @@ Mangled::GetDemangledName(lldb::LanguageType language) const {
364393
break;
365394
case eManglingSchemeItanium: {
366395
demangled_name = GetItaniumDemangledStr(mangled_name);
396+
397+
if (language == lldb::eLanguageTypeRust) {
398+
remove_rust_hash(demangled_name);
399+
}
400+
367401
break;
368402
}
369403
case eManglingSchemeNone:

0 commit comments

Comments
 (0)