This adds a copy of the demangler in libcxxabi.
The code also has no dependencies on anything else in LLVM. To enforce that I added it as another library. That way a BUILD_SHARED_LIBS will fail if anyone adds an use of StringRef for example.
The no llvm dependency combined with the fact that this has to build on linux, OS X and Windows required a few changes to the code. In particular:
- No constexpr.
- No alignas
- The malloc_alloc was failing to bulid on OS X. Looks like it conflicted with the libcxx implementation of string.
So for now I disabled the custom allocators.
On OS X at least this library has only one global symbol: __ZN4llvm16itanium_demangleEPKcPcPmPi
My current plan is:
- Commit something like this
- Change lld to use it
- Change lldb to use as the fallback
- Add a few #ifdefs so that exactly the same file can be used in libcxxabi to export abi::__cxa_demangle.
Once the fast demangler in lldb can handle any names this implementation can be replaced with it and we will have the one true demangler.
Can you add some docs for the arguments and return.
Especially these questions jump out to me: