Skip to content

Commit 30c06c5

Browse files
committed
Reflection: Share a Demangler instead of creating new ones all the time
1 parent c95c179 commit 30c06c5

File tree

2 files changed

+2
-5
lines changed

2 files changed

+2
-5
lines changed

include/swift/Reflection/TypeRefBuilder.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ class TypeRefBuilder {
134134
TypeRefBuilder &operator=(const TypeRefBuilder &other) = delete;
135135

136136
private:
137+
Demangle::Demangler Dem;
138+
137139
/// Makes sure dynamically allocated TypeRefs stick around for the life of
138140
/// this TypeRefBuilder and are automatically released.
139141
std::vector<std::unique_ptr<const TypeRef>> TypeRefPool;

stdlib/public/Reflection/TypeRefBuilder.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ lookupTypeWitness(const std::string &MangledTypeName,
4949
continue;
5050

5151
std::string ProtocolMangledName(AssocTyDescriptor.ProtocolTypeName);
52-
Demangle::Demangler Dem;
5352
auto DemangledProto = Dem.demangleType(ProtocolMangledName);
5453
auto TR = swift::remote::decodeMangledType(*this, DemangledProto);
5554

@@ -86,7 +85,6 @@ lookupSuperclass(const TypeRef *TR) {
8685
if (FD == nullptr)
8786
return nullptr;
8887

89-
Demangle::Demangler Dem;
9088
auto Demangled = Dem.demangleType(FD->getSuperclass());
9189
auto Unsubstituted = swift::remote::decodeMangledType(*this, Demangled);
9290
if (!Unsubstituted)
@@ -131,7 +129,6 @@ bool TypeRefBuilder::getFieldTypeRefs(const TypeRef *TR,
131129

132130
auto Subs = TR->getSubstMap();
133131

134-
Demangle::Demangler Dem;
135132
for (auto &Field : *FD) {
136133
auto FieldName = Field.getFieldName();
137134

@@ -207,7 +204,6 @@ ClosureContextInfo
207204
TypeRefBuilder::getClosureContextInfo(const CaptureDescriptor &CD) {
208205
ClosureContextInfo Info;
209206

210-
Demangle::Demangler Dem;
211207
for (auto i = CD.capture_begin(), e = CD.capture_end(); i != e; ++i) {
212208
const TypeRef *TR = nullptr;
213209
if (i->hasMangledTypeName()) {
@@ -250,7 +246,6 @@ TypeRefBuilder::dumpTypeRef(const std::string &MangledName,
250246
auto TypeName = Demangle::demangleTypeAsString(MangledName);
251247
OS << TypeName << '\n';
252248

253-
Demangle::Demangler Dem;
254249
auto DemangleTree = Dem.demangleType(MangledName);
255250
auto TR = swift::remote::decodeMangledType(*this, DemangleTree);
256251
if (!TR) {

0 commit comments

Comments
 (0)