summaryrefslogtreecommitdiff
path: root/sources/scala/tools/nsc/transform/Erasure.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2005-10-11 20:28:06 +0000
committerMartin Odersky <odersky@gmail.com>2005-10-11 20:28:06 +0000
commit76993fa93bc39bab65e61b4fa9a3887befd48372 (patch)
tree71186c566ccdb15b5264f6e649a67212cc246feb /sources/scala/tools/nsc/transform/Erasure.scala
parent899e2bf1b2aac960ba459cc1e1667ac05cf5b2cc (diff)
downloadscala-76993fa93bc39bab65e61b4fa9a3887befd48372.tar.gz
scala-76993fa93bc39bab65e61b4fa9a3887befd48372.tar.bz2
scala-76993fa93bc39bab65e61b4fa9a3887befd48372.zip
*** empty log message ***
Diffstat (limited to 'sources/scala/tools/nsc/transform/Erasure.scala')
-rwxr-xr-xsources/scala/tools/nsc/transform/Erasure.scala18
1 files changed, 17 insertions, 1 deletions
diff --git a/sources/scala/tools/nsc/transform/Erasure.scala b/sources/scala/tools/nsc/transform/Erasure.scala
index ac2413c678..b14b939e70 100755
--- a/sources/scala/tools/nsc/transform/Erasure.scala
+++ b/sources/scala/tools/nsc/transform/Erasure.scala
@@ -278,7 +278,23 @@ abstract class Erasure extends AddInterfaces with typechecker.Analyzer {
/** A replacement for the standard typer's `typed1' method */
override protected def typed1(tree: Tree, mode: int, pt: Type): Tree = {
- super.typed1(adaptMember(tree), mode, pt)
+ val tree1 = super.typed1(adaptMember(tree), mode, pt);
+ tree1 match {
+ case If(cond, thenp, elsep) =>
+ val thenp1 = adaptToType(thenp, tree1.tpe);
+ val elsep1 = if (elsep.isEmpty) elsep else adaptToType(elsep, tree1.tpe);
+ copy.If(tree1, cond, thenp1, elsep1);
+ case Match(selector, cases) =>
+ val cases1 = cases map {
+ case cdef @ CaseDef(pat, guard, body) =>
+ val body1 = adaptToType(body, tree1.tpe);
+ copy.CaseDef(cdef, pat, guard, body1) setType body1.tpe
+ }
+ copy.Match(tree1, selector, cases1)
+ // todo: do same for try
+ case _ =>
+ tree1
+ }
}
}