diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2014-10-28 21:02:42 +0100 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2014-10-30 17:22:14 +0100 |
commit | e07e9a3986ec59cab1f0ec2b9b4458fd6a64d8c8 (patch) | |
tree | 051fd810ac9f1b690c7e7f1cb56508a2d903ebfd /src/dotty/tools/dotc/parsing | |
parent | 6dcd16ab2040a5a337e78bc77e40228dc9944662 (diff) | |
download | dotty-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.scala | 10 |
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()) } |