Skip to content

Commit a050cfa

Browse files
committed
[AST] Make PatternBindingInitializer::setBinding private
And add some assertions to ensure we don't attempt to re-set the binding or index (the parent context can unfortunately change currently).
1 parent 150be31 commit a050cfa

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

include/swift/AST/Initializer.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,11 @@ class PatternBindingInitializer : public Initializer {
7676
// created lazily for 'self' lookup from lazy property initializer
7777
ParamDecl *SelfParam;
7878

79+
// Sets itself as the parent.
80+
friend class PatternBindingDecl;
81+
82+
void setBinding(PatternBindingDecl *binding, unsigned bindingIndex);
83+
7984
explicit PatternBindingInitializer(DeclContext *parent)
8085
: Initializer(InitializerKind::PatternBinding, parent),
8186
Binding(nullptr), SelfParam(nullptr) {
@@ -90,8 +95,6 @@ class PatternBindingInitializer : public Initializer {
9095
static PatternBindingInitializer *createDeserialized(PatternBindingDecl *PBD,
9196
unsigned index);
9297

93-
void setBinding(PatternBindingDecl *binding, unsigned bindingIndex);
94-
9598
PatternBindingDecl *getBinding() const { return Binding; }
9699

97100
unsigned getBindingIndex() const { return SpareBits; }

lib/AST/Decl.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2004,6 +2004,11 @@ ParamDecl *PatternBindingInitializer::getImplicitSelfDecl() const {
20042004

20052005
void PatternBindingInitializer::setBinding(PatternBindingDecl *binding,
20062006
unsigned bindingIndex) {
2007+
assert(binding);
2008+
assert(!Binding || Binding == binding &&
2009+
"Cannot change the binding after the fact");
2010+
assert(!Binding || SpareBits == bindingIndex &&
2011+
"Cannot change the binding index after the fact");
20072012
setParent(binding->getDeclContext());
20082013
Binding = binding;
20092014
SpareBits = bindingIndex;

0 commit comments

Comments
 (0)