@@ -54,9 +54,12 @@ class FailureDiagnostic {
54
54
// / failure location, types and declarations deduced by
55
55
// / constraint system, and other auxiliary information.
56
56
// /
57
+ // / \param asNote In ambiguity cases it's beneficial to
58
+ // / produce diagnostic as a note instead of an error if possible.
59
+ // /
57
60
// / \returns true If the problem has been successfully diagnosed
58
61
// / and diagnostic message emitted, false otherwise.
59
- virtual bool diagnose () = 0;
62
+ virtual bool diagnose (bool asNote = false ) = 0;
60
63
61
64
ConstraintSystem &getConstraintSystem () const {
62
65
return CS;
@@ -170,7 +173,7 @@ class RequirementFailure : public FailureDiagnostic {
170
173
virtual Type getLHS () const = 0;
171
174
virtual Type getRHS () const = 0;
172
175
173
- bool diagnose () override ;
176
+ bool diagnose (bool asNote = false ) override ;
174
177
175
178
protected:
176
179
// / Retrieve declaration contextual where current
@@ -221,7 +224,7 @@ class MissingConformanceFailure final : public RequirementFailure {
221
224
: RequirementFailure(expr, cs, locator),
222
225
NonConformingType (conformance.first), Protocol(conformance.second) {}
223
226
224
- bool diagnose () override ;
227
+ bool diagnose (bool asNote = false ) override ;
225
228
226
229
private:
227
230
// / The type which was expected, by one of the generic requirements,
@@ -327,7 +330,7 @@ class LabelingFailure final : public FailureDiagnostic {
327
330
ArrayRef<Identifier> labels)
328
331
: FailureDiagnostic(nullptr , cs, locator), CorrectLabels(labels) {}
329
332
330
- bool diagnose () override ;
333
+ bool diagnose (bool asNote = false ) override ;
331
334
};
332
335
333
336
// / Diagnose errors related to converting function type which
@@ -341,7 +344,7 @@ class NoEscapeFuncToTypeConversionFailure final : public FailureDiagnostic {
341
344
Type toType = Type())
342
345
: FailureDiagnostic(expr, cs, locator), ConvertTo(toType) {}
343
346
344
- bool diagnose () override ;
347
+ bool diagnose (bool asNote = false ) override ;
345
348
};
346
349
347
350
class MissingForcedDowncastFailure final : public FailureDiagnostic {
@@ -350,7 +353,7 @@ class MissingForcedDowncastFailure final : public FailureDiagnostic {
350
353
ConstraintLocator *locator)
351
354
: FailureDiagnostic(expr, cs, locator) {}
352
355
353
- bool diagnose () override ;
356
+ bool diagnose (bool asNote = false ) override ;
354
357
};
355
358
356
359
// / Diagnose failures related to passing value of some type
@@ -361,7 +364,7 @@ class MissingAddressOfFailure final : public FailureDiagnostic {
361
364
ConstraintLocator *locator)
362
365
: FailureDiagnostic(expr, cs, locator) {}
363
366
364
- bool diagnose () override ;
367
+ bool diagnose (bool asNote = false ) override ;
365
368
};
366
369
367
370
// / Diagnose failures related attempt to implicitly convert types which
@@ -375,7 +378,7 @@ class MissingExplicitConversionFailure final : public FailureDiagnostic {
375
378
ConstraintLocator *locator, Type toType)
376
379
: FailureDiagnostic(expr, cs, locator), ConvertingTo(toType) {}
377
380
378
- bool diagnose () override ;
381
+ bool diagnose (bool asNote = false ) override ;
379
382
380
383
private:
381
384
bool exprNeedsParensBeforeAddingAs (Expr *expr) {
@@ -416,7 +419,7 @@ class MemberAccessOnOptionalBaseFailure final : public FailureDiagnostic {
416
419
: FailureDiagnostic(expr, cs, locator), Member(memberName),
417
420
ResultTypeIsOptional (resultOptional) {}
418
421
419
- bool diagnose () override ;
422
+ bool diagnose (bool asNote = false ) override ;
420
423
};
421
424
422
425
// / Diagnose failures related to use of the unwrapped optional types,
@@ -427,7 +430,7 @@ class MissingOptionalUnwrapFailure final : public FailureDiagnostic {
427
430
ConstraintLocator *locator)
428
431
: FailureDiagnostic(expr, cs, locator) {}
429
432
430
- bool diagnose () override ;
433
+ bool diagnose (bool asNote = false ) override ;
431
434
};
432
435
433
436
// / Diagnose errors associated with rvalues in positions
@@ -438,7 +441,7 @@ class RValueTreatedAsLValueFailure final : public FailureDiagnostic {
438
441
RValueTreatedAsLValueFailure (ConstraintSystem &cs, ConstraintLocator *locator)
439
442
: FailureDiagnostic(nullptr , cs, locator) {}
440
443
441
- bool diagnose () override ;
444
+ bool diagnose (bool asNote = false ) override ;
442
445
};
443
446
444
447
} // end namespace constraints
0 commit comments