@@ -386,19 +386,21 @@ Type TypeChecker::typeCheckExpression(Expr *&expr, DeclContext *dc,
386386// instead of each individual syntactic element types.
387387std::optional<SyntacticElementTarget>
388388TypeChecker::typeCheckExpression (SyntacticElementTarget &target,
389- TypeCheckExprOptions options) {
389+ TypeCheckExprOptions options,
390+ DiagnosticTransaction *diagnosticTransaction) {
390391 DeclContext *dc = target.getDeclContext ();
391392 auto &Context = dc->getASTContext ();
392393 FrontendStatsTracer StatsTracer (Context.Stats , " typecheck-expr" ,
393394 target.getAsExpr ());
394395 PrettyStackTraceExpr stackTrace (Context, " type-checking" , target.getAsExpr ());
395396
396- return typeCheckTarget (target, options);
397+ return typeCheckTarget (target, options, diagnosticTransaction );
397398}
398399
399400std::optional<SyntacticElementTarget>
400401TypeChecker::typeCheckTarget (SyntacticElementTarget &target,
401- TypeCheckExprOptions options) {
402+ TypeCheckExprOptions options,
403+ DiagnosticTransaction *diagnosticTransaction) {
402404 auto errorResult = [&]() -> std::optional<SyntacticElementTarget> {
403405 // Fill in ErrorTypes for the target if we can.
404406 if (!options.contains (TypeCheckExprFlags::AvoidInvalidatingAST))
@@ -435,7 +437,7 @@ TypeChecker::typeCheckTarget(SyntacticElementTarget &target,
435437 if (options.contains (TypeCheckExprFlags::DisableMacroExpansions))
436438 csOptions |= ConstraintSystemFlags::DisableMacroExpansions;
437439
438- ConstraintSystem cs (dc, csOptions);
440+ ConstraintSystem cs (dc, csOptions, diagnosticTransaction );
439441
440442 if (auto *expr = target.getAsExpr ()) {
441443 // Tell the constraint system what the contextual type is. This informs
@@ -523,7 +525,8 @@ Type TypeChecker::typeCheckParameterDefault(Expr *&defaultValue,
523525 // First, let's try to type-check default expression using
524526 // archetypes, which guarantees that it would work for any
525527 // substitution of the generic parameter (if they are involved).
526- if (auto result = typeCheckExpression (defaultExprTarget, options)) {
528+ if (auto result = typeCheckExpression (
529+ defaultExprTarget, options, &diagnostics)) {
527530 defaultValue = result->getAsExpr ();
528531 return defaultValue->getType ();
529532 }
0 commit comments