summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2010-04-27 15:09:00 +0000
committerIulian Dragos <jaguarul@gmail.com>2010-04-27 15:09:00 +0000
commit622c15815f8cfa93ab6c3b0e3ab49095988dd51f (patch)
treec668650caa98bbcb6c3e694713452d4437c329a8 /test
parentf99b3ceac6465c630374e5bd5b680f4b99abc9b7 (diff)
downloadscala-622c15815f8cfa93ab6c3b0e3ab49095988dd51f.tar.gz
scala-622c15815f8cfa93ab6c3b0e3ab49095988dd51f.tar.bz2
scala-622c15815f8cfa93ab6c3b0e3ab49095988dd51f.zip
Fixed construction of specialized classes in th...
Fixed construction of specialized classes in the presence of side-effects and non-trivial initializers. Review by odersky.
Diffstat (limited to 'test')
-rw-r--r--test/files/run/spec-early.check4
-rw-r--r--test/files/run/spec-early.scala15
-rw-r--r--test/files/run/spec-init.check9
-rw-r--r--test/files/run/spec-init.scala41
4 files changed, 69 insertions, 0 deletions
diff --git a/test/files/run/spec-early.check b/test/files/run/spec-early.check
new file mode 100644
index 0000000000..414aacc419
--- /dev/null
+++ b/test/files/run/spec-early.check
@@ -0,0 +1,4 @@
+a
+abc
+42
+abc
diff --git a/test/files/run/spec-early.scala b/test/files/run/spec-early.scala
new file mode 100644
index 0000000000..84a8983f8c
--- /dev/null
+++ b/test/files/run/spec-early.scala
@@ -0,0 +1,15 @@
+trait Tr
+
+class Foo[@specialized(Int) T](_x: T) extends {
+ val bar = "abc"
+ val baz = "bbc"
+} with Tr {
+ val x = _x
+ println(x)
+ println(bar)
+}
+
+object Test extends Application {
+ new Foo("a")
+ new Foo(42)
+}
diff --git a/test/files/run/spec-init.check b/test/files/run/spec-init.check
new file mode 100644
index 0000000000..c9d2f1b6cc
--- /dev/null
+++ b/test/files/run/spec-init.check
@@ -0,0 +1,9 @@
+java.lang.Object@6b359c1b
+java.lang.Object@6b359c1b
+null
+shouldn't see two initialized values and one uninitialized
+42
+42
+0
+ok
+ok
diff --git a/test/files/run/spec-init.scala b/test/files/run/spec-init.scala
new file mode 100644
index 0000000000..630f03ac7a
--- /dev/null
+++ b/test/files/run/spec-init.scala
@@ -0,0 +1,41 @@
+class Foo[@specialized(Int) T](_x: T) {
+ val x = _x
+ def bar {}
+
+ val y = x
+ println(x)
+ println(y)
+ println(z)
+
+ def baz {}
+ val z = y
+
+}
+
+class Bar[@specialized(Int) T] {
+ def foo(x: T) = print(x)
+}
+
+object Global {
+ var msg = "ok"
+}
+
+class TouchGlobal[@specialized(Int) T](_x: T) {
+ println(Global.msg)
+ val x = {
+ Global.msg = "not ok"
+ _x
+ }
+}
+
+object Test {
+ def main(args: Array[String]) {
+ (new Foo(new Object))
+ println("shouldn't see two initialized values and one uninitialized")
+ (new Foo(42))
+
+ (new TouchGlobal(new Object))
+ Global.msg = "ok" // reset the value
+ (new TouchGlobal(42))
+ }
+}