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)