summaryrefslogtreecommitdiff
path: root/test/files/run/t6574b.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-05-31 23:49:52 +0200
committerJason Zaugg <jzaugg@gmail.com>2013-07-10 10:44:20 +1000
commita90d1f01d603d9f00445ead48a87a051cd0ede15 (patch)
treeacd71415af0d2a487ad7fa7b31afaa2fafe4fddd /test/files/run/t6574b.scala
parent07fc7bb2f718f335058ea84700778827747a6314 (diff)
downloadscala-a90d1f01d603d9f00445ead48a87a051cd0ede15.tar.gz
scala-a90d1f01d603d9f00445ead48a87a051cd0ede15.tar.bz2
scala-a90d1f01d603d9f00445ead48a87a051cd0ede15.zip
SI-6574 Support @tailrec for extension methods.
Currently, when the body of an extension method is transplanted to the companion object, recursive calls point back to the original instance method. That changes during erasure, but this is too late for tail call analysis/elimination. This commit eagerly updates the recursive calls to point to the extension method in the companion. It also removes the @tailrec annotation from the original method.
Diffstat (limited to 'test/files/run/t6574b.scala')
-rw-r--r--test/files/run/t6574b.scala7
1 files changed, 7 insertions, 0 deletions
diff --git a/test/files/run/t6574b.scala b/test/files/run/t6574b.scala
new file mode 100644
index 0000000000..df329a31ca
--- /dev/null
+++ b/test/files/run/t6574b.scala
@@ -0,0 +1,7 @@
+object Test extends App {
+ implicit class AnyOps(val i: Int) extends AnyVal {
+ private def parentsOf(x: Int): List[Int] = if (x == 0) Nil else x :: parentsOf(x - 1)
+ def parents: List[Int] = parentsOf(i)
+ }
+ println((5).parents)
+}