summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/transform/UnCurry.scala
diff options
context:
space:
mode:
authorJohannes Rudolph <johannes_rudolph@gmx.de>2012-05-08 21:16:33 +0200
committerJohannes Rudolph <johannes_rudolph@gmx.de>2012-05-08 21:46:56 +0200
commit00a648bc909f794d91570fb962fc7d7fcd055bc5 (patch)
tree19e0b891ab425e7f569a03a9158d3b610b70cd38 /src/compiler/scala/tools/nsc/transform/UnCurry.scala
parentda04d691c455aa3f3391bdbd9bac7fb59f29cedf (diff)
downloadscala-00a648bc909f794d91570fb962fc7d7fcd055bc5.tar.gz
scala-00a648bc909f794d91570fb962fc7d7fcd055bc5.tar.bz2
scala-00a648bc909f794d91570fb962fc7d7fcd055bc5.zip
fix SI-1247: don't create a thunk for a by-name argument if the argument expression is a Function0 application
Diffstat (limited to 'src/compiler/scala/tools/nsc/transform/UnCurry.scala')
-rw-r--r--src/compiler/scala/tools/nsc/transform/UnCurry.scala10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/UnCurry.scala b/src/compiler/scala/tools/nsc/transform/UnCurry.scala
index ef98935f9c..7f220992a3 100644
--- a/src/compiler/scala/tools/nsc/transform/UnCurry.scala
+++ b/src/compiler/scala/tools/nsc/transform/UnCurry.scala
@@ -473,7 +473,15 @@ abstract class UnCurry extends InfoTransform
arg.pos.source.path + ":" + arg.pos.line, fun.fullName,
if (fun.isPrivate) "private" else "")
)
- newFunction0(arg)
+
+ arg match {
+ // don't add a thunk for by-name argument if argument already is an application of
+ // a Function0. We can then remove the application and use the existing Function0.
+ case Apply(Select(recv, nme.apply), Nil) if recv.tpe.typeSymbol isSubClass FunctionClass(0) =>
+ recv
+ case _ =>
+ newFunction0(arg)
+ }
}
}
}