summaryrefslogtreecommitdiff
path: root/test/files
diff options
context:
space:
mode:
authorAntonio Cunei <antonio.cunei@epfl.ch>2010-06-05 16:54:30 +0000
committerAntonio Cunei <antonio.cunei@epfl.ch>2010-06-05 16:54:30 +0000
commit85776e68d0b8bb1c1c377e9a7391c0c6fd2276fa (patch)
treecb53c3ab982835eb6863318c96556f82fd51df16 /test/files
parentf1c6333e75cbd4eb594e4fad2b023c8259eb260f (diff)
downloadscala-85776e68d0b8bb1c1c377e9a7391c0c6fd2276fa.tar.gz
scala-85776e68d0b8bb1c1c377e9a7391c0c6fd2276fa.tar.bz2
scala-85776e68d0b8bb1c1c377e9a7391c0c6fd2276fa.zip
Merged revisions 22172 via svnmerge from
https://lampsvn.epfl.ch/svn-repos/scala/scala/trunk ........ r22172 | extempore | 2010-06-05 17:40:48 +0200 (Sat, 05 Jun 2010) | 3 lines Patch from Jason Zaugg so singleton types aren't accidentally deprived of a fourth try at satisfaction. Already reviewed by odersky, so no review. ........
Diffstat (limited to 'test/files')
-rw-r--r--test/files/pos/scala-singleton.scala55
1 files changed, 55 insertions, 0 deletions
diff --git a/test/files/pos/scala-singleton.scala b/test/files/pos/scala-singleton.scala
new file mode 100644
index 0000000000..08038db93b
--- /dev/null
+++ b/test/files/pos/scala-singleton.scala
@@ -0,0 +1,55 @@
+// A bunch of ridiculous seeming tests until you realize much
+// of this didn't work until the commit which accompanies this.
+object Test {
+ def f1(x: AnyRef with Singleton): AnyRef with Singleton = x
+ def f2[T <: AnyRef with Singleton](x: T): T = x
+
+ val x1: AnyRef with Singleton = "abc"
+ val x2 = "def"
+ final val x3 = "ghi"
+ val x4: String = "jkl"
+
+ // compiles...
+ def narrow1(x: AnyRef): AnyRef with Singleton = x
+
+ // compiles, still doesn't help.
+ def narrow2(x: AnyRef): AnyRef with Singleton = x.asInstanceOf[x.type]
+
+ // fails, wait, what? This fails and narrow1 compiles?
+ def narrow3(x: AnyRef): AnyRef with Singleton = x.asInstanceOf[AnyRef with Singleton]
+
+ // ok
+ def narrow4[T <: AnyRef](x: T): AnyRef with Singleton = x
+
+ object imp {
+ implicit def narrow4[T <: AnyRef](x: T): AnyRef with Singleton = x
+ val x5: String = "mno"
+ def imp1 = f1(x5)
+
+ // f2(x5) // doesn't work but I think it should
+ def imp2 = f2(narrow4(x5))
+ }
+
+ def main(args: Array[String]): Unit = {
+ // compiles
+ f1(x1)
+ f1(x2)
+ f1(x3)
+ f1(x4)
+
+ f2(x1)
+ // f2(x2)
+ // f2(x3) // maybe this one should work
+ // f2(x4)
+
+ f1(narrow1(x4))
+ f1(narrow2(x4))
+ f1(narrow3(x4))
+ f1(narrow4(x4))
+ f2(narrow1(x4))
+ f2(narrow2(x4))
+ f2(narrow3(x4))
+ f2(narrow4(x4))
+ }
+}
+