diff options
author | Zachary Turner <zturner@google.com> | 2019-01-02 18:33:12 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2019-01-02 18:33:12 +0000 |
commit | ba797b6daed513b6c5a560976766767d795036c7 (patch) | |
tree | c044767dc0ef8f73bdc017c51d39e9d98799cd23 /llvm/lib/Demangle | |
parent | b3130b4fdf5824ec9b33eaac580a57fa8edd1147 (diff) | |
download | bcm5719-llvm-ba797b6daed513b6c5a560976766767d795036c7.tar.gz bcm5719-llvm-ba797b6daed513b6c5a560976766767d795036c7.zip |
[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
Diffstat (limited to 'llvm/lib/Demangle')
-rw-r--r-- | llvm/lib/Demangle/MicrosoftDemangleNodes.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
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); } |