Skip to content

Commit 6acc3cd

Browse files
committed
[Mangling] Temporarily stage out (#ifdef out) the ASTMangler API changes and Embedded Swift prefix
1 parent 6dbff5f commit 6acc3cd

File tree

5 files changed

+96
-17
lines changed

5 files changed

+96
-17
lines changed

include/swift/AST/ASTMangler.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ enum class DestructorKind {
4545
/// The mangler for AST declarations.
4646
class ASTMangler : public Mangler {
4747
protected:
48+
#if 0 // STAGING
4849
const ASTContext &Context;
50+
#endif
4951
ModuleDecl *Mod = nullptr;
5052

5153
/// Optimize out protocol names if a type only conforms to one protocol.
@@ -187,6 +189,19 @@ class ASTMangler : public Mangler {
187189
HasSymbolQuery,
188190
};
189191

192+
// STAGING: legacy constructor for LLDB
193+
/// lldb overrides the defaulted argument to 'true'.
194+
ASTMangler(bool DWARFMangling = false) {
195+
if (DWARFMangling) {
196+
DWARFMangling = true;
197+
RespectOriginallyDefinedIn = false;
198+
}
199+
}
200+
201+
/// lldb overrides the defaulted argument to 'true'.
202+
ASTMangler(const ASTContext &Ctx, bool DWARFMangling = false) : ASTMangler(DWARFMangling) {}
203+
204+
#if 0
190205
/// lldb overrides the defaulted argument to 'true'.
191206
ASTMangler(const ASTContext &Ctx, bool DWARFMangling = false) : Context(Ctx) {
192207
if (DWARFMangling) {
@@ -199,6 +214,7 @@ class ASTMangler : public Mangler {
199214
}
200215

201216
const ASTContext &getASTContext() { return Context; }
217+
#endif
202218

203219
void addTypeSubstitution(Type type, GenericSignature sig) {
204220
type = dropProtocolsFromAssociatedTypes(type, sig);

include/swift/Demangling/Demangle.h

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -674,27 +674,27 @@ class [[nodiscard]] ManglingErrorOr {
674674
};
675675

676676
/// Remangle a demangled parse tree.
677-
ManglingErrorOr<std::string> mangleNode(NodePointer root,
678-
Mangle::ManglingFlavor Flavor);
677+
ManglingErrorOr<std::string>
678+
mangleNode(NodePointer root,
679+
Mangle::ManglingFlavor Flavor = Mangle::ManglingFlavor::Default);
679680

680681
using SymbolicResolver = llvm::function_ref<Demangle::NodePointer(
681682
SymbolicReferenceKind, const void *)>;
682683

683684
/// Remangle a demangled parse tree, using a callback to resolve
684685
/// symbolic references.
685-
ManglingErrorOr<std::string> mangleNode(NodePointer root,
686-
SymbolicResolver resolver,
687-
Mangle::ManglingFlavor Flavor);
686+
ManglingErrorOr<std::string>
687+
mangleNode(NodePointer root, SymbolicResolver resolver,
688+
Mangle::ManglingFlavor Flavor = Mangle::ManglingFlavor::Default);
688689

689690
/// Remangle a demangled parse tree, using a callback to resolve
690691
/// symbolic references.
691692
///
692693
/// The returned string is owned by \p Factory. This means \p Factory must stay
693694
/// alive as long as the returned string is used.
694-
ManglingErrorOr<llvm::StringRef> mangleNode(NodePointer root,
695-
SymbolicResolver resolver,
696-
NodeFactory &Factory,
697-
Mangle::ManglingFlavor Flavor);
695+
ManglingErrorOr<llvm::StringRef>
696+
mangleNode(NodePointer root, SymbolicResolver resolver, NodeFactory &Factory,
697+
Mangle::ManglingFlavor Flavor = Mangle::ManglingFlavor::Default);
698698

699699
/// Remangle in the old mangling scheme.
700700
///
@@ -814,10 +814,9 @@ llvm::StringRef makeSymbolicMangledNameStringRef(const char *base);
814814

815815
/// Produce the mangled name for the nominal type descriptor of a type
816816
/// referenced by its module and type name.
817-
std::string mangledNameForTypeMetadataAccessor(llvm::StringRef moduleName,
818-
llvm::StringRef typeName,
819-
Node::Kind typeKind,
820-
Mangle::ManglingFlavor Flavor);
817+
std::string mangledNameForTypeMetadataAccessor(
818+
llvm::StringRef moduleName, llvm::StringRef typeName, Node::Kind typeKind,
819+
Mangle::ManglingFlavor Flavor = Mangle::ManglingFlavor::Default);
821820

822821
SWIFT_END_INLINE_NAMESPACE
823822
} // end namespace Demangle

lib/AST/ASTMangler.cpp

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -600,7 +600,11 @@ static NodePointer mangleSILDifferentiabilityWitnessAsNode(
600600
Node::Kind::IndexSubset, config.resultIndices->getString()),
601601
demangler);
602602
if (auto genSig = config.derivativeGenericSignature) {
603+
#if 0 // STAGING
603604
ASTMangler genSigMangler(mangler->getASTContext());
605+
#else
606+
ASTMangler genSigMangler;
607+
#endif
604608
auto genSigSymbol = genSigMangler.mangleGenericSignature(genSig);
605609
auto demangledGenSig = demangler.demangleSymbol(genSigSymbol);
606610
assert(demangledGenSig);
@@ -713,8 +717,13 @@ static Type getTypeForDWARFMangling(Type t) {
713717
}
714718

715719
std::string ASTMangler::mangleTypeForDebugger(Type Ty, GenericSignature sig) {
720+
#if 0 // STAGING
716721
PrettyStackTraceType prettyStackTrace(Context, "mangling type for debugger",
717722
Ty);
723+
#else
724+
PrettyStackTraceType prettyStackTrace(Ty->getASTContext(), "mangling type for debugger",
725+
Ty);
726+
#endif
718727

719728
DWARFMangling = true;
720729
RespectOriginallyDefinedIn = false;
@@ -1322,7 +1331,11 @@ void ASTMangler::appendType(Type type, GenericSignature sig,
13221331
// unless the type alias references a builtin type.
13231332
auto underlyingType = aliasTy->getSinglyDesugaredType();
13241333
TypeAliasDecl *decl = aliasTy->getDecl();
1334+
#if 0 // STAGING
13251335
if (decl->getModuleContext() == Context.TheBuiltinModule) {
1336+
#else
1337+
if (decl->getModuleContext() == decl->getASTContext().TheBuiltinModule) {
1338+
#endif
13261339
return appendType(underlyingType, sig, forDecl);
13271340
}
13281341

@@ -2123,8 +2136,13 @@ void ASTMangler::appendImplFunctionType(SILFunctionType *fn,
21232136
OpArgs.push_back('t');
21242137
}
21252138

2139+
#if 0 // STAGING
21262140
bool mangleClangType =
21272141
Context.LangOpts.UseClangFunctionTypes && fn->hasNonDerivableClangType();
2142+
#else
2143+
bool mangleClangType = fn->getASTContext().LangOpts.UseClangFunctionTypes &&
2144+
fn->hasNonDerivableClangType();
2145+
#endif
21282146

21292147
auto appendClangTypeToVec = [this, fn](auto &Vec) {
21302148
llvm::raw_svector_ostream OpArgsOS(Vec);
@@ -3034,8 +3052,13 @@ void ASTMangler::appendFunctionType(AnyFunctionType *fn, GenericSignature sig,
30343052

30353053
appendFunctionSignature(fn, sig, forDecl, NoFunctionMangling, isRecursedInto);
30363054

3055+
#if 0 // STAGING
30373056
bool mangleClangType =
30383057
Context.LangOpts.UseClangFunctionTypes && fn->hasNonDerivableClangType();
3058+
#else
3059+
bool mangleClangType = fn->getASTContext().LangOpts.UseClangFunctionTypes &&
3060+
fn->hasNonDerivableClangType();
3061+
#endif
30393062

30403063
// Note that we do not currently use thin representations in the AST
30413064
// for the types of function decls. This may need to change at some
@@ -3085,8 +3108,13 @@ void ASTMangler::appendClangType(FnType *fn, llvm::raw_svector_ostream &out) {
30853108
auto clangType = fn->getClangTypeInfo().getType();
30863109
SmallString<64> scratch;
30873110
llvm::raw_svector_ostream scratchOS(scratch);
3111+
#if 0 // STAGING
30883112
clang::ASTContext &clangCtx =
30893113
Context.getClangModuleLoader()->getClangASTContext();
3114+
#else
3115+
clang::ASTContext &clangCtx =
3116+
fn->getASTContext().getClangModuleLoader()->getClangASTContext();
3117+
#endif
30903118
std::unique_ptr<clang::ItaniumMangleContext> mangler{
30913119
clang::ItaniumMangleContext::create(clangCtx, clangCtx.getDiagnostics())};
30923120
mangler->mangleCanonicalTypeName(clang::QualType(clangType, 0), scratchOS);
@@ -3112,7 +3140,11 @@ void ASTMangler::appendFunctionSignature(AnyFunctionType *fn,
31123140
if (fn->isSendable())
31133141
appendOperator("Yb");
31143142
if (auto thrownError = fn->getEffectiveThrownErrorType()) {
3143+
#if 0 // STAGING
31153144
if ((*thrownError)->isEqual(Context.getErrorExistentialType())
3145+
#else
3146+
if ((*thrownError)->isEqual(fn->getASTContext().getErrorExistentialType())
3147+
#endif
31163148
|| !AllowTypedThrows) {
31173149
appendOperator("K");
31183150
} else {
@@ -3811,7 +3843,11 @@ void ASTMangler::appendClosureEntity(const AbstractClosureExpr *closure) {
38113843
// code; the type-checker currently isn't strict about producing typed
38123844
// expression nodes when it fails. Once we enforce that, we can remove this.
38133845
if (!type)
3846+
#if 0 // STAGING
38143847
type = CanType(ErrorType::get(Context));
3848+
#else
3849+
type = CanType(ErrorType::get(closure->getASTContext()));
3850+
#endif
38153851

38163852
auto canType = type->getCanonicalType();
38173853
if (canType->hasLocalArchetype())
@@ -3882,16 +3918,22 @@ CanType ASTMangler::getDeclTypeForMangling(
38823918
genericSig = GenericSignature();
38833919
parentGenericSig = GenericSignature();
38843920

3921+
#if 0 // STAGING
3922+
auto &C = Context;
3923+
#else
3924+
auto &C = decl->getASTContext();
3925+
#endif
3926+
38853927
auto ty = decl->getInterfaceType()->getReferenceStorageReferent();
38863928
if (ty->hasError()) {
38873929
if (isa<AbstractFunctionDecl>(decl) || isa<EnumElementDecl>(decl) ||
38883930
isa<SubscriptDecl>(decl)) {
38893931
// FIXME: Verify ExtInfo state is correct, not working by accident.
38903932
CanFunctionType::ExtInfo info;
3891-
return CanFunctionType::get({AnyFunctionType::Param(Context.TheErrorType)},
3892-
Context.TheErrorType, info);
3933+
return CanFunctionType::get({AnyFunctionType::Param(C.TheErrorType)},
3934+
C.TheErrorType, info);
38933935
}
3894-
return Context.TheErrorType;
3936+
return C.TheErrorType;
38953937
}
38963938

38973939
// If this declaration predates concurrency, adjust its type to not
@@ -4501,7 +4543,12 @@ void ASTMangler::appendMacroExpansionContext(
45014543
if (loc.isInvalid())
45024544
return appendContext(origDC, nullBase, StringRef());
45034545

4546+
#if 0 // STAGING
45044547
SourceManager &sourceMgr = Context.SourceMgr;
4548+
#else
4549+
ASTContext &ctx = origDC->getASTContext();
4550+
SourceManager &sourceMgr = ctx.SourceMgr;
4551+
#endif
45054552

45064553
auto appendMacroExpansionLoc = [&]() {
45074554
appendIdentifier(origDC->getParentModule()->getName().str());
@@ -4579,7 +4626,7 @@ void ASTMangler::appendMacroExpansionContext(
45794626
if (auto *macroDecl = decl->getResolvedMacro(attr))
45804627
baseName = macroDecl->getBaseName();
45814628
else
4582-
baseName = Context.getIdentifier("__unknown_macro__");
4629+
baseName = ctx.getIdentifier("__unknown_macro__");
45834630

45844631
discriminator = decl->getAttachedMacroDiscriminator(baseName, role, attr);
45854632
break;

lib/Basic/Mangler.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ void Mangler::beginManglingWithoutPrefix() {
123123
void Mangler::beginMangling() {
124124
beginManglingWithoutPrefix();
125125

126+
#if 0 // STAGING: To be switched over to soon.
126127
switch (Flavor) {
127128
case ManglingFlavor::Default:
128129
Buffer << MANGLING_PREFIX_STR;
@@ -131,6 +132,9 @@ void Mangler::beginMangling() {
131132
Buffer << MANGLING_PREFIX_EMBEDDED_STR;
132133
break;
133134
}
135+
#else
136+
Buffer << MANGLING_PREFIX_STR;
137+
#endif
134138
}
135139

136140
/// Finish the mangling of the symbol and return the mangled name.
@@ -140,6 +144,7 @@ std::string Mangler::finalize() {
140144
Storage.clear();
141145

142146
#ifndef NDEBUG
147+
#if 0 // STAGING: To be switched over to soon.
143148
switch (Flavor) {
144149
case ManglingFlavor::Default:
145150
if (StringRef(result).starts_with(MANGLING_PREFIX_STR))
@@ -150,6 +155,10 @@ std::string Mangler::finalize() {
150155
verify(result, Flavor);
151156
break;
152157
}
158+
#else
159+
if (StringRef(result).starts_with(MANGLING_PREFIX_STR))
160+
verify(result, Flavor);
161+
#endif
153162
#endif
154163

155164
return result;
@@ -184,6 +193,7 @@ void Mangler::verify(StringRef nameStr, ManglingFlavor Flavor) {
184193
// It should be kept in sync.
185194
assert(StringRef(MANGLING_PREFIX_STR) != "_S" && "redundant check");
186195

196+
#if 0 // STAGING: To be switched over to soon.
187197
switch (Flavor) {
188198
case ManglingFlavor::Default:
189199
buffer += MANGLING_PREFIX_STR;
@@ -192,6 +202,9 @@ void Mangler::verify(StringRef nameStr, ManglingFlavor Flavor) {
192202
buffer += MANGLING_PREFIX_EMBEDDED_STR;
193203
break;
194204
}
205+
#else
206+
buffer += MANGLING_PREFIX_STR;
207+
#endif
195208

196209
buffer += nameStr;
197210
nameStr = buffer.str();

lib/Demangling/Remangler.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1795,6 +1795,7 @@ ManglingError Remangler::mangleGetter(Node *node, unsigned depth) {
17951795
}
17961796

17971797
ManglingError Remangler::mangleGlobal(Node *node, unsigned depth) {
1798+
#if 0 // STAGING: To be switched over to soon.
17981799
switch (Flavor) {
17991800
case ManglingFlavor::Default:
18001801
Buffer << MANGLING_PREFIX_STR;
@@ -1803,6 +1804,9 @@ ManglingError Remangler::mangleGlobal(Node *node, unsigned depth) {
18031804
Buffer << MANGLING_PREFIX_EMBEDDED_STR;
18041805
break;
18051806
}
1807+
#else
1808+
Buffer << MANGLING_PREFIX_STR;
1809+
#endif
18061810
bool mangleInReverseOrder = false;
18071811
for (auto Iter = node->begin(), End = node->end(); Iter != End; ++Iter) {
18081812
Node *Child = *Iter;

0 commit comments

Comments
 (0)