diff options
author | Iulian Dragos <jaguarul@gmail.com> | 2010-04-27 15:09:00 +0000 |
---|---|---|
committer | Iulian Dragos <jaguarul@gmail.com> | 2010-04-27 15:09:00 +0000 |
commit | 622c15815f8cfa93ab6c3b0e3ab49095988dd51f (patch) | |
tree | c668650caa98bbcb6c3e694713452d4437c329a8 /test | |
parent | f99b3ceac6465c630374e5bd5b680f4b99abc9b7 (diff) | |
download | scala-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.check | 4 | ||||
-rw-r--r-- | test/files/run/spec-early.scala | 15 | ||||
-rw-r--r-- | test/files/run/spec-init.check | 9 | ||||
-rw-r--r-- | test/files/run/spec-init.scala | 41 |
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)) + } +} |