summaryrefslogtreecommitdiff
path: root/test/files/pos/matthias4.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2003-03-13 16:20:52 +0000
committerMartin Odersky <odersky@gmail.com>2003-03-13 16:20:52 +0000
commitb6568d57a4571b6cf8504164c9974737d78d2b44 (patch)
treea18a0a08d9a6f9e1d1db4f3db5c94e249dff8ab7 /test/files/pos/matthias4.scala
parentab6e0b35fe9524e4a6c1ceff58ca0cc198a54c48 (diff)
downloadscala-b6568d57a4571b6cf8504164c9974737d78d2b44.tar.gz
scala-b6568d57a4571b6cf8504164c9974737d78d2b44.tar.bz2
scala-b6568d57a4571b6cf8504164c9974737d78d2b44.zip
*** empty log message ***
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..751c8b1c88
--- /dev/null
+++ b/test/files/pos/matthias4.scala
@@ -0,0 +1,84 @@
+/*
+module A requires B {
+ B.X getX() {
+ return B.getX();
+ }
+ void setX(B.X x) {}
+}
+module B {
+ class X {}
+ X getX() {
+ return new X();
+ }
+ void setX(X x) {}
+}
+module C requires B {
+ module A;
+ void test() {
+ A.setX(B.getX());
+ }
+}
+*/
+
+trait _a extends Object with _b {
+ val a: _a;
+ val A: A;
+ type A <: a.AModule;
+ trait AModule {
+ def getX(): B.X;
+ def setX(x: B.X): Unit;
+ }
+}
+abstract class a() extends Object with _a with _b {
+ val a: this.type = this;
+ val A: A = new A();
+ class A() extends AModule {
+ 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.BModule;
+ trait BModule {
+ 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 BModule {
+ class X() {}
+ def getX(): X = new X();
+ def setX(x: X) = ();
+ }
+}
+
+trait _m {
+ val m: _m;
+ val M: M;
+ type M <: m.MModule;
+ trait MModule {}
+}
+abstract class m() extends Object with _m with _b {
+ val m: this.type = this;
+ val M: M = new M();
+ class M() extends MModule with a() with Linker() {
+ def test() = {
+ val x: B.X = B.getX();
+ A.setX(x);
+ }
+ }
+ abstract class 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;
+ }
+}