aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/typer/Typer.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-04-30 11:30:44 +0200
committerMartin Odersky <odersky@gmail.com>2015-05-02 19:07:38 +0200
commit3df53946319d7f6c7af6e0eca757e548b6bc5cef (patch)
tree0cc0e7807395e2baad1a92cc9c92ca343d11099c /src/dotty/tools/dotc/typer/Typer.scala
parent5cd90e5afd73c6f8354d0d3687fb2ee3a9f413e7 (diff)
downloaddotty-3df53946319d7f6c7af6e0eca757e548b6bc5cef.tar.gz
dotty-3df53946319d7f6c7af6e0eca757e548b6bc5cef.tar.bz2
dotty-3df53946319d7f6c7af6e0eca757e548b6bc5cef.zip
Make sure types of pattern bound variables are fully-defined.
Like all other variables, pattern-bound vars need a fully defined type. I was thinking originally that demanding a fully defined selector type is sufficient to ensure this, but that's not true: An outer pattern might call a polymorphic unapply and its type variables need not be fully instantiated. With the fix, the minimized test case from ExpandSAMs works.
Diffstat (limited to 'src/dotty/tools/dotc/typer/Typer.scala')
-rw-r--r--src/dotty/tools/dotc/typer/Typer.scala5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/typer/Typer.scala b/src/dotty/tools/dotc/typer/Typer.scala
index b58f48728..191a13ad0 100644
--- a/src/dotty/tools/dotc/typer/Typer.scala
+++ b/src/dotty/tools/dotc/typer/Typer.scala
@@ -844,8 +844,9 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit
}
def typedBind(tree: untpd.Bind, pt: Type)(implicit ctx: Context): Bind = track("typedBind") {
- val body1 = typed(tree.body, pt)
- typr.println(i"typed bind $tree pt = $pt bodytpe = ${body1.tpe}")
+ val pt1 = fullyDefinedType(pt, "pattern variable", tree.pos)
+ val body1 = typed(tree.body, pt1)
+ typr.println(i"typed bind $tree pt = $pt1 bodytpe = ${body1.tpe}")
val flags = if (tree.isType) BindDefinedType else EmptyFlags
val sym = ctx.newSymbol(ctx.owner, tree.name, flags, body1.tpe, coord = tree.pos)
assignType(cpy.Bind(tree)(tree.name, body1), sym)