diff options
author | Martin Odersky <odersky@gmail.com> | 2015-03-13 17:19:07 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2015-03-13 17:19:07 +0100 |
commit | 3e849296a8563a561f53c92b48bd720897694b63 (patch) | |
tree | 30f98d03708e48db9f1bc4c42bcdfc48a14bf69c /src | |
parent | 0ee93122b9e367c08ed1d81c9cfc5919fc3a32af (diff) | |
download | dotty-3e849296a8563a561f53c92b48bd720897694b63.tar.gz dotty-3e849296a8563a561f53c92b48bd720897694b63.tar.bz2 dotty-3e849296a8563a561f53c92b48bd720897694b63.zip |
Fix #400
In a call-by-name arg, replace () => f.apply() with f only if f is pure.
Diffstat (limited to 'src')
-rw-r--r-- | src/dotty/tools/dotc/transform/ElimByName.scala | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/transform/ElimByName.scala b/src/dotty/tools/dotc/transform/ElimByName.scala index ff774b462..5bd9c045a 100644 --- a/src/dotty/tools/dotc/transform/ElimByName.scala +++ b/src/dotty/tools/dotc/transform/ElimByName.scala @@ -73,7 +73,8 @@ class ElimByName extends MiniPhaseTransform with InfoTransformer { thisTransform case formalExpr: ExprType => val argType = arg.tpe.widen val argFun = arg match { - case Apply(Select(qual, nme.apply), Nil) if qual.tpe derivesFrom defn.FunctionClass(0) => + case Apply(Select(qual, nme.apply), Nil) + if qual.tpe.derivesFrom(defn.FunctionClass(0)) && isPureExpr(qual) => qual case _ => val meth = ctx.newSymbol( |