diff options
author | Martin Odersky <odersky@gmail.com> | 2014-10-17 15:35:11 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-10-26 16:24:00 +0100 |
commit | 3fea9472c0d068bc08ae764429ca6b4bca95bcd8 (patch) | |
tree | 06a7a208ec8e4afb1a3a964d64fb22e594c74c0c /tests/neg | |
parent | 25a8937f115ed2ac1af33c41c73a621dab4ee712 (diff) | |
download | dotty-3fea9472c0d068bc08ae764429ca6b4bca95bcd8.tar.gz dotty-3fea9472c0d068bc08ae764429ca6b4bca95bcd8.tar.bz2 dotty-3fea9472c0d068bc08ae764429ca6b4bca95bcd8.zip |
Avoid hoisting local classes
The patch disables hoisting of classes local to a block into the
result type of the block.
Instead, we widen the result type of the block to one which reflects
all refinements made to the parents type of the local class.
Test cases in avoid.scala, t1569.scala.
The original t1569.scala no longer works. Why is explained in neg/t1569-failedAvoid.scala
Diffstat (limited to 'tests/neg')
-rw-r--r-- | tests/neg/t1569-failedAvoid.scala | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/tests/neg/t1569-failedAvoid.scala b/tests/neg/t1569-failedAvoid.scala new file mode 100644 index 000000000..9d0fbb37a --- /dev/null +++ b/tests/neg/t1569-failedAvoid.scala @@ -0,0 +1,9 @@ +// This was t1569.scala. +// It fails in dotty because the expected type of the anonymous function in the last line +// is fully determined (C). So that type is taken as the type of the anonymous function. +// See pos/t1569a.scala for related examples that work. +object Bug { + class C { type T } + def foo(x: Int)(y: C)(z: y.T): Unit = {} + foo(3)(new C { type T = String })("hello") +} |