diff options
author | Paul Phillips <paulp@improving.org> | 2011-01-10 07:21:56 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-01-10 07:21:56 +0000 |
commit | e05dfaeabf430dac8909ff9e5a5911b0c94101ae (patch) | |
tree | 397ce22c41c4c5b95390625ef73fcb70cef856b6 /test/files/continuations-neg/function3.check | |
parent | 58b5c24df8ba06c02b92723922bc21381fedeb93 (diff) | |
download | scala-e05dfaeabf430dac8909ff9e5a5911b0c94101ae.tar.gz scala-e05dfaeabf430dac8909ff9e5a5911b0c94101ae.tar.bz2 scala-e05dfaeabf430dac8909ff9e5a5911b0c94101ae.zip |
A pretty severe bug in the recognition of tail ...
A pretty severe bug in the recognition of tail call elimination.
It turns out that Tailcalls will perform "partial elimination" in
situations such as:
@annotation.tailrec final def f(x: Int): Int = f(f(x))
The outer call to f1 becomes a jump, but the inner call remains as
it was. I implemented @tailrec under the impression that if the
optimization had taken place, it had gone all the way. So this is now
fixed with a direct examination of the rewritten tree.
While I was in there I threw in some improved error reporting: the error
positioning is now on the call which is not in tail position rather than
the method declaration.
Closes #4135, no review.
Diffstat (limited to 'test/files/continuations-neg/function3.check')
0 files changed, 0 insertions, 0 deletions