diff options
author | Vlad Ureche <vlad.ureche@gmail.com> | 2015-09-17 06:30:56 +0200 |
---|---|---|
committer | Vlad Ureche <vlad.ureche@gmail.com> | 2015-09-17 06:30:56 +0200 |
commit | fe45005fe9e4fa9db8e76dd5ba0c660028ec0509 (patch) | |
tree | 24047c8d12f411f8ae3eb93c39b2e4f14c2d9536 | |
parent | 224efebaf17e2bb91bd89348f63bb0905dc72288 (diff) | |
download | scala-fe45005fe9e4fa9db8e76dd5ba0c660028ec0509.tar.gz scala-fe45005fe9e4fa9db8e76dd5ba0c660028ec0509.tar.bz2 scala-fe45005fe9e4fa9db8e76dd5ba0c660028ec0509.zip |
SI-9475 Dependent PolyTypes are dependent types
Such that uncurry can correctly un-dependify them.
-rw-r--r-- | src/reflect/scala/reflect/internal/Types.scala | 3 | ||||
-rw-r--r-- | test/files/pos/t9475.scala | 19 |
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 +} + |