@@ -74,9 +74,9 @@ class alignas(8) Pattern : public ASTAllocated<Pattern> {
7474 Value : 1
7575 );
7676
77- SWIFT_INLINE_BITFIELD (BindingPattern, Pattern, 1 ,
78- // / True if this is a let pattern, false if a var pattern.
79- IsLet : 1
77+ SWIFT_INLINE_BITFIELD (BindingPattern, Pattern, 2 ,
78+ // / Corresponds to VarDecl::Introducer
79+ Introducer : 1
8080 );
8181
8282 SWIFT_INLINE_BITFIELD (AnyPattern, Pattern, 1 ,
@@ -701,20 +701,30 @@ class ExprPattern : public Pattern {
701701class BindingPattern : public Pattern {
702702 SourceLoc VarLoc;
703703 Pattern *SubPattern;
704+
704705public:
705- BindingPattern (SourceLoc loc, bool isLet , Pattern *sub)
706+ BindingPattern (SourceLoc loc, VarDecl::Introducer introducer , Pattern *sub)
706707 : Pattern(PatternKind::Binding), VarLoc(loc), SubPattern(sub) {
707- Bits.BindingPattern .IsLet = isLet;
708+ setIntroducer (introducer);
709+ }
710+
711+ VarDecl::Introducer getIntroducer () const {
712+ return VarDecl::Introducer (Bits.BindingPattern .Introducer );
713+ }
714+
715+ void setIntroducer (VarDecl::Introducer introducer) {
716+ Bits.BindingPattern .Introducer = uint8_t (introducer);
708717 }
709718
710- static BindingPattern *createImplicit (ASTContext &Ctx, bool isLet,
719+ static BindingPattern *createImplicit (ASTContext &Ctx,
720+ VarDecl::Introducer introducer,
711721 Pattern *sub) {
712- auto *VP = new (Ctx) BindingPattern (SourceLoc (), isLet , sub);
722+ auto *VP = new (Ctx) BindingPattern (SourceLoc (), introducer , sub);
713723 VP->setImplicit ();
714724 return VP;
715725 }
716726
717- bool isLet () const { return Bits. BindingPattern . IsLet ; }
727+ bool isLet () const { return getIntroducer () == VarDecl::Introducer::Let ; }
718728
719729 SourceLoc getLoc () const { return VarLoc; }
720730 SourceRange getSourceRange () const {
0 commit comments