diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2014-02-13 12:28:06 -0800 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2014-02-13 18:53:06 -0800 |
commit | 33fc68171105bb8d884219381c220076c5651316 (patch) | |
tree | d09484d6b415d5877e6dde5a3ead189ec6952414 /test/files/neg/t6539.check | |
parent | c83e01d47d941265fa5415c0f29a884c904fdfa0 (diff) | |
download | scala-33fc68171105bb8d884219381c220076c5651316.tar.gz scala-33fc68171105bb8d884219381c220076c5651316.tar.bz2 scala-33fc68171105bb8d884219381c220076c5651316.zip |
SI-8177 specializeSym must use memberInfo on high side
When determining whether member `symLo` of `tpLo`
has a stronger type than member `symHi` of `tpHi`,
should we use memberType or memberInfo?
Well, memberType transforms (using `asSeenFrom`) `sym.tpe`,
whereas memberInfo performs the same transform on `sym.info`.
For term symbols, this ends up being the same thing (`sym.tpe == sym.info`).
For type symbols, however, the `.info` of an abstract type member
is defined by its bounds, whereas its `.tpe` is a `TypeRef` to that type symbol,
so that `sym.tpe <:< sym.info`, but not the other way around.
Thus, for the strongest (correct) result,
we should use `memberType` on the low side.
On the high side, we should use the result appropriate
for the right side of the `<:<` above (`memberInfo`).
I also optimized the method a little bit by avoiding calling memberType
if the symbol on the high side isn't eligble (e.g., it's a class).
PS: I had to add a workaround to reifyType, because
we now dealias a little less eagerly, which means
a type selection on refinement class symbols makes it to reify
this broke the t8104 tests.
I also had to update the run/t6992 test, which should now test the right thing.
Tests should be commented and/or use sensible names.
What is it testing? What is the expected outcome? We should not be left guessing.
Diffstat (limited to 'test/files/neg/t6539.check')
0 files changed, 0 insertions, 0 deletions