aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/parsing
diff options
context:
space:
mode:
authorDmitry Petrashko <dmitry.petrashko@gmail.com>2014-10-28 21:02:42 +0100
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2014-10-30 17:22:14 +0100
commite07e9a3986ec59cab1f0ec2b9b4458fd6a64d8c8 (patch)
tree051fd810ac9f1b690c7e7f1cb56508a2d903ebfd /src/dotty/tools/dotc/parsing
parent6dcd16ab2040a5a337e78bc77e40228dc9944662 (diff)
downloaddotty-e07e9a3986ec59cab1f0ec2b9b4458fd6a64d8c8.tar.gz
dotty-e07e9a3986ec59cab1f0ec2b9b4458fd6a64d8c8.tar.bz2
dotty-e07e9a3986ec59cab1f0ec2b9b4458fd6a64d8c8.zip
Restructure Try node.
Now Try node always has cases as handlers. In case handler is an Ident of type Throwable => T than it's desugared to a CaseDef during parsing.
Diffstat (limited to 'src/dotty/tools/dotc/parsing')
-rw-r--r--src/dotty/tools/dotc/parsing/Parsers.scala10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/parsing/Parsers.scala b/src/dotty/tools/dotc/parsing/Parsers.scala
index 1efc2d31c..a787f9712 100644
--- a/src/dotty/tools/dotc/parsing/Parsers.scala
+++ b/src/dotty/tools/dotc/parsing/Parsers.scala
@@ -914,7 +914,15 @@ object Parsers {
val finalizer =
if (handler.isEmpty || in.token == FINALLY) { accept(FINALLY); expr() }
else EmptyTree
- Try(body, handler, finalizer)
+ handler match {
+ case Match(sel, cases) => Try(body, cases, finalizer)
+ case EmptyTree => Try(body, Nil, finalizer)
+ case _ =>
+ Try(body,
+ List(CaseDef(Ident(nme.DEFAULT_EXCEPTION_NAME), EmptyTree, Apply(handler, Ident(nme.DEFAULT_EXCEPTION_NAME)))),
+ finalizer)
+ }
+
}
case THROW =>
atPos(in.skipToken()) { Throw(expr()) }