diff options
author | Gilles Dubochet <gilles.dubochet@epfl.ch> | 2008-02-29 16:17:49 +0000 |
---|---|---|
committer | Gilles Dubochet <gilles.dubochet@epfl.ch> | 2008-02-29 16:17:49 +0000 |
commit | e902d4a0486a66dd0dabd727c4fcc31da2468a9c (patch) | |
tree | dcae6e681ae1ac35d348c32801fd29a664e5e055 | |
parent | faf3c9732d4adcec6bb7d7f922af4b3cd3a067ff (diff) | |
download | scala-e902d4a0486a66dd0dabd727c4fcc31da2468a9c.tar.gz scala-e902d4a0486a66dd0dabd727c4fcc31da2468a9c.tar.bz2 scala-e902d4a0486a66dd0dabd727c4fcc31da2468a9c.zip |
Fixed issue #586.
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/CleanUp.scala | 10 | ||||
-rw-r--r-- | test/files/pos/t0586.scala | 9 |
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 |