Merge pull request #30045 from DougGregor/function-builders-if-let

[Constraint system] Support if let / if case in function builders.
This commit is contained in:
Doug Gregor
2020-02-25 16:24:09 -08:00
committed by GitHub
7 changed files with 224 additions and 184 deletions

View File

@@ -4122,6 +4122,7 @@ SolutionApplicationTarget::SolutionApplicationTarget(
expression.pattern = nullptr;
expression.wrappedVar = nullptr;
expression.isDiscarded = isDiscarded;
expression.bindPatternVarsOneWay = false;
}
void SolutionApplicationTarget::maybeApplyPropertyWrapper() {
@@ -4176,7 +4177,8 @@ void SolutionApplicationTarget::maybeApplyPropertyWrapper() {
}
SolutionApplicationTarget SolutionApplicationTarget::forInitialization(
Expr *initializer, DeclContext *dc, Type patternType, Pattern *pattern) {
Expr *initializer, DeclContext *dc, Type patternType, Pattern *pattern,
bool bindPatternVarsOneWay) {
// Determine the contextual type for the initialization.
TypeLoc contextualType;
if (!isa<OptionalSomePattern>(pattern) &&
@@ -4198,6 +4200,7 @@ SolutionApplicationTarget SolutionApplicationTarget::forInitialization(
initializer, dc, CTP_Initialization, contextualType,
/*isDiscarded=*/false);
target.expression.pattern = pattern;
target.expression.bindPatternVarsOneWay = bindPatternVarsOneWay;
target.maybeApplyPropertyWrapper();
return target;
}