diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2014-02-14 13:21:34 -0800 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2014-02-14 13:21:34 -0800 |
commit | d227a89363886635969f4a7725303c6b65b0914b (patch) | |
tree | 433096b16268bf327f0a5678f5e29aff914407d6 /test/files/pos | |
parent | 35eb20283e7da0af28aaa0ae0d1051e21cc6c25d (diff) | |
parent | 5984461227c70dd48d9c87c6e5afe0cf8c58f8f1 (diff) | |
download | scala-d227a89363886635969f4a7725303c6b65b0914b.tar.gz scala-d227a89363886635969f4a7725303c6b65b0914b.tar.bz2 scala-d227a89363886635969f4a7725303c6b65b0914b.zip |
Merge pull request #3525 from adriaanm/t8177b
SI-8177 specializeSym must use memberInfo on high side
Diffstat (limited to 'test/files/pos')
-rw-r--r-- | test/files/pos/t0764.scala | 27 | ||||
-rw-r--r-- | test/files/pos/t0764b.scala | 61 | ||||
-rw-r--r-- | test/files/pos/t8177h.scala | 5 |
3 files changed, 5 insertions, 88 deletions
diff --git a/test/files/pos/t0764.scala b/test/files/pos/t0764.scala deleted file mode 100644 index f1084f5ff8..0000000000 --- a/test/files/pos/t0764.scala +++ /dev/null @@ -1,27 +0,0 @@ -class Top[A] { - type AType = A -} - -trait Node { outer => - type T <: Node - def prepend = new Node { type T = outer.type } -} - -class Main[NextType <: Node](value: Node { type T = NextType }) - extends Top[Node { type T = NextType }] { - - new Main[AType]( (value: AType).prepend ) -} - -/* this used to be a neg test, even though it should've compiled -SI-8177 fixed this. - -Behold the equivalent program which type checks without the fix for SI-8177. -(Expand type alias, convert type member to type param; -note the covariance to encode subtyping on type members.) - -class Node[+T <: Node[_]] { def prepend = new Node[this.type] } -class Main[NextType <: Node[_]](value: Node[NextType]) { - new Main(value.prepend) -} -*/
\ No newline at end of file diff --git a/test/files/pos/t0764b.scala b/test/files/pos/t0764b.scala deleted file mode 100644 index 6ae3c105c9..0000000000 --- a/test/files/pos/t0764b.scala +++ /dev/null @@ -1,61 +0,0 @@ -// In all cases when calling "prepend" the receiver 'v' -// has static type NodeAlias[A] or (equivalently) Node { type T = A }. -// Since prepend explicitly returns the singleton type of the receiver, -// the return type of prepend in all cases is "v.type", and so the call -// to "new Main" can be parameterized with any of the following, in order -// of decreasing specificity with a tie for second place: -// -// new Main[v.type](v.prepend) -// new Main[NodeAlias[A]](v.prepend) -// new Main[Node { type T = A }](v.prepend) -// new Main(v.prepend) - -// the `fail` comments below denote what didn't compile before SI-8177 fixed all of them - -package p1 { - object t0764 { - type NodeAlias[A] = Node { type T = A } - trait Node { outer => - type T <: Node - def prepend: Node { type T = outer.type } = ??? - } - - class Main1[A <: Node](v: NodeAlias[A]) { - private[this] def f1 = new Main1(v.prepend) // fail - private[this] def f2 = new Main1[NodeAlias[A]](v.prepend) // fail - private[this] def f3 = new Main1[Node { type T = A }](v.prepend) // fail - private[this] def f4 = new Main1[v.type](v.prepend) // ok - } - - class Main2[A <: Node](v: Node { type T = A }) { - private[this] def f1 = new Main2(v.prepend) // fail - private[this] def f2 = new Main2[NodeAlias[A]](v.prepend) // fail - private[this] def f3 = new Main2[Node { type T = A }](v.prepend) // fail - private[this] def f4 = new Main2[v.type](v.prepend) // ok - } - } -} - -package p2 { - object t0764 { - type NodeAlias[A] = Node { type T = A } - trait Node { outer => - type T <: Node - def prepend: NodeAlias[outer.type] = ??? - } - - class Main1[A <: Node](v: NodeAlias[A]) { - private[this] def f1 = new Main1(v.prepend) // ok! <<========== WOT - private[this] def f2 = new Main1[NodeAlias[A]](v.prepend) // fail - private[this] def f3 = new Main1[Node { type T = A }](v.prepend) // fail - private[this] def f4 = new Main1[v.type](v.prepend) // ok - } - - class Main2[A <: Node](v: Node { type T = A }) { - private[this] def f1 = new Main2(v.prepend) // fail - private[this] def f2 = new Main2[NodeAlias[A]](v.prepend) // fail - private[this] def f3 = new Main2[Node { type T = A }](v.prepend) // fail - private[this] def f4 = new Main2[v.type](v.prepend) // ok - } - } -} diff --git a/test/files/pos/t8177h.scala b/test/files/pos/t8177h.scala new file mode 100644 index 0000000000..90b8a26ce7 --- /dev/null +++ b/test/files/pos/t8177h.scala @@ -0,0 +1,5 @@ +class Module { self => + type settingsType <: Any + final type commonModuleType = Module {type settingsType = self.settingsType} + def foo(s: self.type): commonModuleType = s +} |