11#include " llvm/ADT/STLExtras.h"
22#include " swift/Basic/Defer.h"
33#include " swift/SIL/SILDeclRef.h"
4+ #include " swift/AST/ASTMangler.h"
45#include < swift/APIDigester/ModuleAnalyzerNodes.h>
56#include < algorithm>
67
@@ -98,7 +99,8 @@ SDKNodeRoot::SDKNodeRoot(SDKNodeInitInfo Info): SDKNode(Info, SDKNodeKind::Root)
9899 JsonFormatVer(Info.JsonFormatVer.hasValue() ? *Info.JsonFormatVer : DIGESTER_JSON_DEFAULT_VERSION) {}
99100
100101SDKNodeDecl::SDKNodeDecl (SDKNodeInitInfo Info, SDKNodeKind Kind)
101- : SDKNode(Info, Kind), DKind(Info.DKind), Usr(Info.Usr), Loc(Info.Loc),
102+ : SDKNode(Info, Kind), DKind(Info.DKind), Usr(Info.Usr),
103+ MangledName(Info.MangledName), Loc(Info.Loc),
102104 Location(Info.Location), ModuleName(Info.ModuleName),
103105 DeclAttributes(Info.DeclAttrs), IsImplicit(Info.IsImplicit),
104106 IsStatic(Info.IsStatic), IsDeprecated(Info.IsDeprecated),
@@ -120,7 +122,8 @@ SDKNodeType::SDKNodeType(SDKNodeInitInfo Info, SDKNodeKind Kind):
120122 ParamValueOwnership(Info.ParamValueOwnership) {}
121123
122124SDKNodeTypeNominal::SDKNodeTypeNominal (SDKNodeInitInfo Info):
123- SDKNodeType(Info, SDKNodeKind::TypeNominal), USR(Info.Usr) {}
125+ SDKNodeType(Info, SDKNodeKind::TypeNominal), USR(Info.Usr),
126+ MangledName(Info.MangledName) {}
124127
125128SDKNodeTypeFunc::SDKNodeTypeFunc (SDKNodeInitInfo Info):
126129 SDKNodeType(Info, SDKNodeKind::TypeFunc) {}
@@ -139,7 +142,8 @@ SDKNodeDeclType::SDKNodeDeclType(SDKNodeInitInfo Info):
139142
140143SDKNodeConformance::SDKNodeConformance (SDKNodeInitInfo Info):
141144 SDKNode(Info, SDKNodeKind::Conformance),
142- Usr(Info.Usr), IsABIPlaceholder(Info.IsABIPlaceholder) {}
145+ Usr(Info.Usr), MangledName(Info.MangledName),
146+ IsABIPlaceholder(Info.IsABIPlaceholder) {}
143147
144148SDKNodeTypeWitness::SDKNodeTypeWitness (SDKNodeInitInfo Info):
145149 SDKNode(Info, SDKNodeKind::TypeWitness) {}
@@ -1036,6 +1040,18 @@ static StringRef calculateUsr(SDKContext &Ctx, ValueDecl *VD) {
10361040 return StringRef ();
10371041}
10381042
1043+ static StringRef calculateMangledName (SDKContext &Ctx, ValueDecl *VD) {
1044+ if (isFromClang (VD)) {
1045+ // Don't mangle clang symbols.
1046+ return StringRef ();
1047+ }
1048+ if (auto *attr = VD->getAttrs ().getAttribute <SILGenNameAttr>()) {
1049+ return Ctx.buffer (attr->Name );
1050+ }
1051+ Mangle::ASTMangler NewMangler;
1052+ return Ctx.buffer (NewMangler.mangleAnyDecl (VD, false ));
1053+ }
1054+
10391055static StringRef calculateLocation (SDKContext &SDKCtx, Decl *D) {
10401056 if (SDKCtx.getOpts ().AvoidLocation )
10411057 return StringRef ();
@@ -1298,6 +1314,7 @@ SDKNodeInitInfo::SDKNodeInitInfo(SDKContext &Ctx, Type Ty, TypeInitInfo Info) :
12981314 // If this is a nominal type, get its Usr.
12991315 if (auto *ND = Ty->getAnyNominal ()) {
13001316 Usr = calculateUsr (Ctx, ND);
1317+ MangledName = calculateMangledName (Ctx, ND);
13011318 }
13021319}
13031320
@@ -1415,6 +1432,7 @@ SDKNodeInitInfo::SDKNodeInitInfo(SDKContext &Ctx, ValueDecl *VD)
14151432 Name = getSimpleName (VD);
14161433 PrintedName = getPrintedName (Ctx, VD);
14171434 Usr = calculateUsr (Ctx, VD);
1435+ MangledName = calculateMangledName (Ctx, VD);
14181436 IsThrowing = isFuncThrowing (VD);
14191437 IsStatic = VD->isStatic ();
14201438 IsOverriding = VD->getOverriddenDecl ();
@@ -1969,13 +1987,15 @@ void SDKNodeRoot::jsonize(json::Output &out) {
19691987void SDKNodeConformance::jsonize (json::Output &out) {
19701988 SDKNode::jsonize (out);
19711989 output (out, KeyKind::KK_usr, Usr);
1990+ output (out, KeyKind::KK_mangledName, MangledName);
19721991 output (out, KeyKind::KK_isABIPlaceholder, IsABIPlaceholder);
19731992}
19741993
19751994void SDKNodeDecl::jsonize (json::Output &out) {
19761995 SDKNode::jsonize (out);
19771996 out.mapRequired (getKeyContent (Ctx, KeyKind::KK_declKind).data (), DKind);
19781997 output (out, KeyKind::KK_usr, Usr);
1998+ output (out, KeyKind::KK_mangledName, MangledName);
19791999 output (out, KeyKind::KK_location, Location);
19802000 output (out, KeyKind::KK_moduleName, ModuleName);
19812001 output (out, KeyKind::KK_genericSig, GenericSig);
0 commit comments