aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-04-27 09:22:57 -0700
committerJason Zaugg <jzaugg@gmail.com>2013-04-27 09:22:57 -0700
commit3efdcf1022e36312b050e449233fc1572cb365ff (patch)
treefaef18add63387b8cda7b8a954ec0f951b357bfe
parentde3c0b61184b37525ca8dca829290fa19d2aca3a (diff)
parent38e7c27b0dd5ad9fb910d7092d2b47866da28e6e (diff)
downloadscala-async-3efdcf1022e36312b050e449233fc1572cb365ff.tar.gz
scala-async-3efdcf1022e36312b050e449233fc1572cb365ff.tar.bz2
scala-async-3efdcf1022e36312b050e449233fc1572cb365ff.zip
Merge pull request #14 from lrytz/cleanups
minor cleanups accumulated while reading the code
-rw-r--r--src/main/scala/scala/async/AnfTransform.scala27
1 files changed, 14 insertions, 13 deletions
diff --git a/src/main/scala/scala/async/AnfTransform.scala b/src/main/scala/scala/async/AnfTransform.scala
index da375a5..250b7c3 100644
--- a/src/main/scala/scala/async/AnfTransform.scala
+++ b/src/main/scala/scala/async/AnfTransform.scala
@@ -59,7 +59,7 @@ private[async] final case class AnfTransform[C <: Context](c: C) {
val origName = defTree.symbol.name
val sym = defTree.symbol.asInstanceOf[symtab.Symbol]
val fresh = name.fresh(sym.name.toString)
- sym.name = defTree.symbol.name match {
+ sym.name = origName match {
case _: TermName => symtab.newTermName(fresh)
case _: TypeName => symtab.newTypeName(fresh)
}
@@ -184,14 +184,15 @@ private[async] final case class AnfTransform[C <: Context](c: C) {
private object anf {
private[AnfTransform] def transformToList(tree: Tree): List[Tree] = trace("anf", tree) {
- def containsAwait = tree exists isAwait
-
- tree match {
- case Select(qual, sel) if containsAwait =>
+ val containsAwait = tree exists isAwait
+ if (!containsAwait) {
+ List(tree)
+ } else tree match {
+ case Select(qual, sel) =>
val stats :+ expr = inline.transformToList(qual)
stats :+ attachCopy(tree)(Select(expr, sel).setSymbol(tree.symbol))
- case Applied(fun, targs, argss) if argss.nonEmpty && containsAwait =>
+ case Applied(fun, targs, argss) if argss.nonEmpty =>
// we an assume that no await call appears in a by-name argument position,
// this has already been checked.
val funStats :+ simpleFun = inline.transformToList(fun)
@@ -210,20 +211,20 @@ private[async] final case class AnfTransform[C <: Context](c: C) {
val core = if (targs.isEmpty) simpleFun else TypeApply(simpleFun, targs)
val newApply = argExprss.foldLeft(core)(Apply(_, _).setSymbol(tree.symbol))
funStats ++ argStatss.flatten.flatten :+ attachCopy(tree)(newApply)
- case Block(stats, expr) if containsAwait =>
+ case Block(stats, expr) =>
inline.transformToList(stats :+ expr)
- case ValDef(mods, name, tpt, rhs) if containsAwait =>
+ case ValDef(mods, name, tpt, rhs) =>
if (rhs exists isAwait) {
val stats :+ expr = inline.transformToList(rhs)
stats :+ attachCopy(tree)(ValDef(mods, name, tpt, expr).setSymbol(tree.symbol))
} else List(tree)
- case Assign(lhs, rhs) if containsAwait =>
+ case Assign(lhs, rhs) =>
val stats :+ expr = inline.transformToList(rhs)
stats :+ attachCopy(tree)(Assign(lhs, expr))
- case If(cond, thenp, elsep) if containsAwait =>
+ case If(cond, thenp, elsep) =>
val condStats :+ condExpr = inline.transformToList(cond)
val thenBlock = inline.transformToBlock(thenp)
val elseBlock = inline.transformToBlock(elsep)
@@ -237,7 +238,7 @@ private[async] final case class AnfTransform[C <: Context](c: C) {
condStats :+
attachCopy(tree)(If(condExpr, thenBlock, elseBlock)).setType(ifType)
- case Match(scrut, cases) if containsAwait =>
+ case Match(scrut, cases) =>
val scrutStats :+ scrutExpr = inline.transformToList(scrut)
val caseDefs = cases map {
case CaseDef(pat, guard, body) =>
@@ -259,10 +260,10 @@ private[async] final case class AnfTransform[C <: Context](c: C) {
val typedMatch = attachCopy(tree)(Match(scrutExpr, caseDefs)).setType(tree.tpe)
scrutStats :+ typedMatch
- case LabelDef(name, params, rhs) if containsAwait =>
+ case LabelDef(name, params, rhs) =>
List(LabelDef(name, params, Block(inline.transformToList(rhs), Literal(Constant(())))).setSymbol(tree.symbol))
- case TypeApply(fun, targs) if containsAwait =>
+ case TypeApply(fun, targs) =>
val funStats :+ simpleFun = inline.transformToList(fun)
funStats :+ attachCopy(tree)(TypeApply(simpleFun, targs).setSymbol(tree.symbol))