aboutsummaryrefslogtreecommitdiff
path: root/tests/pos/t5577.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-06-07 18:26:43 +0200
committerMartin Odersky <odersky@gmail.com>2015-06-07 18:26:53 +0200
commit5733fdbd3ed3e8036992ee690bbd8270a36471a2 (patch)
treef5e86a799c19feed6a7d7c4efd7e9b23ee5ebaae /tests/pos/t5577.scala
parentcb2d81df7ef98e79874bf74227045a64ce86e75f (diff)
downloaddotty-5733fdbd3ed3e8036992ee690bbd8270a36471a2.tar.gz
dotty-5733fdbd3ed3e8036992ee690bbd8270a36471a2.tar.bz2
dotty-5733fdbd3ed3e8036992ee690bbd8270a36471a2.zip
Fix mergeDenot one more time.
It's easy to get this wrong. What happened was that when computing deferred members of a class a deferred member was preferred over a concrete one because the types did not match. Thsi should not happen. We now change the scheme to always prefer concrete over abstract, and subclass-owned over superclass-owned. But we pick a denotation only if the overrides relationship on types coincides with the preference on symbols.
Diffstat (limited to 'tests/pos/t5577.scala')
-rw-r--r--tests/pos/t5577.scala27
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/pos/t5577.scala b/tests/pos/t5577.scala
new file mode 100644
index 000000000..d54a37e45
--- /dev/null
+++ b/tests/pos/t5577.scala
@@ -0,0 +1,27 @@
+
+
+
+import collection._
+
+
+
+object Test {
+
+ class AlarmingBuffer[T] extends mutable.ArrayBuffer[T] {
+ override def sizeHint(x: Int): Unit = {
+ println("Received a size hint: " + x)
+ super.sizeHint(x)
+ }
+ }
+
+ def main(args: Array[String]): Unit = {
+ val iteratorBuilder = (new AlarmingBuffer[Int]) mapResult {
+ res => res.iterator
+ }
+
+ iteratorBuilder.sizeHint(10)
+ iteratorBuilder ++= (0 until 10)
+ iteratorBuilder.result.foreach(println)
+ }
+
+}