aboutsummaryrefslogtreecommitdiff
path: root/tests/run/t5629b.scala
diff options
context:
space:
mode:
authorDmitry Petrashko <dmitry.petrashko@gmail.com>2015-06-19 15:06:00 +0200
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2015-06-19 16:48:50 +0200
commitd3819ce631310baab00c44a0d1845b267d60bcdd (patch)
tree0465fd4875e4e61366d3f719c64e498562f3bc80 /tests/run/t5629b.scala
parentb71650f367a97536a2fbb6ecaae0e046651ae9f5 (diff)
downloaddotty-d3819ce631310baab00c44a0d1845b267d60bcdd.tar.gz
dotty-d3819ce631310baab00c44a0d1845b267d60bcdd.tar.bz2
dotty-d3819ce631310baab00c44a0d1845b267d60bcdd.zip
Enable t5629b.
Was also fixed in this PR.
Diffstat (limited to 'tests/run/t5629b.scala')
-rw-r--r--tests/run/t5629b.scala36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/run/t5629b.scala b/tests/run/t5629b.scala
new file mode 100644
index 000000000..9cee18893
--- /dev/null
+++ b/tests/run/t5629b.scala
@@ -0,0 +1,36 @@
+object Test extends dotty.runtime.LegacyApp {
+
+ trait MyPF[@specialized(Int) -A] extends (A => Unit) {
+ def isDefinedAt(x: A): Boolean
+ def applyOrElse[A1 <: A](x: A1, default: A1 => Unit): Unit = {
+ println("MyPF.applyOrElse entered...")
+ if (isDefinedAt(x)) apply(x) else default(x)
+ }
+ }
+
+ trait MySmartPF[@specialized(Int) -A] extends MyPF[A] {
+ def apply(x: A): Unit = {
+ println("MySmartPF.apply entered...")
+ applyOrElse(x, { default: Any => throw new MatchError(default) })
+ }
+ }
+
+ type T = Int
+ //type T = Any
+
+ def newPF(test: T): MyPF[T] = new MySmartPF[T] {
+ def isDefinedAt(x: T): Boolean = x != test
+ override def applyOrElse[A1 <: T](x: A1, default: A1 => Unit): Unit = {
+ println("newPF.applyOrElse entered...")
+ if (x != test) { println("ok"); () } else { println("default"); default(x) }
+ }
+ }
+
+ val pf = newPF(1)
+ println("=== pf(1):")
+ try { pf(1) } catch { case x: Throwable => println(x) }
+ println("=== pf(42):")
+ pf(42)
+ println("=== done")
+
+}