@@ -76,6 +76,9 @@ namespace {
76
76
private:
77
77
SpaceKind Kind;
78
78
llvm::PointerIntPair<Type, 1 , bool > TypeAndVal;
79
+
80
+ // In type space, we reuse HEAD to help us print meaningful name, e.g.,
81
+ // tuple element name in fixits.
79
82
Identifier Head;
80
83
std::forward_list<Space> Spaces;
81
84
@@ -134,8 +137,8 @@ namespace {
134
137
}
135
138
136
139
public:
137
- explicit Space (Type T)
138
- : Kind (SpaceKind::Type), TypeAndVal (T, false ), Head (Identifier () ),
140
+ explicit Space (Type T, Identifier NameForPrinting )
141
+ : Kind (SpaceKind::Type), TypeAndVal (T, false ), Head (NameForPrinting ),
139
142
Spaces ({}){}
140
143
explicit Space (Type T, Identifier H, bool downgrade,
141
144
SmallVectorImpl<Space> &SP)
@@ -189,6 +192,12 @@ namespace {
189
192
return Head;
190
193
}
191
194
195
+ Identifier getPrintingName () const {
196
+ assert (getKind () == SpaceKind::Type
197
+ && " Wrong kind of space tried to access printing name" );
198
+ return Head;
199
+ }
200
+
192
201
const std::forward_list<Space> &getSpaces () const {
193
202
assert ((getKind () == SpaceKind::Constructor
194
203
|| getKind () == SpaceKind::Disjunct)
@@ -750,7 +759,11 @@ namespace {
750
759
if (!forDisplay) {
751
760
getType ()->print (buffer);
752
761
}
753
- buffer << " _" ;
762
+ Identifier Name = getPrintingName ();
763
+ if (Name.empty ())
764
+ buffer << " _" ;
765
+ else
766
+ buffer << tok::kw_let << " " << Name.str ();
754
767
break ;
755
768
}
756
769
}
@@ -865,10 +878,11 @@ namespace {
865
878
TTy->getElements ().end (),
866
879
std::back_inserter (constElemSpaces),
867
880
[&](TupleTypeElt ty){
868
- return Space (ty.getType ());
881
+ return Space (ty.getType (), ty. getName () );
869
882
});
870
883
} else if (auto *TTy = dyn_cast<ParenType>(eedTy.getPointer ())) {
871
- constElemSpaces.push_back (Space (TTy->getUnderlyingType ()));
884
+ constElemSpaces.push_back (Space (TTy->getUnderlyingType (),
885
+ Identifier ()));
872
886
}
873
887
}
874
888
return Space (tp, eed->getName (),
@@ -882,7 +896,7 @@ namespace {
882
896
std::transform (TTy->getElements ().begin (), TTy->getElements ().end (),
883
897
std::back_inserter (constElemSpaces),
884
898
[&](TupleTypeElt ty){
885
- return Space (ty.getType ());
899
+ return Space (ty.getType (), ty. getName () );
886
900
});
887
901
// Create an empty constructor head for the tuple space.
888
902
arr.push_back (Space (tp, Identifier (), /* canDowngrade*/ false ,
@@ -943,7 +957,7 @@ namespace {
943
957
}
944
958
}
945
959
946
- Space totalSpace (Switch->getSubjectExpr ()->getType ());
960
+ Space totalSpace (Switch->getSubjectExpr ()->getType (), Identifier () );
947
961
Space coveredSpace (spaces);
948
962
size_t totalSpaceSize = totalSpace.getSize (TC);
949
963
if (totalSpaceSize > Space::getMaximumSize ()) {
@@ -1218,8 +1232,9 @@ namespace {
1218
1232
bool &sawDowngradablePattern) {
1219
1233
switch (item->getKind ()) {
1220
1234
case PatternKind::Any:
1235
+ return Space (item->getType (), Identifier ());
1221
1236
case PatternKind::Named:
1222
- return Space (item->getType ());
1237
+ return Space (item->getType (), cast<NamedPattern>(item)-> getBoundName () );
1223
1238
case PatternKind::Bool: {
1224
1239
return Space (cast<BoolPattern>(item)->getValue ());
1225
1240
}
@@ -1231,7 +1246,7 @@ namespace {
1231
1246
// These coercions are irrefutable. Project with the original type
1232
1247
// instead of the cast's target type to maintain consistency with the
1233
1248
// scrutinee's type.
1234
- return Space (IP->getType ());
1249
+ return Space (IP->getType (), Identifier () );
1235
1250
case CheckedCastKind::Unresolved:
1236
1251
case CheckedCastKind::ValueCast:
1237
1252
case CheckedCastKind::ArrayDowncast:
@@ -1316,7 +1331,7 @@ namespace {
1316
1331
|| SP->getKind () == PatternKind::Tuple) {
1317
1332
if (auto *TTy = SP->getType ()->getAs <TupleType>()) {
1318
1333
for (auto ty : TTy->getElements ()) {
1319
- conArgSpace.push_back (Space (ty.getType ()));
1334
+ conArgSpace.push_back (Space (ty.getType (), ty. getName () ));
1320
1335
}
1321
1336
} else {
1322
1337
conArgSpace.push_back (projectPattern (TC, SP,
0 commit comments