Skip to content

Commit 66cf479

Browse files
author
Enrico Granata
committed
Add an API that exactly mimics LLDB's GetTypeFromMangledTypename but uses ReconstructType.cpp as a node visitor
1 parent ae920a4 commit 66cf479

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

include/swift/IDE/Utils.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,10 @@ Type getTypeFromMangledTypename(ASTContext &Ctx,
127127
const char *mangled_typename,
128128
std::string &error);
129129

130+
Type getTypeFromMangledSymbolname(ASTContext &Ctx,
131+
const char *mangled_typename,
132+
std::string &error);
133+
130134
class XMLEscapingPrinter : public StreamPrinter {
131135
public:
132136
XMLEscapingPrinter(raw_ostream &OS) : StreamPrinter(OS){};

lib/IDE/ReconstructType.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2794,3 +2794,28 @@ swift::Type swift::ide::getTypeFromMangledTypename(swift::ASTContext &Ctx,
27942794
}
27952795
return swift::Type();
27962796
}
2797+
2798+
swift::Type swift::ide::getTypeFromMangledSymbolname(swift::ASTContext &Ctx,
2799+
const char *mangled_typename,
2800+
std::string &error)
2801+
{
2802+
ConstString mangled_name (mangled_typename);
2803+
std::vector<swift::Demangle::NodePointer> nodes;
2804+
nodes.push_back(swift::Demangle::demangleSymbolAsNode(mangled_typename,
2805+
mangled_name.length()));
2806+
VisitNodeResult empty_generic_context;
2807+
VisitNodeResult result;
2808+
2809+
VisitNode(&Ctx, nodes, result, empty_generic_context, nullptr);
2810+
error = result._error;
2811+
if (error.empty() && result._types.size() == 1)
2812+
{
2813+
return result._types.front().getPointer();
2814+
}
2815+
else
2816+
{
2817+
error = stringWithFormat("type for symbolname '%s' was not found",mangled_typename);
2818+
return swift::Type();
2819+
}
2820+
return swift::Type();
2821+
}

0 commit comments

Comments
 (0)