aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scala/async/AnfTransform.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-07-07 07:37:53 +1000
committerJason Zaugg <jzaugg@gmail.com>2013-07-07 07:37:53 +1000
commitc60c38ca6098402f7a9cc6d6746b664bb2b1306c (patch)
treebc31d4de6cdda7bfe4358984a40095c2e7464eac /src/main/scala/scala/async/AnfTransform.scala
parent82232ec47effb4a6b67b3a0792e1c7600e2d31b7 (diff)
downloadscala-async-c60c38ca6098402f7a9cc6d6746b664bb2b1306c.tar.gz
scala-async-c60c38ca6098402f7a9cc6d6746b664bb2b1306c.tar.bz2
scala-async-c60c38ca6098402f7a9cc6d6746b664bb2b1306c.zip
Fix another interation with existentials and a name clash.
Diffstat (limited to 'src/main/scala/scala/async/AnfTransform.scala')
-rw-r--r--src/main/scala/scala/async/AnfTransform.scala11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/main/scala/scala/async/AnfTransform.scala b/src/main/scala/scala/async/AnfTransform.scala
index 275bc49..14263da 100644
--- a/src/main/scala/scala/async/AnfTransform.scala
+++ b/src/main/scala/scala/async/AnfTransform.scala
@@ -79,12 +79,13 @@ private[async] trait AnfTransform {
stats :+ expr :+ localTyper.typedPos(expr.pos)(Literal(Constant(())))
} else {
val varDef = defineVar(name.ifRes, expr.tpe, tree.pos)
- def branchWithAssign(orig: Tree) = localTyper.typedPos(orig.pos)(
+ def branchWithAssign(orig: Tree) = localTyper.typedPos(orig.pos) {
+ def cast(t: Tree) = mkAttributedCastPreservingAnnotations(t, varDef.symbol.tpe)
orig match {
- case Block(thenStats, thenExpr) => Block(thenStats, Assign(Ident(varDef.symbol), thenExpr))
- case _ => Assign(Ident(varDef.symbol), orig)
+ case Block(thenStats, thenExpr) => Block(thenStats, Assign(Ident(varDef.symbol), cast(thenExpr)))
+ case _ => Assign(Ident(varDef.symbol), cast(orig))
}
- ).setType(orig.tpe)
+ }.setType(orig.tpe)
val ifWithAssign = treeCopy.If(tree, cond, branchWithAssign(thenp), branchWithAssign(elsep))
stats :+ varDef :+ ifWithAssign :+ gen.mkAttributedStableRef(varDef.symbol)
}
@@ -98,7 +99,7 @@ private[async] trait AnfTransform {
else {
val varDef = defineVar(name.matchRes, expr.tpe, tree.pos)
def typedAssign(lhs: Tree) =
- localTyper.typedPos(lhs.pos)(Assign(Ident(varDef.symbol), lhs))
+ localTyper.typedPos(lhs.pos)(Assign(Ident(varDef.symbol), mkAttributedCastPreservingAnnotations(lhs, varDef.symbol.tpe)))
val casesWithAssign = cases map {
case cd@CaseDef(pat, guard, body) =>
val newBody = body match {