diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2015-11-26 14:26:33 +1000 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2016-02-01 13:23:20 +1000 |
commit | 6f8c05722ba4452279e353df2d81b58f260277d2 (patch) | |
tree | 2388344a8a22a4a059977e0d021bbb589017c254 /test/files/pos/t9542.scala | |
parent | 907fe03e57b3cac4d0a67663edcd2b3b040e6ff8 (diff) | |
download | scala-6f8c05722ba4452279e353df2d81b58f260277d2.tar.gz scala-6f8c05722ba4452279e353df2d81b58f260277d2.tar.bz2 scala-6f8c05722ba4452279e353df2d81b58f260277d2.zip |
SI-9542 Unify different reprs. of module type refs
The new unit test shows failures in transitivity of subtyping
and type equivalence, which boil down the the inconsistent
handling of the semantically equivalent:
ThisType(pre, ModuleClass)
ModuleTypeRef(pre, ModuleClass)
SingleType(pre, Module)
This commit:
- adds a case to `normalizePlus` to unwrap a `ThisType` to
a `ModuleTypeRef`
- Use `normalizePlus` more widely during subtype comparison
- refactor `fourthTry` (part of `isSubType`) to remove code
that becomes obviated by the use of `normalizePlus`.
This fixes the regression in the extension methods phase which
was triggered by https://github.com/scala/scala/pull/4749.
We can also fix that regression by tweaking the extension methods
phase itself to emit the `ThisType` representation of the owner
of the value class, as before.
I plan to demonstrate the two approaches to fixing the regression
on separate branches, and the propose that the merged result of these
two is useds.
Diffstat (limited to 'test/files/pos/t9542.scala')
-rw-r--r-- | test/files/pos/t9542.scala | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/test/files/pos/t9542.scala b/test/files/pos/t9542.scala new file mode 100644 index 0000000000..d65f7ac4c6 --- /dev/null +++ b/test/files/pos/t9542.scala @@ -0,0 +1,8 @@ +object O { + trait T + + class VC(val self: Any) extends AnyVal { + def extMethod(f: F1[T, Any]) = () + } +} +trait F1[A, B] |