@@ -98,30 +98,49 @@ GetDemangledTypeMangling(swift::Demangle::Demangler &dem,
9898}
9999
100100// / Wrap node in Global/TypeMangling/Type.
101- static swift::Demangle::NodePointer
102- mangleType (swift::Demangle::Demangler &dem,
103- swift::Demangle::NodePointer typeNode ) {
101+ inline swift::Demangle::NodePointer
102+ MangleType (swift::Demangle::Demangler &dem,
103+ swift::Demangle::NodePointer type_node ) {
104104 auto *global = dem.createNode (Node::Kind::Global);
105- auto *typeMangling = dem.createNode (Node::Kind::TypeMangling);
106- global->addChild (typeMangling , dem);
105+ auto *type_mangling = dem.createNode (Node::Kind::TypeMangling);
106+ global->addChild (type_mangling , dem);
107107 auto *type = dem.createNode (Node::Kind::Type);
108- typeMangling ->addChild (type, dem);
109- type->addChild (typeNode , dem);
108+ type_mangling ->addChild (type, dem);
109+ type->addChild (type_node , dem);
110110 return global;
111111}
112112
113+ // / Produce a type mangle tree for a nominal type.
114+ inline swift::Demangle::NodePointer
115+ CreateNominal (swift::Demangle::Demangler &dem, swift::Demangle::Node::Kind kind,
116+ llvm::StringRef module_name, llvm::StringRef type_name) {
117+ auto *nominal = dem.createNode (kind);
118+ auto *m = dem.createNodeWithAllocatedText (Node::Kind::Module, module_name);
119+ auto *id = dem.createNodeWithAllocatedText (Node::Kind::Identifier, type_name);
120+ nominal->addChild (m, dem);
121+ nominal->addChild (id, dem);
122+ return nominal;
123+ }
124+
113125// / Produce a type mangling for a class.
114126inline ManglingErrorOr<std::string>
115- mangleClass (swift::Demangle::Demangler &dem, llvm::StringRef moduleName,
116- llvm::StringRef className, swift::Mangle::ManglingFlavor flavor) {
117- auto *classNode = dem.createNode (Node::Kind::Class);
118- auto *module =
119- dem.createNodeWithAllocatedText (Node::Kind::Module, moduleName);
120- auto *identifier =
121- dem.createNodeWithAllocatedText (Node::Kind::Identifier, className);
122- classNode->addChild (module , dem);
123- classNode->addChild (identifier, dem);
124- return mangleNode (mangleType (dem, classNode), flavor);
127+ MangleClass (swift::Demangle::Demangler &dem, llvm::StringRef module_name,
128+ llvm::StringRef class_name, swift::Mangle::ManglingFlavor flavor) {
129+ auto *node = CreateNominal (dem, Node::Kind::Class, module_name, class_name);
130+ return mangleNode (MangleType (dem, node), flavor);
131+ }
132+
133+ // / Create a mangled name for a type node.
134+ inline swift::Demangle::ManglingErrorOr<std::string>
135+ GetMangledName (swift::Demangle::Demangler &dem,
136+ swift::Demangle::NodePointer node,
137+ swift::Mangle::ManglingFlavor flavor) {
138+ using namespace swift ::Demangle;
139+ auto global = dem.createNode (Node::Kind::Global);
140+ auto type_mangling = dem.createNode (Node::Kind::TypeMangling);
141+ global->addChild (type_mangling, dem);
142+ type_mangling->addChild (node, dem);
143+ return mangleNode (global, flavor);
125144}
126145
127146} // namespace swift_demangle
0 commit comments