diff options
author | Martin Odersky <odersky@gmail.com> | 2014-12-14 19:13:03 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-12-15 16:36:53 +0100 |
commit | 0eec180a686a4425bd3f3089006eda530123fe2e (patch) | |
tree | 9472beb8aba974cc95444e4351565d323913efeb /src/dotty/tools | |
parent | 21fa5dd1a47727c977848163e2610be745951dbc (diff) | |
download | dotty-0eec180a686a4425bd3f3089006eda530123fe2e.tar.gz dotty-0eec180a686a4425bd3f3089006eda530123fe2e.tar.bz2 dotty-0eec180a686a4425bd3f3089006eda530123fe2e.zip |
Add a typedUnApply method.
The method is needed to be able to survive ReTypers between frontend and
pattern matching.
Diffstat (limited to 'src/dotty/tools')
-rw-r--r-- | src/dotty/tools/dotc/typer/Applications.scala | 10 | ||||
-rw-r--r-- | src/dotty/tools/dotc/typer/Typer.scala | 1 |
2 files changed, 11 insertions, 0 deletions
diff --git a/src/dotty/tools/dotc/typer/Applications.scala b/src/dotty/tools/dotc/typer/Applications.scala index fe45beb04..d54ff21be 100644 --- a/src/dotty/tools/dotc/typer/Applications.scala +++ b/src/dotty/tools/dotc/typer/Applications.scala @@ -763,6 +763,16 @@ trait Applications extends Compatibility { self: Typer => } } + /** A dummmy typed unapply, to make re-typers between frontend and pattern matcher + * visit all subnodes of an unApply tree. + */ + def typedUnApply(tree: untpd.UnApply, selType: Type)(implicit ctx: Context) = { + val unappType = typed(tree.fun) + tree.implicits.foreach(typed(_)) + tree.patterns.foreach(typedPattern(_)) + tree.withType(selType) + } + /** Is given method reference applicable to type arguments `targs` and argument trees `args`? * @param resultType The expected result type of the application */ diff --git a/src/dotty/tools/dotc/typer/Typer.scala b/src/dotty/tools/dotc/typer/Typer.scala index f6027165b..3282b8288 100644 --- a/src/dotty/tools/dotc/typer/Typer.scala +++ b/src/dotty/tools/dotc/typer/Typer.scala @@ -1017,6 +1017,7 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit case tree: untpd.PackageDef => typedPackageDef(tree) case tree: untpd.Annotated => typedAnnotated(tree, pt) case tree: untpd.TypedSplice => tree.tree + case tree: untpd.UnApply => typedUnApply(tree, pt) case untpd.PostfixOp(tree, nme.WILDCARD) => typedAsFunction(tree, pt) case untpd.EmptyTree => tpd.EmptyTree case _ => typedUnadapted(desugar(tree), pt) |