Skip to content

Commit d489eb4

Browse files
committed
Merge pull request #299 from dotty-staging/try-handling
Try handling inside patternmatcher
2 parents ba74188 + 9230527 commit d489eb4

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

src/dotty/tools/dotc/printing/RefinedPrinter.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -468,7 +468,7 @@ class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) {
468468
if (tree.isEmpty) "" else encl(toText(tree))
469469

470470
def optText[T >: Untyped](tree: List[Tree[T]])(encl: Text => Text): Text =
471-
if (tree.exists(!_.isEmpty)) "" else encl(blockText(tree))
471+
if (tree.exists(!_.isEmpty)) encl(blockText(tree)) else ""
472472

473473
override protected def polyParamName(name: TypeName): TypeName =
474474
name.unexpandedName()

src/dotty/tools/dotc/transform/PatternMatcher.scala

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import core.Symbols._
99
import core.Types._
1010
import core.Constants._
1111
import core.StdNames._
12-
import dotty.tools.dotc.ast.{TreeTypeMap, tpd}
12+
import dotty.tools.dotc.ast.{untpd, TreeTypeMap, tpd}
1313
import dotty.tools.dotc.core
1414
import dotty.tools.dotc.core.DenotTransformers.DenotTransformer
1515
import dotty.tools.dotc.core.Phases.Phase
@@ -52,6 +52,19 @@ class PatternMatcher extends MiniPhaseTransform with DenotTransformer {thisTrans
5252
translated.ensureConforms(tree.tpe)
5353
}
5454

55+
56+
override def transformTry(tree: tpd.Try)(implicit ctx: Context, info: TransformerInfo): tpd.Tree = {
57+
val selector =
58+
ctx.newSymbol(ctx.owner, ctx.freshName("ex").toTermName, Flags.Synthetic, defn.ThrowableType, coord = tree.pos)
59+
val sel = Ident(selector.termRef).withPos(tree.pos)
60+
val rethrow = tpd.CaseDef(sel, EmptyTree, Throw(ref(selector)))
61+
val newCases = tpd.CaseDef(
62+
Bind(selector,untpd.Ident(nme.WILDCARD).withPos(tree.pos).withType(selector.info)),
63+
EmptyTree,
64+
transformMatch(tpd.Match(sel, tree.cases ::: rethrow :: Nil)))
65+
cpy.Try(tree)(tree.expr, newCases :: Nil, tree.finalizer)
66+
}
67+
5568
class Translator(implicit ctx: Context) {
5669

5770
def translator = {

0 commit comments

Comments
 (0)