summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGilles Dubochet <gilles.dubochet@epfl.ch>2008-02-29 16:17:49 +0000
committerGilles Dubochet <gilles.dubochet@epfl.ch>2008-02-29 16:17:49 +0000
commite902d4a0486a66dd0dabd727c4fcc31da2468a9c (patch)
treedcae6e681ae1ac35d348c32801fd29a664e5e055
parentfaf3c9732d4adcec6bb7d7f922af4b3cd3a067ff (diff)
downloadscala-e902d4a0486a66dd0dabd727c4fcc31da2468a9c.tar.gz
scala-e902d4a0486a66dd0dabd727c4fcc31da2468a9c.tar.bz2
scala-e902d4a0486a66dd0dabd727c4fcc31da2468a9c.zip
Fixed issue #586.
-rw-r--r--src/compiler/scala/tools/nsc/transform/CleanUp.scala10
-rw-r--r--test/files/pos/t0586.scala9
2 files changed, 16 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/CleanUp.scala b/src/compiler/scala/tools/nsc/transform/CleanUp.scala
index 20b1e0d664..526662013d 100644
--- a/src/compiler/scala/tools/nsc/transform/CleanUp.scala
+++ b/src/compiler/scala/tools/nsc/transform/CleanUp.scala
@@ -548,11 +548,15 @@ abstract class CleanUp extends Transform {
val tempVar = currentOwner.newValue(theTry.pos, unit.fresh.newName("exceptionResult"))
.setInfo(tpe).setFlag(Flags.MUTABLE)
- val newBlock = Block(Nil, Assign(Ident(tempVar), transform(block)))
+ val newBlock = super.transform(Block(Nil, Assign(Ident(tempVar), transform(block))))
val newCatches = for (CaseDef(pattern, guard, body) <- catches) yield {
- CaseDef(pattern, transform(guard), Block(Nil, Assign(Ident(tempVar), transform(body))))
+ CaseDef(
+ super.transform(pattern),
+ super.transform(guard),
+ Block(Nil, Assign(Ident(tempVar), super.transform(body)))
+ )
}
- val newTry = Try(newBlock, newCatches, finalizer)
+ val newTry = Try(newBlock, newCatches, super.transform(finalizer))
val res = Block(List(ValDef(tempVar, EmptyTree), newTry), Ident(tempVar))
localTyper.typed(res)
diff --git a/test/files/pos/t0586.scala b/test/files/pos/t0586.scala
new file mode 100644
index 0000000000..86115a77af
--- /dev/null
+++ b/test/files/pos/t0586.scala
@@ -0,0 +1,9 @@
+object RClose {
+ type ReflectCloseable = { def close(): Unit }
+ def withReflectCloseable[T <: ReflectCloseable, R](s: T)(action: T => R): R =
+ try {
+ action(s)
+ } finally {
+ s.close()
+ }
+} \ No newline at end of file