diff options
author | Paul Phillips <paulp@improving.org> | 2012-05-08 13:44:39 -0700 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-05-08 13:44:39 -0700 |
commit | 067c2569257f73afee4ae584f6a589980a8e4660 (patch) | |
tree | ef79e1736e8366ee394f2255e3e7dfff2ed02f6c | |
parent | 83d815622e3e76083496cffa9efb1e7c8fc3e5d3 (diff) | |
parent | 00a648bc909f794d91570fb962fc7d7fcd055bc5 (diff) | |
download | scala-067c2569257f73afee4ae584f6a589980a8e4660.tar.gz scala-067c2569257f73afee4ae584f6a589980a8e4660.tar.bz2 scala-067c2569257f73afee4ae584f6a589980a8e4660.zip |
Merge commit 'refs/pull/515/head'; commit 'refs/pull/516/head' into develop
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/UnCurry.scala | 10 | ||||
-rw-r--r-- | test/files/run/t1247.check | 1 | ||||
-rw-r--r-- | test/files/run/t1247.scala | 11 |
3 files changed, 21 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) + } } } } diff --git a/test/files/run/t1247.check b/test/files/run/t1247.check new file mode 100644 index 0000000000..ce123032fd --- /dev/null +++ b/test/files/run/t1247.check @@ -0,0 +1 @@ +Is same closure class: true is same closure: true diff --git a/test/files/run/t1247.scala b/test/files/run/t1247.scala new file mode 100644 index 0000000000..c709b73bc8 --- /dev/null +++ b/test/files/run/t1247.scala @@ -0,0 +1,11 @@ +object Test extends App { + val f = () => 5 + def test(g: => Int) { + val gFunc = g _ + val isSameClosureClass = gFunc.getClass == f.getClass + val isSame = gFunc eq f + println("Is same closure class: "+isSameClosureClass+" is same closure: "+isSame) + } + + test(f()) +} |