diff options
author | Dmitry Petrashko <darkdimius@gmail.com> | 2014-10-22 13:41:20 +0200 |
---|---|---|
committer | Dmitry Petrashko <darkdimius@gmail.com> | 2014-10-22 13:50:48 +0200 |
commit | ddf57c9366bdec1e38cff9f6f2c9d72edcdce24a (patch) | |
tree | 3b06812e8a6238525114e21924240042ecec7281 | |
parent | 5f05c4be3e986b7a370f566fd4409b29463fb781 (diff) | |
download | dotty-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
-rw-r--r-- | src/dotty/tools/dotc/transform/TailRec.scala | 3 |
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) } |