Skip to content

Commit ab97d03

Browse files
committed
Sema: Collect defaults in PotentialBindings::infer()
1 parent de17f25 commit ab97d03

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

include/swift/Sema/CSBindings.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,9 @@ struct PotentialBindings {
248248
/// The set of protocol conformance requirements imposed on this type variable.
249249
llvm::SmallVector<Constraint *, 4> Protocols;
250250

251+
/// The set of fallback constraints imposed on this type variable.
252+
llvm::SmallVector<Constraint *, 2> Defaults;
253+
251254
ASTNode AssociatedCodeCompletionToken = ASTNode();
252255

253256
/// Add a potential binding to the list of bindings,

lib/Sema/CSBindings.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,18 +61,17 @@ BindingSet::BindingSet(ConstraintSystem &CS, TypeVariableType *TypeVar,
6161
addLiteralRequirement(constraint);
6262
break;
6363

64-
case ConstraintKind::Defaultable:
65-
case ConstraintKind::FallbackType:
66-
// Do these in a separate pass.
67-
if (isDirectRequirement(CS, TypeVar, constraint))
68-
addDefault(constraint);
69-
break;
70-
7164
default:
7265
break;
7366
}
7467
}
7568

69+
for (auto *constraint : info.Defaults) {
70+
// Do these in a separate pass.
71+
if (isDirectRequirement(CS, TypeVar, constraint))
72+
addDefault(constraint);
73+
}
74+
7675
for (auto &entry : info.AdjacentVars)
7776
AdjacentVars.insert(entry.first);
7877
}
@@ -2085,9 +2084,12 @@ void PotentialBindings::infer(ConstraintSystem &CS,
20852084
case ConstraintKind::SameShape:
20862085
case ConstraintKind::MaterializePackExpansion:
20872086
case ConstraintKind::LiteralConformsTo:
2087+
// Constraints from which we can't do anything.
2088+
break;
2089+
20882090
case ConstraintKind::Defaultable:
20892091
case ConstraintKind::FallbackType:
2090-
// Constraints from which we can't do anything.
2092+
Defaults.push_back(constraint);
20912093
break;
20922094

20932095
// For now let's avoid inferring protocol requirements from

0 commit comments

Comments
 (0)