llvm-cxxfilt.cpp revision 311116
1217044Snwhitehorn//===-- llvm-c++filt.cpp --------------------------------------------------===//
2217044Snwhitehorn//
3217044Snwhitehorn//                     The LLVM Compiler Infrastructure
4217044Snwhitehorn//
5217044Snwhitehorn// This file is distributed under the University of Illinois Open Source
6217044Snwhitehorn// License. See LICENSE.TXT for details.
7217044Snwhitehorn//
8217044Snwhitehorn//===----------------------------------------------------------------------===//
9217044Snwhitehorn
10217044Snwhitehorn#include "llvm/Demangle/Demangle.h"
11217044Snwhitehorn#include "llvm/Support/raw_ostream.h"
12217044Snwhitehorn#include <cstdlib>
13217044Snwhitehorn#include <iostream>
14217044Snwhitehorn
15217044Snwhitehornusing namespace llvm;
16217044Snwhitehorn
17217044Snwhitehornstatic void demangle(llvm::raw_ostream &OS, const char *Mangled) {
18217044Snwhitehorn  int Status;
19217044Snwhitehorn  char *Demangled = itaniumDemangle(Mangled, nullptr, nullptr, &Status);
20217044Snwhitehorn  OS << (Demangled ? Demangled : Mangled) << '\n';
21217044Snwhitehorn  free(Demangled);
22217044Snwhitehorn}
23217044Snwhitehorn
24217044Snwhitehornint main(int argc, char **argv) {
25217044Snwhitehorn  if (argc == 1)
26217044Snwhitehorn    for (std::string Mangled; std::getline(std::cin, Mangled);)
27217044Snwhitehorn      demangle(llvm::outs(), Mangled.c_str());
28233666Snwhitehorn  else
29233666Snwhitehorn    for (int I = 1; I < argc; ++I)
30265998Sian      demangle(llvm::outs(), argv[I]);
31217044Snwhitehorn
32217044Snwhitehorn  return EXIT_SUCCESS;
33217044Snwhitehorn}
34217044Snwhitehorn