summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2013-05-12 10:57:42 -0700
committerPaul Phillips <paulp@improving.org>2013-05-12 10:57:42 -0700
commitda91728a0b1d5e449eb13b697993d056e7ad53d6 (patch)
tree1961ede8e0f577d3f884322051c1dc21081c33e1 /src
parent7f29f8512d4975cf3a5a0b536a8910e4e3b4316b (diff)
parent15df9e970a1d1323148eee714352b55eba429f44 (diff)
downloadscala-da91728a0b1d5e449eb13b697993d056e7ad53d6.tar.gz
scala-da91728a0b1d5e449eb13b697993d056e7ad53d6.tar.bz2
scala-da91728a0b1d5e449eb13b697993d056e7ad53d6.zip
Merge pull request #2501 from paulp/pr/tailcalls-tostring
Limit unnecessary calls to Type#toString.
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/transform/TailCalls.scala12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/TailCalls.scala b/src/compiler/scala/tools/nsc/transform/TailCalls.scala
index 9e867917f9..6f422fcc90 100644
--- a/src/compiler/scala/tools/nsc/transform/TailCalls.scala
+++ b/src/compiler/scala/tools/nsc/transform/TailCalls.scala
@@ -89,12 +89,12 @@ abstract class TailCalls extends Transform {
*/
class TailCallElimination(unit: CompilationUnit) extends Transformer {
private def defaultReason = "it contains a recursive call not in tail position"
- private val failPositions = perRunCaches.newMap[TailContext, Position]()
- private val failReasons = perRunCaches.newMap[TailContext, String]()
+ private val failPositions = perRunCaches.newMap[TailContext, Position]() withDefault (_.methodPos)
+ private val failReasons = perRunCaches.newMap[TailContext, String]() withDefaultValue defaultReason
private def tailrecFailure(ctx: TailContext) {
- val method = ctx.method
- val failReason = failReasons.getOrElse(ctx, defaultReason)
- val failPos = failPositions.getOrElse(ctx, ctx.methodPos)
+ val method = ctx.method
+ val failReason = failReasons(ctx)
+ val failPos = failPositions(ctx)
unit.error(failPos, s"could not optimize @tailrec annotated $method: $failReason")
}
@@ -237,7 +237,7 @@ abstract class TailCalls extends Transform {
if (!ctx.isEligible) fail("it is neither private nor final so can be overridden")
else if (!isRecursiveCall) {
- if (receiverIsSuper) failHere("it contains a recursive call targeting supertype " + receiver.tpe)
+ if (receiverIsSuper) failHere("it contains a recursive call targeting a supertype")
else failHere(defaultReason)
}
else if (!matchesTypeArgs) failHere("it is called recursively with different type arguments")