summaryrefslogtreecommitdiff
path: root/test/files/run/spec-init.scala
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/files/run/spec-init.scala
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/files/run/spec-init.scala')
-rw-r--r--test/files/run/spec-init.scala41
1 files changed, 41 insertions, 0 deletions
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))
+ }
+}