aboutsummaryrefslogtreecommitdiff
path: root/tests/run
diff options
context:
space:
mode:
authorNicolas Stucki <nicolas.stucki@gmail.com>2016-08-25 09:57:18 +0200
committerNicolas Stucki <nicolas.stucki@gmail.com>2016-09-05 13:47:51 +0200
commit390a44cdd0b3f43df0969368f62314d78a25c699 (patch)
tree0498cdbeff47946751e6ec451b9c3f6b89ede5cd /tests/run
parent34ef58008168d516d03599097ad1c6189d58a9c8 (diff)
downloaddotty-390a44cdd0b3f43df0969368f62314d78a25c699.tar.gz
dotty-390a44cdd0b3f43df0969368f62314d78a25c699.tar.bz2
dotty-390a44cdd0b3f43df0969368f62314d78a25c699.zip
Fix #1474: Fix applies to applyDynamic.
Diffstat (limited to 'tests/run')
-rw-r--r--tests/run/applydynamic_sip.check29
-rw-r--r--tests/run/applydynamic_sip.flags2
-rw-r--r--tests/run/applydynamic_sip.scala67
-rw-r--r--tests/run/t6353.check1
-rw-r--r--tests/run/t6353.scala12
5 files changed, 111 insertions, 0 deletions
diff --git a/tests/run/applydynamic_sip.check b/tests/run/applydynamic_sip.check
new file mode 100644
index 000000000..6d04dc452
--- /dev/null
+++ b/tests/run/applydynamic_sip.check
@@ -0,0 +1,29 @@
+qual.applyDynamic(sel)()
+qual.applyDynamic(sel)(a)
+qual.applyDynamic(sel)(a)
+.apply(a2)
+qual.applyDynamic(sel)(a)
+qual.applyDynamic(sel)(a)
+.apply(a2)
+qual.applyDynamicNamed(sel)((arg,a))
+qual.applyDynamicNamed(sel)((arg,a))
+qual.applyDynamicNamed(sel)((,a), (arg2,a2))
+qual.updateDynamic(sel)(expr)
+qual.selectDynamic(sel)
+qual.selectDynamic(sel)
+qual.selectDynamic(sel)
+.update(1, expr)
+qual.selectDynamic(sel)
+.update(expr)
+qual.selectDynamic(sel)
+.apply(1)
+qual.selectDynamic(sel)
+.apply
+.update(1, 1)
+qual.applyDynamic(apply)(a)
+qual.applyDynamic(apply)(a)
+qual.applyDynamic(apply)(a)
+qual.applyDynamic(apply)(a)
+qual.applyDynamicNamed(apply)((arg,a))
+qual.applyDynamicNamed(apply)((,a), (arg2,a2))
+qual.applyDynamic(update)(a, a2)
diff --git a/tests/run/applydynamic_sip.flags b/tests/run/applydynamic_sip.flags
new file mode 100644
index 000000000..ba6d37305
--- /dev/null
+++ b/tests/run/applydynamic_sip.flags
@@ -0,0 +1,2 @@
+-Yrangepos:false
+-language:dynamics
diff --git a/tests/run/applydynamic_sip.scala b/tests/run/applydynamic_sip.scala
new file mode 100644
index 000000000..7f81a644a
--- /dev/null
+++ b/tests/run/applydynamic_sip.scala
@@ -0,0 +1,67 @@
+import scala.language.dynamics
+object Test extends dotty.runtime.LegacyApp {
+ object stubUpdate {
+ def update(as: Any*) = println(".update"+as.toList.mkString("(",", ", ")"))
+ }
+
+ object stub {
+ def apply = {println(".apply"); stubUpdate}
+ def apply(as: Any*) = println(".apply"+as.toList.mkString("(",", ", ")"))
+ def update(as: Any*) = println(".update"+as.toList.mkString("(",", ", ")"))
+ }
+ class MyDynamic extends Dynamic {
+ def applyDynamic[T](n: String)(as: Any*) = {println("qual.applyDynamic("+ n +")"+ as.toList.mkString("(",", ", ")")); stub}
+ def applyDynamicNamed[T](n: String)(as: (String, Any)*) = {println("qual.applyDynamicNamed("+ n +")"+ as.toList.mkString("(",", ", ")")); stub}
+ def selectDynamic[T](n: String) = {println("qual.selectDynamic("+ n +")"); stub}
+ def updateDynamic(n: String)(x: Any): Unit = {println("qual.updateDynamic("+ n +")("+ x +")")}
+ }
+ val qual = new MyDynamic
+ val expr = "expr"
+ val a = "a"
+ val a2 = "a2"
+ type T = String
+
+ // If qual.sel is followed by a potential type argument list [Ts] and an argument list (arg1, …, argn) where none of the arguments argi are named:
+ // qual.applyDynamic(“sel”)(arg1, …, argn)
+ qual.sel()
+ qual.sel(a)
+ // qual.sel(a, a2: _*) -- should not accept varargs?
+ qual.sel(a)(a2)
+ qual.sel[T](a)
+ qual.sel[T](a)(a2)
+
+ // If qual.sel is followed by a potential type argument list [Ts]
+ // and a non-empty named argument list (x1 = arg1, …, xn = argn) where some name prefixes xi = might be missing:
+ // qual.applyDynamicNamed(“sel”)(xs1 -> arg1, …, xsn -> argn)
+ qual.sel(arg = a)
+ qual.sel[T](arg = a)
+ qual.sel(a, arg2 = "a2")
+ // qual.sel(a)(a2, arg2 = "a2")
+ // qual.sel[T](a)(a2, arg2 = "a2")
+ // qual.sel(arg = a, a2: _*)
+ // qual.sel(arg, arg2 = "a2", a2: _*)
+
+ // If qual.sel appears immediately on the left-hand side of an assigment
+ // qual.updateDynamic(“sel”)(expr)
+ qual.sel = expr
+
+ // If qual.sel, possibly applied to type arguments, but is
+ // not applied to explicit value arguments,
+ // nor immediately followed by an assignment operator:
+ // qual.selectDynamic[Ts](“sel”)
+ qual.sel
+ qual.sel[T]
+
+ qual.sel(1) = expr // parser turns this into qual.sel.update(1, expr)
+ qual.sel() = expr // parser turns this into qual.sel.update(expr)
+ qual.sel.apply(1)
+ qual.sel.apply(1) = 1
+
+ qual.apply(a)
+ qual.apply[String](a)
+ qual(a)
+ qual[String](a)
+ qual[T](arg = a)
+ qual(a, arg2 = "a2")
+ qual(a) = a2
+}
diff --git a/tests/run/t6353.check b/tests/run/t6353.check
new file mode 100644
index 000000000..5676bed24
--- /dev/null
+++ b/tests/run/t6353.check
@@ -0,0 +1 @@
+applyDynamic(apply)(9)
diff --git a/tests/run/t6353.scala b/tests/run/t6353.scala
new file mode 100644
index 000000000..7077eaeda
--- /dev/null
+++ b/tests/run/t6353.scala
@@ -0,0 +1,12 @@
+import language.dynamics
+
+object Test extends dotty.runtime.LegacyApp {
+ val x = new X(3)
+ val y = x(9)
+ class X(i: Int) extends Dynamic {
+ def applyDynamic(name: String)(in: Int): Int = {
+ println(s"applyDynamic($name)($in)")
+ i + in
+ }
+ }
+}