aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scala/async/internal/TransformUtils.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2017-10-13 08:52:25 +1000
committerGitHub <noreply@github.com>2017-10-13 08:52:25 +1000
commitcf07b65470bd544160fe6f8b82e1fc523c8c8b38 (patch)
tree6e7d09162e9db8c2f44c47f6928ca1842358825b /src/main/scala/scala/async/internal/TransformUtils.scala
parent1fe789ac1855488f2fef392e3b8fb74229e907f5 (diff)
parentf2cf8e76fd184c95f2ad2f81659b60ee2ce75ec3 (diff)
downloadscala-async-cf07b65470bd544160fe6f8b82e1fc523c8c8b38.tar.gz
scala-async-cf07b65470bd544160fe6f8b82e1fc523c8c8b38.tar.bz2
scala-async-cf07b65470bd544160fe6f8b82e1fc523c8c8b38.zip
Merge pull request #177 from retronym/topic/pushassign
Fix ANF transform for corner case in late transforms
Diffstat (limited to 'src/main/scala/scala/async/internal/TransformUtils.scala')
-rw-r--r--src/main/scala/scala/async/internal/TransformUtils.scala21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/main/scala/scala/async/internal/TransformUtils.scala b/src/main/scala/scala/async/internal/TransformUtils.scala
index 1720815..848861c 100644
--- a/src/main/scala/scala/async/internal/TransformUtils.scala
+++ b/src/main/scala/scala/async/internal/TransformUtils.scala
@@ -544,6 +544,27 @@ private[async] trait TransformUtils {
result :: Nil
}
}
+
+ def deriveLabelDef(ld: LabelDef, applyToRhs: Tree => Tree): LabelDef = {
+ val rhs2 = applyToRhs(ld.rhs)
+ val ld2 = treeCopy.LabelDef(ld, ld.name, ld.params, rhs2)
+ if (ld eq ld2) ld
+ else {
+ val info2 = ld2.symbol.info match {
+ case MethodType(params, p) => internal.methodType(params, rhs2.tpe)
+ case t => t
+ }
+ internal.setInfo(ld2.symbol, info2)
+ ld2
+ }
+ }
+ object MatchEnd {
+ def unapply(t: Tree): Option[LabelDef] = t match {
+ case ValDef(_, _, _, t) => unapply(t)
+ case ld: LabelDef if ld.name.toString.startsWith("matchEnd") => Some(ld)
+ case _ => None
+ }
+ }
}
case object ContainsAwait