diff options
author | Martin Odersky <odersky@gmail.com> | 2016-01-31 14:03:26 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-02-09 09:43:05 +0100 |
commit | 9a6f82b2ecfd7462d0a1f4e0464878fd58231277 (patch) | |
tree | 8e9e46b08d7fdf45f4b1fd06b30d7e35c43f05b1 /tests/pos-scala2/t3568.scala | |
parent | 44c14b3fb6e5eb6f2b9734f092eef1d85f6b4d18 (diff) | |
download | dotty-9a6f82b2ecfd7462d0a1f4e0464878fd58231277.tar.gz dotty-9a6f82b2ecfd7462d0a1f4e0464878fd58231277.tar.bz2 dotty-9a6f82b2ecfd7462d0a1f4e0464878fd58231277.zip |
Reorganize tests to account for new typing of projection
Tests with failed projections are moved to pos-scala2, which
was renamed from pos-special. Files in pos-scala2 are compiled
with -language:Scala2 option.
Diffstat (limited to 'tests/pos-scala2/t3568.scala')
-rw-r--r-- | tests/pos-scala2/t3568.scala | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/pos-scala2/t3568.scala b/tests/pos-scala2/t3568.scala new file mode 100644 index 000000000..50f0cdb2e --- /dev/null +++ b/tests/pos-scala2/t3568.scala @@ -0,0 +1,46 @@ +import scala.annotation._ +import scala.annotation.unchecked._ +import scala.collection._ + + +package object buffer { + val broken = new ArrayVec2() // commenting out this line causes the file to compile. + + val works = Class.forName("buffer.ArrayVec2").newInstance().asInstanceOf[ArrayVec2] +} + +package buffer { + object Main { + // ArrayVec2 can be compiled, instantiated and used. + def main(args: Array[String]): Unit = { println(works) } + } + + trait ElemType { type Element; type Component <: ElemType } + trait Float1 extends ElemType { type Element = Float; type Component = Float1} + class Vec2 extends ElemType { type Element = Vec2; type Component = Float1 } + + abstract class BaseSeq[T <: ElemType, E] + extends IndexedSeq[E] with IndexedSeqOptimized[E, IndexedSeq[E]] { + def length = 1 + def apply(i: Int) :E + } + + abstract class GenericSeq[T <: ElemType] extends BaseSeq[T, T#Element] + trait DataArray[T <: ElemType] extends BaseSeq[T, T#Element] + trait DataView[T <: ElemType] extends BaseSeq[T, T#Element] + abstract class BaseFloat1 extends BaseSeq[Float1, Float] + + class ArrayFloat1 extends BaseFloat1 with DataArray[Float1] { + def apply(i: Int) :Float = 0f + } + + class ViewFloat1 extends BaseFloat1 with DataView[Float1] { + def apply(i: Int) :Float = 0f + } + + class ArrayVec2(val backingSeq: ArrayFloat1) + extends GenericSeq[Vec2] with DataArray[Vec2] { + def this() = this(new ArrayFloat1) + def apply(i: Int) :Vec2 = null + } +} |