@@ -55,7 +55,7 @@ class SyntacticElementTarget {
55
55
closure,
56
56
function,
57
57
stmtCondition,
58
- caseLabelItem ,
58
+ caseStmt ,
59
59
patternBinding,
60
60
uninitializedVar,
61
61
forEachStmt,
@@ -139,9 +139,14 @@ class SyntacticElementTarget {
139
139
} stmtCondition;
140
140
141
141
struct {
142
- CaseLabelItem *caseLabelItem;
142
+ CaseStmt *caseStmt;
143
+
144
+ // / The type to which the patterns in case label items should
145
+ // / be converted.
146
+ Type convertType;
147
+
143
148
DeclContext *dc;
144
- } caseLabelItem ;
149
+ } caseStmt ;
145
150
146
151
struct {
147
152
PatternBindingDecl *binding;
@@ -218,10 +223,12 @@ class SyntacticElementTarget {
218
223
function.body = body;
219
224
}
220
225
221
- SyntacticElementTarget (CaseLabelItem *caseLabelItem, DeclContext *dc) {
222
- kind = Kind::caseLabelItem;
223
- this ->caseLabelItem .caseLabelItem = caseLabelItem;
224
- this ->caseLabelItem .dc = dc;
226
+ SyntacticElementTarget (CaseStmt *caseStmt, Type convertType,
227
+ DeclContext *dc) {
228
+ kind = Kind::caseStmt;
229
+ this ->caseStmt .caseStmt = caseStmt;
230
+ this ->caseStmt .convertType = convertType;
231
+ this ->caseStmt .dc = dc;
225
232
}
226
233
227
234
SyntacticElementTarget (PatternBindingDecl *patternBinding) {
@@ -324,8 +331,8 @@ class SyntacticElementTarget {
324
331
case Kind::stmtCondition:
325
332
return ASTNode ();
326
333
327
- case Kind::caseLabelItem :
328
- return * getAsCaseLabelItem ();
334
+ case Kind::caseStmt :
335
+ return getAsCaseStmt ();
329
336
330
337
case Kind::patternBinding:
331
338
return getAsPatternBinding ();
@@ -343,7 +350,7 @@ class SyntacticElementTarget {
343
350
case Kind::closure:
344
351
case Kind::function:
345
352
case Kind::stmtCondition:
346
- case Kind::caseLabelItem :
353
+ case Kind::caseStmt :
347
354
case Kind::patternBinding:
348
355
case Kind::uninitializedVar:
349
356
case Kind::forEachStmt:
@@ -366,8 +373,8 @@ class SyntacticElementTarget {
366
373
case Kind::stmtCondition:
367
374
return stmtCondition.dc ;
368
375
369
- case Kind::caseLabelItem :
370
- return caseLabelItem .dc ;
376
+ case Kind::caseStmt :
377
+ return caseStmt .dc ;
371
378
372
379
case Kind::patternBinding:
373
380
return patternBinding->getDeclContext ();
@@ -598,7 +605,7 @@ class SyntacticElementTarget {
598
605
case Kind::expression:
599
606
case Kind::closure:
600
607
case Kind::stmtCondition:
601
- case Kind::caseLabelItem :
608
+ case Kind::caseStmt :
602
609
case Kind::patternBinding:
603
610
case Kind::uninitializedVar:
604
611
case Kind::forEachStmt:
@@ -615,7 +622,7 @@ class SyntacticElementTarget {
615
622
case Kind::expression:
616
623
case Kind::closure:
617
624
case Kind::function:
618
- case Kind::caseLabelItem :
625
+ case Kind::caseStmt :
619
626
case Kind::patternBinding:
620
627
case Kind::uninitializedVar:
621
628
case Kind::forEachStmt:
@@ -627,7 +634,13 @@ class SyntacticElementTarget {
627
634
llvm_unreachable (" invalid statement kind" );
628
635
}
629
636
630
- Optional<CaseLabelItem *> getAsCaseLabelItem () const {
637
+ // / Get the type to which patterns in the \c CaseStmt should be converted.
638
+ Type getCaseStmtContextualType () const {
639
+ assert (kind == Kind::caseStmt);
640
+ return caseStmt.convertType ;
641
+ }
642
+
643
+ CaseStmt *getAsCaseStmt () const {
631
644
switch (kind) {
632
645
case Kind::expression:
633
646
case Kind::closure:
@@ -636,10 +649,10 @@ class SyntacticElementTarget {
636
649
case Kind::patternBinding:
637
650
case Kind::uninitializedVar:
638
651
case Kind::forEachStmt:
639
- return None ;
652
+ return nullptr ;
640
653
641
- case Kind::caseLabelItem :
642
- return caseLabelItem. caseLabelItem ;
654
+ case Kind::caseStmt :
655
+ return caseStmt. caseStmt ;
643
656
}
644
657
llvm_unreachable (" invalid case label type" );
645
658
}
@@ -650,7 +663,7 @@ class SyntacticElementTarget {
650
663
case Kind::closure:
651
664
case Kind::function:
652
665
case Kind::stmtCondition:
653
- case Kind::caseLabelItem :
666
+ case Kind::caseStmt :
654
667
case Kind::uninitializedVar:
655
668
case Kind::forEachStmt:
656
669
return nullptr ;
@@ -667,7 +680,7 @@ class SyntacticElementTarget {
667
680
case Kind::closure:
668
681
case Kind::function:
669
682
case Kind::stmtCondition:
670
- case Kind::caseLabelItem :
683
+ case Kind::caseStmt :
671
684
case Kind::patternBinding:
672
685
case Kind::forEachStmt:
673
686
return nullptr ;
@@ -684,7 +697,7 @@ class SyntacticElementTarget {
684
697
case Kind::closure:
685
698
case Kind::function:
686
699
case Kind::stmtCondition:
687
- case Kind::caseLabelItem :
700
+ case Kind::caseStmt :
688
701
case Kind::patternBinding:
689
702
case Kind::forEachStmt:
690
703
return nullptr ;
@@ -701,7 +714,7 @@ class SyntacticElementTarget {
701
714
case Kind::closure:
702
715
case Kind::function:
703
716
case Kind::stmtCondition:
704
- case Kind::caseLabelItem :
717
+ case Kind::caseStmt :
705
718
case Kind::patternBinding:
706
719
case Kind::uninitializedVar:
707
720
return nullptr ;
@@ -718,7 +731,7 @@ class SyntacticElementTarget {
718
731
case Kind::closure:
719
732
case Kind::function:
720
733
case Kind::stmtCondition:
721
- case Kind::caseLabelItem :
734
+ case Kind::caseStmt :
722
735
case Kind::patternBinding:
723
736
case Kind::forEachStmt:
724
737
return nullptr ;
@@ -735,7 +748,7 @@ class SyntacticElementTarget {
735
748
case Kind::closure:
736
749
case Kind::function:
737
750
case Kind::stmtCondition:
738
- case Kind::caseLabelItem :
751
+ case Kind::caseStmt :
739
752
case Kind::patternBinding:
740
753
case Kind::forEachStmt:
741
754
return nullptr ;
@@ -752,7 +765,7 @@ class SyntacticElementTarget {
752
765
case Kind::closure:
753
766
case Kind::function:
754
767
case Kind::stmtCondition:
755
- case Kind::caseLabelItem :
768
+ case Kind::caseStmt :
756
769
case Kind::patternBinding:
757
770
case Kind::forEachStmt:
758
771
return 0 ;
@@ -801,8 +814,8 @@ class SyntacticElementTarget {
801
814
return SourceRange (stmtCondition.stmtCondition .front ().getStartLoc (),
802
815
stmtCondition.stmtCondition .back ().getEndLoc ());
803
816
804
- case Kind::caseLabelItem :
805
- return caseLabelItem. caseLabelItem -> getSourceRange ();
817
+ case Kind::caseStmt :
818
+ return caseStmt. caseStmt -> getLabelItemsRange ();
806
819
807
820
case Kind::patternBinding:
808
821
return patternBinding->getSourceRange ();
@@ -845,8 +858,8 @@ class SyntacticElementTarget {
845
858
case Kind::stmtCondition:
846
859
return stmtCondition.stmtCondition .front ().getStartLoc ();
847
860
848
- case Kind::caseLabelItem :
849
- return caseLabelItem. caseLabelItem ->getStartLoc ();
861
+ case Kind::caseStmt :
862
+ return caseStmt. caseStmt ->getStartLoc ();
850
863
851
864
case Kind::patternBinding:
852
865
return patternBinding->getLoc ();
0 commit comments