aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Petrashko <dark@d-d.me>2015-10-23 10:31:51 +0200
committerDmitry Petrashko <dark@d-d.me>2015-10-23 10:31:51 +0200
commit73f725c361a8d990d698c0aeb6889e272759ebeb (patch)
tree34c5eb76764513df653ca52820bfc2eb2711eba9
parent344f8499be5f4705c8bd7c9aad45d04d760d3dda (diff)
parent3898deafe17eaf5e96387d02c58e4cc74f90838f (diff)
downloaddotty-73f725c361a8d990d698c0aeb6889e272759ebeb.tar.gz
dotty-73f725c361a8d990d698c0aeb6889e272759ebeb.tar.bz2
dotty-73f725c361a8d990d698c0aeb6889e272759ebeb.zip
Merge pull request #832 from dotty-staging/fix-#815-hk-constructor-alias
Fix #815.
-rw-r--r--src/dotty/tools/dotc/typer/Typer.scala7
-rw-r--r--tests/pos/i815.scala11
2 files changed, 17 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/typer/Typer.scala b/src/dotty/tools/dotc/typer/Typer.scala
index 78cefb2d4..6510ba35b 100644
--- a/src/dotty/tools/dotc/typer/Typer.scala
+++ b/src/dotty/tools/dotc/typer/Typer.scala
@@ -345,7 +345,12 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit
val clsDef = TypeDef(x, templ).withFlags(Final)
typed(cpy.Block(tree)(clsDef :: Nil, New(Ident(x), Nil)), pt)
case _ =>
- val tpt1 = typedType(tree.tpt)
+ var tpt1 = typedType(tree.tpt)
+ if (tpt1.tpe.isHK) {
+ val deAliased = tpt1.tpe.dealias.EtaReduce
+ if (deAliased.exists && deAliased.ne(tpt1.tpe))
+ tpt1 = tpt1.withType(deAliased)
+ }
checkClassTypeWithStablePrefix(tpt1.tpe, tpt1.pos, traitReq = false)
assignType(cpy.New(tree)(tpt1), tpt1)
// todo in a later phase: checkInstantiatable(cls, tpt1.pos)
diff --git a/tests/pos/i815.scala b/tests/pos/i815.scala
new file mode 100644
index 000000000..bc0083ee2
--- /dev/null
+++ b/tests/pos/i815.scala
@@ -0,0 +1,11 @@
+import scala.collection.immutable.::
+class C[T](x: T)
+object A {
+ def main(args: Array[String]): Unit = {
+ val x = new C("A")
+ val y = new ::(args, Nil)
+ val z = ::(args, Nil)
+ println(y)
+ println(z)
+ }
+}