summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeth Tisue <seth@tisue.net>2015-09-17 08:25:05 -0400
committerSeth Tisue <seth@tisue.net>2015-09-17 08:25:05 -0400
commit2e1f78b01c31d675ea182e7c95c78c2458897a67 (patch)
tree24047c8d12f411f8ae3eb93c39b2e4f14c2d9536
parent224efebaf17e2bb91bd89348f63bb0905dc72288 (diff)
parentfe45005fe9e4fa9db8e76dd5ba0c660028ec0509 (diff)
downloadscala-2e1f78b01c31d675ea182e7c95c78c2458897a67.tar.gz
scala-2e1f78b01c31d675ea182e7c95c78c2458897a67.tar.bz2
scala-2e1f78b01c31d675ea182e7c95c78c2458897a67.zip
Merge pull request #4748 from VladUreche/issue/9475
SI-9475 Dependent PolyTypes are dependent types
-rw-r--r--src/reflect/scala/reflect/internal/Types.scala3
-rw-r--r--test/files/pos/t9475.scala19
2 files changed, 22 insertions, 0 deletions
diff --git a/src/reflect/scala/reflect/internal/Types.scala b/src/reflect/scala/reflect/internal/Types.scala
index adc2362e88..9697e16da7 100644
--- a/src/reflect/scala/reflect/internal/Types.scala
+++ b/src/reflect/scala/reflect/internal/Types.scala
@@ -2510,6 +2510,9 @@ trait Types
override def baseType(clazz: Symbol): Type = resultType.baseType(clazz)
override def narrow: Type = resultType.narrow
+ // SI-9475: PolyTypes with dependent method types are still dependent
+ override def isDependentMethodType = resultType.isDependentMethodType
+
/** @M: typeDefSig wraps a TypeBounds in a PolyType
* to represent a higher-kinded type parameter
* wrap lo&hi in polytypes to bind variables
diff --git a/test/files/pos/t9475.scala b/test/files/pos/t9475.scala
new file mode 100644
index 0000000000..ce9c250ace
--- /dev/null
+++ b/test/files/pos/t9475.scala
@@ -0,0 +1,19 @@
+trait Ctx {
+ trait Tree
+}
+
+trait Lst[+A] {
+ def zip[A1 >: A, B](that: Lst[B]): Nothing
+}
+
+object Test {
+
+ // both of these methods should be transformed by uncurry
+ // such that List[c.Tree] becomes List[Ctx#Tree]:
+ def foo1(c: Ctx)(l: Lst[c.Tree]) = l zip l
+ def foo2[@specialized T](c: Ctx)(l: Lst[c.Tree], t: T) = l zip l
+
+ // if this doesn't happen for the 2nd method, the specialization
+ // transformation fails
+}
+