diff options
author | Aleksandar Prokopec <axel22@gmail.com> | 2012-06-21 14:07:38 +0200 |
---|---|---|
committer | Aleksandar Prokopec <axel22@gmail.com> | 2012-06-21 14:07:38 +0200 |
commit | f84659b46ee25cdc4b63e6d59f5015fc5314a63d (patch) | |
tree | 3b7902329f3ce83904106726d0edc444fa81d701 | |
parent | 9a28ee1ffc085bc680c48b12ad632b9133adf020 (diff) | |
download | scala-f84659b46ee25cdc4b63e6d59f5015fc5314a63d.tar.gz scala-f84659b46ee25cdc4b63e6d59f5015fc5314a63d.tar.bz2 scala-f84659b46ee25cdc4b63e6d59f5015fc5314a63d.zip |
Fix SI-4809.
-rw-r--r-- | src/library/scala/util/control/Breaks.scala | 8 | ||||
-rw-r--r-- | test/files/run/t4809.scala | 34 |
2 files changed, 38 insertions, 4 deletions
diff --git a/src/library/scala/util/control/Breaks.scala b/src/library/scala/util/control/Breaks.scala index d7f5a57f50..accda5b8f7 100644 --- a/src/library/scala/util/control/Breaks.scala +++ b/src/library/scala/util/control/Breaks.scala @@ -41,8 +41,8 @@ class Breaks { } } - trait TryBlock { - def catchBreak(onBreak: => Unit): Unit + sealed trait TryBlock[T] { + def catchBreak(onBreak: =>T): T } /** @@ -57,8 +57,8 @@ class Breaks { * } * }}} */ - def tryBreakable(op: => Unit) = new TryBlock { - def catchBreak(onBreak: => Unit) = try { + def tryBreakable[T](op: =>T) = new TryBlock[T] { + def catchBreak(onBreak: =>T) = try { op } catch { case ex: BreakControl => diff --git a/test/files/run/t4809.scala b/test/files/run/t4809.scala new file mode 100644 index 0000000000..b30d80562f --- /dev/null +++ b/test/files/run/t4809.scala @@ -0,0 +1,34 @@ + + +import scala.util.control.Breaks._ + + + +object Test { + + def main(args: Array[String]) { + val x = tryBreakable { + break + 2 + } catchBreak { + 3 + } + assert(x == 3, x) + + val y = tryBreakable { + 2 + } catchBreak { + 3 + } + assert(y == 2, y) + + val z = tryBreakable { + break + 1.0 + } catchBreak { + 2 + } + assert(z == 2.0, z) + } + +} |