diff options
author | Martin Odersky <odersky@gmail.com> | 2016-05-06 12:30:55 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-05-23 16:11:45 +0200 |
commit | cd8bf2d69cf1463fa16a69badb2a839f540bb2fa (patch) | |
tree | 4662148486993086b3f488cd5e41cc7219e5ff5b /src/dotty/tools/dotc/typer/Applications.scala | |
parent | 3676baa4b1422f4ee46098aafc1ccd98f176bad4 (diff) | |
download | dotty-cd8bf2d69cf1463fa16a69badb2a839f540bb2fa.tar.gz dotty-cd8bf2d69cf1463fa16a69badb2a839f540bb2fa.tar.bz2 dotty-cd8bf2d69cf1463fa16a69badb2a839f540bb2fa.zip |
Hooks to check that comparisons with == / != make sense
Also, check that pattern matching against idents/selects/literals makes
sense.
The hooks perform an implicit search for an instance of `Eq[L, R]`, where
`L`, `R` are the argument types. So far this always succeeeds because Eq.eqAny
matches all such types. A separate commit will check the returned
search term for validity.
Diffstat (limited to 'src/dotty/tools/dotc/typer/Applications.scala')
-rw-r--r-- | src/dotty/tools/dotc/typer/Applications.scala | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/typer/Applications.scala b/src/dotty/tools/dotc/typer/Applications.scala index 6ce98606b..2b0cc4033 100644 --- a/src/dotty/tools/dotc/typer/Applications.scala +++ b/src/dotty/tools/dotc/typer/Applications.scala @@ -603,7 +603,17 @@ trait Applications extends Compatibility { self: Typer => failedVal } } - else realApply + else { + val app = realApply + app match { + case Apply(fn @ Select(left, _), right :: Nil) if fn.hasType => + val op = fn.symbol + if (op == defn.Any_== || op == defn.Any_!=) + checkCanEqual(left.tpe.widen, right.tpe.widen, app.pos) + case _ => + } + app + } } /** Overridden in ReTyper to handle primitive operations that can be generated after erasure */ |