diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2012-11-27 08:36:26 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2012-11-27 09:00:33 +0100 |
commit | 7c93a9e0e288b55027646016913c7368732d54e4 (patch) | |
tree | a4f4a2b8a6848577bae9f82805ffb61fe9b25e00 /src/main/scala/scala/async/TransformUtils.scala | |
parent | 38c362b45fa3f5ae006ebdebaaf163c701313967 (diff) | |
download | scala-async-7c93a9e0e288b55027646016913c7368732d54e4.tar.gz scala-async-7c93a9e0e288b55027646016913c7368732d54e4.tar.bz2 scala-async-7c93a9e0e288b55027646016913c7368732d54e4.zip |
No need to extract vals for inlinable args.
We use `isExprSafeToInline` from the non-public reflection
API to check. In addtion, we now that an untyped Ident("await$N")
is also an inlinable expression.
Diffstat (limited to 'src/main/scala/scala/async/TransformUtils.scala')
-rw-r--r-- | src/main/scala/scala/async/TransformUtils.scala | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/main/scala/scala/async/TransformUtils.scala b/src/main/scala/scala/async/TransformUtils.scala index 7571f88..23f39d2 100644 --- a/src/main/scala/scala/async/TransformUtils.scala +++ b/src/main/scala/scala/async/TransformUtils.scala @@ -30,6 +30,7 @@ private[async] final case class TransformUtils[C <: Context](c: C) { val ifRes = "ifres" val await = "await" val bindSuffix = "$bind" + def arg(i: Int) = "arg" + i def fresh(name: TermName): TermName = newTermName(fresh(name.toString)) @@ -244,4 +245,12 @@ private[async] final case class TransformUtils[C <: Context](c: C) { } } + def isSafeToInline(tree: Tree) = { + val symtab = c.universe.asInstanceOf[scala.reflect.internal.SymbolTable] + object treeInfo extends { + val global: symtab.type = symtab + } with reflect.internal.TreeInfo + val castTree = tree.asInstanceOf[symtab.Tree] + treeInfo.isExprSafeToInline(castTree) + } } |