aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDmitry Petrashko <darkdimius@gmail.com>2014-10-22 13:41:20 +0200
committerDmitry Petrashko <darkdimius@gmail.com>2014-10-22 13:50:48 +0200
commitddf57c9366bdec1e38cff9f6f2c9d72edcdce24a (patch)
tree3b06812e8a6238525114e21924240042ecec7281 /src
parent5f05c4be3e986b7a370f566fd4409b29463fb781 (diff)
downloaddotty-ddf57c9366bdec1e38cff9f6f2c9d72edcdce24a.tar.gz
dotty-ddf57c9366bdec1e38cff9f6f2c9d72edcdce24a.tar.bz2
dotty-ddf57c9366bdec1e38cff9f6f2c9d72edcdce24a.zip
Fix #196. Errorneus tail-optimization of inner DefDef's
Unless a DefDef is a result of desugaring an exception handler it shouldn't be optimized by tailrec. There's a potential improvement here: to detect that a DefDef is a label def which itself is called only in tail position. This is a requirement to implement #194
Diffstat (limited to 'src')
-rw-r--r--src/dotty/tools/dotc/transform/TailRec.scala3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/transform/TailRec.scala b/src/dotty/tools/dotc/transform/TailRec.scala
index 82b08ef5f..71eedadab 100644
--- a/src/dotty/tools/dotc/transform/TailRec.scala
+++ b/src/dotty/tools/dotc/transform/TailRec.scala
@@ -311,7 +311,8 @@ class TailRec extends MiniPhaseTransform with DenotTransformer with FullParamete
case Return(expr, from) =>
tpd.cpy.Return(tree)(noTailTransform(expr), from)
-
+ case t: DefDef =>
+ t // todo: could improve to handle DefDef's with a label flag calls to which are in tail position
case _ =>
super.transform(tree)
}