summaryrefslogtreecommitdiff
path: root/test/files/pos/matthias4.scala
diff options
context:
space:
mode:
authorGilles Dubochet <gilles.dubochet@epfl.ch>2005-12-16 18:29:42 +0000
committerGilles Dubochet <gilles.dubochet@epfl.ch>2005-12-16 18:29:42 +0000
commitdf50e05006b43b007c2587549030d24b5c154398 (patch)
tree9edfb1fb5b8c04350a00c163cfcdb1fccd79e3aa /test/files/pos/matthias4.scala
parent17e2b1c2a6f69ba74e79c30d1e44195fe732e3e3 (diff)
downloadscala-df50e05006b43b007c2587549030d24b5c154398.tar.gz
scala-df50e05006b43b007c2587549030d24b5c154398.tar.bz2
scala-df50e05006b43b007c2587549030d24b5c154398.zip
'test-nsc' has been moved to 'test'.
Diffstat (limited to 'test/files/pos/matthias4.scala')
-rw-r--r--test/files/pos/matthias4.scala84
1 files changed, 84 insertions, 0 deletions
diff --git a/test/files/pos/matthias4.scala b/test/files/pos/matthias4.scala
new file mode 100644
index 0000000000..c6ce79d682
--- /dev/null
+++ b/test/files/pos/matthias4.scala
@@ -0,0 +1,84 @@
+/*
+object A requires B {
+ B.X getX() {
+ return B.getX();
+ }
+ void setX(B.X x) {}
+}
+object B {
+ class X {}
+ X getX() {
+ return new X();
+ }
+ void setX(X x) {}
+}
+object C requires B {
+ object A;
+ void test() {
+ A.setX(B.getX());
+ }
+}
+*/
+
+trait _a extends Object with _b {
+ val a: _a;
+ val A: A;
+ type A <: a.AObject;
+ trait AObject {
+ def getX(): B.X;
+ def setX(x: B.X): Unit;
+ }
+}
+trait a123 extends Object with _a with _b {
+ val a: this.type = this;
+ val A: A = new A();
+ class A() extends AObject {
+ def getX(): B.X = B.getX();
+ def setX(x: B.X) = B.setX(x);
+ }
+}
+
+trait _b {
+ val b: _b;
+ val B: B;
+ type B <: b.BObject;
+ trait BObject {
+ type X;
+ def getX(): X;
+ def setX(x: X): Unit;
+ }
+}
+abstract class b() extends Object with _b {
+ val b: this.type = this;
+ val B: B = new B();
+ class B() extends BObject {
+ class X() {}
+ def getX(): X = new X();
+ def setX(x: X) = ();
+ }
+}
+
+trait _m {
+ val m: _m;
+ val M: M;
+ type M <: m.MObject;
+ trait MObject {}
+}
+abstract class m() extends Object with _m with _b {
+ val m: this.type = this;
+ val M: M = new M();
+ class M() extends MObject with a123 with Linker {
+ def test() = {
+ val x: B.X = B.getX();
+ A.setX(x);
+ }
+ }
+ trait Linker {
+ val b: m.this.b.type = m.this.b;
+ val B: m.this.B.type = m.this.B;
+ type B = m.this.B;
+ val m: m.this.m.type = m.this.m;
+ val M: m.this.M.type = m.this.M;
+ type M = m.this.M;
+ }
+}