[AST] Separate the DeclContexts for different pattern binding entries in a pattern binding decl.

This commit is contained in:
Doug Gregor
2016-09-01 15:27:52 -07:00
parent 4a24b069e0
commit 5e25d25c96
9 changed files with 83 additions and 42 deletions

View File

@@ -80,16 +80,20 @@ public:
explicit PatternBindingInitializer(DeclContext *parent)
: Initializer(InitializerKind::PatternBinding, parent),
Binding(nullptr) {
SpareBits = 0;
}
void setBinding(PatternBindingDecl *binding) {
void setBinding(PatternBindingDecl *binding, unsigned bindingIndex) {
setParent(binding->getDeclContext());
Binding = binding;
SpareBits = bindingIndex;
}
PatternBindingDecl *getBinding() const { return Binding; }
unsigned getBindingIndex() const { return SpareBits; }
static bool classof(const DeclContext *DC) {
if (auto init = dyn_cast<Initializer>(DC))
return classof(init);
@@ -108,15 +112,21 @@ class SerializedPatternBindingInitializer : public SerializedLocalDeclContext {
PatternBindingDecl *Binding;
public:
SerializedPatternBindingInitializer(PatternBindingDecl *Binding)
SerializedPatternBindingInitializer(PatternBindingDecl *Binding,
unsigned bindingIndex)
: SerializedLocalDeclContext(LocalDeclContextKind::PatternBindingInitializer,
Binding->getDeclContext()),
Binding(Binding) {}
Binding(Binding) {
SpareBits = bindingIndex;
}
PatternBindingDecl *getBinding() const {
return Binding;
}
unsigned getBindingIndex() const { return SpareBits; }
static bool classof(const DeclContext *DC) {
if (auto LDC = dyn_cast<SerializedLocalDeclContext>(DC))
return LDC->getLocalDeclContextKind() ==