summaryrefslogtreecommitdiff
path: root/test/files/neg/structural.check
diff options
context:
space:
mode:
authorGilles Dubochet <gilles.dubochet@epfl.ch>2009-11-08 15:44:10 +0000
committerGilles Dubochet <gilles.dubochet@epfl.ch>2009-11-08 15:44:10 +0000
commit507cd9ef5094f8423c0b897eac0421aeb2e4d4ab (patch)
tree88da7657a03d23fbffd06569db443c25bbd8223e /test/files/neg/structural.check
parentb2bf6d3d0956516a0d86d3d158bf7d94d7ac0cd1 (diff)
downloadscala-507cd9ef5094f8423c0b897eac0421aeb2e4d4ab.tar.gz
scala-507cd9ef5094f8423c0b897eac0421aeb2e4d4ab.tar.bz2
scala-507cd9ef5094f8423c0b897eac0421aeb2e4d4ab.zip
Tighter type checking rules for structural type...
Tighter type checking rules for structural types that fix issues #967, #1004, #1388, #1494, and #1906.
Diffstat (limited to 'test/files/neg/structural.check')
-rw-r--r--test/files/neg/structural.check44
1 files changed, 28 insertions, 16 deletions
diff --git a/test/files/neg/structural.check b/test/files/neg/structural.check
index cc2b5c5920..100b989a2f 100644
--- a/test/files/neg/structural.check
+++ b/test/files/neg/structural.check
@@ -1,19 +1,31 @@
-structural.scala:3: error: illegal dependent method type
- def f(x: { type D; def m: D }) = x.m
- ^
+structural.scala:47: error: Parameter type in structural refinement may not refer to the type of that refinement (self type)
+ val s1 = new { def f(p: this.type): Unit = () }
+ ^
structural.scala:19: error: illegal dependent method type
- def f9[C <: AnyRef](x: AnyRef{ type D <: AnyRef; def m[E >: Null <: AnyRef](x: AnyRef): D }) = x.m[Tata](new AnyRef) //suceed
+ def f9[C <: Object](x: Object{ type D <: Object; def m[E >: Null <: Object](x: Object): D }) = x.m[Tata](null) //fail
^
-structural.scala:10: error: Parameter type in structural refinement may not refer to abstract type defined outside that same refinement
- def f1[C <: AnyRef](x: AnyRef{ type D <: AnyRef; def m[E >: Null <: AnyRef](x: A): AnyRef; val x: A }) = x.m[Tata](x.x) //fail
- ^
-structural.scala:11: error: Parameter type in structural refinement may not refer to abstract type defined outside that same refinement
- def f2[C <: AnyRef](x: AnyRef{ type D <: AnyRef; def m[E >: Null <: AnyRef](x: B): AnyRef; val x: B }) = x.m[Tata](x.x) //fail
- ^
-structural.scala:12: error: Parameter type in structural refinement may not refer to abstract type defined outside that same refinement
- def f3[C <: AnyRef](x: AnyRef{ type D <: AnyRef; def m[E >: Null <: AnyRef](x: C): AnyRef; val x: C }) = x.m[Tata](x.x) //fail
- ^
-structural.scala:42: error: Parameter type in structural refinement may not refer to abstract type defined outside that same refinement
+structural.scala:10: error: Parameter type in structural refinement may not refer to an abstract type defined outside that refinement
+ def f1[C <: Object](x: Object{ type D <: Object; def m[E >: Null <: Object](x: A): Object; val x: A }) = x.m[Tata](x.x) //fail
+ ^
+structural.scala:11: error: Parameter type in structural refinement may not refer to an abstract type defined outside that refinement
+ def f2[C <: Object](x: Object{ type D <: Object; def m[E >: Null <: Object](x: B): Object; val x: B }) = x.m[Tata](x.x) //fail
+ ^
+structural.scala:12: error: Parameter type in structural refinement may not refer to an abstract type defined outside that refinement
+ def f3[C <: Object](x: Object{ type D <: Object; def m[E >: Null <: Object](x: C): Object; val x: C }) = x.m[Tata](x.x) //fail
+ ^
+structural.scala:13: error: Parameter type in structural refinement may not refer to a type member of that refinement
+ def f4[C <: Object](x: Object{ type D <: Object; def m[E >: Null <: Object](x: D): Object; val x: D }) = x.m[Tata](x.x) //fail
+ ^
+structural.scala:42: error: Parameter type in structural refinement may not refer to an abstract type defined outside that refinement
type Summable[T] = { def +(v : T) : T }
- ^
-6 errors found
+ ^
+structural.scala:46: error: Parameter type in structural refinement may not refer to the type of that refinement (self type)
+ type S1 = { def f(p: this.type): Unit }
+ ^
+structural.scala:49: error: Parameter type in structural refinement may not refer to a type member of that refinement
+ type S2 = { type T; def f(p: T): Unit }
+ ^
+structural.scala:52: error: Parameter type in structural refinement may not refer to an abstract type defined outside that refinement
+ def s3[U >: Null <: Object](p: { def f(p: U): Unit; def u: U }) = ()
+ ^
+10 errors found