Skip to content

Commit e3261f6

Browse files
committed
[AST] Remove SerializedPatternBindingInitializer
This stores the same state as PatternBindingInitializer, we can use that instead.
1 parent fb0a75f commit e3261f6

File tree

8 files changed

+17
-61
lines changed

8 files changed

+17
-61
lines changed

include/swift/AST/DeclContext.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ namespace swift {
7979
class Initializer;
8080
class ClassDecl;
8181
class SerializedAbstractClosureExpr;
82-
class SerializedPatternBindingInitializer;
8382
class SerializedDefaultArgumentInitializer;
8483
class SerializedTopLevelCodeDecl;
8584
class StructDecl;
@@ -115,7 +114,6 @@ enum class DeclContextKind : unsigned {
115114
/// \see SerializedLocalDeclContext.
116115
enum class LocalDeclContextKind : uint8_t {
117116
AbstractClosure,
118-
PatternBindingInitializer,
119117
DefaultArgumentInitializer,
120118
TopLevelCodeDecl
121119
};

include/swift/AST/Initializer.h

Lines changed: 3 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ class PatternBindingInitializer : public Initializer {
9595
return new (parent->getASTContext()) PatternBindingInitializer(parent);
9696
}
9797

98+
static PatternBindingInitializer *createDeserialized(PatternBindingDecl *PBD,
99+
unsigned index);
100+
98101
void setBinding(PatternBindingDecl *binding, unsigned bindingIndex) {
99102
setParent(binding->getDeclContext());
100103
Binding = binding;
@@ -122,37 +125,6 @@ class PatternBindingInitializer : public Initializer {
122125
}
123126
};
124127

125-
/// SerializedPatternBindingInitializer - This represents what was originally a
126-
/// PatternBindingInitializer during serialization. It is preserved as a special
127-
/// class only to maintain the correct AST structure and remangling after
128-
/// deserialization.
129-
class SerializedPatternBindingInitializer : public SerializedLocalDeclContext {
130-
PatternBindingDecl *Binding;
131-
132-
public:
133-
SerializedPatternBindingInitializer(PatternBindingDecl *Binding,
134-
unsigned bindingIndex)
135-
: SerializedLocalDeclContext(LocalDeclContextKind::PatternBindingInitializer,
136-
Binding->getDeclContext()),
137-
Binding(Binding) {
138-
SpareBits = bindingIndex;
139-
}
140-
141-
PatternBindingDecl *getBinding() const {
142-
return Binding;
143-
}
144-
145-
unsigned getBindingIndex() const { return SpareBits; }
146-
147-
148-
static bool classof(const DeclContext *DC) {
149-
if (auto LDC = dyn_cast<SerializedLocalDeclContext>(DC))
150-
return LDC->getLocalDeclContextKind() ==
151-
LocalDeclContextKind::PatternBindingInitializer;
152-
return false;
153-
}
154-
};
155-
156128
/// A default argument expression. The parent context is the function
157129
/// (possibly a closure) for which this is a default argument.
158130
class DefaultArgumentInitializer : public Initializer {

lib/AST/ASTMangler.cpp

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2328,17 +2328,6 @@ void ASTMangler::appendContext(const DeclContext *ctx, StringRef useModuleName)
23282328
appendDefaultArgumentEntity(ctx->getParent(), argInit->getIndex());
23292329
return;
23302330
}
2331-
case LocalDeclContextKind::PatternBindingInitializer: {
2332-
auto patternInit = cast<SerializedPatternBindingInitializer>(local);
2333-
if (auto var = findFirstVariable(patternInit->getBinding())) {
2334-
appendInitializerEntity(var.value());
2335-
} else {
2336-
// This is incorrect in that it does not produce a /unique/ mangling,
2337-
// but it will at least produce a /valid/ mangling.
2338-
appendContext(ctx->getParent(), useModuleName);
2339-
}
2340-
return;
2341-
}
23422331
case LocalDeclContextKind::TopLevelCodeDecl:
23432332
return appendContext(local->getParent(), useModuleName);
23442333
}

lib/AST/Decl.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1961,6 +1961,14 @@ PatternBindingDecl *PatternBindingDecl::createDeserialized(
19611961
return PBD;
19621962
}
19631963

1964+
PatternBindingInitializer *
1965+
PatternBindingInitializer::createDeserialized(PatternBindingDecl *PBD,
1966+
unsigned index) {
1967+
auto *init = PatternBindingInitializer::create(PBD->getDeclContext());
1968+
init->setBinding(PBD, index);
1969+
return init;
1970+
}
1971+
19641972
ParamDecl *PatternBindingInitializer::getImplicitSelfDecl() const {
19651973
if (SelfParam)
19661974
return SelfParam;

lib/AST/DeclContext.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -829,12 +829,6 @@ unsigned DeclContext::printContext(raw_ostream &OS, const unsigned indent,
829829
OS << "DefaultArgument index=" << init->getIndex();
830830
break;
831831
}
832-
case LocalDeclContextKind::PatternBindingInitializer: {
833-
auto init = cast<SerializedPatternBindingInitializer>(local);
834-
OS << " PatternBinding 0x" << (void*) init->getBinding()
835-
<< " #" << init->getBindingIndex();
836-
break;
837-
}
838832
case LocalDeclContextKind::TopLevelCodeDecl:
839833
OS << " TopLevelCode";
840834
break;

lib/Serialization/Deserialization.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2657,10 +2657,10 @@ Expected<DeclContext *>ModuleFile::getLocalDeclContext(LocalDeclContextID DCID)
26572657
auto decl = getDecl(bindingID);
26582658
PatternBindingDecl *binding = cast<PatternBindingDecl>(decl);
26592659

2660-
if (!declContextOrOffset.isComplete())
2661-
declContextOrOffset = new (ctx)
2662-
SerializedPatternBindingInitializer(binding, bindingIndex);
2663-
2660+
if (!declContextOrOffset.isComplete()) {
2661+
declContextOrOffset =
2662+
PatternBindingInitializer::createDeserialized(binding, bindingIndex);
2663+
}
26642664
if (!blobData.empty())
26652665
binding->setInitStringRepresentation(bindingIndex, blobData);
26662666
break;

lib/Serialization/Serialization.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2504,11 +2504,6 @@ void Serializer::writeASTBlockEntity(const DeclContext *DC) {
25042504
writeDefaultArgumentInitializer(DAI->getParent(), DAI->getIndex());
25052505
return;
25062506
}
2507-
case LocalDeclContextKind::PatternBindingInitializer: {
2508-
auto PBI = cast<SerializedPatternBindingInitializer>(local);
2509-
writePatternBindingInitializer(PBI->getBinding(), PBI->getBindingIndex());
2510-
return;
2511-
}
25122507
case LocalDeclContextKind::TopLevelCodeDecl: {
25132508
auto abbrCode = DeclTypeAbbrCodes[TopLevelCodeDeclContextLayout::Code];
25142509
TopLevelCodeDeclContextLayout::emitRecord(Out, ScratchRecord,

test/TypeDecoder/generic_local_types.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ class Generic<T> {
175175
// DEMANGLE-DECL: $s19generic_local_types7GenericCfd7Alias15L_a
176176
// DEMANGLE-DECL: $s19generic_local_types7GenericC6methodyySiF6nestedL_yylF5AliasL_a
177177

178-
// CHECK-DECL: generic_local_types.(file).Generic.local context.local context.Alias1
178+
// CHECK-DECL: generic_local_types.(file).Generic.pattern binding initializer.local context.Alias1
179179
// CHECK-DECL: generic_local_types.(file).Generic.<anonymous>.Alias2
180180
// CHECK-DECL: generic_local_types.(file).Generic.<anonymous>.Alias3
181181
// CHECK-DECL: generic_local_types.(file).Generic.<anonymous>.Alias4
@@ -190,4 +190,4 @@ class Generic<T> {
190190
// CHECK-DECL: generic_local_types.(file).Generic.method(_:).Alias13
191191
// CHECK-DECL: generic_local_types.(file).Generic.init().Alias14
192192
// CHECK-DECL: generic_local_types.(file).Generic.deinit.Alias15
193-
// CHECK-DECL: generic_local_types.(file).Generic.method(_:).nested().Alias
193+
// CHECK-DECL: generic_local_types.(file).Generic.method(_:).nested().Alias

0 commit comments

Comments
 (0)