summaryrefslogtreecommitdiff
path: root/test/files/pos
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2014-02-14 13:21:34 -0800
committerAdriaan Moors <adriaan.moors@typesafe.com>2014-02-14 13:21:34 -0800
commitd227a89363886635969f4a7725303c6b65b0914b (patch)
tree433096b16268bf327f0a5678f5e29aff914407d6 /test/files/pos
parent35eb20283e7da0af28aaa0ae0d1051e21cc6c25d (diff)
parent5984461227c70dd48d9c87c6e5afe0cf8c58f8f1 (diff)
downloadscala-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.scala27
-rw-r--r--test/files/pos/t0764b.scala61
-rw-r--r--test/files/pos/t8177h.scala5
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
+}