diff options
Diffstat (limited to 'tools/llvm-cxxfilt')
-rw-r--r-- | tools/llvm-cxxfilt/llvm-cxxfilt.cpp | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/tools/llvm-cxxfilt/llvm-cxxfilt.cpp b/tools/llvm-cxxfilt/llvm-cxxfilt.cpp index 07b0e4e54ae..80a54bbf63d 100644 --- a/tools/llvm-cxxfilt/llvm-cxxfilt.cpp +++ b/tools/llvm-cxxfilt/llvm-cxxfilt.cpp @@ -9,18 +9,25 @@ #include "llvm/Demangle/Demangle.h" #include "llvm/Support/raw_ostream.h" - -#include <stdlib.h> +#include <cstdlib> +#include <iostream> using namespace llvm; +static void demangle(llvm::raw_ostream &OS, const char *Mangled) { + int Status; + char *Demangled = itaniumDemangle(Mangled, nullptr, nullptr, &Status); + OS << (Demangled ? Demangled : Mangled) << '\n'; + free(Demangled); +} + int main(int argc, char **argv) { - for (int I = 1; I < argc; ++I) { - const char *Mangled = argv[I]; - int Status; - char *Demangled = itaniumDemangle(Mangled, nullptr, nullptr, &Status); - llvm::outs() << (Demangled ? Demangled : Mangled) << '\n'; - free(Demangled); - } - return 0; + if (argc == 1) + for (std::string Mangled; std::getline(std::cin, Mangled);) + demangle(llvm::outs(), Mangled.c_str()); + else + for (int I = 1; I < argc; ++I) + demangle(llvm::outs(), argv[I]); + + return EXIT_SUCCESS; } |