2121#define SWIFT_INITIALIZER_H
2222
2323#include " swift/AST/DeclContext.h"
24- #include " swift/AST/Decl.h"
2524
2625namespace swift {
26+ class ParamDecl ;
2727class PatternBindingDecl ;
2828
2929enum class InitializerKind : uint8_t {
@@ -76,28 +76,25 @@ class PatternBindingInitializer : public Initializer {
7676 // created lazily for 'self' lookup from lazy property initializer
7777 ParamDecl *SelfParam;
7878
79- friend class ASTContext ; // calls reset on unused contexts
79+ // Sets itself as the parent.
80+ friend class PatternBindingDecl ;
8081
81- void reset (DeclContext *parent) {
82- setParent (parent);
83- Binding = nullptr ;
84- SelfParam = nullptr ;
85- }
82+ void setBinding (PatternBindingDecl *binding, unsigned bindingIndex);
8683
87- public:
8884 explicit PatternBindingInitializer (DeclContext *parent)
8985 : Initializer(InitializerKind::PatternBinding, parent),
9086 Binding(nullptr ), SelfParam(nullptr ) {
9187 SpareBits = 0 ;
9288 }
93-
9489
95- void setBinding (PatternBindingDecl *binding, unsigned bindingIndex) {
96- setParent (binding->getDeclContext ());
97- Binding = binding;
98- SpareBits = bindingIndex;
90+ public:
91+ static PatternBindingInitializer *create (DeclContext *parent) {
92+ return new (parent->getASTContext ()) PatternBindingInitializer (parent);
9993 }
100-
94+
95+ static PatternBindingInitializer *createDeserialized (PatternBindingDecl *PBD,
96+ unsigned index);
97+
10198 PatternBindingDecl *getBinding () const { return Binding; }
10299
103100 unsigned getBindingIndex () const { return SpareBits; }
@@ -119,37 +116,6 @@ class PatternBindingInitializer : public Initializer {
119116 }
120117};
121118
122- // / SerializedPatternBindingInitializer - This represents what was originally a
123- // / PatternBindingInitializer during serialization. It is preserved as a special
124- // / class only to maintain the correct AST structure and remangling after
125- // / deserialization.
126- class SerializedPatternBindingInitializer : public SerializedLocalDeclContext {
127- PatternBindingDecl *Binding;
128-
129- public:
130- SerializedPatternBindingInitializer (PatternBindingDecl *Binding,
131- unsigned bindingIndex)
132- : SerializedLocalDeclContext(LocalDeclContextKind::PatternBindingInitializer,
133- Binding->getDeclContext ()),
134- Binding(Binding) {
135- SpareBits = bindingIndex;
136- }
137-
138- PatternBindingDecl *getBinding () const {
139- return Binding;
140- }
141-
142- unsigned getBindingIndex () const { return SpareBits; }
143-
144-
145- static bool classof (const DeclContext *DC) {
146- if (auto LDC = dyn_cast<SerializedLocalDeclContext>(DC))
147- return LDC->getLocalDeclContextKind () ==
148- LocalDeclContextKind::PatternBindingInitializer;
149- return false ;
150- }
151- };
152-
153119// / A default argument expression. The parent context is the function
154120// / (possibly a closure) for which this is a default argument.
155121class DefaultArgumentInitializer : public Initializer {
@@ -176,29 +142,6 @@ class DefaultArgumentInitializer : public Initializer {
176142 }
177143};
178144
179- // / SerializedDefaultArgumentInitializer - This represents what was originally a
180- // / DefaultArgumentInitializer during serialization. It is preserved only to
181- // / maintain the correct AST structure and remangling after deserialization.
182- class SerializedDefaultArgumentInitializer : public SerializedLocalDeclContext {
183- const unsigned Index;
184- public:
185- SerializedDefaultArgumentInitializer (unsigned Index, DeclContext *Parent)
186- : SerializedLocalDeclContext(LocalDeclContextKind::DefaultArgumentInitializer,
187- Parent),
188- Index (Index) {}
189-
190- unsigned getIndex () const {
191- return Index;
192- }
193-
194- static bool classof (const DeclContext *DC) {
195- if (auto LDC = dyn_cast<SerializedLocalDeclContext>(DC))
196- return LDC->getLocalDeclContextKind () ==
197- LocalDeclContextKind::DefaultArgumentInitializer;
198- return false ;
199- }
200- };
201-
202145// / A property wrapper initialization expression. The parent context is the
203146// / function or closure which owns the property wrapper.
204147class PropertyWrapperInitializer : public Initializer {
0 commit comments