summaryrefslogtreecommitdiff
path: root/test/files
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2012-03-06 17:48:42 +0100
committerMartin Odersky <odersky@gmail.com>2012-03-06 17:50:40 +0100
commit1e9277689461452c594dc547dc0b0ceab8cd3e7d (patch)
tree07a4cb55a4f90d05dcd093e3d7b562ba28513e6d /test/files
parentfa55e4f0f8d2834becdb9a9aef9c3ea65cb31fee (diff)
downloadscala-1e9277689461452c594dc547dc0b0ceab8cd3e7d.tar.gz
scala-1e9277689461452c594dc547dc0b0ceab8cd3e7d.tar.bz2
scala-1e9277689461452c594dc547dc0b0ceab8cd3e7d.zip
Fixes to value classes: Flags now double definitions, private constructors as errors. Fixed erasure scheme.
Diffstat (limited to 'test/files')
-rw-r--r--test/files/neg/anyval-anyref-parent.check6
-rw-r--r--test/files/neg/valueclasses-doubledefs.check7
-rw-r--r--test/files/neg/valueclasses.check31
-rw-r--r--test/files/run/valueclasses-constr.check2
-rw-r--r--test/files/run/valueclasses-constr.scala25
5 files changed, 54 insertions, 17 deletions
diff --git a/test/files/neg/anyval-anyref-parent.check b/test/files/neg/anyval-anyref-parent.check
index e1903f5fcc..fe20e5de81 100644
--- a/test/files/neg/anyval-anyref-parent.check
+++ b/test/files/neg/anyval-anyref-parent.check
@@ -1,10 +1,10 @@
-anyval-anyref-parent.scala:2: error: Only classes (not traits) are allowed to extend AnyVal
+anyval-anyref-parent.scala:2: error: only classes (not traits) are allowed to extend AnyVal
trait Foo2 extends AnyVal // fail
^
anyval-anyref-parent.scala:5: error: Any does not have a constructor
class Bar1 extends Any // fail
^
-anyval-anyref-parent.scala:6: error: Value class needs to have exactly one public val parameter
+anyval-anyref-parent.scala:6: error: value class needs to have exactly one public val parameter
class Bar2(x: Int) extends AnyVal // fail
^
anyval-anyref-parent.scala:10: error: illegal inheritance; superclass Any
@@ -17,7 +17,7 @@ anyval-anyref-parent.scala:11: error: illegal inheritance; superclass AnyVal
of the mixin trait Immutable
trait Foo5 extends AnyVal with Immutable // fail
^
-anyval-anyref-parent.scala:11: error: Only classes (not traits) are allowed to extend AnyVal
+anyval-anyref-parent.scala:11: error: only classes (not traits) are allowed to extend AnyVal
trait Foo5 extends AnyVal with Immutable // fail
^
6 errors found
diff --git a/test/files/neg/valueclasses-doubledefs.check b/test/files/neg/valueclasses-doubledefs.check
new file mode 100644
index 0000000000..556d7a0900
--- /dev/null
+++ b/test/files/neg/valueclasses-doubledefs.check
@@ -0,0 +1,7 @@
+valueclasses-doubledefs.scala:5: error: double definition:
+method apply:(x: Meter)String and
+method apply:(x: Double)String at line 4
+have same type after erasure: (x: Double)String
+ def apply(x: Meter) = x.toString
+ ^
+one error found
diff --git a/test/files/neg/valueclasses.check b/test/files/neg/valueclasses.check
index 30ee689511..756a0474fa 100644
--- a/test/files/neg/valueclasses.check
+++ b/test/files/neg/valueclasses.check
@@ -1,43 +1,46 @@
-valueclasses.scala:3: error: Only classes (not traits) are allowed to extend AnyVal
+valueclasses.scala:3: error: only classes (not traits) are allowed to extend AnyVal
trait T extends AnyVal // fail
^
-valueclasses.scala:6: error: Value class may not be a member of another class
+valueclasses.scala:6: error: value class may not be a member of another class
class Bar(x: Int) extends AnyVal // fail
^
-valueclasses.scala:8: error: Value class may not be a local class
+valueclasses.scala:8: error: value class may not be a local class
class Baz(x: Int) extends AnyVal // fail
^
-valueclasses.scala:12: error: Value class needs to have exactly one public val parameter
+valueclasses.scala:12: error: value class needs to have exactly one public val parameter
class V1 extends AnyVal // fail
^
-valueclasses.scala:14: error: Value class needs to have a publicly accessible val parameter
+valueclasses.scala:14: error: value class needs to have a publicly accessible val parameter
class V2(private[test] val x: Int) extends AnyVal // fail
^
-valueclasses.scala:15: error: Value class needs to have a publicly accessible val parameter
+valueclasses.scala:15: error: value class needs to have a publicly accessible val parameter
class V3(protected[test] val x: Int) extends AnyVal // fail
^
-valueclasses.scala:16: error: Value class needs to have a publicly accessible val parameter
+valueclasses.scala:16: error: value class needs to have a publicly accessible val parameter
class V4(protected val x: Int) extends AnyVal // fail
^
-valueclasses.scala:17: error: Value class needs to have a publicly accessible val parameter
+valueclasses.scala:17: error: value class needs to have a publicly accessible val parameter
class V5(private val x: Int) extends AnyVal // fail
^
-valueclasses.scala:19: error: Value class needs to have exactly one public val parameter
+valueclasses.scala:19: error: value class needs to have exactly one public val parameter
class V6(val x: Int, val y: String) extends AnyVal // fail
^
-valueclasses.scala:20: error: Illegal parameter for value class
+valueclasses.scala:20: error: illegal parameter for value class
class V7(val x: Int, private[this] val y: String) extends AnyVal // fail
^
-valueclasses.scala:21: error: Value class needs to have exactly one public val parameter
+valueclasses.scala:21: error: value class needs to have exactly one public val parameter
class V8(var x: Int) extends AnyVal // fail
^
-valueclasses.scala:24: error: This statement is not allowed in value class: private[this] val y: Int = V9.this.x
+valueclasses.scala:24: error: this statement is not allowed in value class: private[this] val y: Int = V9.this.x
val y = x // fail
^
valueclasses.scala:29: error: type parameter of value class may not be specialized
class V12[@specialized T, U](val x: (T, U)) extends AnyVal // fail
^
-valueclasses.scala:31: error: Value class needs to have exactly one public val parameter
+valueclasses.scala:31: error: value class needs to have exactly one public val parameter
class V13(x: Int) extends AnyVal // fail
^
-14 errors found
+valueclasses.scala:45: error: value class must have public primary constructor
+final class TOD private (val secondsOfDay: Int) extends AnyVal { // should fail with private constructor
+ ^
+15 errors found
diff --git a/test/files/run/valueclasses-constr.check b/test/files/run/valueclasses-constr.check
new file mode 100644
index 0000000000..df37fbc723
--- /dev/null
+++ b/test/files/run/valueclasses-constr.check
@@ -0,0 +1,2 @@
+0
+00:16:40
diff --git a/test/files/run/valueclasses-constr.scala b/test/files/run/valueclasses-constr.scala
new file mode 100644
index 0000000000..7a10299386
--- /dev/null
+++ b/test/files/run/valueclasses-constr.scala
@@ -0,0 +1,25 @@
+object TOD {
+ final val SecondsPerDay = 86400
+
+ def apply(seconds: Int) = {
+ val n = seconds % SecondsPerDay
+ new TOD(if (n >= 0) n else n + SecondsPerDay)
+ }
+}
+
+final class TOD (val secondsOfDay: Int) extends AnyVal {
+ def hours = secondsOfDay / 3600
+ def minutes = (secondsOfDay / 60) % 60
+ def seconds = secondsOfDay % 60
+
+ override def toString = "%02d:%02d:%02d".format(hours, minutes, seconds)
+}
+
+object Test extends App {
+
+ val y: TOD = new TOD(1000)
+ val x: TOD = TOD(1000)
+ println(x.hours)
+ println(x)
+}
+