diff options
-rw-r--r-- | src/dotty/tools/dotc/ast/Desugar.scala | 10 | ||||
-rw-r--r-- | src/dotty/tools/dotc/ast/untpd.scala | 2 | ||||
-rw-r--r-- | src/dotty/tools/dotc/parsing/Parsers.scala | 10 |
3 files changed, 13 insertions, 9 deletions
diff --git a/src/dotty/tools/dotc/ast/Desugar.scala b/src/dotty/tools/dotc/ast/Desugar.scala index dba3872cb..3d217f38f 100644 --- a/src/dotty/tools/dotc/ast/Desugar.scala +++ b/src/dotty/tools/dotc/ast/Desugar.scala @@ -817,6 +817,16 @@ object desugar { case PatDef(mods, pats, tpt, rhs) => val pats1 = if (tpt.isEmpty) pats else pats map (Typed(_, tpt)) flatTree(pats1 map (makePatDef(mods, _, rhs))) + case ParsedTry(body, handler, finalizer) => + handler match { + case Match(EmptyTree, 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) + } + } }.withPos(tree.pos) diff --git a/src/dotty/tools/dotc/ast/untpd.scala b/src/dotty/tools/dotc/ast/untpd.scala index a5072bc96..9e6ce4450 100644 --- a/src/dotty/tools/dotc/ast/untpd.scala +++ b/src/dotty/tools/dotc/ast/untpd.scala @@ -32,6 +32,8 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo { def withName(name: Name)(implicit ctx: Context) = cpy.ModuleDef(this)(mods, name.toTermName, impl) } + case class ParsedTry(expr: Tree, handler: Tree, finalizer: Tree) extends TermTree + case class SymbolLit(str: String) extends TermTree case class InterpolatedString(id: TermName, strings: List[Literal], elems: List[Tree]) extends TermTree case class Function(args: List[Tree], body: Tree) extends Tree { diff --git a/src/dotty/tools/dotc/parsing/Parsers.scala b/src/dotty/tools/dotc/parsing/Parsers.scala index a787f9712..2651b7514 100644 --- a/src/dotty/tools/dotc/parsing/Parsers.scala +++ b/src/dotty/tools/dotc/parsing/Parsers.scala @@ -914,15 +914,7 @@ object Parsers { val finalizer = if (handler.isEmpty || in.token == FINALLY) { accept(FINALLY); expr() } else EmptyTree - 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) - } - + ParsedTry(body, handler, finalizer) } case THROW => atPos(in.skipToken()) { Throw(expr()) } |