diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2017-10-13 08:52:25 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-13 08:52:25 +1000 |
commit | cf07b65470bd544160fe6f8b82e1fc523c8c8b38 (patch) | |
tree | 6e7d09162e9db8c2f44c47f6928ca1842358825b /src/main/scala/scala/async/internal/TransformUtils.scala | |
parent | 1fe789ac1855488f2fef392e3b8fb74229e907f5 (diff) | |
parent | f2cf8e76fd184c95f2ad2f81659b60ee2ce75ec3 (diff) | |
download | scala-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.scala | 21 |
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 |