diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2014-10-28 11:57:36 +0100 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2014-10-30 17:22:13 +0100 |
commit | 5613295e61f4328f2caaa20dbc21c3a0ce4937ac (patch) | |
tree | 5a67db31ac4258e78d32888ec5cc93d76e53ab7b /src/dotty/tools/dotc/typer/Typer.scala | |
parent | 09c5ad4f92aab61053e70f2e6e863271c777dd14 (diff) | |
download | dotty-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.scala | 8 |
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) } |