From 0b34dfbcfec17eda8634ff4f68cfe75503592bbf Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Thu, 26 Jul 2007 15:32:33 +0000 Subject: Fixed bug1210 --- test/files/neg/bug1210.check | 7 +++++++ test/files/neg/bug1210.scala | 28 ++++++++++++++++++++++++++++ test/files/pos/bug1210a.scala | 9 +++++++++ 3 files changed, 44 insertions(+) create mode 100644 test/files/neg/bug1210.check create mode 100755 test/files/neg/bug1210.scala create mode 100755 test/files/pos/bug1210a.scala (limited to 'test') diff --git a/test/files/neg/bug1210.check b/test/files/neg/bug1210.check new file mode 100644 index 0000000000..4db920556f --- /dev/null +++ b/test/files/neg/bug1210.check @@ -0,0 +1,7 @@ +bug1210.scala:13: error: illegal cyclic reference involving type Settings + val v: List[selfType] = f[selfType]((x: selfType) => x.v) + ^ +bug1210.scala:24: error: illegal cyclic reference involving type Settings + f[selfType](_.g) + ^ +two errors found diff --git a/test/files/neg/bug1210.scala b/test/files/neg/bug1210.scala new file mode 100755 index 0000000000..eb163a956e --- /dev/null +++ b/test/files/neg/bug1210.scala @@ -0,0 +1,28 @@ +object Test +{ + def f[T](recurse: T => List[T]): List[T] = + { + Nil + } + + abstract class M + { self => + type Settings + type selfType = M {type Settings = self.Settings} + + val v: List[selfType] = f[selfType]((x: selfType) => x.v) + } + + abstract class M2 + { self => + type Settings + type selfType = M2 {type Settings = self.Settings} + + def g: List[selfType] = Nil + + { + f[selfType](_.g) + } + } +} + diff --git a/test/files/pos/bug1210a.scala b/test/files/pos/bug1210a.scala new file mode 100755 index 0000000000..a349a26753 --- /dev/null +++ b/test/files/pos/bug1210a.scala @@ -0,0 +1,9 @@ +object Test { + def id[T](f: T => T): T = error("bla") + + abstract class M[Settings] { + type selfType = M[Settings] + + val v: selfType = id[M.this.selfType](x => x.v) + } +} -- cgit v1.2.3