From 3df53946319d7f6c7af6e0eca757e548b6bc5cef Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Thu, 30 Apr 2015 11:30:44 +0200 Subject: 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. --- src/dotty/tools/dotc/typer/Typer.scala | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/dotty/tools/dotc/typer/Typer.scala') 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) -- cgit v1.2.3