diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2013-07-07 07:37:53 +1000 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-07-07 07:37:53 +1000 |
commit | c60c38ca6098402f7a9cc6d6746b664bb2b1306c (patch) | |
tree | bc31d4de6cdda7bfe4358984a40095c2e7464eac /src/main/scala/scala/async/AnfTransform.scala | |
parent | 82232ec47effb4a6b67b3a0792e1c7600e2d31b7 (diff) | |
download | scala-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.scala | 11 |
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 { |