aboutsummaryrefslogtreecommitdiff
path: root/tests/pos/tailcall
diff options
context:
space:
mode:
authorDmitry Petrashko <dmitry.petrashko@gmail.com>2016-02-15 15:37:55 +0100
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2016-03-31 14:49:23 +0200
commit07833e93f62cbe6d866300475288e8a763a36198 (patch)
treeca68403be647950d5a69eda1ba7fef5938f66656 /tests/pos/tailcall
parent80b12473d7e7c5551ed7b13a835f239445662813 (diff)
downloaddotty-07833e93f62cbe6d866300475288e8a763a36198.tar.gz
dotty-07833e93f62cbe6d866300475288e8a763a36198.tar.bz2
dotty-07833e93f62cbe6d866300475288e8a763a36198.zip
FullParametrization: allow to have $this of ThisType.
TailRec methods remain members of enclosing class, it means that they can refer to methods that require this.type. It means that tailrec, unlike value classes is not allowed to widen type of $this to it's full self type. Fixes #1089
Diffstat (limited to 'tests/pos/tailcall')
-rw-r--r--tests/pos/tailcall/i1089.scala26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/pos/tailcall/i1089.scala b/tests/pos/tailcall/i1089.scala
new file mode 100644
index 000000000..8eb69cb9b
--- /dev/null
+++ b/tests/pos/tailcall/i1089.scala
@@ -0,0 +1,26 @@
+package hello
+
+import scala.annotation.tailrec
+
+class Enclosing {
+ class SomeData(val x: Int)
+
+ def localDef(): Unit = {
+ def foo(data: SomeData): Int = data.x
+
+ @tailrec
+ def test(i: Int, data: SomeData): Unit = {
+ if (i != 0) {
+ println(foo(data))
+ test(i - 1, data)
+ }
+ }
+
+ test(3, new SomeData(42))
+ }
+}
+
+object world extends App {
+ println("hello dotty!")
+ new Enclosing().localDef()
+}