Swift: mangle GenericTypeDecl

This commit is contained in:
Paolo Tranquilli
2023-03-14 12:22:03 +01:00
parent 476cf72710
commit 1274aaaf9c
2 changed files with 12 additions and 0 deletions

View File

@@ -23,6 +23,7 @@ SwiftMangledName initMangled(const swift::Decl* decl) {
ret << swift::Decl::getKindName(decl->getKind()) << "Decl_";
return ret;
}
} // namespace
SwiftMangledName SwiftMangler::mangleModuleName(std::string_view name) {
@@ -68,6 +69,16 @@ SwiftMangledName SwiftMangler::visitModuleDecl(const swift::ModuleDecl* decl) {
return mangleModuleName(decl->getRealName().str());
}
SwiftMangledName SwiftMangler::visitGenericTypeDecl(const swift::GenericTypeDecl* decl) {
if (auto context = decl->getDeclContext()->getAsDecl()) {
auto ret = initMangled(decl);
ret << dispatcher.fetchLabel(context);
ret << decl->getName().str();
return ret;
}
return {};
}
SwiftMangledName SwiftMangler::visitModuleType(const swift::ModuleType* type) {
auto ret = initMangled(type);
ret << type->getModule()->getRealName().str();

View File

@@ -45,6 +45,7 @@ class SwiftMangler : private swift::TypeVisitor<SwiftMangler, SwiftMangledName>,
SwiftMangledName visitValueDecl(const swift::ValueDecl* decl);
SwiftMangledName visitModuleDecl(const swift::ModuleDecl* decl);
SwiftMangledName visitGenericTypeDecl(const swift::GenericTypeDecl* decl);
// default fallback for not yet mangled types. This should never be called in normal situations
// will just spawn a random name