[demangler] Use an AST to represent demangled names

The demangler now demangles by producing an AST, then traverses that
AST to produce a demangled name. This is done for performance reasons,
now the demangler doesn't manuiplate std::strings, which hurt
performance and caused string operations to be inlined into the
parser, leading to large code size and stack usage.

Differential revision: https://reviews.llvm.org/D35159

llvm-svn: 309340
This commit is contained in:
Erik Pilkington 2017-07-28 00:43:49 +00:00
parent fea50c286a
commit 94d2ac7160
2 changed files with 1981 additions and 925 deletions

File diff suppressed because it is too large Load Diff

View File

@ -29600,8 +29600,7 @@ const char* cases[][2] =
{"i", "int"},
{"PKFvRiE", "void (*)(int&) const"},
// FIXME(compnerd) pretty print this as void (*)(unsigned long &) volatile &&
{"PVFvRmOE", "void (*)(unsigned long&) volatile&&"},
{"PVFvRmOE", "void (*)(unsigned long&) volatile &&"},
{"PFvRmOE", "void (*)(unsigned long&) &&"},
{"_ZTW1x", "thread-local wrapper routine for x"},
{"_ZTHN3fooE", "thread-local initialization routine for foo"},