demo hack for #9
diff --git a/demumble.cc b/demumble.cc
index 835dbbe..f91f523 100644
--- a/demumble.cc
+++ b/demumble.cc
@@ -101,7 +101,7 @@
char* end = cur + strlen(cur);
while (cur != end) {
- size_t special = strcspn(cur, "_?");
+ size_t special = strcspn(cur, "_?.");
if (print_mode == kPrintAll)
printf("%.*s", static_cast<int>(special), cur);
else if (need_separator)
@@ -112,9 +112,10 @@
break;
size_t n_sym = 0;
- if (*cur == '?')
- while (cur + n_sym != end && is_mangle_char_win(cur[n_sym]))
+ if (*cur == '?' || *cur == '.')
+ do
++n_sym;
+ while (cur + n_sym != end && is_mangle_char_win(cur[n_sym]));
else if (is_plausible_itanium_prefix(cur))
while (cur + n_sym != end && is_mangle_char_itanium(cur[n_sym]))
++n_sym;
diff --git a/third_party/llvm/include/llvm/Demangle/MicrosoftDemangle.h b/third_party/llvm/include/llvm/Demangle/MicrosoftDemangle.h
index 382e794..45db2d5 100644
--- a/third_party/llvm/include/llvm/Demangle/MicrosoftDemangle.h
+++ b/third_party/llvm/include/llvm/Demangle/MicrosoftDemangle.h
@@ -153,7 +153,7 @@
void dumpBackReferences();
-private:
+//private:
SymbolNode *demangleEncodedSymbol(StringView &MangledName,
QualifiedNameNode *QN);
SymbolNode *demangleDeclarator(StringView &MangledName);
diff --git a/third_party/llvm/lib/Demangle/MicrosoftDemangle.cpp b/third_party/llvm/lib/Demangle/MicrosoftDemangle.cpp
index bf7d776..6402a54 100644
--- a/third_party/llvm/lib/Demangle/MicrosoftDemangle.cpp
+++ b/third_party/llvm/lib/Demangle/MicrosoftDemangle.cpp
@@ -2323,7 +2323,12 @@
OutputStream S;
StringView Name{MangledName};
- SymbolNode *AST = D.parse(Name);
+ Node *AST = nullptr;
+ bool wasTypeinfoName;
+ if ((wasTypeinfoName = Name.consumeFront('.')))
+ AST = D.demangleType(Name, QualifierMangleMode::Result);
+ else
+ AST = D.parse(Name);
if (Flags & MSDF_DumpBackrefs)
D.dumpBackReferences();
@@ -2333,6 +2338,8 @@
else if (!initializeOutputStream(Buf, N, S, 1024))
InternalStatus = demangle_memory_alloc_failure;
else {
+ if (wasTypeinfoName)
+ S << "typeinfo name for ";
AST->output(S, OF_Default);
S += '\0';
if (N != nullptr)