aboutsummaryrefslogtreecommitdiff
path: root/tests/disabled
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2017-02-27 11:46:19 +0100
committerMartin Odersky <odersky@gmail.com>2017-02-28 19:34:42 +0100
commit42fd456acf5535a0ec980d207db8cc9e6abc6110 (patch)
tree4ac8900649bc2d1e7c6b1b0b804aeda12d3ed796 /tests/disabled
parent860fd56990d0e6e24a404c5054e5821b18f7870f (diff)
downloaddotty-42fd456acf5535a0ec980d207db8cc9e6abc6110.tar.gz
dotty-42fd456acf5535a0ec980d207db8cc9e6abc6110.tar.bz2
dotty-42fd456acf5535a0ec980d207db8cc9e6abc6110.zip
Re-instantiate depmeth tests
These now compile with the changes to dependent methods, except for one which is invalid under dotty.
Diffstat (limited to 'tests/disabled')
-rw-r--r--tests/disabled/pos/depmet_implicit_oopsla_session_simpler.scala45
1 files changed, 45 insertions, 0 deletions
diff --git a/tests/disabled/pos/depmet_implicit_oopsla_session_simpler.scala b/tests/disabled/pos/depmet_implicit_oopsla_session_simpler.scala
new file mode 100644
index 000000000..8cc6fe754
--- /dev/null
+++ b/tests/disabled/pos/depmet_implicit_oopsla_session_simpler.scala
@@ -0,0 +1,45 @@
+// Disabled because we now get an unsafe instantiation error
+object Sessions {
+ trait Session {
+ type Dual <: Session
+
+ def run(dp: Dual): Unit
+ }
+
+ sealed case class Stop() extends Session {
+ type Dual = Stop
+
+ def run(dp: Dual): Unit = {}
+ }
+
+ // can't write B <: Session{type Dual = BDual} due to limitations in type inference algorithm
+ // (type variables cannot occur on both sides of <:)
+ // using B#Dual instead of BDual is too imprecise, since it is disconnected from the actual argument that is passed for B
+ // would be nice if we could introduce a universal quantification over BDual that is not part of the
+ // type parameter list
+ sealed case class In[A, B <: Session, BDual <: Session](recv: A => B)(implicit dual: B <:< Session{type Dual=BDual}) extends Session {
+ type Dual = Out[A, BDual]
+
+ def run(dp: Dual): Unit = recv(dp.data) run dp.cont
+ }
+
+ sealed case class Out[A, B <: Session](data: A, cont: B) extends Session {
+ type Dual = In[A, cont.Dual, cont.Dual#Dual]
+
+ def run(dp: Dual): Unit = cont run dp.recv(data)
+ }
+
+ def addServer =
+ In{x: Int =>
+ In{y: Int => System.out.println("Thinking")
+ Out(x + y,
+ Stop())}}
+
+ def addClient =
+ Out(3,
+ Out(4, { System.out.println("Waiting")
+ In{z: Int => System.out.println(z)
+ Stop()}}))
+
+ def myRun = addServer run addClient // error: unsafe instantiation
+}