diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2014-07-07 14:53:22 +0200 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2014-07-17 15:44:54 +0200 |
commit | 67651e220a6a4d1d1ee1004766d5b1e33fd46531 (patch) | |
tree | 733fa3a2f64352e3d7b3ff628aca4555c237da05 /src/compiler/scala/tools/nsc/typechecker/Implicits.scala | |
parent | 2aa1f1e249596b6d629be35170bdbea7ea14cbe2 (diff) | |
download | scala-67651e220a6a4d1d1ee1004766d5b1e33fd46531.tar.gz scala-67651e220a6a4d1d1ee1004766d5b1e33fd46531.tar.bz2 scala-67651e220a6a4d1d1ee1004766d5b1e33fd46531.zip |
Simplify (ambiguous) error issuing.
The two functional differences are:
- always add the diagnostics string
- check erroneousness in `issueAmbiguousTypeErrorUnlessErroneous`,
before even constructing the error message.
Consider this nugget:
```
- def issueAmbiguousError(pre: Type, sym1: Symbol, sym2: Symbol, err: AbsTypeError) {
- issueCommon(err) { case _ if ambiguousErrors =>
- if (!pre.isErroneous && !sym1.isErroneous && !sym2.isErroneous)
```
I'd like to state for the record that the if-erroneous in the
case of the partial function looked super-dodgy: it meant that,
when `ambiguousErrors`, `issueCommon` would not get to the `else` branches
that buffer or throw, and if the erroneous condition was met,
nothing would be issued/buffered/thrown.
This refactoring checks this condition up front.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Implicits.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Implicits.scala | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Implicits.scala b/src/compiler/scala/tools/nsc/typechecker/Implicits.scala index 73c3e6f016..6b5a70bffb 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Implicits.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Implicits.scala @@ -1381,6 +1381,7 @@ trait Implicits { def maybeInvalidConversionError(msg: String) { // We have to check context.ambiguousErrors even though we are calling "issueAmbiguousError" // which ostensibly does exactly that before issuing the error. Why? I have no idea. Test is pos/t7690. + // AM: I would guess it's because ambiguous errors will be buffered in silent mode if they are not reported if (context.ambiguousErrors) context.issueAmbiguousError(AmbiguousImplicitTypeError(tree, msg)) } |