From ba797b6daed513b6c5a560976766767d795036c7 Mon Sep 17 00:00:00 2001 From: Zachary Turner Date: Wed, 2 Jan 2019 18:33:12 +0000 Subject: [MS Demangler] Add a flag for dumping types without tag specifier. Sometimes it's useful to be able to output demangled names without tag specifiers like "struct", "class", etc. This patch adds a flag enabling this. llvm-svn: 350241 --- llvm/lib/Demangle/MicrosoftDemangleNodes.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'llvm/lib/Demangle') diff --git a/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp b/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp index a588dca5b7b..49518ef57d6 100644 --- a/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp +++ b/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp @@ -114,10 +114,10 @@ static void outputCallingConvention(OutputStream &OS, CallingConv CC) { } } -std::string Node::toString() const { +std::string Node::toString(OutputFlags Flags) const { OutputStream OS; initializeOutputStream(nullptr, nullptr, OS, 1024); - this->output(OS, llvm::ms_demangle::OF_Default); + this->output(OS, Flags); OS << '\0'; return {OS.getBuffer()}; } @@ -510,13 +510,15 @@ void PointerTypeNode::outputPost(OutputStream &OS, OutputFlags Flags) const { } void TagTypeNode::outputPre(OutputStream &OS, OutputFlags Flags) const { - switch (Tag) { - OUTPUT_ENUM_CLASS_VALUE(TagKind, Class, "class"); - OUTPUT_ENUM_CLASS_VALUE(TagKind, Struct, "struct"); - OUTPUT_ENUM_CLASS_VALUE(TagKind, Union, "union"); - OUTPUT_ENUM_CLASS_VALUE(TagKind, Enum, "enum"); + if (!(Flags & OF_NoTagSpecifier)) { + switch (Tag) { + OUTPUT_ENUM_CLASS_VALUE(TagKind, Class, "class"); + OUTPUT_ENUM_CLASS_VALUE(TagKind, Struct, "struct"); + OUTPUT_ENUM_CLASS_VALUE(TagKind, Union, "union"); + OUTPUT_ENUM_CLASS_VALUE(TagKind, Enum, "enum"); + } + OS << " "; } - OS << " "; QualifiedName->output(OS, Flags); outputQualifiers(OS, Quals, true, false); } -- cgit v1.2.3