@@ -825,7 +825,7 @@ static bool isViableForReTypeCheck(const Solution &S) {
825
825
}
826
826
827
827
bool TypeChecker::typeCheckForCodeCompletion (
828
- SolutionApplicationTarget &target,
828
+ SolutionApplicationTarget &target, bool needsPrecheck,
829
829
llvm::function_ref<void (const Solution &)> callback) {
830
830
auto *DC = target.getDeclContext ();
831
831
auto &Context = DC->getASTContext ();
@@ -867,7 +867,7 @@ bool TypeChecker::typeCheckForCodeCompletion(
867
867
// (that are type-checked together with enclosing context)
868
868
// and regular closures which are type-checked separately.
869
869
870
- {
870
+ if (needsPrecheck) {
871
871
// First, pre-check the expression, validating any types that occur in the
872
872
// expression and folding sequence expressions.
873
873
auto failedPreCheck = ConstraintSystem::preCheckExpression (
@@ -953,18 +953,8 @@ bool TypeChecker::typeCheckForCodeCompletion(
953
953
fallback->DC , CTP_Unused,
954
954
/* contextualType=*/ Type (),
955
955
/* isDiscarded=*/ true );
956
- if (fallback->SeparatePrecheck ) {
957
- typeCheckForCodeCompletion (completionTarget, callback);
958
- return true ;
959
- }
960
-
961
- switch (solveForCodeCompletion (completionTarget)) {
962
- case CompletionResult::Ok:
963
- case CompletionResult::Fallback:
964
- break ;
965
- case CompletionResult::NotApplicable:
966
- llvm_unreachable (" fallback expr not applicable?" );
967
- }
956
+ typeCheckForCodeCompletion (completionTarget, fallback->SeparatePrecheck ,
957
+ callback);
968
958
}
969
959
return true ;
970
960
}
@@ -1084,7 +1074,8 @@ void DotExprTypeCheckCompletionCallback::fallbackTypeCheck() {
1084
1074
/* isDiscared=*/ true );
1085
1075
1086
1076
TypeChecker::typeCheckForCodeCompletion (
1087
- completionTarget, [&](const Solution &S) { sawSolution (S); });
1077
+ completionTarget, /* needsPrecheck*/ true ,
1078
+ [&](const Solution &S) { sawSolution (S); });
1088
1079
}
1089
1080
1090
1081
void DotExprTypeCheckCompletionCallback::
0 commit comments