diff options
Diffstat (limited to 'src/main/scala/scala/async/AnfTransform.scala')
-rw-r--r-- | src/main/scala/scala/async/AnfTransform.scala | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/main/scala/scala/async/AnfTransform.scala b/src/main/scala/scala/async/AnfTransform.scala index 6b17b94..2fa96c9 100644 --- a/src/main/scala/scala/async/AnfTransform.scala +++ b/src/main/scala/scala/async/AnfTransform.scala @@ -194,13 +194,14 @@ private[async] final case class AnfTransform[C <: Context](c: C) { // this has already been checked. val isByName: (Int) => Boolean = utils.isByName(fun) val funStats :+ simpleFun = inline.transformToList(fun) + def isAwaitRef(name: Name) = name.toString.startsWith(utils.name.await + "$") val argLists: List[List[Tree]] = args.zipWithIndex map { - case (arg, i) if isByName(i) => List(arg) - case (arg, i) => inline.transformToList(arg) match { + case (arg, i) if isByName(i) || isSafeToInline(arg) => List(arg) + case (arg@Ident(name), _) if isAwaitRef(name) => List(arg) // not typed, so it eludes the check in `isSafeToInline` + case (arg, i) => inline.transformToList(arg) match { case stats :+ expr => - val valDef = defineVal(s"arg$i", expr, arg.pos) + val valDef = defineVal(name.arg(i), expr, arg.pos) stats ::: List(valDef, Ident(valDef.name)) - case xs => xs } } val allArgStats = argLists flatMap (_.init) |