aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/typer/Typer.scala
diff options
context:
space:
mode:
authorDmitry Petrashko <dmitry.petrashko@gmail.com>2014-10-28 11:57:36 +0100
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2014-10-30 17:22:13 +0100
commit5613295e61f4328f2caaa20dbc21c3a0ce4937ac (patch)
tree5a67db31ac4258e78d32888ec5cc93d76e53ab7b /src/dotty/tools/dotc/typer/Typer.scala
parent09c5ad4f92aab61053e70f2e6e863271c777dd14 (diff)
downloaddotty-5613295e61f4328f2caaa20dbc21c3a0ce4937ac.tar.gz
dotty-5613295e61f4328f2caaa20dbc21c3a0ce4937ac.tar.bz2
dotty-5613295e61f4328f2caaa20dbc21c3a0ce4937ac.zip
Typer should leave inline exception handlers inline.
Diffstat (limited to 'src/dotty/tools/dotc/typer/Typer.scala')
-rw-r--r--src/dotty/tools/dotc/typer/Typer.scala8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/typer/Typer.scala b/src/dotty/tools/dotc/typer/Typer.scala
index 42b973eed..e7b6f45d4 100644
--- a/src/dotty/tools/dotc/typer/Typer.scala
+++ b/src/dotty/tools/dotc/typer/Typer.scala
@@ -663,7 +663,13 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit
def typedTry(tree: untpd.Try, pt: Type)(implicit ctx: Context): Try = track("typedTry") {
val expr1 = typed(tree.expr, pt)
- val handler1 = typed(tree.handler, defn.FunctionType(defn.ThrowableType :: Nil, pt))
+ val handler1: Tree = tree.handler match {
+ case h: untpd.Match if ((h.selector eq EmptyTree) // comes from parser
+ || (h.selector eq ExceptionHandlerSel)) => // during retyping
+ val cases1 = typedCases(h.cases, defn.ThrowableType, pt)
+ assignType(untpd.Match(ExceptionHandlerSel, cases1), cases1)
+ case _ => typed(tree.handler, defn.FunctionType(defn.ThrowableType :: Nil, pt))
+ }
val finalizer1 = typed(tree.finalizer, defn.UnitType)
assignType(cpy.Try(tree)(expr1, handler1, finalizer1), expr1, handler1)
}