summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAleksandar Prokopec <axel22@gmail.com>2012-03-21 15:21:00 +0100
committerAleksandar Prokopec <axel22@gmail.com>2012-03-21 15:21:00 +0100
commit0321df7292018d1e7408ef9ad193c8fc7bf4765d (patch)
tree6152d94c2b614bb823f75d864c2a729e8221248a /test
parent13a325b126ac6f2f5d2e7d1fc2c008d012367430 (diff)
parentf6c050e8cfa5bd1ee4bbb3434086d2ae2d35e5f7 (diff)
downloadscala-0321df7292018d1e7408ef9ad193c8fc7bf4765d.tar.gz
scala-0321df7292018d1e7408ef9ad193c8fc7bf4765d.tar.bz2
scala-0321df7292018d1e7408ef9ad193c8fc7bf4765d.zip
Merge branch 'master' into feature/pc-execution-contexts
Diffstat (limited to 'test')
-rw-r--r--test/files/buildmanager/t2556_3/t2556_3.check4
-rw-r--r--test/files/codelib/code.jar.desired.sha12
-rwxr-xr-x[-rw-r--r--]test/files/jvm/interpreter.check2
-rw-r--r--test/files/jvm/serialization.check8
-rw-r--r--test/files/jvm/serialization.scala14
-rwxr-xr-x[-rw-r--r--]test/files/jvm/t0632.check24
-rwxr-xr-xtest/files/jvm/t1118.check11
-rwxr-xr-xtest/files/jvm/t1118.scala21
-rw-r--r--test/files/jvm/unittest_xml.scala2
-rwxr-xr-x[-rw-r--r--]test/files/jvm/xml01.check4
-rwxr-xr-x[-rw-r--r--]test/files/jvm/xml03syntax.check4
-rw-r--r--test/files/jvm/xml05.check2
-rw-r--r--test/files/jvm/xmlattr.check4
-rw-r--r--test/files/lib/scalacheck.jar.desired.sha12
-rw-r--r--test/files/neg/anytrait.check7
-rw-r--r--test/files/neg/anytrait.scala10
-rw-r--r--test/files/neg/anyval-anyref-parent.check23
-rw-r--r--test/files/neg/anyval-anyref-parent.scala12
-rw-r--r--test/files/neg/anyval-sealed.check12
-rw-r--r--test/files/neg/anyval-sealed.flags1
-rw-r--r--test/files/neg/anyval-sealed.scala6
-rw-r--r--test/files/neg/overloaded-unapply.check (renamed from test/files/neg/t960.check)6
-rw-r--r--test/files/neg/overloaded-unapply.scala (renamed from test/files/neg/t960.scala)0
-rw-r--r--test/files/neg/override-object-no.check12
-rw-r--r--test/files/neg/t0699.check6
-rw-r--r--test/files/neg/t0764.check2
-rw-r--r--test/files/neg/t2641.check6
-rw-r--r--test/files/neg/t3691.check4
-rw-r--r--test/files/neg/t464-neg.check4
-rw-r--r--test/files/neg/t4877.check2
-rw-r--r--test/files/neg/t5060.check4
-rw-r--r--test/files/neg/t5529.check4
-rw-r--r--test/files/neg/t5572.check11
-rw-r--r--test/files/neg/t5572.scala23
-rw-r--r--test/files/neg/t664.check4
-rw-r--r--test/files/neg/t900.check4
-rw-r--r--test/files/neg/valueclasses-doubledefs.check7
-rw-r--r--test/files/neg/valueclasses-doubledefs.scala6
-rw-r--r--test/files/neg/valueclasses.check46
-rw-r--r--test/files/neg/valueclasses.scala54
-rw-r--r--test/files/neg/variances.check2
-rw-r--r--test/files/pos/anyval-children.flags1
-rw-r--r--test/files/pos/rangepos.flags1
-rw-r--r--test/files/pos/rangepos.scala5
-rw-r--r--test/files/pos/t1050.scala2
-rw-r--r--test/files/pos/t5545/S_1.scala4
-rw-r--r--test/files/pos/t5545/S_2.scala4
-rw-r--r--test/files/pos/t715/meredith_1.scala2
-rw-r--r--test/files/pos/trait-parents.scala16
-rw-r--r--test/files/run/Meter.check21
-rw-r--r--test/files/run/Meter.scala102
-rw-r--r--test/files/run/MeterCaseClass.check21
-rw-r--r--test/files/run/MeterCaseClass.scala99
-rw-r--r--test/files/run/color.check693
-rw-r--r--test/files/run/color.scala33
-rw-r--r--test/files/run/compiler-asSeenFrom.check323
-rw-r--r--test/files/run/compiler-asSeenFrom.scala122
-rw-r--r--test/files/run/ctries/concmap.scala24
-rw-r--r--test/files/run/ctries/iterator.scala20
-rw-r--r--test/files/run/ctries/lnode.scala14
-rw-r--r--test/files/run/ctries/snapshot.scala26
-rw-r--r--test/files/run/existentials-in-compiler.scala2
-rw-r--r--test/files/run/existentials3.check44
-rw-r--r--test/files/run/genericValueClass.check2
-rw-r--r--test/files/run/genericValueClass.scala17
-rw-r--r--test/files/run/matchonseq.check2
-rw-r--r--test/files/run/matchonseq.scala8
-rw-r--r--test/files/run/primitive-sigs-2.check2
-rw-r--r--test/files/run/programmatic-main.check42
-rw-r--r--test/files/run/reify_ann1a.check4
-rw-r--r--test/files/run/reify_ann1b.check4
-rw-r--r--test/files/run/reify_classfileann_a.check4
-rw-r--r--test/files/run/repl-parens.check2
-rwxr-xr-x[-rw-r--r--]test/files/run/t0663.check2
-rw-r--r--test/files/run/t1195.check12
-rwxr-xr-x[-rw-r--r--]test/files/run/t1620.check4
-rwxr-xr-x[-rw-r--r--]test/files/run/t2124.check2
-rwxr-xr-x[-rw-r--r--]test/files/run/t2125.check2
-rw-r--r--test/files/run/t4172.check2
-rw-r--r--test/files/run/t4891.check1
-rw-r--r--test/files/run/t5224.check2
-rw-r--r--test/files/run/t5271_1.check2
-rw-r--r--test/files/run/t5271_2.check2
-rw-r--r--test/files/run/t5271_3.check4
-rw-r--r--test/files/run/t5527.check14
-rw-r--r--test/files/run/valueclasses-constr.check2
-rw-r--r--test/files/run/valueclasses-constr.scala25
-rw-r--r--test/files/run/xml-attribute.check24
-rw-r--r--test/files/scalacheck/Ctrie.scala14
-rw-r--r--test/files/scalacheck/parallel-collections/ParallelCtrieCheck.scala12
-rw-r--r--test/files/scalacheck/parallel-collections/pc.scala2
-rw-r--r--test/files/scalap/abstractClass/result.test2
-rw-r--r--test/files/scalap/abstractMethod/result.test2
-rw-r--r--test/files/scalap/caseClass/result.test2
-rw-r--r--test/files/scalap/caseObject/result.test2
-rw-r--r--test/files/scalap/cbnParam/result.test2
-rw-r--r--test/files/scalap/classPrivate/result.test6
-rw-r--r--test/files/scalap/classWithExistential/result.test4
-rw-r--r--test/files/scalap/classWithSelfAnnotation/result.test2
-rw-r--r--test/files/scalap/covariantParam/result.test2
-rw-r--r--test/files/scalap/implicitParam/result.test2
-rw-r--r--test/files/scalap/packageObject/result.test2
-rw-r--r--test/files/scalap/paramClauses/result.test2
-rw-r--r--test/files/scalap/paramNames/result.test2
-rw-r--r--test/files/scalap/sequenceParam/result.test2
-rw-r--r--test/files/scalap/simpleClass/result.test2
-rw-r--r--test/files/scalap/traitObject/result.test4
-rw-r--r--test/files/scalap/typeAnnotations/result.test4
-rw-r--r--test/files/scalap/valAndVar/result.test2
-rw-r--r--test/files/scalap/wildcardType/result.test2
-rw-r--r--test/files/specialized/SI-5005.check4
-rw-r--r--test/files/speclib/instrumented.jar.desired.sha12
-rw-r--r--test/scaladoc/resources/explicit-inheritance-override.scala48
-rw-r--r--test/scaladoc/resources/explicit-inheritance-usecase.scala47
-rw-r--r--test/scaladoc/resources/implicit-inheritance-override.scala8
-rw-r--r--test/scaladoc/resources/inheritdoc-corner-cases.scala78
-rw-r--r--test/scaladoc/scala/html/HtmlFactoryTest.scala238
117 files changed, 2310 insertions, 339 deletions
diff --git a/test/files/buildmanager/t2556_3/t2556_3.check b/test/files/buildmanager/t2556_3/t2556_3.check
index bf26602494..37808d2b31 100644
--- a/test/files/buildmanager/t2556_3/t2556_3.check
+++ b/test/files/buildmanager/t2556_3/t2556_3.check
@@ -3,8 +3,8 @@ compiling Set(A.scala, B.scala, C.scala)
Changes: Map()
builder > A.scala
compiling Set(A.scala)
-Changes: Map(class A -> List(), class B -> List(Changed(Class(B))[List((A,Object), (ScalaObject,ScalaObject))]))
-invalidate C.scala because parents have changed [Changed(Class(B))[List((A,Object), (ScalaObject,ScalaObject))]]
+Changes: Map(class A -> List(), class B -> List(Changed(Class(B))[List((A,Object))]))
+invalidate C.scala because parents have changed [Changed(Class(B))[List((A,Object))]]
invalidate B.scala because it references invalid (no longer inherited) definition [ParentChanged(Class(C))]
compiling Set(B.scala, C.scala)
B.scala:3: error: type mismatch;
diff --git a/test/files/codelib/code.jar.desired.sha1 b/test/files/codelib/code.jar.desired.sha1
index dbf19cafd7..8dabf404b9 100644
--- a/test/files/codelib/code.jar.desired.sha1
+++ b/test/files/codelib/code.jar.desired.sha1
@@ -1 +1 @@
-e25f1daf9010b9dc6038ae7069fc9d0f7d48a53b ?code.jar
+e76a8883d275ca4870f745b505fb0a1cb9cbe446 ?code.jar
diff --git a/test/files/jvm/interpreter.check b/test/files/jvm/interpreter.check
index 196a769a17..243c9aa3be 100644..100755
--- a/test/files/jvm/interpreter.check
+++ b/test/files/jvm/interpreter.check
@@ -301,7 +301,7 @@ scala> <a>
/></a>
res8: scala.xml.Elem =
<a>
-<b c="c" d="dd"></b></a>
+<b c="c" d="dd"/></a>
scala>
diff --git a/test/files/jvm/serialization.check b/test/files/jvm/serialization.check
index 81b68f0f5d..0b8055a6b9 100644
--- a/test/files/jvm/serialization.check
+++ b/test/files/jvm/serialization.check
@@ -192,8 +192,8 @@ x = TreeSet(1, 2, 3)
y = TreeSet(1, 2, 3)
x equals y: true, y equals x: true
-x = Ctrie(1 -> one, 2 -> two, 3 -> three)
-y = Ctrie(1 -> one, 2 -> two, 3 -> three)
+x = ConcurrentTrieMap(1 -> one, 2 -> two, 3 -> three)
+y = ConcurrentTrieMap(1 -> one, 2 -> two, 3 -> three)
x equals y: true, y equals x: true
x = xml:src="hello"
@@ -287,8 +287,8 @@ x = ParHashMap(2 -> 4, 1 -> 2)
y = ParHashMap(2 -> 4, 1 -> 2)
x equals y: true, y equals x: true
-x = ParCtrie(1 -> 2, 2 -> 4)
-y = ParCtrie(1 -> 2, 2 -> 4)
+x = ParConcurrentTrieMap(1 -> 2, 2 -> 4)
+y = ParConcurrentTrieMap(1 -> 2, 2 -> 4)
x equals y: true, y equals x: true
x = ParHashSet(1, 2, 3)
diff --git a/test/files/jvm/serialization.scala b/test/files/jvm/serialization.scala
index 75daa8903d..1e89036f37 100644
--- a/test/files/jvm/serialization.scala
+++ b/test/files/jvm/serialization.scala
@@ -286,7 +286,7 @@ object Test3_mutable {
import scala.collection.mutable.{
ArrayBuffer, ArrayBuilder, ArraySeq, ArrayStack, BitSet, DoubleLinkedList,
HashMap, HashSet, History, LinkedList, ListBuffer, Publisher, Queue,
- Stack, StringBuilder, WrappedArray, TreeSet, Ctrie}
+ Stack, StringBuilder, WrappedArray, TreeSet, ConcurrentTrieMap}
// in alphabetic order
try {
@@ -386,9 +386,9 @@ object Test3_mutable {
val _ts1: TreeSet[Int] = read(write(ts1))
check(ts1, _ts1)
- // Ctrie
- val ct1 = Ctrie[Int, String]() ++= Array(1 -> "one", 2 -> "two", 3 -> "three")
- val _ct1: Ctrie[Int, String] = read(write(ct1))
+ // ConcurrentTrieMap
+ val ct1 = ConcurrentTrieMap[Int, String]() ++= Array(1 -> "one", 2 -> "two", 3 -> "three")
+ val _ct1: ConcurrentTrieMap[Int, String] = read(write(ct1))
check(ct1, _ct1)
}
catch {
@@ -613,9 +613,9 @@ object Test9_parallel {
val _mpm: mutable.ParHashMap[Int, Int] = read(write(mpm))
check(mpm, _mpm)
- // mutable.ParCtrie
- val mpc = mutable.ParCtrie(1 -> 2, 2 -> 4)
- val _mpc: mutable.ParCtrie[Int, Int] = read(write(mpc))
+ // mutable.ParConcurrentTrieMap
+ val mpc = mutable.ParConcurrentTrieMap(1 -> 2, 2 -> 4)
+ val _mpc: mutable.ParConcurrentTrieMap[Int, Int] = read(write(mpc))
check(mpc, _mpc)
// mutable.ParHashSet
diff --git a/test/files/jvm/t0632.check b/test/files/jvm/t0632.check
index 3185410a75..681bc9da92 100644..100755
--- a/test/files/jvm/t0632.check
+++ b/test/files/jvm/t0632.check
@@ -1,12 +1,12 @@
-<foo x="&amp;"></foo>
-<foo x="&amp;"></foo>
-<foo x="&amp;"></foo>
-<foo x="&amp;"></foo>
-<foo x="&amp;amp;"></foo>
-<foo x="&amp;amp;"></foo>
-<foo x="&amp;amp;"></foo>
-<foo x="&amp;amp;"></foo>
-<foo x="&amp;&amp;"></foo>
-<foo x="&amp;&amp;"></foo>
-<foo x="&amp;&amp;"></foo>
-<foo x="&amp;&amp;"></foo>
+<foo x="&amp;"/>
+<foo x="&amp;"/>
+<foo x="&amp;"/>
+<foo x="&amp;"/>
+<foo x="&amp;amp;"/>
+<foo x="&amp;amp;"/>
+<foo x="&amp;amp;"/>
+<foo x="&amp;amp;"/>
+<foo x="&amp;&amp;"/>
+<foo x="&amp;&amp;"/>
+<foo x="&amp;&amp;"/>
+<foo x="&amp;&amp;"/>
diff --git a/test/files/jvm/t1118.check b/test/files/jvm/t1118.check
new file mode 100755
index 0000000000..d676b413c9
--- /dev/null
+++ b/test/files/jvm/t1118.check
@@ -0,0 +1,11 @@
+
+<hi/> <!-- literal short -->
+<there></there> <!-- literal long -->
+<guys who="you all"></guys> <!-- literal long with attribute-->
+<hows it="going"/> <!-- literal short with attribute -->
+<this>is pretty cool</this> <!-- literal not empty -->
+
+<emptiness></emptiness> <!--programmatic long-->
+<vide/> <!--programmatic short-->
+<elem attr="value"/> <!--programmatic short with attribute-->
+<elem2 attr2="value2"></elem2> <!--programmatic long with attribute-->
diff --git a/test/files/jvm/t1118.scala b/test/files/jvm/t1118.scala
new file mode 100755
index 0000000000..3c86547241
--- /dev/null
+++ b/test/files/jvm/t1118.scala
@@ -0,0 +1,21 @@
+import scala.xml._
+
+object Test {
+ def main(args: Array[String]) {
+ println(<xml:group>
+<hi/> <!-- literal short -->
+<there></there> <!-- literal long -->
+<guys who="you all"></guys> <!-- literal long with attribute-->
+<hows it="going"/> <!-- literal short with attribute -->
+<this>is pretty cool</this> <!-- literal not empty -->
+</xml:group>)
+
+ println(Elem(null, "emptiness", Null, TopScope, false) ++ Text(" ") ++ Comment("programmatic long"))
+
+ println(Elem(null, "vide", Null, TopScope, true) ++ Text(" ") ++ Comment("programmatic short"))
+
+ println(Elem(null, "elem", Attribute("attr", Text("value"), Null), TopScope, true) ++ Text(" ") ++ Comment ("programmatic short with attribute"))
+
+ println(Elem(null, "elem2", Attribute("attr2", Text("value2"), Null), TopScope, false) ++ Text(" ") ++ Comment ("programmatic long with attribute"))
+ }
+} \ No newline at end of file
diff --git a/test/files/jvm/unittest_xml.scala b/test/files/jvm/unittest_xml.scala
index c03695f5c6..106334e625 100644
--- a/test/files/jvm/unittest_xml.scala
+++ b/test/files/jvm/unittest_xml.scala
@@ -89,7 +89,7 @@ object Test {
assert(" a=\"2\" g=\"3\" j=\"2\" oo=\"2\"" == xml.Utility.sort(q.attributes).toString)
val pp = new xml.PrettyPrinter(80,5)
- assert("<a a=\"2\" g=\"3\" j=\"2\" oo=\"2\"></a>" == pp.format(q))
+ assert("<a a=\"2\" g=\"3\" j=\"2\" oo=\"2\"/>" == pp.format(q))
<hi>
<there/>
diff --git a/test/files/jvm/xml01.check b/test/files/jvm/xml01.check
index 5e82e9a729..d78e6df410 100644..100755
--- a/test/files/jvm/xml01.check
+++ b/test/files/jvm/xml01.check
@@ -3,6 +3,6 @@ xpath \
xpath \\ DESCENDANTS
<book><author>Peter Buneman</author><author>Dan Suciu</author><title>Data on ze web</title></book>
-- group nodes
-<f><a></a><b></b><c></c></f>
-<a></a><f><a></a><b></b><c></c></f><a></a><b></b><c></c>
+<f><a/><b/><c/></f>
+<a/><f><a/><b/><c/></f><a/><b/><c/>
attribute value normalization
diff --git a/test/files/jvm/xml03syntax.check b/test/files/jvm/xml03syntax.check
index 9fbedc2ae6..edcdbdd2ba 100644..100755
--- a/test/files/jvm/xml03syntax.check
+++ b/test/files/jvm/xml03syntax.check
@@ -22,5 +22,5 @@ true
2
4
-node=<elem key="<b>hello</b>"></elem>, key=Some(<b>hello</b>)
-node=<elem></elem>, key=None
+node=<elem key="<b>hello</b>"/>, key=Some(<b>hello</b>)
+node=<elem/>, key=None
diff --git a/test/files/jvm/xml05.check b/test/files/jvm/xml05.check
index 00e617c578..8d3e803bc8 100644
--- a/test/files/jvm/xml05.check
+++ b/test/files/jvm/xml05.check
@@ -4,7 +4,7 @@ Type :help for more information.
scala>
scala> <city name="San Jos&eacute;"/>
-res0: scala.xml.Elem = <city name="San Jos&eacute;"></city>
+res0: scala.xml.Elem = <city name="San Jos&eacute;"/>
scala>
diff --git a/test/files/jvm/xmlattr.check b/test/files/jvm/xmlattr.check
index af80b60fb2..a87420d86c 100644
--- a/test/files/jvm/xmlattr.check
+++ b/test/files/jvm/xmlattr.check
@@ -14,5 +14,5 @@ true
true
true
true
-<b x="&amp;"></b>
-<b x="&amp;"></b>
+<b x="&amp;"/>
+<b x="&amp;"/>
diff --git a/test/files/lib/scalacheck.jar.desired.sha1 b/test/files/lib/scalacheck.jar.desired.sha1
index b104f58897..2be7479415 100644
--- a/test/files/lib/scalacheck.jar.desired.sha1
+++ b/test/files/lib/scalacheck.jar.desired.sha1
@@ -1 +1 @@
-2a3e19c3d8d93be661e66f941f19e7d49c667c2b ?scalacheck.jar
+f8cd51e0f78e30b3ac444b741b0b2249ac8248bb ?scalacheck.jar
diff --git a/test/files/neg/anytrait.check b/test/files/neg/anytrait.check
new file mode 100644
index 0000000000..9dd970b58c
--- /dev/null
+++ b/test/files/neg/anytrait.check
@@ -0,0 +1,7 @@
+anytrait.scala:3: error: this statement is not allowed in universal trait extending from class Any: private[this] var x: Int = 1
+ var x = 1
+ ^
+anytrait.scala:5: error: this statement is not allowed in universal trait extending from class Any: T.this.x_=(T.this.x.+(1))
+ { x += 1 }
+ ^
+two errors found
diff --git a/test/files/neg/anytrait.scala b/test/files/neg/anytrait.scala
new file mode 100644
index 0000000000..1501486105
--- /dev/null
+++ b/test/files/neg/anytrait.scala
@@ -0,0 +1,10 @@
+trait T extends Any {
+
+ var x = 1
+
+ { x += 1 }
+
+ type T = Int
+
+ val y: T
+}
diff --git a/test/files/neg/anyval-anyref-parent.check b/test/files/neg/anyval-anyref-parent.check
new file mode 100644
index 0000000000..fe20e5de81
--- /dev/null
+++ b/test/files/neg/anyval-anyref-parent.check
@@ -0,0 +1,23 @@
+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
+class Bar2(x: Int) extends AnyVal // fail
+ ^
+anyval-anyref-parent.scala:10: error: illegal inheritance; superclass Any
+ is not a subclass of the superclass Object
+ of the mixin trait Immutable
+trait Foo4 extends Any with Immutable // fail
+ ^
+anyval-anyref-parent.scala:11: error: illegal inheritance; superclass AnyVal
+ is not a subclass of the superclass Object
+ 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
+trait Foo5 extends AnyVal with Immutable // fail
+ ^
+6 errors found
diff --git a/test/files/neg/anyval-anyref-parent.scala b/test/files/neg/anyval-anyref-parent.scala
new file mode 100644
index 0000000000..f927992e59
--- /dev/null
+++ b/test/files/neg/anyval-anyref-parent.scala
@@ -0,0 +1,12 @@
+trait Foo1 extends Any
+trait Foo2 extends AnyVal // fail
+trait Foo3 extends AnyRef
+
+class Bar1 extends Any // fail
+class Bar2(x: Int) extends AnyVal // fail
+class Bar3(val x: Int) extends AnyVal // fail
+class Bar4 extends AnyRef
+
+trait Foo4 extends Any with Immutable // fail
+trait Foo5 extends AnyVal with Immutable // fail
+trait Foo6 extends AnyRef with Immutable
diff --git a/test/files/neg/anyval-sealed.check b/test/files/neg/anyval-sealed.check
deleted file mode 100644
index 48a457b496..0000000000
--- a/test/files/neg/anyval-sealed.check
+++ /dev/null
@@ -1,12 +0,0 @@
-anyval-sealed.scala:2: error: match is not exhaustive!
-missing combination Byte
-missing combination Char
-missing combination Double
-missing combination Float
-missing combination Long
-missing combination Short
-missing combination Unit
-
- def f(x: AnyVal) = x match {
- ^
-one error found
diff --git a/test/files/neg/anyval-sealed.flags b/test/files/neg/anyval-sealed.flags
deleted file mode 100644
index 85d8eb2ba2..0000000000
--- a/test/files/neg/anyval-sealed.flags
+++ /dev/null
@@ -1 +0,0 @@
--Xfatal-warnings
diff --git a/test/files/neg/anyval-sealed.scala b/test/files/neg/anyval-sealed.scala
deleted file mode 100644
index 232a183479..0000000000
--- a/test/files/neg/anyval-sealed.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-class A {
- def f(x: AnyVal) = x match {
- case _: Boolean => 1
- case _: Int => 2
- }
-} \ No newline at end of file
diff --git a/test/files/neg/t960.check b/test/files/neg/overloaded-unapply.check
index 603b1cb032..1da93f6939 100644
--- a/test/files/neg/t960.check
+++ b/test/files/neg/overloaded-unapply.check
@@ -1,13 +1,13 @@
-t960.scala:18: error: ambiguous reference to overloaded definition,
+overloaded-unapply.scala:18: error: ambiguous reference to overloaded definition,
both method unapply in object List of type [a](xs: List[a])Option[Null]
and method unapply in object List of type [a](xs: List[a])Option[(a, List[a])]
match argument types (List[a])
case List(x, xs) => 7
^
-t960.scala:22: error: cannot resolve overloaded unapply
+overloaded-unapply.scala:22: error: cannot resolve overloaded unapply
case List(x, xs) => 7
^
-t960.scala:12: error: method unapply is defined twice in t960.scala
+overloaded-unapply.scala:12: error: method unapply is defined twice in overloaded-unapply.scala
def unapply[a](xs: List[a]): Option[Null] = xs match {
^
three errors found
diff --git a/test/files/neg/t960.scala b/test/files/neg/overloaded-unapply.scala
index 36909626c1..36909626c1 100644
--- a/test/files/neg/t960.scala
+++ b/test/files/neg/overloaded-unapply.scala
diff --git a/test/files/neg/override-object-no.check b/test/files/neg/override-object-no.check
index 6e028d0add..f9fb37381b 100644
--- a/test/files/neg/override-object-no.check
+++ b/test/files/neg/override-object-no.check
@@ -1,13 +1,13 @@
override-object-no.scala:14: error: overriding object Bar in trait Foo with object Bar in trait Foo2:
an overriding object must conform to the overridden object's class bound;
- found : case1.Bippy with ScalaObject
- required: case1.Bippy with case1.Bippo with ScalaObject
+ found : case1.Bippy
+ required: case1.Bippy with case1.Bippo
override object Bar extends Bippy { // err
^
override-object-no.scala:21: error: overriding object Bar in trait Quux1 with object Bar in trait Quux2:
an overriding object must conform to the overridden object's class bound;
- found : Object with ScalaObject{def g: String}
- required: Object with ScalaObject{def g: Int}
+ found : Object{def g: String}
+ required: Object{def g: Int}
trait Quux2 extends Quux1 { override object Bar { def g = "abc" } } // err
^
override-object-no.scala:25: error: overriding object Bar in trait Quux3 of type object Quux4.this.Bar;
@@ -16,8 +16,8 @@ override-object-no.scala:25: error: overriding object Bar in trait Quux3 of type
^
override-object-no.scala:43: error: overriding object A in class Foo with object A in class P2:
an overriding object must conform to the overridden object's class bound;
- found : case2.Bar[List[String]] with ScalaObject
- required: case2.Bar[Traversable[String]] with ScalaObject
+ found : case2.Bar[List[String]]
+ required: case2.Bar[Traversable[String]]
override object A extends Bar[List[String]] // err
^
four errors found
diff --git a/test/files/neg/t0699.check b/test/files/neg/t0699.check
index 45d3e849cc..c944da8c10 100644
--- a/test/files/neg/t0699.check
+++ b/test/files/neg/t0699.check
@@ -1,10 +1,10 @@
-B.scala:2: error: illegal inheritance from sealed trait T: t0699/B.scala != t0699/A.scala
+B.scala:2: error: illegal inheritance from sealed trait T
trait T1 extends A.T
^
-B.scala:3: error: illegal inheritance from sealed class C: t0699/B.scala != t0699/A.scala
+B.scala:3: error: illegal inheritance from sealed class C
trait T2 extends A.C
^
-B.scala:4: error: illegal inheritance from sealed class C: t0699/B.scala != t0699/A.scala
+B.scala:4: error: illegal inheritance from sealed class C
class C1 extends A.C
^
three errors found
diff --git a/test/files/neg/t0764.check b/test/files/neg/t0764.check
index 0788db7f6e..e14c7705b8 100644
--- a/test/files/neg/t0764.check
+++ b/test/files/neg/t0764.check
@@ -1,5 +1,5 @@
t0764.scala:13: error: type mismatch;
- found : Object with Node{type T = _1.type} where val _1: Node{type T = NextType}
+ found : Node{type T = _1.type} where val _1: Node{type T = NextType}
required: Node{type T = Main.this.AType}
new Main[AType]( (value: AType).prepend )
^
diff --git a/test/files/neg/t2641.check b/test/files/neg/t2641.check
index 9e2f02ac47..909f4f0cf3 100644
--- a/test/files/neg/t2641.check
+++ b/test/files/neg/t2641.check
@@ -9,11 +9,7 @@ t2641.scala:17: error: illegal inheritance;
self-type ManagedSeq does not conform to scala.collection.TraversableView[A,ManagedSeqStrict[A]]'s selftype scala.collection.TraversableView[A,ManagedSeqStrict[A]]
with TraversableView[A, ManagedSeqStrict[A]]
^
-t2641.scala:16: error: illegal inheritance;
- self-type ManagedSeq does not conform to ScalaObject's selftype ScalaObject
- extends ManagedSeqStrict[A]
- ^
t2641.scala:27: error: value managedIterator is not a member of ManagedSeq
override def managedIterator = self.managedIterator slice (from, until)
^
-5 errors found
+four errors found
diff --git a/test/files/neg/t3691.check b/test/files/neg/t3691.check
index cd7b440dce..bdf6c268b2 100644
--- a/test/files/neg/t3691.check
+++ b/test/files/neg/t3691.check
@@ -1,10 +1,10 @@
t3691.scala:4: error: type mismatch;
- found : Object with Test.A[String]
+ found : Test.A[String]
required: AnyRef{type A[x]}
val b = (new A[String]{}): { type A[x] } // not ok
^
t3691.scala:5: error: type mismatch;
- found : Object with Test.A[String]
+ found : Test.A[String]
required: AnyRef{type A}
val c = (new A[String]{}): { type A } // not ok
^
diff --git a/test/files/neg/t464-neg.check b/test/files/neg/t464-neg.check
index aea1987b2e..e822e7fb6b 100644
--- a/test/files/neg/t464-neg.check
+++ b/test/files/neg/t464-neg.check
@@ -1,7 +1,7 @@
t464-neg.scala:7: error: not found: value f1
f1()
^
-t464-neg.scala:8: error: method f1 in class A cannot be accessed in A with ScalaObject
+t464-neg.scala:8: error: method f1 in class A cannot be accessed in A
super.f1()
^
t464-neg.scala:9: error: value f2 is not a member of B
@@ -10,7 +10,7 @@ t464-neg.scala:9: error: value f2 is not a member of B
t464-neg.scala:10: error: method f3 in class A cannot be accessed in B
f3()
^
-t464-neg.scala:11: error: method f3 in class A cannot be accessed in A with ScalaObject
+t464-neg.scala:11: error: method f3 in class A cannot be accessed in A
super.f3()
^
5 errors found
diff --git a/test/files/neg/t4877.check b/test/files/neg/t4877.check
index 0f72300bb4..a4b1e6a50d 100644
--- a/test/files/neg/t4877.check
+++ b/test/files/neg/t4877.check
@@ -9,7 +9,7 @@ t4877.scala:6: error: type mismatch;
def foo3: AnyRef { def bar(x: Int): Int } = new AnyRef { def bar(x: Int) = "abc" }
^
t4877.scala:7: error: type mismatch;
- found : Object with C{def bar(x: Int): Int}
+ found : C{def bar(x: Int): Int}
required: C{def bar(x: Int): Int; def quux(x: Int): Int}
def foo4: C { def bar(x: Int): Int ; def quux(x: Int): Int } = new C { def bar(x: Int) = 5 }
^
diff --git a/test/files/neg/t5060.check b/test/files/neg/t5060.check
index ab860c9d5b..e71f30ccdb 100644
--- a/test/files/neg/t5060.check
+++ b/test/files/neg/t5060.check
@@ -1,7 +1,7 @@
-t5060.scala:2: error: covariant type T occurs in contravariant position in type => Object with ScalaObject{def contains(x: T): Unit} of value foo0
+t5060.scala:2: error: covariant type T occurs in contravariant position in type => Object{def contains(x: T): Unit} of value foo0
val foo0 = {
^
-t5060.scala:6: error: covariant type T occurs in contravariant position in type => Object with ScalaObject{def contains(x: T): Unit} of method foo1
+t5060.scala:6: error: covariant type T occurs in contravariant position in type => Object{def contains(x: T): Unit} of method foo1
def foo1 = {
^
two errors found
diff --git a/test/files/neg/t5529.check b/test/files/neg/t5529.check
index 78a26aeb50..5d2175fa79 100644
--- a/test/files/neg/t5529.check
+++ b/test/files/neg/t5529.check
@@ -4,9 +4,7 @@ t5529.scala:12: error: File is already defined as class File
t5529.scala:10: error: class type required but test.Test.File found
sealed class Dir extends File { }
^
-t5529.scala:10: error: illegal inheritance; super<none>
- is not a subclass of the superclass Object
- of the mixin trait ScalaObject
+t5529.scala:10: error: test.Test.File does not have a constructor
sealed class Dir extends File { }
^
three errors found
diff --git a/test/files/neg/t5572.check b/test/files/neg/t5572.check
new file mode 100644
index 0000000000..7b1e290861
--- /dev/null
+++ b/test/files/neg/t5572.check
@@ -0,0 +1,11 @@
+t5572.scala:16: error: type mismatch;
+ found : B
+ required: A
+ Z.transf(a, b) match {
+ ^
+t5572.scala:18: error: type mismatch;
+ found : A
+ required: B
+ run(sth, b)
+ ^
+two errors found
diff --git a/test/files/neg/t5572.scala b/test/files/neg/t5572.scala
new file mode 100644
index 0000000000..2da1209c61
--- /dev/null
+++ b/test/files/neg/t5572.scala
@@ -0,0 +1,23 @@
+class A
+class B
+
+trait X
+
+object Z {
+ def transf(a: A, b: B): X = null
+}
+
+class Test {
+
+ def bar(): (A, B)
+
+ def foo {
+ val (b, a) = bar()
+ Z.transf(a, b) match {
+ case sth =>
+ run(sth, b)
+ }
+ }
+
+ def run(x: X, z: B): Unit = ()
+}
diff --git a/test/files/neg/t664.check b/test/files/neg/t664.check
index 43a6bea074..cbdf53daea 100644
--- a/test/files/neg/t664.check
+++ b/test/files/neg/t664.check
@@ -1,7 +1,7 @@
-t664.scala:4: error: type Foo is not a member of test.Test with ScalaObject
+t664.scala:4: error: type Foo is not a member of test.Test
trait Foo extends super.Foo {
^
-t664.scala:5: error: type Bar is not a member of AnyRef with ScalaObject
+t664.scala:5: error: type Bar is not a member of AnyRef
trait Bar extends super.Bar;
^
two errors found
diff --git a/test/files/neg/t900.check b/test/files/neg/t900.check
index cede26258b..047094ad6e 100644
--- a/test/files/neg/t900.check
+++ b/test/files/neg/t900.check
@@ -2,8 +2,8 @@ t900.scala:4: error: type mismatch;
found : Foo.this.x.type (with underlying type Foo.this.bar)
required: AnyRef
Note that implicit conversions are not applicable because they are ambiguous:
- both method any2Ensuring in object Predef of type [A](x: A)Ensuring[A]
- and method any2ArrowAssoc in object Predef of type [A](x: A)ArrowAssoc[A]
+ both method any2stringadd in object Predef of type (x: Any)scala.runtime.StringAdd
+ and method any2stringfmt in object Predef of type (x: Any)scala.runtime.StringFormat
are possible conversion functions from Foo.this.x.type to AnyRef
def break(): x.type
^
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-doubledefs.scala b/test/files/neg/valueclasses-doubledefs.scala
new file mode 100644
index 0000000000..87bcf8fee3
--- /dev/null
+++ b/test/files/neg/valueclasses-doubledefs.scala
@@ -0,0 +1,6 @@
+class Meter(val x: Double) extends AnyVal
+
+class Foo {
+ def apply(x: Double) = x.toString
+ def apply(x: Meter) = x.toString
+}
diff --git a/test/files/neg/valueclasses.check b/test/files/neg/valueclasses.check
new file mode 100644
index 0000000000..756a0474fa
--- /dev/null
+++ b/test/files/neg/valueclasses.check
@@ -0,0 +1,46 @@
+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
+ class Bar(x: Int) extends AnyVal // fail
+ ^
+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
+class V1 extends AnyVal // fail
+ ^
+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
+class V3(protected[test] val x: Int) extends AnyVal // fail
+ ^
+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
+class V5(private val x: Int) extends AnyVal // fail
+ ^
+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
+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
+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
+ 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
+class V13(x: Int) extends AnyVal // fail
+ ^
+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/neg/valueclasses.scala b/test/files/neg/valueclasses.scala
new file mode 100644
index 0000000000..e405d95489
--- /dev/null
+++ b/test/files/neg/valueclasses.scala
@@ -0,0 +1,54 @@
+package test
+
+trait T extends AnyVal // fail
+
+class Foo {
+ class Bar(x: Int) extends AnyVal // fail
+ def foo() {
+ class Baz(x: Int) extends AnyVal // fail
+ }
+}
+
+class V1 extends AnyVal // fail
+
+class V2(private[test] val x: Int) extends AnyVal // fail
+class V3(protected[test] val x: Int) extends AnyVal // fail
+class V4(protected val x: Int) extends AnyVal // fail
+class V5(private val x: Int) extends AnyVal // fail
+
+class V6(val x: Int, val y: String) extends AnyVal // fail
+class V7(val x: Int, private[this] val y: String) extends AnyVal // fail
+class V8(var x: Int) extends AnyVal // fail
+
+class V9(val x: Int) extends AnyVal {
+ val y = x // fail
+}
+
+class V10[T](val x: T) extends AnyVal // ok
+class V11[T](val x: List[T]) extends AnyVal // ok
+class V12[@specialized T, U](val x: (T, U)) extends AnyVal // fail
+
+class V13(x: Int) extends AnyVal // fail
+
+
+package time {
+
+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 private (val secondsOfDay: Int) extends AnyVal { // should fail with private constructor
+ def hours = secondsOfDay / 3600
+ def minutes = (secondsOfDay / 60) % 60
+ def seconds = secondsOfDay % 60
+
+ override def toString = "%02d:%02d:%02d".format(hours, minutes, seconds)
+}
+}
+
+
diff --git a/test/files/neg/variances.check b/test/files/neg/variances.check
index 4eaab56cef..dc72b05e1e 100644
--- a/test/files/neg/variances.check
+++ b/test/files/neg/variances.check
@@ -4,7 +4,7 @@ variances.scala:4: error: covariant type A occurs in contravariant position in t
variances.scala:14: error: covariant type A occurs in contravariant position in type A of value a
private[this] def setA(a : A) = this.a = a
^
-variances.scala:16: error: covariant type A occurs in invariant position in supertype test.C[A] with ScalaObject of object Baz
+variances.scala:16: error: covariant type A occurs in invariant position in supertype test.C[A] of object Baz
object Baz extends C[A]
^
variances.scala:63: error: covariant type A occurs in contravariant position in type => test.Covariant.T[A]{val m: A => A} of value x
diff --git a/test/files/pos/anyval-children.flags b/test/files/pos/anyval-children.flags
new file mode 100644
index 0000000000..80fce051e6
--- /dev/null
+++ b/test/files/pos/anyval-children.flags
@@ -0,0 +1 @@
+-Ystop-after:erasure \ No newline at end of file
diff --git a/test/files/pos/rangepos.flags b/test/files/pos/rangepos.flags
new file mode 100644
index 0000000000..fcf951d907
--- /dev/null
+++ b/test/files/pos/rangepos.flags
@@ -0,0 +1 @@
+-Yrangepos \ No newline at end of file
diff --git a/test/files/pos/rangepos.scala b/test/files/pos/rangepos.scala
new file mode 100644
index 0000000000..623b096acb
--- /dev/null
+++ b/test/files/pos/rangepos.scala
@@ -0,0 +1,5 @@
+class Foo(val x: Double) extends AnyVal { }
+
+object Pretty {
+ def f(s1: String) = new { def bar = 5 }
+}
diff --git a/test/files/pos/t1050.scala b/test/files/pos/t1050.scala
index e017e30713..d34b0cff16 100644
--- a/test/files/pos/t1050.scala
+++ b/test/files/pos/t1050.scala
@@ -1,7 +1,7 @@
package t1050
abstract class A {
- type T <: scala.ScalaObject
+ type T <: scala.AnyRef
class A { this: T =>
def b = 3
def c = b
diff --git a/test/files/pos/t5545/S_1.scala b/test/files/pos/t5545/S_1.scala
new file mode 100644
index 0000000000..59ec1fd851
--- /dev/null
+++ b/test/files/pos/t5545/S_1.scala
@@ -0,0 +1,4 @@
+trait F[@specialized(Int) T1, R] {
+ def f(v1: T1): R
+ def g = v1 => f(v1)
+}
diff --git a/test/files/pos/t5545/S_2.scala b/test/files/pos/t5545/S_2.scala
new file mode 100644
index 0000000000..59ec1fd851
--- /dev/null
+++ b/test/files/pos/t5545/S_2.scala
@@ -0,0 +1,4 @@
+trait F[@specialized(Int) T1, R] {
+ def f(v1: T1): R
+ def g = v1 => f(v1)
+}
diff --git a/test/files/pos/t715/meredith_1.scala b/test/files/pos/t715/meredith_1.scala
index 3ed2e57d7a..8261b9881a 100644
--- a/test/files/pos/t715/meredith_1.scala
+++ b/test/files/pos/t715/meredith_1.scala
@@ -3,7 +3,7 @@ package com.sap.dspace.model.othello;
import scala.xml._
trait XMLRenderer {
- type T <: {def getClass() : java.lang.Class[_]}
+ type T <: Any {def getClass() : java.lang.Class[_]}
val valueTypes =
List(
classOf[java.lang.Boolean],
diff --git a/test/files/pos/trait-parents.scala b/test/files/pos/trait-parents.scala
new file mode 100644
index 0000000000..f6a2688751
--- /dev/null
+++ b/test/files/pos/trait-parents.scala
@@ -0,0 +1,16 @@
+trait Bip extends Any
+trait Foo extends Any
+trait Bar extends AnyRef
+trait Quux
+
+object Test {
+ def f(x: Bip) = 1
+ def g1(x: Foo with Bip) = f(x)
+
+ def main(args: Array[String]): Unit = {
+ f(new Bip with Foo { })
+ f(new Foo with Bip { })
+ g1(new Bip with Foo { })
+ g1(new Foo with Bip { })
+ }
+}
diff --git a/test/files/run/Meter.check b/test/files/run/Meter.check
new file mode 100644
index 0000000000..7562f9a1bf
--- /dev/null
+++ b/test/files/run/Meter.check
@@ -0,0 +1,21 @@
+2.0
+4.0m
+false
+x.isInstanceOf[Meter]: true
+x.hashCode: 1072693248
+x == 1: false
+x == y: true
+a == b: true
+testing native arrays
+Array(1.0m, 2.0m)
+1.0m
+>>>1.0m<<< 1.0m
+>>>2.0m<<< 2.0m
+testing wrapped arrays
+FlatArray(1.0m, 2.0m)
+1.0m
+>>>1.0m<<< 1.0m
+>>>2.0m<<< 2.0m
+FlatArray(2.0m, 3.0m)
+ArrayBuffer(1.0, 2.0)
+FlatArray(0.3048ft, 0.6096ft)
diff --git a/test/files/run/Meter.scala b/test/files/run/Meter.scala
new file mode 100644
index 0000000000..515e46de24
--- /dev/null
+++ b/test/files/run/Meter.scala
@@ -0,0 +1,102 @@
+package a {
+ class Meter(val underlying: Double) extends AnyVal with _root_.b.Printable {
+ def + (other: Meter): Meter =
+ new Meter(this.underlying + other.underlying)
+ def / (other: Meter): Double = this.underlying / other.underlying
+ def / (factor: Double): Meter = new Meter(this.underlying / factor)
+ def < (other: Meter): Boolean = this.underlying < other.underlying
+ def toFoot: Foot = new Foot(this.underlying * 0.3048)
+ override def print = { Console.print(">>>"); super.print; proprint }
+ override def toString: String = underlying.toString+"m"
+ }
+
+ object Meter extends (Double => Meter) {
+
+ def apply(x: Double): Meter = new Meter(x)
+
+ implicit val boxings = new BoxingConversions[Meter, Double] {
+ def box(x: Double) = new Meter(x)
+ def unbox(m: Meter) = m.underlying
+ }
+ }
+
+ class Foot(val unbox: Double) extends AnyVal {
+ def + (other: Foot): Foot =
+ new Foot(this.unbox + other.unbox)
+ override def toString = unbox.toString+"ft"
+ }
+ object Foot {
+ implicit val boxings = new BoxingConversions[Foot, Double] {
+ def box(x: Double) = new Foot(x)
+ def unbox(m: Foot) = m.unbox
+ }
+ }
+
+}
+package b {
+ trait Printable extends Any {
+ def print: Unit = Console.print(this)
+ protected def proprint = Console.print("<<<")
+ }
+}
+import a._
+import _root_.b._
+object Test extends App {
+
+ {
+ val x: Meter = new Meter(1)
+ val a: Object = x.asInstanceOf[Object]
+ val y: Meter = a.asInstanceOf[Meter]
+
+ val u: Double = 1
+ val b: Object = u.asInstanceOf[Object]
+ val v: Double = b.asInstanceOf[Double]
+ }
+
+ val x = new Meter(1)
+ val y = x
+ println((x + x) / x)
+ println((x + x) / 0.5)
+ println((x < x).toString)
+ println("x.isInstanceOf[Meter]: "+x.isInstanceOf[Meter])
+
+
+ println("x.hashCode: "+x.hashCode)
+ println("x == 1: "+(x == 1))
+ println("x == y: "+(x == y))
+ assert(x.hashCode == (1.0).hashCode)
+
+ val a: Any = x
+ val b: Any = y
+ println("a == b: "+(a == b))
+
+ { println("testing native arrays")
+ val arr = Array(x, y + x)
+ println(arr.deep)
+ def foo[T <: Printable](x: Array[T]) {
+ for (i <- 0 until x.length) { x(i).print; println(" "+x(i)) }
+ }
+ val m = arr(0)
+ println(m)
+ foo(arr)
+ }
+
+ { println("testing wrapped arrays")
+ import collection.mutable.FlatArray
+ val arr = FlatArray(x, y + x)
+ println(arr)
+ def foo(x: FlatArray[Meter]) {
+ for (i <- 0 until x.length) { x(i).print; println(" "+x(i)) }
+ }
+ val m = arr(0)
+ println(m)
+ foo(arr)
+ val ys: Seq[Meter] = arr map (_ + new Meter(1))
+ println(ys)
+ val zs = arr map (_ / Meter(1))
+ println(zs)
+ val fs = arr map (_.toFoot)
+ println(fs)
+ }
+
+}
diff --git a/test/files/run/MeterCaseClass.check b/test/files/run/MeterCaseClass.check
new file mode 100644
index 0000000000..08370d2097
--- /dev/null
+++ b/test/files/run/MeterCaseClass.check
@@ -0,0 +1,21 @@
+2.0
+Meter(4.0)
+false
+x.isInstanceOf[Meter]: true
+x.hashCode: 1072693248
+x == 1: false
+x == y: true
+a == b: true
+testing native arrays
+Array(Meter(1.0), Meter(2.0))
+Meter(1.0)
+>>>Meter(1.0)<<< Meter(1.0)
+>>>Meter(2.0)<<< Meter(2.0)
+testing wrapped arrays
+FlatArray(Meter(1.0), Meter(2.0))
+Meter(1.0)
+>>>Meter(1.0)<<< Meter(1.0)
+>>>Meter(2.0)<<< Meter(2.0)
+FlatArray(Meter(2.0), Meter(3.0))
+ArrayBuffer(1.0, 2.0)
+FlatArray(0.3048ft, 0.6096ft)
diff --git a/test/files/run/MeterCaseClass.scala b/test/files/run/MeterCaseClass.scala
new file mode 100644
index 0000000000..8459163f31
--- /dev/null
+++ b/test/files/run/MeterCaseClass.scala
@@ -0,0 +1,99 @@
+package a {
+ case class Meter(underlying: Double) extends AnyVal with _root_.b.Printable {
+ def + (other: Meter): Meter =
+ new Meter(this.underlying + other.underlying)
+ def / (other: Meter): Double = this.underlying / other.underlying
+ def / (factor: Double): Meter = new Meter(this.underlying / factor)
+ def < (other: Meter): Boolean = this.underlying < other.underlying
+ def toFoot: Foot = new Foot(this.underlying * 0.3048)
+ override def print = { Console.print(">>>"); super.print; proprint }
+ }
+
+ object Meter extends (Double => Meter) {
+
+ implicit val boxings = new BoxingConversions[Meter, Double] {
+ def box(x: Double) = new Meter(x)
+ def unbox(m: Meter) = m.underlying
+ }
+ }
+
+ class Foot(val unbox: Double) extends AnyVal {
+ def + (other: Foot): Foot =
+ new Foot(this.unbox + other.unbox)
+ override def toString = unbox.toString+"ft"
+ }
+ object Foot {
+ implicit val boxings = new BoxingConversions[Foot, Double] {
+ def box(x: Double) = new Foot(x)
+ def unbox(m: Foot) = m.unbox
+ }
+ }
+
+}
+package b {
+ trait Printable extends Any {
+ def print: Unit = Console.print(this)
+ protected def proprint = Console.print("<<<")
+ }
+}
+import a._
+import _root_.b._
+object Test extends App {
+
+ {
+ val x: Meter = new Meter(1)
+ val a: Object = x.asInstanceOf[Object]
+ val y: Meter = a.asInstanceOf[Meter]
+
+ val u: Double = 1
+ val b: Object = u.asInstanceOf[Object]
+ val v: Double = b.asInstanceOf[Double]
+ }
+
+ val x = new Meter(1)
+ val y = x
+ println((x + x) / x)
+ println((x + x) / 0.5)
+ println((x < x).toString)
+ println("x.isInstanceOf[Meter]: "+x.isInstanceOf[Meter])
+
+
+ println("x.hashCode: "+x.hashCode)
+ println("x == 1: "+(x == 1))
+ println("x == y: "+(x == y))
+ assert(x.hashCode == (1.0).hashCode)
+
+ val a: Any = x
+ val b: Any = y
+ println("a == b: "+(a == b))
+
+ { println("testing native arrays")
+ val arr = Array(x, y + x)
+ println(arr.deep)
+ def foo[T <: Printable](x: Array[T]) {
+ for (i <- 0 until x.length) { x(i).print; println(" "+x(i)) }
+ }
+ val m = arr(0)
+ println(m)
+ foo(arr)
+ }
+
+ { println("testing wrapped arrays")
+ import collection.mutable.FlatArray
+ val arr = FlatArray(x, y + x)
+ println(arr)
+ def foo(x: FlatArray[Meter]) {
+ for (i <- 0 until x.length) { x(i).print; println(" "+x(i)) }
+ }
+ val m = arr(0)
+ println(m)
+ foo(arr)
+ val ys: Seq[Meter] = arr map (_ + new Meter(1))
+ println(ys)
+ val zs = arr map (_ / Meter(1))
+ println(zs)
+ val fs = arr map (_.toFoot)
+ println(fs)
+ }
+
+}
diff --git a/test/files/run/color.check b/test/files/run/color.check
new file mode 100644
index 0000000000..598cc145f0
--- /dev/null
+++ b/test/files/run/color.check
@@ -0,0 +1,693 @@
+
+1 color
+the quick brown fox Black
+the quick brown fox Red
+the quick brown fox Green
+the quick brown fox Yellow
+the quick brown fox Blue
+the quick brown fox Magenta
+the quick brown fox Cyan
+the quick brown fox White
+
+1 effect
+the quick brown fox Reset
+the quick brown fox Bright
+the quick brown fox Faint
+the quick brown fox Italic
+the quick brown fox Underline
+the quick brown fox Blink
+the quick brown fox Inverse
+the quick brown fox Hidden
+the quick brown fox Strikethrough
+
+1 color 1 effect
+the quick brown fox Bright Black
+the quick brown fox Underline Black
+the quick brown fox Inverse Black
+the quick brown fox Bright Red
+the quick brown fox Underline Red
+the quick brown fox Inverse Red
+the quick brown fox Bright Green
+the quick brown fox Underline Green
+the quick brown fox Inverse Green
+the quick brown fox Bright Yellow
+the quick brown fox Underline Yellow
+the quick brown fox Inverse Yellow
+the quick brown fox Bright Blue
+the quick brown fox Underline Blue
+the quick brown fox Inverse Blue
+the quick brown fox Bright Magenta
+the quick brown fox Underline Magenta
+the quick brown fox Inverse Magenta
+the quick brown fox Bright Cyan
+the quick brown fox Underline Cyan
+the quick brown fox Inverse Cyan
+the quick brown fox Bright White
+the quick brown fox Underline White
+the quick brown fox Inverse White
+
+2 colors 0 effects
+the quick brown fox Black (on Black background)
+the quick brown fox Red (on Black background)
+the quick brown fox Green (on Black background)
+the quick brown fox Yellow (on Black background)
+the quick brown fox Blue (on Black background)
+the quick brown fox Magenta (on Black background)
+the quick brown fox Cyan (on Black background)
+the quick brown fox White (on Black background)
+the quick brown fox Black (on Red background)
+the quick brown fox Red (on Red background)
+the quick brown fox Green (on Red background)
+the quick brown fox Yellow (on Red background)
+the quick brown fox Blue (on Red background)
+the quick brown fox Magenta (on Red background)
+the quick brown fox Cyan (on Red background)
+the quick brown fox White (on Red background)
+the quick brown fox Black (on Green background)
+the quick brown fox Red (on Green background)
+the quick brown fox Green (on Green background)
+the quick brown fox Yellow (on Green background)
+the quick brown fox Blue (on Green background)
+the quick brown fox Magenta (on Green background)
+the quick brown fox Cyan (on Green background)
+the quick brown fox White (on Green background)
+the quick brown fox Black (on Yellow background)
+the quick brown fox Red (on Yellow background)
+the quick brown fox Green (on Yellow background)
+the quick brown fox Yellow (on Yellow background)
+the quick brown fox Blue (on Yellow background)
+the quick brown fox Magenta (on Yellow background)
+the quick brown fox Cyan (on Yellow background)
+the quick brown fox White (on Yellow background)
+the quick brown fox Black (on Blue background)
+the quick brown fox Red (on Blue background)
+the quick brown fox Green (on Blue background)
+the quick brown fox Yellow (on Blue background)
+the quick brown fox Blue (on Blue background)
+the quick brown fox Magenta (on Blue background)
+the quick brown fox Cyan (on Blue background)
+the quick brown fox White (on Blue background)
+the quick brown fox Black (on Magenta background)
+the quick brown fox Red (on Magenta background)
+the quick brown fox Green (on Magenta background)
+the quick brown fox Yellow (on Magenta background)
+the quick brown fox Blue (on Magenta background)
+the quick brown fox Magenta (on Magenta background)
+the quick brown fox Cyan (on Magenta background)
+the quick brown fox White (on Magenta background)
+the quick brown fox Black (on Cyan background)
+the quick brown fox Red (on Cyan background)
+the quick brown fox Green (on Cyan background)
+the quick brown fox Yellow (on Cyan background)
+the quick brown fox Blue (on Cyan background)
+the quick brown fox Magenta (on Cyan background)
+the quick brown fox Cyan (on Cyan background)
+the quick brown fox White (on Cyan background)
+the quick brown fox Black (on White background)
+the quick brown fox Red (on White background)
+the quick brown fox Green (on White background)
+the quick brown fox Yellow (on White background)
+the quick brown fox Blue (on White background)
+the quick brown fox Magenta (on White background)
+the quick brown fox Cyan (on White background)
+the quick brown fox White (on White background)
+
+2 colors 1 effect
+the quick brown fox Bright Black (on Black background)
+the quick brown fox Underline Black (on Black background)
+the quick brown fox Inverse Black (on Black background)
+the quick brown fox Bright Red (on Black background)
+the quick brown fox Underline Red (on Black background)
+the quick brown fox Inverse Red (on Black background)
+the quick brown fox Bright Green (on Black background)
+the quick brown fox Underline Green (on Black background)
+the quick brown fox Inverse Green (on Black background)
+the quick brown fox Bright Yellow (on Black background)
+the quick brown fox Underline Yellow (on Black background)
+the quick brown fox Inverse Yellow (on Black background)
+the quick brown fox Bright Blue (on Black background)
+the quick brown fox Underline Blue (on Black background)
+the quick brown fox Inverse Blue (on Black background)
+the quick brown fox Bright Magenta (on Black background)
+the quick brown fox Underline Magenta (on Black background)
+the quick brown fox Inverse Magenta (on Black background)
+the quick brown fox Bright Cyan (on Black background)
+the quick brown fox Underline Cyan (on Black background)
+the quick brown fox Inverse Cyan (on Black background)
+the quick brown fox Bright White (on Black background)
+the quick brown fox Underline White (on Black background)
+the quick brown fox Inverse White (on Black background)
+the quick brown fox Bright Black (on Red background)
+the quick brown fox Underline Black (on Red background)
+the quick brown fox Inverse Black (on Red background)
+the quick brown fox Bright Red (on Red background)
+the quick brown fox Underline Red (on Red background)
+the quick brown fox Inverse Red (on Red background)
+the quick brown fox Bright Green (on Red background)
+the quick brown fox Underline Green (on Red background)
+the quick brown fox Inverse Green (on Red background)
+the quick brown fox Bright Yellow (on Red background)
+the quick brown fox Underline Yellow (on Red background)
+the quick brown fox Inverse Yellow (on Red background)
+the quick brown fox Bright Blue (on Red background)
+the quick brown fox Underline Blue (on Red background)
+the quick brown fox Inverse Blue (on Red background)
+the quick brown fox Bright Magenta (on Red background)
+the quick brown fox Underline Magenta (on Red background)
+the quick brown fox Inverse Magenta (on Red background)
+the quick brown fox Bright Cyan (on Red background)
+the quick brown fox Underline Cyan (on Red background)
+the quick brown fox Inverse Cyan (on Red background)
+the quick brown fox Bright White (on Red background)
+the quick brown fox Underline White (on Red background)
+the quick brown fox Inverse White (on Red background)
+the quick brown fox Bright Black (on Green background)
+the quick brown fox Underline Black (on Green background)
+the quick brown fox Inverse Black (on Green background)
+the quick brown fox Bright Red (on Green background)
+the quick brown fox Underline Red (on Green background)
+the quick brown fox Inverse Red (on Green background)
+the quick brown fox Bright Green (on Green background)
+the quick brown fox Underline Green (on Green background)
+the quick brown fox Inverse Green (on Green background)
+the quick brown fox Bright Yellow (on Green background)
+the quick brown fox Underline Yellow (on Green background)
+the quick brown fox Inverse Yellow (on Green background)
+the quick brown fox Bright Blue (on Green background)
+the quick brown fox Underline Blue (on Green background)
+the quick brown fox Inverse Blue (on Green background)
+the quick brown fox Bright Magenta (on Green background)
+the quick brown fox Underline Magenta (on Green background)
+the quick brown fox Inverse Magenta (on Green background)
+the quick brown fox Bright Cyan (on Green background)
+the quick brown fox Underline Cyan (on Green background)
+the quick brown fox Inverse Cyan (on Green background)
+the quick brown fox Bright White (on Green background)
+the quick brown fox Underline White (on Green background)
+the quick brown fox Inverse White (on Green background)
+the quick brown fox Bright Black (on Yellow background)
+the quick brown fox Underline Black (on Yellow background)
+the quick brown fox Inverse Black (on Yellow background)
+the quick brown fox Bright Red (on Yellow background)
+the quick brown fox Underline Red (on Yellow background)
+the quick brown fox Inverse Red (on Yellow background)
+the quick brown fox Bright Green (on Yellow background)
+the quick brown fox Underline Green (on Yellow background)
+the quick brown fox Inverse Green (on Yellow background)
+the quick brown fox Bright Yellow (on Yellow background)
+the quick brown fox Underline Yellow (on Yellow background)
+the quick brown fox Inverse Yellow (on Yellow background)
+the quick brown fox Bright Blue (on Yellow background)
+the quick brown fox Underline Blue (on Yellow background)
+the quick brown fox Inverse Blue (on Yellow background)
+the quick brown fox Bright Magenta (on Yellow background)
+the quick brown fox Underline Magenta (on Yellow background)
+the quick brown fox Inverse Magenta (on Yellow background)
+the quick brown fox Bright Cyan (on Yellow background)
+the quick brown fox Underline Cyan (on Yellow background)
+the quick brown fox Inverse Cyan (on Yellow background)
+the quick brown fox Bright White (on Yellow background)
+the quick brown fox Underline White (on Yellow background)
+the quick brown fox Inverse White (on Yellow background)
+the quick brown fox Bright Black (on Blue background)
+the quick brown fox Underline Black (on Blue background)
+the quick brown fox Inverse Black (on Blue background)
+the quick brown fox Bright Red (on Blue background)
+the quick brown fox Underline Red (on Blue background)
+the quick brown fox Inverse Red (on Blue background)
+the quick brown fox Bright Green (on Blue background)
+the quick brown fox Underline Green (on Blue background)
+the quick brown fox Inverse Green (on Blue background)
+the quick brown fox Bright Yellow (on Blue background)
+the quick brown fox Underline Yellow (on Blue background)
+the quick brown fox Inverse Yellow (on Blue background)
+the quick brown fox Bright Blue (on Blue background)
+the quick brown fox Underline Blue (on Blue background)
+the quick brown fox Inverse Blue (on Blue background)
+the quick brown fox Bright Magenta (on Blue background)
+the quick brown fox Underline Magenta (on Blue background)
+the quick brown fox Inverse Magenta (on Blue background)
+the quick brown fox Bright Cyan (on Blue background)
+the quick brown fox Underline Cyan (on Blue background)
+the quick brown fox Inverse Cyan (on Blue background)
+the quick brown fox Bright White (on Blue background)
+the quick brown fox Underline White (on Blue background)
+the quick brown fox Inverse White (on Blue background)
+the quick brown fox Bright Black (on Magenta background)
+the quick brown fox Underline Black (on Magenta background)
+the quick brown fox Inverse Black (on Magenta background)
+the quick brown fox Bright Red (on Magenta background)
+the quick brown fox Underline Red (on Magenta background)
+the quick brown fox Inverse Red (on Magenta background)
+the quick brown fox Bright Green (on Magenta background)
+the quick brown fox Underline Green (on Magenta background)
+the quick brown fox Inverse Green (on Magenta background)
+the quick brown fox Bright Yellow (on Magenta background)
+the quick brown fox Underline Yellow (on Magenta background)
+the quick brown fox Inverse Yellow (on Magenta background)
+the quick brown fox Bright Blue (on Magenta background)
+the quick brown fox Underline Blue (on Magenta background)
+the quick brown fox Inverse Blue (on Magenta background)
+the quick brown fox Bright Magenta (on Magenta background)
+the quick brown fox Underline Magenta (on Magenta background)
+the quick brown fox Inverse Magenta (on Magenta background)
+the quick brown fox Bright Cyan (on Magenta background)
+the quick brown fox Underline Cyan (on Magenta background)
+the quick brown fox Inverse Cyan (on Magenta background)
+the quick brown fox Bright White (on Magenta background)
+the quick brown fox Underline White (on Magenta background)
+the quick brown fox Inverse White (on Magenta background)
+the quick brown fox Bright Black (on Cyan background)
+the quick brown fox Underline Black (on Cyan background)
+the quick brown fox Inverse Black (on Cyan background)
+the quick brown fox Bright Red (on Cyan background)
+the quick brown fox Underline Red (on Cyan background)
+the quick brown fox Inverse Red (on Cyan background)
+the quick brown fox Bright Green (on Cyan background)
+the quick brown fox Underline Green (on Cyan background)
+the quick brown fox Inverse Green (on Cyan background)
+the quick brown fox Bright Yellow (on Cyan background)
+the quick brown fox Underline Yellow (on Cyan background)
+the quick brown fox Inverse Yellow (on Cyan background)
+the quick brown fox Bright Blue (on Cyan background)
+the quick brown fox Underline Blue (on Cyan background)
+the quick brown fox Inverse Blue (on Cyan background)
+the quick brown fox Bright Magenta (on Cyan background)
+the quick brown fox Underline Magenta (on Cyan background)
+the quick brown fox Inverse Magenta (on Cyan background)
+the quick brown fox Bright Cyan (on Cyan background)
+the quick brown fox Underline Cyan (on Cyan background)
+the quick brown fox Inverse Cyan (on Cyan background)
+the quick brown fox Bright White (on Cyan background)
+the quick brown fox Underline White (on Cyan background)
+the quick brown fox Inverse White (on Cyan background)
+the quick brown fox Bright Black (on White background)
+the quick brown fox Underline Black (on White background)
+the quick brown fox Inverse Black (on White background)
+the quick brown fox Bright Red (on White background)
+the quick brown fox Underline Red (on White background)
+the quick brown fox Inverse Red (on White background)
+the quick brown fox Bright Green (on White background)
+the quick brown fox Underline Green (on White background)
+the quick brown fox Inverse Green (on White background)
+the quick brown fox Bright Yellow (on White background)
+the quick brown fox Underline Yellow (on White background)
+the quick brown fox Inverse Yellow (on White background)
+the quick brown fox Bright Blue (on White background)
+the quick brown fox Underline Blue (on White background)
+the quick brown fox Inverse Blue (on White background)
+the quick brown fox Bright Magenta (on White background)
+the quick brown fox Underline Magenta (on White background)
+the quick brown fox Inverse Magenta (on White background)
+the quick brown fox Bright Cyan (on White background)
+the quick brown fox Underline Cyan (on White background)
+the quick brown fox Inverse Cyan (on White background)
+the quick brown fox Bright White (on White background)
+the quick brown fox Underline White (on White background)
+the quick brown fox Inverse White (on White background)
+
+2 colors 2 effects
+the quick brown fox Bright Underline Black (on Black background)
+the quick brown fox Bright Inverse Black (on Black background)
+the quick brown fox Underline Bright Black (on Black background)
+the quick brown fox Underline Inverse Black (on Black background)
+the quick brown fox Inverse Bright Black (on Black background)
+the quick brown fox Inverse Underline Black (on Black background)
+the quick brown fox Bright Underline Red (on Black background)
+the quick brown fox Bright Inverse Red (on Black background)
+the quick brown fox Underline Bright Red (on Black background)
+the quick brown fox Underline Inverse Red (on Black background)
+the quick brown fox Inverse Bright Red (on Black background)
+the quick brown fox Inverse Underline Red (on Black background)
+the quick brown fox Bright Underline Green (on Black background)
+the quick brown fox Bright Inverse Green (on Black background)
+the quick brown fox Underline Bright Green (on Black background)
+the quick brown fox Underline Inverse Green (on Black background)
+the quick brown fox Inverse Bright Green (on Black background)
+the quick brown fox Inverse Underline Green (on Black background)
+the quick brown fox Bright Underline Yellow (on Black background)
+the quick brown fox Bright Inverse Yellow (on Black background)
+the quick brown fox Underline Bright Yellow (on Black background)
+the quick brown fox Underline Inverse Yellow (on Black background)
+the quick brown fox Inverse Bright Yellow (on Black background)
+the quick brown fox Inverse Underline Yellow (on Black background)
+the quick brown fox Bright Underline Blue (on Black background)
+the quick brown fox Bright Inverse Blue (on Black background)
+the quick brown fox Underline Bright Blue (on Black background)
+the quick brown fox Underline Inverse Blue (on Black background)
+the quick brown fox Inverse Bright Blue (on Black background)
+the quick brown fox Inverse Underline Blue (on Black background)
+the quick brown fox Bright Underline Magenta (on Black background)
+the quick brown fox Bright Inverse Magenta (on Black background)
+the quick brown fox Underline Bright Magenta (on Black background)
+the quick brown fox Underline Inverse Magenta (on Black background)
+the quick brown fox Inverse Bright Magenta (on Black background)
+the quick brown fox Inverse Underline Magenta (on Black background)
+the quick brown fox Bright Underline Cyan (on Black background)
+the quick brown fox Bright Inverse Cyan (on Black background)
+the quick brown fox Underline Bright Cyan (on Black background)
+the quick brown fox Underline Inverse Cyan (on Black background)
+the quick brown fox Inverse Bright Cyan (on Black background)
+the quick brown fox Inverse Underline Cyan (on Black background)
+the quick brown fox Bright Underline White (on Black background)
+the quick brown fox Bright Inverse White (on Black background)
+the quick brown fox Underline Bright White (on Black background)
+the quick brown fox Underline Inverse White (on Black background)
+the quick brown fox Inverse Bright White (on Black background)
+the quick brown fox Inverse Underline White (on Black background)
+the quick brown fox Bright Underline Black (on Red background)
+the quick brown fox Bright Inverse Black (on Red background)
+the quick brown fox Underline Bright Black (on Red background)
+the quick brown fox Underline Inverse Black (on Red background)
+the quick brown fox Inverse Bright Black (on Red background)
+the quick brown fox Inverse Underline Black (on Red background)
+the quick brown fox Bright Underline Red (on Red background)
+the quick brown fox Bright Inverse Red (on Red background)
+the quick brown fox Underline Bright Red (on Red background)
+the quick brown fox Underline Inverse Red (on Red background)
+the quick brown fox Inverse Bright Red (on Red background)
+the quick brown fox Inverse Underline Red (on Red background)
+the quick brown fox Bright Underline Green (on Red background)
+the quick brown fox Bright Inverse Green (on Red background)
+the quick brown fox Underline Bright Green (on Red background)
+the quick brown fox Underline Inverse Green (on Red background)
+the quick brown fox Inverse Bright Green (on Red background)
+the quick brown fox Inverse Underline Green (on Red background)
+the quick brown fox Bright Underline Yellow (on Red background)
+the quick brown fox Bright Inverse Yellow (on Red background)
+the quick brown fox Underline Bright Yellow (on Red background)
+the quick brown fox Underline Inverse Yellow (on Red background)
+the quick brown fox Inverse Bright Yellow (on Red background)
+the quick brown fox Inverse Underline Yellow (on Red background)
+the quick brown fox Bright Underline Blue (on Red background)
+the quick brown fox Bright Inverse Blue (on Red background)
+the quick brown fox Underline Bright Blue (on Red background)
+the quick brown fox Underline Inverse Blue (on Red background)
+the quick brown fox Inverse Bright Blue (on Red background)
+the quick brown fox Inverse Underline Blue (on Red background)
+the quick brown fox Bright Underline Magenta (on Red background)
+the quick brown fox Bright Inverse Magenta (on Red background)
+the quick brown fox Underline Bright Magenta (on Red background)
+the quick brown fox Underline Inverse Magenta (on Red background)
+the quick brown fox Inverse Bright Magenta (on Red background)
+the quick brown fox Inverse Underline Magenta (on Red background)
+the quick brown fox Bright Underline Cyan (on Red background)
+the quick brown fox Bright Inverse Cyan (on Red background)
+the quick brown fox Underline Bright Cyan (on Red background)
+the quick brown fox Underline Inverse Cyan (on Red background)
+the quick brown fox Inverse Bright Cyan (on Red background)
+the quick brown fox Inverse Underline Cyan (on Red background)
+the quick brown fox Bright Underline White (on Red background)
+the quick brown fox Bright Inverse White (on Red background)
+the quick brown fox Underline Bright White (on Red background)
+the quick brown fox Underline Inverse White (on Red background)
+the quick brown fox Inverse Bright White (on Red background)
+the quick brown fox Inverse Underline White (on Red background)
+the quick brown fox Bright Underline Black (on Green background)
+the quick brown fox Bright Inverse Black (on Green background)
+the quick brown fox Underline Bright Black (on Green background)
+the quick brown fox Underline Inverse Black (on Green background)
+the quick brown fox Inverse Bright Black (on Green background)
+the quick brown fox Inverse Underline Black (on Green background)
+the quick brown fox Bright Underline Red (on Green background)
+the quick brown fox Bright Inverse Red (on Green background)
+the quick brown fox Underline Bright Red (on Green background)
+the quick brown fox Underline Inverse Red (on Green background)
+the quick brown fox Inverse Bright Red (on Green background)
+the quick brown fox Inverse Underline Red (on Green background)
+the quick brown fox Bright Underline Green (on Green background)
+the quick brown fox Bright Inverse Green (on Green background)
+the quick brown fox Underline Bright Green (on Green background)
+the quick brown fox Underline Inverse Green (on Green background)
+the quick brown fox Inverse Bright Green (on Green background)
+the quick brown fox Inverse Underline Green (on Green background)
+the quick brown fox Bright Underline Yellow (on Green background)
+the quick brown fox Bright Inverse Yellow (on Green background)
+the quick brown fox Underline Bright Yellow (on Green background)
+the quick brown fox Underline Inverse Yellow (on Green background)
+the quick brown fox Inverse Bright Yellow (on Green background)
+the quick brown fox Inverse Underline Yellow (on Green background)
+the quick brown fox Bright Underline Blue (on Green background)
+the quick brown fox Bright Inverse Blue (on Green background)
+the quick brown fox Underline Bright Blue (on Green background)
+the quick brown fox Underline Inverse Blue (on Green background)
+the quick brown fox Inverse Bright Blue (on Green background)
+the quick brown fox Inverse Underline Blue (on Green background)
+the quick brown fox Bright Underline Magenta (on Green background)
+the quick brown fox Bright Inverse Magenta (on Green background)
+the quick brown fox Underline Bright Magenta (on Green background)
+the quick brown fox Underline Inverse Magenta (on Green background)
+the quick brown fox Inverse Bright Magenta (on Green background)
+the quick brown fox Inverse Underline Magenta (on Green background)
+the quick brown fox Bright Underline Cyan (on Green background)
+the quick brown fox Bright Inverse Cyan (on Green background)
+the quick brown fox Underline Bright Cyan (on Green background)
+the quick brown fox Underline Inverse Cyan (on Green background)
+the quick brown fox Inverse Bright Cyan (on Green background)
+the quick brown fox Inverse Underline Cyan (on Green background)
+the quick brown fox Bright Underline White (on Green background)
+the quick brown fox Bright Inverse White (on Green background)
+the quick brown fox Underline Bright White (on Green background)
+the quick brown fox Underline Inverse White (on Green background)
+the quick brown fox Inverse Bright White (on Green background)
+the quick brown fox Inverse Underline White (on Green background)
+the quick brown fox Bright Underline Black (on Yellow background)
+the quick brown fox Bright Inverse Black (on Yellow background)
+the quick brown fox Underline Bright Black (on Yellow background)
+the quick brown fox Underline Inverse Black (on Yellow background)
+the quick brown fox Inverse Bright Black (on Yellow background)
+the quick brown fox Inverse Underline Black (on Yellow background)
+the quick brown fox Bright Underline Red (on Yellow background)
+the quick brown fox Bright Inverse Red (on Yellow background)
+the quick brown fox Underline Bright Red (on Yellow background)
+the quick brown fox Underline Inverse Red (on Yellow background)
+the quick brown fox Inverse Bright Red (on Yellow background)
+the quick brown fox Inverse Underline Red (on Yellow background)
+the quick brown fox Bright Underline Green (on Yellow background)
+the quick brown fox Bright Inverse Green (on Yellow background)
+the quick brown fox Underline Bright Green (on Yellow background)
+the quick brown fox Underline Inverse Green (on Yellow background)
+the quick brown fox Inverse Bright Green (on Yellow background)
+the quick brown fox Inverse Underline Green (on Yellow background)
+the quick brown fox Bright Underline Yellow (on Yellow background)
+the quick brown fox Bright Inverse Yellow (on Yellow background)
+the quick brown fox Underline Bright Yellow (on Yellow background)
+the quick brown fox Underline Inverse Yellow (on Yellow background)
+the quick brown fox Inverse Bright Yellow (on Yellow background)
+the quick brown fox Inverse Underline Yellow (on Yellow background)
+the quick brown fox Bright Underline Blue (on Yellow background)
+the quick brown fox Bright Inverse Blue (on Yellow background)
+the quick brown fox Underline Bright Blue (on Yellow background)
+the quick brown fox Underline Inverse Blue (on Yellow background)
+the quick brown fox Inverse Bright Blue (on Yellow background)
+the quick brown fox Inverse Underline Blue (on Yellow background)
+the quick brown fox Bright Underline Magenta (on Yellow background)
+the quick brown fox Bright Inverse Magenta (on Yellow background)
+the quick brown fox Underline Bright Magenta (on Yellow background)
+the quick brown fox Underline Inverse Magenta (on Yellow background)
+the quick brown fox Inverse Bright Magenta (on Yellow background)
+the quick brown fox Inverse Underline Magenta (on Yellow background)
+the quick brown fox Bright Underline Cyan (on Yellow background)
+the quick brown fox Bright Inverse Cyan (on Yellow background)
+the quick brown fox Underline Bright Cyan (on Yellow background)
+the quick brown fox Underline Inverse Cyan (on Yellow background)
+the quick brown fox Inverse Bright Cyan (on Yellow background)
+the quick brown fox Inverse Underline Cyan (on Yellow background)
+the quick brown fox Bright Underline White (on Yellow background)
+the quick brown fox Bright Inverse White (on Yellow background)
+the quick brown fox Underline Bright White (on Yellow background)
+the quick brown fox Underline Inverse White (on Yellow background)
+the quick brown fox Inverse Bright White (on Yellow background)
+the quick brown fox Inverse Underline White (on Yellow background)
+the quick brown fox Bright Underline Black (on Blue background)
+the quick brown fox Bright Inverse Black (on Blue background)
+the quick brown fox Underline Bright Black (on Blue background)
+the quick brown fox Underline Inverse Black (on Blue background)
+the quick brown fox Inverse Bright Black (on Blue background)
+the quick brown fox Inverse Underline Black (on Blue background)
+the quick brown fox Bright Underline Red (on Blue background)
+the quick brown fox Bright Inverse Red (on Blue background)
+the quick brown fox Underline Bright Red (on Blue background)
+the quick brown fox Underline Inverse Red (on Blue background)
+the quick brown fox Inverse Bright Red (on Blue background)
+the quick brown fox Inverse Underline Red (on Blue background)
+the quick brown fox Bright Underline Green (on Blue background)
+the quick brown fox Bright Inverse Green (on Blue background)
+the quick brown fox Underline Bright Green (on Blue background)
+the quick brown fox Underline Inverse Green (on Blue background)
+the quick brown fox Inverse Bright Green (on Blue background)
+the quick brown fox Inverse Underline Green (on Blue background)
+the quick brown fox Bright Underline Yellow (on Blue background)
+the quick brown fox Bright Inverse Yellow (on Blue background)
+the quick brown fox Underline Bright Yellow (on Blue background)
+the quick brown fox Underline Inverse Yellow (on Blue background)
+the quick brown fox Inverse Bright Yellow (on Blue background)
+the quick brown fox Inverse Underline Yellow (on Blue background)
+the quick brown fox Bright Underline Blue (on Blue background)
+the quick brown fox Bright Inverse Blue (on Blue background)
+the quick brown fox Underline Bright Blue (on Blue background)
+the quick brown fox Underline Inverse Blue (on Blue background)
+the quick brown fox Inverse Bright Blue (on Blue background)
+the quick brown fox Inverse Underline Blue (on Blue background)
+the quick brown fox Bright Underline Magenta (on Blue background)
+the quick brown fox Bright Inverse Magenta (on Blue background)
+the quick brown fox Underline Bright Magenta (on Blue background)
+the quick brown fox Underline Inverse Magenta (on Blue background)
+the quick brown fox Inverse Bright Magenta (on Blue background)
+the quick brown fox Inverse Underline Magenta (on Blue background)
+the quick brown fox Bright Underline Cyan (on Blue background)
+the quick brown fox Bright Inverse Cyan (on Blue background)
+the quick brown fox Underline Bright Cyan (on Blue background)
+the quick brown fox Underline Inverse Cyan (on Blue background)
+the quick brown fox Inverse Bright Cyan (on Blue background)
+the quick brown fox Inverse Underline Cyan (on Blue background)
+the quick brown fox Bright Underline White (on Blue background)
+the quick brown fox Bright Inverse White (on Blue background)
+the quick brown fox Underline Bright White (on Blue background)
+the quick brown fox Underline Inverse White (on Blue background)
+the quick brown fox Inverse Bright White (on Blue background)
+the quick brown fox Inverse Underline White (on Blue background)
+the quick brown fox Bright Underline Black (on Magenta background)
+the quick brown fox Bright Inverse Black (on Magenta background)
+the quick brown fox Underline Bright Black (on Magenta background)
+the quick brown fox Underline Inverse Black (on Magenta background)
+the quick brown fox Inverse Bright Black (on Magenta background)
+the quick brown fox Inverse Underline Black (on Magenta background)
+the quick brown fox Bright Underline Red (on Magenta background)
+the quick brown fox Bright Inverse Red (on Magenta background)
+the quick brown fox Underline Bright Red (on Magenta background)
+the quick brown fox Underline Inverse Red (on Magenta background)
+the quick brown fox Inverse Bright Red (on Magenta background)
+the quick brown fox Inverse Underline Red (on Magenta background)
+the quick brown fox Bright Underline Green (on Magenta background)
+the quick brown fox Bright Inverse Green (on Magenta background)
+the quick brown fox Underline Bright Green (on Magenta background)
+the quick brown fox Underline Inverse Green (on Magenta background)
+the quick brown fox Inverse Bright Green (on Magenta background)
+the quick brown fox Inverse Underline Green (on Magenta background)
+the quick brown fox Bright Underline Yellow (on Magenta background)
+the quick brown fox Bright Inverse Yellow (on Magenta background)
+the quick brown fox Underline Bright Yellow (on Magenta background)
+the quick brown fox Underline Inverse Yellow (on Magenta background)
+the quick brown fox Inverse Bright Yellow (on Magenta background)
+the quick brown fox Inverse Underline Yellow (on Magenta background)
+the quick brown fox Bright Underline Blue (on Magenta background)
+the quick brown fox Bright Inverse Blue (on Magenta background)
+the quick brown fox Underline Bright Blue (on Magenta background)
+the quick brown fox Underline Inverse Blue (on Magenta background)
+the quick brown fox Inverse Bright Blue (on Magenta background)
+the quick brown fox Inverse Underline Blue (on Magenta background)
+the quick brown fox Bright Underline Magenta (on Magenta background)
+the quick brown fox Bright Inverse Magenta (on Magenta background)
+the quick brown fox Underline Bright Magenta (on Magenta background)
+the quick brown fox Underline Inverse Magenta (on Magenta background)
+the quick brown fox Inverse Bright Magenta (on Magenta background)
+the quick brown fox Inverse Underline Magenta (on Magenta background)
+the quick brown fox Bright Underline Cyan (on Magenta background)
+the quick brown fox Bright Inverse Cyan (on Magenta background)
+the quick brown fox Underline Bright Cyan (on Magenta background)
+the quick brown fox Underline Inverse Cyan (on Magenta background)
+the quick brown fox Inverse Bright Cyan (on Magenta background)
+the quick brown fox Inverse Underline Cyan (on Magenta background)
+the quick brown fox Bright Underline White (on Magenta background)
+the quick brown fox Bright Inverse White (on Magenta background)
+the quick brown fox Underline Bright White (on Magenta background)
+the quick brown fox Underline Inverse White (on Magenta background)
+the quick brown fox Inverse Bright White (on Magenta background)
+the quick brown fox Inverse Underline White (on Magenta background)
+the quick brown fox Bright Underline Black (on Cyan background)
+the quick brown fox Bright Inverse Black (on Cyan background)
+the quick brown fox Underline Bright Black (on Cyan background)
+the quick brown fox Underline Inverse Black (on Cyan background)
+the quick brown fox Inverse Bright Black (on Cyan background)
+the quick brown fox Inverse Underline Black (on Cyan background)
+the quick brown fox Bright Underline Red (on Cyan background)
+the quick brown fox Bright Inverse Red (on Cyan background)
+the quick brown fox Underline Bright Red (on Cyan background)
+the quick brown fox Underline Inverse Red (on Cyan background)
+the quick brown fox Inverse Bright Red (on Cyan background)
+the quick brown fox Inverse Underline Red (on Cyan background)
+the quick brown fox Bright Underline Green (on Cyan background)
+the quick brown fox Bright Inverse Green (on Cyan background)
+the quick brown fox Underline Bright Green (on Cyan background)
+the quick brown fox Underline Inverse Green (on Cyan background)
+the quick brown fox Inverse Bright Green (on Cyan background)
+the quick brown fox Inverse Underline Green (on Cyan background)
+the quick brown fox Bright Underline Yellow (on Cyan background)
+the quick brown fox Bright Inverse Yellow (on Cyan background)
+the quick brown fox Underline Bright Yellow (on Cyan background)
+the quick brown fox Underline Inverse Yellow (on Cyan background)
+the quick brown fox Inverse Bright Yellow (on Cyan background)
+the quick brown fox Inverse Underline Yellow (on Cyan background)
+the quick brown fox Bright Underline Blue (on Cyan background)
+the quick brown fox Bright Inverse Blue (on Cyan background)
+the quick brown fox Underline Bright Blue (on Cyan background)
+the quick brown fox Underline Inverse Blue (on Cyan background)
+the quick brown fox Inverse Bright Blue (on Cyan background)
+the quick brown fox Inverse Underline Blue (on Cyan background)
+the quick brown fox Bright Underline Magenta (on Cyan background)
+the quick brown fox Bright Inverse Magenta (on Cyan background)
+the quick brown fox Underline Bright Magenta (on Cyan background)
+the quick brown fox Underline Inverse Magenta (on Cyan background)
+the quick brown fox Inverse Bright Magenta (on Cyan background)
+the quick brown fox Inverse Underline Magenta (on Cyan background)
+the quick brown fox Bright Underline Cyan (on Cyan background)
+the quick brown fox Bright Inverse Cyan (on Cyan background)
+the quick brown fox Underline Bright Cyan (on Cyan background)
+the quick brown fox Underline Inverse Cyan (on Cyan background)
+the quick brown fox Inverse Bright Cyan (on Cyan background)
+the quick brown fox Inverse Underline Cyan (on Cyan background)
+the quick brown fox Bright Underline White (on Cyan background)
+the quick brown fox Bright Inverse White (on Cyan background)
+the quick brown fox Underline Bright White (on Cyan background)
+the quick brown fox Underline Inverse White (on Cyan background)
+the quick brown fox Inverse Bright White (on Cyan background)
+the quick brown fox Inverse Underline White (on Cyan background)
+the quick brown fox Bright Underline Black (on White background)
+the quick brown fox Bright Inverse Black (on White background)
+the quick brown fox Underline Bright Black (on White background)
+the quick brown fox Underline Inverse Black (on White background)
+the quick brown fox Inverse Bright Black (on White background)
+the quick brown fox Inverse Underline Black (on White background)
+the quick brown fox Bright Underline Red (on White background)
+the quick brown fox Bright Inverse Red (on White background)
+the quick brown fox Underline Bright Red (on White background)
+the quick brown fox Underline Inverse Red (on White background)
+the quick brown fox Inverse Bright Red (on White background)
+the quick brown fox Inverse Underline Red (on White background)
+the quick brown fox Bright Underline Green (on White background)
+the quick brown fox Bright Inverse Green (on White background)
+the quick brown fox Underline Bright Green (on White background)
+the quick brown fox Underline Inverse Green (on White background)
+the quick brown fox Inverse Bright Green (on White background)
+the quick brown fox Inverse Underline Green (on White background)
+the quick brown fox Bright Underline Yellow (on White background)
+the quick brown fox Bright Inverse Yellow (on White background)
+the quick brown fox Underline Bright Yellow (on White background)
+the quick brown fox Underline Inverse Yellow (on White background)
+the quick brown fox Inverse Bright Yellow (on White background)
+the quick brown fox Inverse Underline Yellow (on White background)
+the quick brown fox Bright Underline Blue (on White background)
+the quick brown fox Bright Inverse Blue (on White background)
+the quick brown fox Underline Bright Blue (on White background)
+the quick brown fox Underline Inverse Blue (on White background)
+the quick brown fox Inverse Bright Blue (on White background)
+the quick brown fox Inverse Underline Blue (on White background)
+the quick brown fox Bright Underline Magenta (on White background)
+the quick brown fox Bright Inverse Magenta (on White background)
+the quick brown fox Underline Bright Magenta (on White background)
+the quick brown fox Underline Inverse Magenta (on White background)
+the quick brown fox Inverse Bright Magenta (on White background)
+the quick brown fox Inverse Underline Magenta (on White background)
+the quick brown fox Bright Underline Cyan (on White background)
+the quick brown fox Bright Inverse Cyan (on White background)
+the quick brown fox Underline Bright Cyan (on White background)
+the quick brown fox Underline Inverse Cyan (on White background)
+the quick brown fox Inverse Bright Cyan (on White background)
+the quick brown fox Inverse Underline Cyan (on White background)
+the quick brown fox Bright Underline White (on White background)
+the quick brown fox Bright Inverse White (on White background)
+the quick brown fox Underline Bright White (on White background)
+the quick brown fox Underline Inverse White (on White background)
+the quick brown fox Inverse Bright White (on White background)
+the quick brown fox Inverse Underline White (on White background)
diff --git a/test/files/run/color.scala b/test/files/run/color.scala
new file mode 100644
index 0000000000..a0af8477e7
--- /dev/null
+++ b/test/files/run/color.scala
@@ -0,0 +1,33 @@
+import scala.tools.util.color._
+
+object Test {
+ // The ones which are somewhat widely supported.
+ def effects = List(Bright, Underline, Inverse)
+
+ def demo(text: String) = {
+ def to_s(esc: Ansi): String = esc.atoms map {
+ case x: AnsiBackground => "" + x
+ case x => "%-10s" format x
+ } mkString " "
+
+ def show(esc: Ansi) = println("%s %s".format(text in esc, to_s(esc)))
+
+ println("\n1 color")
+ for (c <- Ansi.colors) show(c)
+ println("\n1 effect")
+ for (e <- Ansi.effects) show(e)
+ println("\n1 color 1 effect")
+ for (c <- Ansi.colors; e <- effects) show(c / e)
+ println("\n2 colors 0 effects")
+ for (c1 <- Ansi.colors ; c2 <- Ansi.colors) show(c2 on c1)
+ println("\n2 colors 1 effect")
+ for (c1 <- Ansi.colors ; c2 <- Ansi.colors ; e1 <- effects) show((c2 on c1) / e1)
+ println("\n2 colors 2 effects")
+ for (c1 <- Ansi.colors ; c2 <- Ansi.colors ; e1 <- effects ; e2 <- effects ; if e1 != e2) show((c2 on c1) / e1 / e2)
+ }
+
+ def main(args: Array[String]): Unit = {
+ val str = if (args.size > 1) args mkString " " else "the quick brown fox"
+ demo(str)
+ }
+}
diff --git a/test/files/run/compiler-asSeenFrom.check b/test/files/run/compiler-asSeenFrom.check
new file mode 100644
index 0000000000..f198e61072
--- /dev/null
+++ b/test/files/run/compiler-asSeenFrom.check
@@ -0,0 +1,323 @@
+class C {
+ type seen from prefix is
+ ---- ---------------- --
+ C[List[T3]]#I[T1] D[A1] C[List[T3]]#I[A1]
+ C[List[T3]]#I[T1] D[T3] C[List[T3]]#I[T3]
+ C[List[T3]]#J[T1] D[A1] C[List[T3]]#J[A1]
+ C[List[T3]]#J[T1] D[T3] C[List[T3]]#J[T3]
+ C[T1]#I[Int] C[List[T3]] C[List[T3]]#I[Int]
+ C[T1]#I[Int] D[A1] C[A1]#I[Int]
+ C[T1]#I[Int] D[T3] C[T3]#I[Int]
+ C[T1]#I[List[Int]] C[List[T3]] C[List[T3]]#I[List[Int]]
+ C[T1]#I[List[Int]] D[A1] C[A1]#I[List[Int]]
+ C[T1]#I[List[Int]] D[T3] C[T3]#I[List[Int]]
+ C[T1]#I[T1] C[List[T3]] C[List[T3]]#I[List[T3]]
+ C[T1]#I[T1] D[A1] C[A1]#I[A1]
+ C[T1]#I[T1] D[T3] C[T3]#I[T3]
+ C[T1]#I[T2] C[List[T3]] C[List[T3]]#I[T2]
+ C[T1]#I[T2] D[A1] C[A1]#I[T2]
+ C[T1]#I[T2] D[T3] C[T3]#I[T2]
+ C[T1]#I[T3] C[List[T3]] C[List[T3]]#I[T3]
+ C[T1]#I[T3] D[A1] C[A1]#I[T3]
+ C[T1]#I[T3] D[T3] C[T3]#I[T3]
+ C[T1]#I[T4] C[List[T3]] C[List[T3]]#I[T4]
+ C[T1]#I[T4] D[A1] C[A1]#I[T4]
+ C[T1]#I[T4] D[T3] C[T3]#I[T4]
+ C[T1]#J[Int] C[List[T3]] C[List[T3]]#J[Int]
+ C[T1]#J[Int] D[A1] C[A1]#J[Int]
+ C[T1]#J[Int] D[T3] C[T3]#J[Int]
+ C[T1]#J[List[Int]] C[List[T3]] C[List[T3]]#J[List[Int]]
+ C[T1]#J[List[Int]] D[A1] C[A1]#J[List[Int]]
+ C[T1]#J[List[Int]] D[T3] C[T3]#J[List[Int]]
+ C[T1]#J[T1] C[List[T3]] C[List[T3]]#J[List[T3]]
+ C[T1]#J[T1] D[A1] C[A1]#J[A1]
+ C[T1]#J[T1] D[T3] C[T3]#J[T3]
+ C[T1]#J[T2] C[List[T3]] C[List[T3]]#J[T2]
+ C[T1]#J[T2] D[A1] C[A1]#J[T2]
+ C[T1]#J[T2] D[T3] C[T3]#J[T2]
+ C[T1]#J[T3] C[List[T3]] C[List[T3]]#J[T3]
+ C[T1]#J[T3] D[A1] C[A1]#J[T3]
+ C[T1]#J[T3] D[T3] C[T3]#J[T3]
+ C[T1]#J[T4] C[List[T3]] C[List[T3]]#J[T4]
+ C[T1]#J[T4] D[A1] C[A1]#J[T4]
+ C[T1]#J[T4] D[T3] C[T3]#J[T4]
+ D[T3]#J[T1] C[List[T3]] D[T3]#J[List[T3]]
+ D[T3]#J[T1] D[A1] D[T3]#J[A1]
+ D[A1]#J[T1] C[List[T3]] D[A1]#J[List[T3]]
+ D[A1]#J[T1] D[T3] D[A1]#J[T3]
+}
+class D {
+ type seen from prefix is
+ ---- ---------------- --
+ C[List[T3]]#I[Int] D[A1] C[List[A1]]#I[Int]
+ C[List[T3]]#I[List[Int]] D[A1] C[List[A1]]#I[List[Int]]
+ C[List[T3]]#I[T1] D[A1] C[List[A1]]#I[T1]
+ C[List[T3]]#I[T2] D[A1] C[List[A1]]#I[T2]
+ C[List[T3]]#I[T3] D[A1] C[List[A1]]#I[A1]
+ C[List[T3]]#I[T4] D[A1] C[List[A1]]#I[T4]
+ C[List[T3]]#J[Int] D[A1] C[List[A1]]#J[Int]
+ C[List[T3]]#J[List[Int]] D[A1] C[List[A1]]#J[List[Int]]
+ C[List[T3]]#J[T1] D[A1] C[List[A1]]#J[T1]
+ C[List[T3]]#J[T2] D[A1] C[List[A1]]#J[T2]
+ C[List[T3]]#J[T3] D[A1] C[List[A1]]#J[A1]
+ C[List[T3]]#J[T4] D[A1] C[List[A1]]#J[T4]
+ C[T1]#I[T3] D[A1] C[T1]#I[A1]
+ C[T1]#J[T3] D[A1] C[T1]#J[A1]
+ D[T3]#J[Int] D[A1] D[A1]#J[Int]
+ D[T3]#J[List[Int]] D[A1] D[A1]#J[List[Int]]
+ D[T3]#J[T1] D[A1] D[A1]#J[T1]
+ D[T3]#J[T2] D[A1] D[A1]#J[T2]
+ D[T3]#J[T3] D[A1] D[A1]#J[A1]
+ D[T3]#J[T4] D[A1] D[A1]#J[T4]
+}
+class I {
+ type seen from prefix is
+ ---- ---------------- --
+ C[List[T3]]#I[T1] D.this.J[T4] C[List[T3]]#I[List[T3]]
+ C[List[T3]]#I[T1] Z.dZ.J[A2] C[List[T3]]#I[List[A1]]
+ C[List[T3]]#I[T1] Z.dZ.J[P] C[List[T3]]#I[List[A1]]
+ C[List[T3]]#I[T2] D.this.J[T4] C[List[T3]]#I[T4]
+ C[List[T3]]#I[T2] Z.dZ.J[A2] C[List[T3]]#I[A2]
+ C[List[T3]]#I[T2] Z.dZ.J[P] C[List[T3]]#I[P]
+ C[List[T3]]#J[T1] D.this.J[T4] C[List[T3]]#J[List[T3]]
+ C[List[T3]]#J[T1] Z.dZ.J[A2] C[List[T3]]#J[List[A1]]
+ C[List[T3]]#J[T1] Z.dZ.J[P] C[List[T3]]#J[List[A1]]
+ C[List[T3]]#J[T2] D.this.J[T4] C[List[T3]]#J[T4]
+ C[List[T3]]#J[T2] Z.dZ.J[A2] C[List[T3]]#J[A2]
+ C[List[T3]]#J[T2] Z.dZ.J[P] C[List[T3]]#J[P]
+ C[T1]#I[Int] D.this.J[T4] C[List[T3]]#I[Int]
+ C[T1]#I[Int] Z.dZ.J[A2] C[List[A1]]#I[Int]
+ C[T1]#I[Int] Z.dZ.J[P] C[List[A1]]#I[Int]
+ C[T1]#I[List[Int]] D.this.J[T4] C[List[T3]]#I[List[Int]]
+ C[T1]#I[List[Int]] Z.dZ.J[A2] C[List[A1]]#I[List[Int]]
+ C[T1]#I[List[Int]] Z.dZ.J[P] C[List[A1]]#I[List[Int]]
+ C[T1]#I[T1] D.this.J[T4] C[List[T3]]#I[List[T3]]
+ C[T1]#I[T1] Z.dZ.J[A2] C[List[A1]]#I[List[A1]]
+ C[T1]#I[T1] Z.dZ.J[P] C[List[A1]]#I[List[A1]]
+ C[T1]#I[T2] D.this.J[T4] C[List[T3]]#I[T4]
+ C[T1]#I[T2] Z.dZ.J[A2] C[List[A1]]#I[A2]
+ C[T1]#I[T2] Z.dZ.J[P] C[List[A1]]#I[P]
+ C[T1]#I[T3] D.this.J[T4] C[List[T3]]#I[T3]
+ C[T1]#I[T3] Z.dZ.J[A2] C[List[A1]]#I[T3]
+ C[T1]#I[T3] Z.dZ.J[P] C[List[A1]]#I[T3]
+ C[T1]#I[T4] D.this.J[T4] C[List[T3]]#I[T4]
+ C[T1]#I[T4] Z.dZ.J[A2] C[List[A1]]#I[T4]
+ C[T1]#I[T4] Z.dZ.J[P] C[List[A1]]#I[T4]
+ C[T1]#J[Int] D.this.J[T4] C[List[T3]]#J[Int]
+ C[T1]#J[Int] Z.dZ.J[A2] C[List[A1]]#J[Int]
+ C[T1]#J[Int] Z.dZ.J[P] C[List[A1]]#J[Int]
+ C[T1]#J[List[Int]] D.this.J[T4] C[List[T3]]#J[List[Int]]
+ C[T1]#J[List[Int]] Z.dZ.J[A2] C[List[A1]]#J[List[Int]]
+ C[T1]#J[List[Int]] Z.dZ.J[P] C[List[A1]]#J[List[Int]]
+ C[T1]#J[T1] D.this.J[T4] C[List[T3]]#J[List[T3]]
+ C[T1]#J[T1] Z.dZ.J[A2] C[List[A1]]#J[List[A1]]
+ C[T1]#J[T1] Z.dZ.J[P] C[List[A1]]#J[List[A1]]
+ C[T1]#J[T2] D.this.J[T4] C[List[T3]]#J[T4]
+ C[T1]#J[T2] Z.dZ.J[A2] C[List[A1]]#J[A2]
+ C[T1]#J[T2] Z.dZ.J[P] C[List[A1]]#J[P]
+ C[T1]#J[T3] D.this.J[T4] C[List[T3]]#J[T3]
+ C[T1]#J[T3] Z.dZ.J[A2] C[List[A1]]#J[T3]
+ C[T1]#J[T3] Z.dZ.J[P] C[List[A1]]#J[T3]
+ C[T1]#J[T4] D.this.J[T4] C[List[T3]]#J[T4]
+ C[T1]#J[T4] Z.dZ.J[A2] C[List[A1]]#J[T4]
+ C[T1]#J[T4] Z.dZ.J[P] C[List[A1]]#J[T4]
+ D[T3]#J[T1] D.this.J[T4] D[T3]#J[List[T3]]
+ D[T3]#J[T1] Z.dZ.J[A2] D[T3]#J[List[A1]]
+ D[T3]#J[T1] Z.dZ.J[P] D[T3]#J[List[A1]]
+ D[T3]#J[T2] D.this.J[T4] D[T3]#J[T4]
+ D[T3]#J[T2] Z.dZ.J[A2] D[T3]#J[A2]
+ D[T3]#J[T2] Z.dZ.J[P] D[T3]#J[P]
+ D[A1]#J[T1] D.this.J[T4] D[A1]#J[List[T3]]
+ D[A1]#J[T1] Z.dZ.J[A2] D[A1]#J[List[A1]]
+ D[A1]#J[T1] Z.dZ.J[P] D[A1]#J[List[A1]]
+ D[A1]#J[T2] D.this.J[T4] D[A1]#J[T4]
+ D[A1]#J[T2] Z.dZ.J[A2] D[A1]#J[A2]
+ D[A1]#J[T2] Z.dZ.J[P] D[A1]#J[P]
+}
+class J {
+ type seen from prefix is
+ ---- ---------------- --
+ C[List[T3]]#I[Int] Z.dZ.J[A2] C[List[A1]]#I[Int]
+ C[List[T3]]#I[Int] Z.dZ.J[P] C[List[A1]]#I[Int]
+ C[List[T3]]#I[List[Int]] Z.dZ.J[A2] C[List[A1]]#I[List[Int]]
+ C[List[T3]]#I[List[Int]] Z.dZ.J[P] C[List[A1]]#I[List[Int]]
+ C[List[T3]]#I[T1] Z.dZ.J[A2] C[List[A1]]#I[T1]
+ C[List[T3]]#I[T1] Z.dZ.J[P] C[List[A1]]#I[T1]
+ C[List[T3]]#I[T2] Z.dZ.J[A2] C[List[A1]]#I[T2]
+ C[List[T3]]#I[T2] Z.dZ.J[P] C[List[A1]]#I[T2]
+ C[List[T3]]#I[T3] Z.dZ.J[A2] C[List[A1]]#I[A1]
+ C[List[T3]]#I[T3] Z.dZ.J[P] C[List[A1]]#I[A1]
+ C[List[T3]]#I[T4] Z.dZ.J[A2] C[List[A1]]#I[A2]
+ C[List[T3]]#I[T4] Z.dZ.J[P] C[List[A1]]#I[P]
+ C[List[T3]]#J[Int] Z.dZ.J[A2] C[List[A1]]#J[Int]
+ C[List[T3]]#J[Int] Z.dZ.J[P] C[List[A1]]#J[Int]
+ C[List[T3]]#J[List[Int]] Z.dZ.J[A2] C[List[A1]]#J[List[Int]]
+ C[List[T3]]#J[List[Int]] Z.dZ.J[P] C[List[A1]]#J[List[Int]]
+ C[List[T3]]#J[T1] Z.dZ.J[A2] C[List[A1]]#J[T1]
+ C[List[T3]]#J[T1] Z.dZ.J[P] C[List[A1]]#J[T1]
+ C[List[T3]]#J[T2] Z.dZ.J[A2] C[List[A1]]#J[T2]
+ C[List[T3]]#J[T2] Z.dZ.J[P] C[List[A1]]#J[T2]
+ C[List[T3]]#J[T3] Z.dZ.J[A2] C[List[A1]]#J[A1]
+ C[List[T3]]#J[T3] Z.dZ.J[P] C[List[A1]]#J[A1]
+ C[List[T3]]#J[T4] Z.dZ.J[A2] C[List[A1]]#J[A2]
+ C[List[T3]]#J[T4] Z.dZ.J[P] C[List[A1]]#J[P]
+ C[T1]#I[T3] Z.dZ.J[A2] C[T1]#I[A1]
+ C[T1]#I[T3] Z.dZ.J[P] C[T1]#I[A1]
+ C[T1]#I[T4] Z.dZ.J[A2] C[T1]#I[A2]
+ C[T1]#I[T4] Z.dZ.J[P] C[T1]#I[P]
+ C[T1]#J[T3] Z.dZ.J[A2] C[T1]#J[A1]
+ C[T1]#J[T3] Z.dZ.J[P] C[T1]#J[A1]
+ C[T1]#J[T4] Z.dZ.J[A2] C[T1]#J[A2]
+ C[T1]#J[T4] Z.dZ.J[P] C[T1]#J[P]
+ D[T3]#J[Int] Z.dZ.J[A2] D[A1]#J[Int]
+ D[T3]#J[Int] Z.dZ.J[P] D[A1]#J[Int]
+ D[T3]#J[List[Int]] Z.dZ.J[A2] D[A1]#J[List[Int]]
+ D[T3]#J[List[Int]] Z.dZ.J[P] D[A1]#J[List[Int]]
+ D[T3]#J[T1] Z.dZ.J[A2] D[A1]#J[T1]
+ D[T3]#J[T1] Z.dZ.J[P] D[A1]#J[T1]
+ D[T3]#J[T2] Z.dZ.J[A2] D[A1]#J[T2]
+ D[T3]#J[T2] Z.dZ.J[P] D[A1]#J[T2]
+ D[T3]#J[T3] Z.dZ.J[A2] D[A1]#J[A1]
+ D[T3]#J[T3] Z.dZ.J[P] D[A1]#J[A1]
+ D[T3]#J[T4] Z.dZ.J[A2] D[A1]#J[A2]
+ D[T3]#J[T4] Z.dZ.J[P] D[A1]#J[P]
+ D[A1]#J[T3] Z.dZ.J[A2] D[A1]#J[A1]
+ D[A1]#J[T3] Z.dZ.J[P] D[A1]#J[A1]
+ D[A1]#J[T4] Z.dZ.J[A2] D[A1]#J[A2]
+ D[A1]#J[T4] Z.dZ.J[P] D[A1]#J[P]
+}
+class D { // after parser
+ private val cD: ll.C[List[T3]]
+ val cD: ll.C[List[T3]]
+}
+
+class D { // after uncurry
+ private val cD: ll.C[List[T3]]
+ val cD(): ll.C[List[T3]]
+}
+
+class D { // after erasure
+ private val cD: ll.C
+ val cD(): ll.C
+}
+
+object Z { // after parser
+ def kz[P <: ll.Z.dZ.J[ll.A2]]: ll.Z.dZ.J[P]
+ private val jZ: ll.Z.dZ.J[ll.A2]
+ val jZ: ll.Z.dZ.J[ll.A2]
+ private val dZ: ll.D[ll.A1]
+ val dZ: ll.D[ll.A1]
+}
+
+object Z { // after uncurry
+ def kz[P <: ll.Z.dZ.J[ll.A2]](): ll.Z.dZ.J[P]
+ private val jZ: ll.Z.dZ.J[ll.A2]
+ val jZ(): ll.Z.dZ.J[ll.A2]
+ private val dZ: ll.D[ll.A1]
+ val dZ(): ll.D[ll.A1]
+}
+
+object Z { // after erasure
+ def kz(): ll.D#J
+ private val jZ: ll.D#J
+ val jZ(): ll.D#J
+ private val dZ: ll.D
+ val dZ(): ll.D
+}
+
+object Z { // after flatten
+ def kz(): ll.D#D$J
+ private val jZ: ll.D#D$J
+ val jZ(): ll.D#D$J
+ private val dZ: ll.D
+ val dZ(): ll.D
+}
+
+value dZ { // after parser
+ private val cD: ll.C[List[T3]]
+ val cD: ll.C[List[T3]]
+}
+
+value dZ { // after parser
+ private val cD: ll.C[List[T3]]
+ val cD: ll.C[List[T3]]
+}
+
+value dZ { // after uncurry
+ private val cD: ll.C[List[T3]]
+ val cD(): ll.C[List[T3]]
+}
+
+value dZ { // after erasure
+ private val cD: ll.C
+ val cD(): ll.C
+}
+
+value jZ { // after parser
+ def thisI(): I.this.type
+ def thisC(): C.this.type
+ def t2(): T2
+ def t1(): T1
+}
+
+value jZ { // after parser
+ def thisI(): I.this.type
+ def thisC(): C.this.type
+ def t2(): T2
+ def t1(): T1
+}
+
+value jZ { // after explicitouter
+ protected val $outer: D.this.type
+ val ll$D$J$$$outer(): D.this.type
+ val ll$C$I$$$outer(): C.this.type
+ def thisI(): I.this.type
+ def thisC(): C.this.type
+ def t2(): T2
+ def t1(): T1
+}
+
+value jZ { // after erasure
+ protected val $outer: ll.D
+ val ll$D$J$$$outer(): ll.D
+ protected val $outer: ll.C
+ val ll$C$I$$$outer(): ll.C
+ def thisI(): ll.C#I
+ def thisC(): ll.C
+ def t2(): Object
+ def t1(): Object
+}
+
+value jZ { // after flatten
+ protected val $outer: ll.D
+ val ll$D$J$$$outer(): ll.D
+ protected val $outer: ll.C
+ val ll$C$I$$$outer(): ll.C
+ def thisI(): ll.C#C$I
+ def thisC(): ll.C
+ def t2(): Object
+ def t1(): Object
+}
+
+method kz { // after parser
+ def thisI(): I.this.type
+ def thisC(): C.this.type
+ def t2(): T2
+ def t1(): T1
+}
+
+value $outer { // after parser
+ private val cD: ll.C[List[T3]]
+ val cD: ll.C[List[T3]]
+}
+
+value $outer { // after uncurry
+ private val cD: ll.C[List[T3]]
+ val cD(): ll.C[List[T3]]
+}
+
+value $outer { // after erasure
+ private val cD: ll.C
+ val cD(): ll.C
+}
+
diff --git a/test/files/run/compiler-asSeenFrom.scala b/test/files/run/compiler-asSeenFrom.scala
new file mode 100644
index 0000000000..1fc3a5ee71
--- /dev/null
+++ b/test/files/run/compiler-asSeenFrom.scala
@@ -0,0 +1,122 @@
+import scala.tools.nsc._
+import scala.tools.partest.CompilerTest
+import scala.collection.{ mutable, immutable, generic }
+
+/** It's too messy but it's better than not having it.
+ */
+object Test extends CompilerTest {
+ import global._
+ import definitions._
+
+ override def sources = List(lambdaLift)
+ def lambdaLift = """
+package ll {
+ class A1
+ class A2
+ class X
+ class C[T1]() {
+ class I[T2]() {
+ def t1(): T1 = ???
+ def t2(): T2 = ???
+ def thisC(): C.this.type = ???
+ def thisI(): I.this.type = ???
+ }
+ }
+ class D[T3]() extends C[T3]() {
+ val cD: C[List[T3]] = ???
+ class J[T4]() extends cD.I[T4]()
+ }
+ object Z {
+ val dZ: D[A1] = ???
+ val jZ: dZ.J[A2] = ???
+
+ def kz[P <: dZ.J[A2]]: dZ.J[P] = ???
+ }
+}
+"""
+
+ object syms extends SymsInPackage("ll") {
+ def isPossibleEnclosure(encl: Symbol, sym: Symbol) = sym.enclClassChain drop 1 exists (_ isSubClass encl)
+ def isInterestingPrefix(pre: Type) = pre.typeConstructor.typeParams.nonEmpty && pre.members.exists(_.isType)
+
+ def asSeenPrefixes = tpes map (_.finalResultType) distinct
+ def typeRefPrefixes = asSeenPrefixes filter isInterestingPrefix
+
+ def nestsIn(outer: Symbol) = classes filter (c => c.enclClassChain drop 1 exists(_ isSubClass outer))
+ def typeRefs(targs: List[Type]) = (
+ for (p <- typeRefPrefixes ; c <- classes filter (isPossibleEnclosure(p.typeSymbol, _)) ; a <- targs) yield
+ typeRef(p, c, List(a))
+ )
+
+ val wfmt = "%-" + 25 + "s"
+ def to_s(x: Any): String = wfmt.format(x.toString.replaceAll("""\bll\.""", ""))
+
+ def fmt(args: Any*): String = {
+ (args map to_s mkString " ").replaceAll("""\s+$""", "")
+ }
+ def fname(sym: Symbol) = {
+ val p = "" + sym.owner.name
+ val x = if (sym.owner.isPackageClass || sym.owner.isModuleClass || sym.owner.isTerm) "." else "#"
+ sym.kindString + " " + p + x + sym.name
+ }
+
+ def permuteAsSeenFrom(targs: List[Type]) = (
+ for {
+ tp <- typeRefs(targs filterNot (_ eq NoType))
+ prefix <- asSeenPrefixes
+ if tp.prefix != prefix
+ site <- classes
+ seen = tp.asSeenFrom(prefix, site)
+ if tp != seen
+ if !seen.isInstanceOf[ExistentialType]
+ }
+ yield ((site, tp, prefix, seen))
+ )
+
+ def block(label: Any)(lines: List[String]): List[String] = {
+ val first = "" + label + " {"
+ val last = "}"
+
+ first +: lines.map(" " + _) :+ last
+ }
+
+ def permute(targs: List[Type]): List[String] = {
+ permuteAsSeenFrom(targs).groupBy(_._1).toList.sortBy(_._1.toString) flatMap {
+ case (site, xs) =>
+ block(fmt(site)) {
+ fmt("type", "seen from prefix", "is") ::
+ fmt("----", "----------------", "--") :: {
+ xs.groupBy(_._2).toList.sortBy(_._1.toString) flatMap {
+ case (tp, ys) =>
+ (ys map { case (_, _, prefix, seen) => fmt(tp, prefix, seen) }).sorted.distinct
+ }
+ }
+ }
+ }
+ }
+ }
+
+ def pretty(xs: List[_]) = if (xs.isEmpty) "" else xs.mkString("\n ", "\n ", "\n")
+
+ def signaturesIn(info: Type): List[String] = (
+ info.members
+ filterNot (s => s.isType || s.owner == ObjectClass || s.owner == AnyClass || s.isConstructor)
+ map (_.defString)
+ )
+
+ def check(source: String, unit: global.CompilationUnit) = {
+ import syms._
+
+ afterTyper {
+ val typeArgs = List[Type](IntClass.tpe, ListClass[Int]) ++ tparams.map(_.tpe)
+ permute(typeArgs) foreach println
+ }
+ for (x <- classes ++ terms) {
+ afterEachPhase(signaturesIn(x.tpe)) collect {
+ case (ph, sigs) if sigs.nonEmpty =>
+ println(sigs.mkString(x + " { // after " + ph + "\n ", "\n ", "\n}\n"))
+ }
+ }
+ true
+ }
+}
diff --git a/test/files/run/ctries/concmap.scala b/test/files/run/ctries/concmap.scala
index d73e33182a..bf8cc9d12f 100644
--- a/test/files/run/ctries/concmap.scala
+++ b/test/files/run/ctries/concmap.scala
@@ -1,7 +1,7 @@
-import collection.mutable.Ctrie
+import collection.mutable.ConcurrentTrieMap
object ConcurrentMapSpec extends Spec {
@@ -11,13 +11,13 @@ object ConcurrentMapSpec extends Spec {
def test() {
"support put" in {
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
for (i <- 0 until initsz) assert(ct.put(new Wrap(i), i) == None)
for (i <- 0 until initsz) assert(ct.put(new Wrap(i), -i) == Some(i))
}
"support put if absent" in {
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
for (i <- 0 until initsz) ct.update(new Wrap(i), i)
for (i <- 0 until initsz) assert(ct.putIfAbsent(new Wrap(i), -i) == Some(i))
for (i <- 0 until initsz) assert(ct.putIfAbsent(new Wrap(i), -i) == Some(i))
@@ -26,7 +26,7 @@ object ConcurrentMapSpec extends Spec {
}
"support remove if mapped to a specific value" in {
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
for (i <- 0 until initsz) ct.update(new Wrap(i), i)
for (i <- 0 until initsz) assert(ct.remove(new Wrap(i), -i - 1) == false)
for (i <- 0 until initsz) assert(ct.remove(new Wrap(i), i) == true)
@@ -34,7 +34,7 @@ object ConcurrentMapSpec extends Spec {
}
"support replace if mapped to a specific value" in {
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
for (i <- 0 until initsz) ct.update(new Wrap(i), i)
for (i <- 0 until initsz) assert(ct.replace(new Wrap(i), -i - 1, -i - 2) == false)
for (i <- 0 until initsz) assert(ct.replace(new Wrap(i), i, -i - 2) == true)
@@ -43,7 +43,7 @@ object ConcurrentMapSpec extends Spec {
}
"support replace if present" in {
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
for (i <- 0 until initsz) ct.update(new Wrap(i), i)
for (i <- 0 until initsz) assert(ct.replace(new Wrap(i), -i) == Some(i))
for (i <- 0 until initsz) assert(ct.replace(new Wrap(i), i) == Some(-i))
@@ -56,7 +56,7 @@ object ConcurrentMapSpec extends Spec {
}
"support replace if mapped to a specific value, using several threads" in {
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
val sz = 55000
for (i <- 0 until sz) ct.update(new Wrap(i), i)
@@ -89,7 +89,7 @@ object ConcurrentMapSpec extends Spec {
}
"support put if absent, several threads" in {
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
val sz = 110000
class Updater(offs: Int) extends Thread {
@@ -110,7 +110,7 @@ object ConcurrentMapSpec extends Spec {
}
"support remove if mapped to a specific value, several threads" in {
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
val sz = 55000
for (i <- 0 until sz) ct.update(new Wrap(i), i)
@@ -132,7 +132,7 @@ object ConcurrentMapSpec extends Spec {
}
"have all or none of the elements depending on the oddity" in {
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
val sz = 65000
for (i <- 0 until sz) ct(new Wrap(i)) = i
@@ -165,7 +165,7 @@ object ConcurrentMapSpec extends Spec {
}
"compute size correctly" in {
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
val sz = 36450
for (i <- 0 until sz) ct(new Wrap(i)) = i
@@ -174,7 +174,7 @@ object ConcurrentMapSpec extends Spec {
}
"compute size correctly in parallel" in {
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
val sz = 36450
for (i <- 0 until sz) ct(new Wrap(i)) = i
val pct = ct.par
diff --git a/test/files/run/ctries/iterator.scala b/test/files/run/ctries/iterator.scala
index 85a6ab7623..dbfab6b8a9 100644
--- a/test/files/run/ctries/iterator.scala
+++ b/test/files/run/ctries/iterator.scala
@@ -3,7 +3,7 @@
import collection._
-import collection.mutable.Ctrie
+import collection.mutable.ConcurrentTrieMap
@@ -11,7 +11,7 @@ object IteratorSpec extends Spec {
def test() {
"work for an empty trie" in {
- val ct = new Ctrie
+ val ct = new ConcurrentTrieMap
val it = ct.iterator
it.hasNext shouldEqual (false)
@@ -19,7 +19,7 @@ object IteratorSpec extends Spec {
}
def nonEmptyIteratorCheck(sz: Int) {
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
for (i <- 0 until sz) ct.put(new Wrap(i), i)
val it = ct.iterator
@@ -84,7 +84,7 @@ object IteratorSpec extends Spec {
}
def nonEmptyCollideCheck(sz: Int) {
- val ct = new Ctrie[DumbHash, Int]
+ val ct = new ConcurrentTrieMap[DumbHash, Int]
for (i <- 0 until sz) ct.put(new DumbHash(i), i)
val it = ct.iterator
@@ -144,7 +144,7 @@ object IteratorSpec extends Spec {
val W = 15
val S = 5
val checks = 5
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
for (i <- 0 until sz) ct.put(new Wrap(i), i)
class Modifier extends Thread {
@@ -156,7 +156,7 @@ object IteratorSpec extends Spec {
}
}
- def consistentIteration(ct: Ctrie[Wrap, Int], checks: Int) {
+ def consistentIteration(ct: ConcurrentTrieMap[Wrap, Int], checks: Int) {
class Iter extends Thread {
override def run() {
val snap = ct.readOnlySnapshot()
@@ -185,7 +185,7 @@ object IteratorSpec extends Spec {
val sgroupsize = 10
val sgroupnum = 5
val removerslowdown = 50
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
for (i <- 0 until sz) ct.put(new Wrap(i), i)
class Remover extends Thread {
@@ -227,7 +227,7 @@ object IteratorSpec extends Spec {
val sgroupsize = 10
val sgroupnum = 10
val inserterslowdown = 50
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
class Inserter extends Thread {
override def run() {
@@ -265,7 +265,7 @@ object IteratorSpec extends Spec {
"work on a yet unevaluated snapshot" in {
val sz = 50000
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
for (i <- 0 until sz) ct.update(new Wrap(i), i)
val snap = ct.snapshot()
@@ -276,7 +276,7 @@ object IteratorSpec extends Spec {
"be duplicated" in {
val sz = 50
- val ct = collection.parallel.mutable.ParCtrie((0 until sz) zip (0 until sz): _*)
+ val ct = collection.parallel.mutable.ParConcurrentTrieMap((0 until sz) zip (0 until sz): _*)
val it = ct.splitter
for (_ <- 0 until (sz / 2)) it.next()
val dupit = it.dup
diff --git a/test/files/run/ctries/lnode.scala b/test/files/run/ctries/lnode.scala
index 88cbeed1f6..e480795956 100644
--- a/test/files/run/ctries/lnode.scala
+++ b/test/files/run/ctries/lnode.scala
@@ -1,7 +1,7 @@
-import collection.mutable.Ctrie
+import collection.mutable.ConcurrentTrieMap
object LNodeSpec extends Spec {
@@ -11,19 +11,19 @@ object LNodeSpec extends Spec {
def test() {
"accept elements with the same hash codes" in {
- val ct = new Ctrie[DumbHash, Int]
+ val ct = new ConcurrentTrieMap[DumbHash, Int]
for (i <- 0 until initsz) ct.update(new DumbHash(i), i)
}
"lookup elements with the same hash codes" in {
- val ct = new Ctrie[DumbHash, Int]
+ val ct = new ConcurrentTrieMap[DumbHash, Int]
for (i <- 0 until initsz) ct.update(new DumbHash(i), i)
for (i <- 0 until initsz) assert(ct.get(new DumbHash(i)) == Some(i))
for (i <- initsz until secondsz) assert(ct.get(new DumbHash(i)) == None)
}
"remove elements with the same hash codes" in {
- val ct = new Ctrie[DumbHash, Int]
+ val ct = new ConcurrentTrieMap[DumbHash, Int]
for (i <- 0 until initsz) ct.update(new DumbHash(i), i)
for (i <- 0 until initsz) {
val remelem = ct.remove(new DumbHash(i))
@@ -33,7 +33,7 @@ object LNodeSpec extends Spec {
}
"put elements with the same hash codes if absent" in {
- val ct = new Ctrie[DumbHash, Int]
+ val ct = new ConcurrentTrieMap[DumbHash, Int]
for (i <- 0 until initsz) ct.put(new DumbHash(i), i)
for (i <- 0 until initsz) assert(ct.lookup(new DumbHash(i)) == i)
for (i <- 0 until initsz) assert(ct.putIfAbsent(new DumbHash(i), i) == Some(i))
@@ -42,7 +42,7 @@ object LNodeSpec extends Spec {
}
"replace elements with the same hash codes" in {
- val ct = new Ctrie[DumbHash, Int]
+ val ct = new ConcurrentTrieMap[DumbHash, Int]
for (i <- 0 until initsz) assert(ct.put(new DumbHash(i), i) == None)
for (i <- 0 until initsz) assert(ct.lookup(new DumbHash(i)) == i)
for (i <- 0 until initsz) assert(ct.replace(new DumbHash(i), -i) == Some(i))
@@ -51,7 +51,7 @@ object LNodeSpec extends Spec {
}
"remove elements with the same hash codes if mapped to a specific value" in {
- val ct = new Ctrie[DumbHash, Int]
+ val ct = new ConcurrentTrieMap[DumbHash, Int]
for (i <- 0 until initsz) assert(ct.put(new DumbHash(i), i) == None)
for (i <- 0 until initsz) assert(ct.remove(new DumbHash(i), i) == true)
}
diff --git a/test/files/run/ctries/snapshot.scala b/test/files/run/ctries/snapshot.scala
index 69073d3f06..3c816130b3 100644
--- a/test/files/run/ctries/snapshot.scala
+++ b/test/files/run/ctries/snapshot.scala
@@ -3,7 +3,7 @@
import collection._
-import collection.mutable.Ctrie
+import collection.mutable.ConcurrentTrieMap
@@ -11,11 +11,11 @@ object SnapshotSpec extends Spec {
def test() {
"support snapshots" in {
- val ctn = new Ctrie
+ val ctn = new ConcurrentTrieMap
ctn.snapshot()
ctn.readOnlySnapshot()
- val ct = new Ctrie[Int, Int]
+ val ct = new ConcurrentTrieMap[Int, Int]
for (i <- 0 until 100) ct.put(i, i)
ct.snapshot()
ct.readOnlySnapshot()
@@ -24,7 +24,7 @@ object SnapshotSpec extends Spec {
"empty 2 quiescent snapshots in isolation" in {
val sz = 4000
- class Worker(trie: Ctrie[Wrap, Int]) extends Thread {
+ class Worker(trie: ConcurrentTrieMap[Wrap, Int]) extends Thread {
override def run() {
for (i <- 0 until sz) {
assert(trie.remove(new Wrap(i)) == Some(i))
@@ -35,7 +35,7 @@ object SnapshotSpec extends Spec {
}
}
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
for (i <- 0 until sz) ct.put(new Wrap(i), i)
val snapt = ct.snapshot()
@@ -96,7 +96,7 @@ object SnapshotSpec extends Spec {
}
// traverses the trie `rep` times and modifies each entry
- class Modifier(trie: Ctrie[Wrap, Int], index: Int, rep: Int, sz: Int) extends Thread {
+ class Modifier(trie: ConcurrentTrieMap[Wrap, Int], index: Int, rep: Int, sz: Int) extends Thread {
setName("Modifier %d".format(index))
override def run() {
@@ -110,7 +110,7 @@ object SnapshotSpec extends Spec {
}
// removes all the elements from the trie
- class Remover(trie: Ctrie[Wrap, Int], index: Int, totremovers: Int, sz: Int) extends Thread {
+ class Remover(trie: ConcurrentTrieMap[Wrap, Int], index: Int, totremovers: Int, sz: Int) extends Thread {
setName("Remover %d".format(index))
override def run() {
@@ -123,7 +123,7 @@ object SnapshotSpec extends Spec {
val N = 100
val W = 10
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
for (i <- 0 until sz) ct(new Wrap(i)) = i
val readonly = ct.readOnlySnapshot()
val threads = for (i <- 0 until W) yield new Modifier(ct, i, N, sz)
@@ -141,7 +141,7 @@ object SnapshotSpec extends Spec {
val W = 100
val S = 5000
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
for (i <- 0 until sz) ct(new Wrap(i)) = i
val threads = for (i <- 0 until W) yield new Remover(ct, i, W, sz)
@@ -156,7 +156,7 @@ object SnapshotSpec extends Spec {
val W = 10
val S = 7000
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
for (i <- 0 until sz) ct(new Wrap(i)) = i
val threads = for (i <- 0 until W) yield new Modifier(ct, i, N, sz)
@@ -165,7 +165,7 @@ object SnapshotSpec extends Spec {
threads.foreach(_.join())
}
- def consistentNonReadOnly(name: String, trie: Ctrie[Wrap, Int], sz: Int, N: Int) {
+ def consistentNonReadOnly(name: String, trie: ConcurrentTrieMap[Wrap, Int], sz: Int, N: Int) {
@volatile var e: Exception = null
// reads possible entries once and stores them
@@ -223,7 +223,7 @@ object SnapshotSpec extends Spec {
val W = 10
val S = 400
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
for (i <- 0 until sz) ct(new Wrap(i)) = i
val threads = for (i <- 0 until W) yield new Modifier(ct, i, N, sz)
@@ -241,7 +241,7 @@ object SnapshotSpec extends Spec {
val S = 10
val modifytimes = 1200
val snaptimes = 600
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
for (i <- 0 until sz) ct(new Wrap(i)) = i
class Snapshooter extends Thread {
diff --git a/test/files/run/existentials-in-compiler.scala b/test/files/run/existentials-in-compiler.scala
index e4f6920145..8c04e4782c 100644
--- a/test/files/run/existentials-in-compiler.scala
+++ b/test/files/run/existentials-in-compiler.scala
@@ -6,7 +6,7 @@ object Test extends CompilerTest {
import global._
import definitions._
- def code = """
+ override def code = """
package extest {
trait Bippy[A <: AnyRef, B] { } // wildcards
trait BippyLike[A <: AnyRef, B <: List[A], This <: BippyLike[A, B, This] with Bippy[A, B]] // no wildcards
diff --git a/test/files/run/existentials3.check b/test/files/run/existentials3.check
index 41dc1f767c..36a458dacc 100644
--- a/test/files/run/existentials3.check
+++ b/test/files/run/existentials3.check
@@ -1,22 +1,22 @@
-_ <: scala.runtime.AbstractFunction0[_ <: Object with Test$ToS with scala.ScalaObject with scala.Product with scala.Serializable] with scala.ScalaObject with scala.Serializable with java.lang.Object
-_ <: Object with Test$ToS with scala.ScalaObject with scala.Product with scala.Serializable
-Object with Test$ToS with scala.ScalaObject
-Object with Test$ToS with scala.ScalaObject
-Object with Test$ToS with scala.ScalaObject
-scala.Function0[Object with Test$ToS with scala.ScalaObject]
-scala.Function0[Object with Test$ToS with scala.ScalaObject]
-_ <: Object with _ <: Object with Object with Test$ToS with scala.ScalaObject
-_ <: Object with _ <: Object with _ <: Object with Test$ToS with scala.ScalaObject
-scala.collection.immutable.List[Object with scala.collection.Seq[Int] with scala.ScalaObject]
-scala.collection.immutable.List[Object with scala.collection.Seq[_ <: Int] with scala.ScalaObject]
-_ <: scala.runtime.AbstractFunction0[_ <: Object with Test$ToS with scala.ScalaObject with scala.Product with scala.Serializable] with scala.ScalaObject with scala.Serializable with java.lang.Object
-_ <: Object with Test$ToS with scala.ScalaObject with scala.Product with scala.Serializable
-Object with Test$ToS with scala.ScalaObject
-Object with Test$ToS with scala.ScalaObject
-Object with Test$ToS with scala.ScalaObject
-scala.Function0[Object with Test$ToS with scala.ScalaObject]
-scala.Function0[Object with Test$ToS with scala.ScalaObject]
-_ <: Object with _ <: Object with Object with Test$ToS with scala.ScalaObject
-_ <: Object with _ <: Object with _ <: Object with Test$ToS with scala.ScalaObject
-scala.collection.immutable.List[Object with scala.collection.Seq[Int] with scala.ScalaObject]
-scala.collection.immutable.List[Object with scala.collection.Seq[_ <: Int] with scala.ScalaObject]
+_ <: scala.runtime.AbstractFunction0[_ <: Object with Test$ToS with scala.Product with scala.Serializable] with scala.Serializable with java.lang.Object
+_ <: Object with Test$ToS with scala.Product with scala.Serializable
+Object with Test$ToS
+Object with Test$ToS
+Object with Test$ToS
+scala.Function0[Object with Test$ToS]
+scala.Function0[Object with Test$ToS]
+_ <: Object with _ <: Object with Object with Test$ToS
+_ <: Object with _ <: Object with _ <: Object with Test$ToS
+scala.collection.immutable.List[Object with scala.collection.Seq[Int]]
+scala.collection.immutable.List[Object with scala.collection.Seq[_ <: Int]]
+_ <: scala.runtime.AbstractFunction0[_ <: Object with Test$ToS with scala.Product with scala.Serializable] with scala.Serializable with java.lang.Object
+_ <: Object with Test$ToS with scala.Product with scala.Serializable
+Object with Test$ToS
+Object with Test$ToS
+Object with Test$ToS
+scala.Function0[Object with Test$ToS]
+scala.Function0[Object with Test$ToS]
+_ <: Object with _ <: Object with Object with Test$ToS
+_ <: Object with _ <: Object with _ <: Object with Test$ToS
+scala.collection.immutable.List[Object with scala.collection.Seq[Int]]
+scala.collection.immutable.List[Object with scala.collection.Seq[_ <: Int]]
diff --git a/test/files/run/genericValueClass.check b/test/files/run/genericValueClass.check
new file mode 100644
index 0000000000..ec3a41a6a9
--- /dev/null
+++ b/test/files/run/genericValueClass.check
@@ -0,0 +1,2 @@
+(1,abc)
+(2,def)
diff --git a/test/files/run/genericValueClass.scala b/test/files/run/genericValueClass.scala
new file mode 100644
index 0000000000..68162bb685
--- /dev/null
+++ b/test/files/run/genericValueClass.scala
@@ -0,0 +1,17 @@
+final class ArrowAssoc[A](val __leftOfArrow: A) extends AnyVal {
+ @inline def -> [B](y: B): Tuple2[A, B] = Tuple2(__leftOfArrow, y)
+ def →[B](y: B): Tuple2[A, B] = ->(y)
+}
+
+object Test extends App {
+ {
+ @inline implicit def any2ArrowAssoc[A](x: A): ArrowAssoc[A] = new ArrowAssoc(x)
+ val x = 1 -> "abc"
+ println(x)
+ }
+
+ {
+ val y = 2 -> "def"
+ println(y)
+ }
+}
diff --git a/test/files/run/matchonseq.check b/test/files/run/matchonseq.check
new file mode 100644
index 0000000000..3fe554095a
--- /dev/null
+++ b/test/files/run/matchonseq.check
@@ -0,0 +1,2 @@
+It worked! head=1
+It worked! last=3
diff --git a/test/files/run/matchonseq.scala b/test/files/run/matchonseq.scala
new file mode 100644
index 0000000000..49b406a6ec
--- /dev/null
+++ b/test/files/run/matchonseq.scala
@@ -0,0 +1,8 @@
+object Test extends App{
+ Vector(1,2,3) match {
+ case head +: tail => println("It worked! head=" + head)
+ }
+ Vector(1,2,3) match {
+ case init :+ last => println("It worked! last=" + last)
+ }
+}
diff --git a/test/files/run/primitive-sigs-2.check b/test/files/run/primitive-sigs-2.check
index c69d1b54a6..feb0619525 100644
--- a/test/files/run/primitive-sigs-2.check
+++ b/test/files/run/primitive-sigs-2.check
@@ -1,4 +1,4 @@
-T<java.lang.Object> interface scala.ScalaObject
+T<java.lang.Object>
List(A, char, class java.lang.Object)
a
public <T> java.lang.Object Arr.arr4(java.lang.Object[],scala.reflect.Manifest<T>)
diff --git a/test/files/run/programmatic-main.check b/test/files/run/programmatic-main.check
index 6f253f5de1..d16e2c5178 100644
--- a/test/files/run/programmatic-main.check
+++ b/test/files/run/programmatic-main.check
@@ -5,24 +5,26 @@
packageobjects 3 load package objects
typer 4 the meat and potatoes: type the trees
superaccessors 5 add super accessors in traits and nested classes
- pickler 6 serialize symbol tables
- refchecks 7 reference/override checking, translate nested objects
- uncurry 8 uncurry, translate function values to anonymous classes
- tailcalls 9 replace tail calls by jumps
- specialize 10 @specialized-driven class and method specialization
- explicitouter 11 this refs to outer pointers, translate patterns
- erasure 12 erase types, add interfaces for traits
- lazyvals 13 allocate bitmaps, translate lazy vals into lazified defs
- lambdalift 14 move nested functions to top level
- constructors 15 move field definitions into constructors
- flatten 16 eliminate inner classes
- mixin 17 mixin composition
- cleanup 18 platform-specific cleanups, generate reflective calls
- icode 19 generate portable intermediate code
- inliner 20 optimization: do inlining
-inlineExceptionHandlers 21 optimization: inline exception handlers
- closelim 22 optimization: eliminate uncalled closures
- dce 23 optimization: eliminate dead code
- jvm 24 generate JVM bytecode
- terminal 25 The last phase in the compiler chain
+ extmethods 6 add extension methods for inline classes
+ pickler 7 serialize symbol tables
+ refchecks 8 reference/override checking, translate nested objects
+ uncurry 9 uncurry, translate function values to anonymous classes
+ tailcalls 10 replace tail calls by jumps
+ specialize 11 @specialized-driven class and method specialization
+ explicitouter 12 this refs to outer pointers, translate patterns
+ erasure 13 erase types, add interfaces for traits
+ posterasure 14 clean up erased inline classes
+ lazyvals 15 allocate bitmaps, translate lazy vals into lazified defs
+ lambdalift 16 move nested functions to top level
+ constructors 17 move field definitions into constructors
+ flatten 18 eliminate inner classes
+ mixin 19 mixin composition
+ cleanup 20 platform-specific cleanups, generate reflective calls
+ icode 21 generate portable intermediate code
+ inliner 22 optimization: do inlining
+inlineExceptionHandlers 23 optimization: inline exception handlers
+ closelim 24 optimization: eliminate uncalled closures
+ dce 25 optimization: eliminate dead code
+ jvm 26 generate JVM bytecode
+ terminal 27 The last phase in the compiler chain
diff --git a/test/files/run/reify_ann1a.check b/test/files/run/reify_ann1a.check
index 2822238706..97d4848a49 100644
--- a/test/files/run/reify_ann1a.check
+++ b/test/files/run/reify_ann1a.check
@@ -1,5 +1,5 @@
{
- @new ann(immutable.this.List.apply[String]("1a")) @new ann(immutable.this.List.apply[String]("1b")) class C[@new ann(immutable.this.List.apply[String]("2a")) @new ann(immutable.this.List.apply[String]("2b")) T>: Nothing <: Any] extends Object with ScalaObject {
+ @new ann(immutable.this.List.apply[String]("1a")) @new ann(immutable.this.List.apply[String]("1b")) class C[@new ann(immutable.this.List.apply[String]("2a")) @new ann(immutable.this.List.apply[String]("2b")) T>: Nothing <: Any] extends scala.AnyRef {
@new ann(immutable.this.List.apply[String]("3a")) @new ann(immutable.this.List.apply[String]("3b")) <paramaccessor> private[this] val x: T @ann(immutable.this.List.apply[String]("4a")) @ann(immutable.this.List.apply[String]("4b")) = _;
def <init>(@new ann(immutable.this.List.apply[String]("3a")) @new ann(immutable.this.List.apply[String]("3b")) x: T @ann(immutable.this.List.apply[String]("4a")) @ann(immutable.this.List.apply[String]("4b"))) = {
super.<init>();
@@ -14,7 +14,7 @@
()
}
{
- @ann(immutable.this.List.apply[String]("1a")) @ann(immutable.this.List.apply[String]("1b")) class C[@ann(immutable.this.List.apply[String]("2a")) @ann(immutable.this.List.apply[String]("2b")) T>: Nothing <: Any] extends Object with ScalaObject {
+ @ann(immutable.this.List.apply[String]("1a")) @ann(immutable.this.List.apply[String]("1b")) class C[@ann(immutable.this.List.apply[String]("2a")) @ann(immutable.this.List.apply[String]("2b")) T>: Nothing <: Any] extends scala.AnyRef {
@ann(immutable.this.List.apply[String]("3a")) @ann(immutable.this.List.apply[String]("3b")) <paramaccessor> private[this] val x: T @ann(immutable.this.List.apply[String]("4b")) @ann(immutable.this.List.apply[String]("4a")) = _;
def <init>(@ann(immutable.this.List.apply[String]("3a")) @ann(immutable.this.List.apply[String]("3b")) x: T @ann(immutable.this.List.apply[String]("4b")) @ann(immutable.this.List.apply[String]("4a"))): C[T] = {
C.super.<init>();
diff --git a/test/files/run/reify_ann1b.check b/test/files/run/reify_ann1b.check
index e240e1e0ce..ceebc0e2ed 100644
--- a/test/files/run/reify_ann1b.check
+++ b/test/files/run/reify_ann1b.check
@@ -1,5 +1,5 @@
{
- @new ann(bar = "1a") @new ann(bar = "1b") class C[@new ann(bar = "2a") @new ann(bar = "2b") T>: Nothing <: Any] extends Object with ScalaObject {
+ @new ann(bar = "1a") @new ann(bar = "1b") class C[@new ann(bar = "2a") @new ann(bar = "2b") T>: Nothing <: Any] extends scala.AnyRef {
@new ann(bar = "3a") @new ann(bar = "3b") <paramaccessor> private[this] val x: T @ann(bar = "4a") @ann(bar = "4b") = _;
def <init>(@new ann(bar = "3a") @new ann(bar = "3b") x: T @ann(bar = "4a") @ann(bar = "4b")) = {
super.<init>();
@@ -14,7 +14,7 @@
()
}
{
- @ann(bar = "1a") @ann(bar = "1b") class C[@ann(bar = "2a") @ann(bar = "2b") T>: Nothing <: Any] extends Object with ScalaObject {
+ @ann(bar = "1a") @ann(bar = "1b") class C[@ann(bar = "2a") @ann(bar = "2b") T>: Nothing <: Any] extends scala.AnyRef {
@ann(bar = "3a") @ann(bar = "3b") <paramaccessor> private[this] val x: T @ann(bar = "4b") @ann(bar = "4a") = _;
def <init>(@ann(bar = "3a") @ann(bar = "3b") x: T @ann(bar = "4b") @ann(bar = "4a")): C[T] = {
C.super.<init>();
diff --git a/test/files/run/reify_classfileann_a.check b/test/files/run/reify_classfileann_a.check
index 1773263a94..419d916907 100644
--- a/test/files/run/reify_classfileann_a.check
+++ b/test/files/run/reify_classfileann_a.check
@@ -1,5 +1,5 @@
{
- @new ann(bar = "1", quux = Array("2", "3"), baz = new ann(bar = "4")) class C extends Object with ScalaObject {
+ @new ann(bar = "1", quux = Array("2", "3"), baz = new ann(bar = "4")) class C extends scala.AnyRef {
def <init>() = {
super.<init>();
()
@@ -8,7 +8,7 @@
()
}
{
- @ann(bar = "1", quux = ["2", "3"], baz = ann(bar = "4")) class C extends Object with ScalaObject {
+ @ann(bar = "1", quux = ["2", "3"], baz = ann(bar = "4")) class C extends scala.AnyRef {
def <init>(): C = {
C.super.<init>();
()
diff --git a/test/files/run/repl-parens.check b/test/files/run/repl-parens.check
index 944846541f..69f0a9ce30 100644
--- a/test/files/run/repl-parens.check
+++ b/test/files/run/repl-parens.check
@@ -66,7 +66,7 @@ scala> 55 ; () => 5
res13: () => Int = <function0>
scala> () => { class X ; new X }
-res14: () => Object with ScalaObject = <function0>
+res14: () => Object = <function0>
scala>
diff --git a/test/files/run/t0663.check b/test/files/run/t0663.check
index 22b68b7f57..dd9be2af70 100644..100755
--- a/test/files/run/t0663.check
+++ b/test/files/run/t0663.check
@@ -1 +1 @@
-<feed></feed>
+<feed/>
diff --git a/test/files/run/t1195.check b/test/files/run/t1195.check
index dc521fb8ca..d023bc91f7 100644
--- a/test/files/run/t1195.check
+++ b/test/files/run/t1195.check
@@ -1,6 +1,6 @@
-_ <: scala.runtime.AbstractFunction1[Int, _ <: Object with scala.ScalaObject with scala.Product with scala.Serializable] with scala.ScalaObject with scala.Serializable with java.lang.Object
-_ <: Object with scala.ScalaObject with scala.Product with scala.Serializable
-Object with scala.ScalaObject with scala.Product with scala.Serializable
-_ <: scala.runtime.AbstractFunction1[Int, _ <: Object with scala.ScalaObject with scala.Product with scala.Serializable] with scala.ScalaObject with scala.Serializable with java.lang.Object
-_ <: Object with scala.ScalaObject with scala.Product with scala.Serializable
-Object with scala.ScalaObject with scala.Product with scala.Serializable
+_ <: scala.runtime.AbstractFunction1[Int, _ <: Object with scala.Product with scala.Serializable] with scala.Serializable with java.lang.Object
+_ <: Object with scala.Product with scala.Serializable
+Object with scala.Product with scala.Serializable
+_ <: scala.runtime.AbstractFunction1[Int, _ <: Object with scala.Product with scala.Serializable] with scala.Serializable with java.lang.Object
+_ <: Object with scala.Product with scala.Serializable
+Object with scala.Product with scala.Serializable
diff --git a/test/files/run/t1620.check b/test/files/run/t1620.check
index 979efc8227..afa1e6acd5 100644..100755
--- a/test/files/run/t1620.check
+++ b/test/files/run/t1620.check
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE foo PUBLIC "-//Foo Corp//DTD 1.0//EN" "foo.dtd">
-<foo></foo>
+<foo/>
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE foo PUBLIC "-//Foo Corp//DTD 1.0//EN">
-<foo></foo>
+<foo/>
diff --git a/test/files/run/t2124.check b/test/files/run/t2124.check
index 2b8840209f..51b40469aa 100644..100755
--- a/test/files/run/t2124.check
+++ b/test/files/run/t2124.check
@@ -1 +1 @@
-<p><lost></lost><q></q></p>
+<p><lost/><q/></p>
diff --git a/test/files/run/t2125.check b/test/files/run/t2125.check
index 2b8840209f..51b40469aa 100644..100755
--- a/test/files/run/t2125.check
+++ b/test/files/run/t2125.check
@@ -1 +1 @@
-<p><lost></lost><q></q></p>
+<p><lost/><q/></p>
diff --git a/test/files/run/t4172.check b/test/files/run/t4172.check
index 95e3eb950d..da467e27ea 100644
--- a/test/files/run/t4172.check
+++ b/test/files/run/t4172.check
@@ -4,7 +4,7 @@ Type :help for more information.
scala>
scala> val c = { class C { override def toString = "C" }; ((new C, new C { def f = 2 })) }
-c: (C, C{def f: Int}) forSome { type C <: Object with ScalaObject } = (C,C)
+c: (C, C{def f: Int}) forSome { type C <: Object } = (C,C)
scala>
diff --git a/test/files/run/t4891.check b/test/files/run/t4891.check
index 072f8df8d4..79fd7f6fbb 100644
--- a/test/files/run/t4891.check
+++ b/test/files/run/t4891.check
@@ -5,4 +5,3 @@ test.generic.C1
test.generic.C2
(m) public void test.generic.C1.m1()
null
-interface scala.ScalaObject
diff --git a/test/files/run/t5224.check b/test/files/run/t5224.check
index 5bead91b36..28bc75d4fd 100644
--- a/test/files/run/t5224.check
+++ b/test/files/run/t5224.check
@@ -1,5 +1,5 @@
{
- @new Foo(bar = "qwe") class C extends Object with ScalaObject {
+ @new Foo(bar = "qwe") class C extends scala.AnyRef {
def <init>() = {
super.<init>();
()
diff --git a/test/files/run/t5271_1.check b/test/files/run/t5271_1.check
index d4fd544e88..9b956da17a 100644
--- a/test/files/run/t5271_1.check
+++ b/test/files/run/t5271_1.check
@@ -1,5 +1,5 @@
{
- case class C extends Object with ScalaObject with Product with Serializable {
+ case class C extends Object with Product with Serializable {
<caseaccessor> <paramaccessor> val foo : Int = _;
<caseaccessor> <paramaccessor> val bar : Int = _;
def <init>(foo: Int, bar: Int) = {
diff --git a/test/files/run/t5271_2.check b/test/files/run/t5271_2.check
index 5a519f265f..27297febb6 100644
--- a/test/files/run/t5271_2.check
+++ b/test/files/run/t5271_2.check
@@ -1,5 +1,5 @@
{
- case class C extends Object with ScalaObject with Product with Serializable {
+ case class C extends Object with Product with Serializable {
<caseaccessor> <paramaccessor> val foo : Int = _;
<caseaccessor> <paramaccessor> val bar : Int = _;
def <init>(foo: Int, bar: Int) = {
diff --git a/test/files/run/t5271_3.check b/test/files/run/t5271_3.check
index be87696f02..9331c78959 100644
--- a/test/files/run/t5271_3.check
+++ b/test/files/run/t5271_3.check
@@ -1,12 +1,12 @@
{
- object C extends Object with ScalaObject with Serializable {
+ object C extends scala.AnyRef with Serializable {
def <init>() = {
super.<init>();
()
};
def qwe: Int = 4
};
- case class C extends Object with ScalaObject with Product with Serializable {
+ case class C extends Object with Product with Serializable {
<caseaccessor> <paramaccessor> val foo : Int = _;
<caseaccessor> <paramaccessor> val bar : Int = _;
def <init>(foo: Int, bar: Int) = {
diff --git a/test/files/run/t5527.check b/test/files/run/t5527.check
index 4a8a9ce602..bb13928fd8 100644
--- a/test/files/run/t5527.check
+++ b/test/files/run/t5527.check
@@ -1,13 +1,13 @@
[[syntax trees at end of parser]]// Scala source: newSource1
package <empty> {
- object UselessComments extends scala.ScalaObject {
+ object UselessComments extends scala.AnyRef {
def <init>() = {
super.<init>();
()
};
var z = 0;
def test1 = {
- object Maybe extends scala.ScalaObject {
+ object Maybe extends scala.AnyRef {
def <init>() = {
super.<init>();
()
@@ -42,13 +42,13 @@ package <empty> {
}
};
/** comments that we should keep */
- object UsefulComments extends scala.ScalaObject {
+ object UsefulComments extends scala.AnyRef {
def <init>() = {
super.<init>();
()
};
/** class A */
- class A extends scala.ScalaObject {
+ class A extends scala.AnyRef {
def <init>() = {
super.<init>();
()
@@ -61,7 +61,7 @@ package <empty> {
var u = 2
};
/** trait B */
- abstract trait B extends scala.ScalaObject {
+ abstract trait B extends scala.AnyRef {
def $init$() = {
()
};
@@ -75,7 +75,7 @@ package <empty> {
var u = 2
};
/** object C */
- object C extends scala.ScalaObject {
+ object C extends scala.AnyRef {
def <init>() = {
super.<init>();
()
@@ -88,7 +88,7 @@ package <empty> {
var u = 2
};
/** class D */
- @new deprecated("use ... instead", "2.10.0") class D extends scala.ScalaObject {
+ @new deprecated("use ... instead", "2.10.0") class D extends scala.AnyRef {
def <init>() = {
super.<init>();
()
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)
+}
+
diff --git a/test/files/run/xml-attribute.check b/test/files/run/xml-attribute.check
index 3ae2034684..3cfe3779fc 100644
--- a/test/files/run/xml-attribute.check
+++ b/test/files/run/xml-attribute.check
@@ -1,12 +1,12 @@
-<t></t>
-<t></t>
-<t></t>
-<t></t>
-<t></t>
-<t b="1" d="2"></t>
-<t b="1" d="2"></t>
-<t b="1" d="2"></t>
-<t a="1" d="2"></t>
-<t b="1" d="2"></t>
-<t a="1" b="2" c="3"></t>
-<t g="1" e="2" p:a="3" f:e="4" mgruhu:ji="5"></t> \ No newline at end of file
+<t/>
+<t/>
+<t/>
+<t/>
+<t/>
+<t b="1" d="2"/>
+<t b="1" d="2"/>
+<t b="1" d="2"/>
+<t a="1" d="2"/>
+<t b="1" d="2"/>
+<t a="1" b="2" c="3"/>
+<t g="1" e="2" p:a="3" f:e="4" mgruhu:ji="5"/>
diff --git a/test/files/scalacheck/Ctrie.scala b/test/files/scalacheck/Ctrie.scala
index 2950937278..b9d71b88a3 100644
--- a/test/files/scalacheck/Ctrie.scala
+++ b/test/files/scalacheck/Ctrie.scala
@@ -5,7 +5,7 @@ import org.scalacheck._
import Prop._
import org.scalacheck.Gen._
import collection._
-import collection.mutable.Ctrie
+import collection.mutable.ConcurrentTrieMap
@@ -16,7 +16,7 @@ case class Wrap(i: Int) {
/** A check mainly oriented towards checking snapshot correctness.
*/
-object Test extends Properties("Ctrie") {
+object Test extends Properties("ConcurrentTrieMap") {
/* generators */
@@ -102,7 +102,7 @@ object Test extends Properties("Ctrie") {
(numThreads, numElems) =>
val p = 3 //numThreads
val sz = 102 //numElems
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
// checker
val checker = spawn {
@@ -134,7 +134,7 @@ object Test extends Properties("Ctrie") {
property("update") = forAll(sizes) {
(n: Int) =>
- val ct = new Ctrie[Int, Int]
+ val ct = new ConcurrentTrieMap[Int, Int]
for (i <- 0 until n) ct(i) = i
(0 until n) forall {
case i => ct(i) == i
@@ -143,7 +143,7 @@ object Test extends Properties("Ctrie") {
property("concurrent update") = forAll(threadCountsAndSizes) {
case (p, sz) =>
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
inParallel(p) {
idx =>
@@ -158,7 +158,7 @@ object Test extends Properties("Ctrie") {
property("concurrent remove") = forAll(threadCounts, sizes) {
(p, sz) =>
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
for (i <- 0 until sz) ct(Wrap(i)) = i
inParallel(p) {
@@ -174,7 +174,7 @@ object Test extends Properties("Ctrie") {
property("concurrent putIfAbsent") = forAll(threadCounts, sizes) {
(p, sz) =>
- val ct = new Ctrie[Wrap, Int]
+ val ct = new ConcurrentTrieMap[Wrap, Int]
val results = inParallel(p) {
idx =>
diff --git a/test/files/scalacheck/parallel-collections/ParallelCtrieCheck.scala b/test/files/scalacheck/parallel-collections/ParallelCtrieCheck.scala
index d1924f0ada..a04c0ff8d4 100644
--- a/test/files/scalacheck/parallel-collections/ParallelCtrieCheck.scala
+++ b/test/files/scalacheck/parallel-collections/ParallelCtrieCheck.scala
@@ -15,25 +15,25 @@ import scala.collection.parallel.ops._
-abstract class ParallelCtrieCheck[K, V](tp: String) extends ParallelMapCheck[K, V]("mutable.ParCtrie[" + tp + "]") {
+abstract class ParallelConcurrentTrieMapCheck[K, V](tp: String) extends ParallelMapCheck[K, V]("mutable.ParConcurrentTrieMap[" + tp + "]") {
// ForkJoinTasks.defaultForkJoinPool.setMaximumPoolSize(Runtime.getRuntime.availableProcessors * 2)
// ForkJoinTasks.defaultForkJoinPool.setParallelism(Runtime.getRuntime.availableProcessors * 2)
- type CollType = ParCtrie[K, V]
+ type CollType = ParConcurrentTrieMap[K, V]
def isCheckingViews = false
def hasStrictOrder = false
def ofSize(vals: Seq[Gen[(K, V)]], sz: Int) = {
- val ct = new mutable.Ctrie[K, V]
+ val ct = new mutable.ConcurrentTrieMap[K, V]
val gen = vals(rnd.nextInt(vals.size))
for (i <- 0 until sz) ct += sample(gen)
ct
}
def fromTraversable(t: Traversable[(K, V)]) = {
- val pct = new ParCtrie[K, V]
+ val pct = new ParConcurrentTrieMap[K, V]
var i = 0
for (kv <- t.toList) {
pct += kv
@@ -45,7 +45,7 @@ abstract class ParallelCtrieCheck[K, V](tp: String) extends ParallelMapCheck[K,
}
-object IntIntParallelCtrieCheck extends ParallelCtrieCheck[Int, Int]("Int, Int")
+object IntIntParallelConcurrentTrieMapCheck extends ParallelConcurrentTrieMapCheck[Int, Int]("Int, Int")
with PairOperators[Int, Int]
with PairValues[Int, Int]
{
@@ -58,7 +58,7 @@ with PairValues[Int, Int]
def koperators = intoperators
override def printDataStructureDebugInfo(ds: AnyRef) = ds match {
- case pm: ParCtrie[k, v] =>
+ case pm: ParConcurrentTrieMap[k, v] =>
println("Mutable parallel ctrie")
case _ =>
println("could not match data structure type: " + ds.getClass)
diff --git a/test/files/scalacheck/parallel-collections/pc.scala b/test/files/scalacheck/parallel-collections/pc.scala
index 8a0dba3c25..0a91977da0 100644
--- a/test/files/scalacheck/parallel-collections/pc.scala
+++ b/test/files/scalacheck/parallel-collections/pc.scala
@@ -26,7 +26,7 @@ class ParCollProperties extends Properties("Parallel collections") {
include(mutable.IntIntParallelHashMapCheck)
// parallel ctrie
- include(mutable.IntIntParallelCtrieCheck)
+ include(mutable.IntIntParallelConcurrentTrieMapCheck)
// parallel mutable hash sets (tables)
include(mutable.IntParallelHashSetCheck)
diff --git a/test/files/scalap/abstractClass/result.test b/test/files/scalap/abstractClass/result.test
index 9b8fc4dd95..9163346fc6 100644
--- a/test/files/scalap/abstractClass/result.test
+++ b/test/files/scalap/abstractClass/result.test
@@ -1,4 +1,4 @@
-abstract class AbstractClass extends java.lang.Object with scala.ScalaObject {
+abstract class AbstractClass extends java.lang.Object {
def this() = { /* compiled code */ }
def foo : scala.Predef.String
}
diff --git a/test/files/scalap/abstractMethod/result.test b/test/files/scalap/abstractMethod/result.test
index a1bd378c87..90f572f258 100644
--- a/test/files/scalap/abstractMethod/result.test
+++ b/test/files/scalap/abstractMethod/result.test
@@ -1,4 +1,4 @@
-trait AbstractMethod extends java.lang.Object with scala.ScalaObject {
+trait AbstractMethod extends java.lang.Object {
def $init$() : scala.Unit = { /* compiled code */ }
def arity : scala.Int
def isCool : scala.Boolean = { /* compiled code */ }
diff --git a/test/files/scalap/caseClass/result.test b/test/files/scalap/caseClass/result.test
index a0dbc497fe..7dfe3a0356 100644
--- a/test/files/scalap/caseClass/result.test
+++ b/test/files/scalap/caseClass/result.test
@@ -1,4 +1,4 @@
-case class CaseClass[A <: scala.Seq[scala.Int]](i : A, s : scala.Predef.String) extends java.lang.Object with scala.ScalaObject with scala.Product with scala.Serializable {
+case class CaseClass[A <: scala.Seq[scala.Int]](i : A, s : scala.Predef.String) extends scala.AnyRef with scala.Product with scala.Serializable {
val i : A = { /* compiled code */ }
val s : scala.Predef.String = { /* compiled code */ }
def foo : scala.Int = { /* compiled code */ }
diff --git a/test/files/scalap/caseObject/result.test b/test/files/scalap/caseObject/result.test
index 55e46eccd7..867a4b2162 100644
--- a/test/files/scalap/caseObject/result.test
+++ b/test/files/scalap/caseObject/result.test
@@ -1,4 +1,4 @@
-case object CaseObject extends java.lang.Object with scala.ScalaObject with scala.Product with scala.Serializable {
+case object CaseObject extends scala.AnyRef with scala.Product with scala.Serializable {
def bar : scala.Int = { /* compiled code */ }
override def productPrefix : java.lang.String = { /* compiled code */ }
def productArity : scala.Int = { /* compiled code */ }
diff --git a/test/files/scalap/cbnParam/result.test b/test/files/scalap/cbnParam/result.test
index c6b2f4caa8..fbe035d63c 100644
--- a/test/files/scalap/cbnParam/result.test
+++ b/test/files/scalap/cbnParam/result.test
@@ -1,3 +1,3 @@
-class CbnParam extends java.lang.Object with scala.ScalaObject {
+class CbnParam extends java.lang.Object {
def this(s : => scala.Predef.String) = { /* compiled code */ }
}
diff --git a/test/files/scalap/classPrivate/result.test b/test/files/scalap/classPrivate/result.test
index 0d12b779c3..5f2e1cc00e 100644
--- a/test/files/scalap/classPrivate/result.test
+++ b/test/files/scalap/classPrivate/result.test
@@ -1,10 +1,10 @@
-class ClassPrivate extends java.lang.Object with scala.ScalaObject {
+class ClassPrivate extends java.lang.Object {
def this() = { /* compiled code */ }
def baz : scala.Int = { /* compiled code */ }
- class Outer extends java.lang.Object with scala.ScalaObject {
+ class Outer extends java.lang.Object {
def this() = { /* compiled code */ }
private[ClassPrivate] def qux : scala.Int = { /* compiled code */ }
}
protected def quux : scala.Int = { /* compiled code */ }
private[ClassPrivate] def bar : scala.Int = { /* compiled code */ }
-} \ No newline at end of file
+}
diff --git a/test/files/scalap/classWithExistential/result.test b/test/files/scalap/classWithExistential/result.test
index 91afddaf0e..b8ce005da9 100644
--- a/test/files/scalap/classWithExistential/result.test
+++ b/test/files/scalap/classWithExistential/result.test
@@ -1,4 +1,4 @@
-class ClassWithExistential extends java.lang.Object with scala.ScalaObject {
+class ClassWithExistential extends java.lang.Object {
def this() = { /* compiled code */ }
def foo[A, B] : scala.Function1[A, B forSome {type A <: scala.Seq[scala.Int]; type B >: scala.Predef.String}] = { /* compiled code */ }
-} \ No newline at end of file
+}
diff --git a/test/files/scalap/classWithSelfAnnotation/result.test b/test/files/scalap/classWithSelfAnnotation/result.test
index 326437c7be..df7bd86643 100644
--- a/test/files/scalap/classWithSelfAnnotation/result.test
+++ b/test/files/scalap/classWithSelfAnnotation/result.test
@@ -1,4 +1,4 @@
-class ClassWithSelfAnnotation extends java.lang.Object with scala.ScalaObject {
+class ClassWithSelfAnnotation extends java.lang.Object {
this : ClassWithSelfAnnotation with java.lang.CharSequence =>
def this() = { /* compiled code */ }
def foo : scala.Int = { /* compiled code */ }
diff --git a/test/files/scalap/covariantParam/result.test b/test/files/scalap/covariantParam/result.test
index 8acd9b497a..2f52f1f28e 100644
--- a/test/files/scalap/covariantParam/result.test
+++ b/test/files/scalap/covariantParam/result.test
@@ -1,4 +1,4 @@
-class CovariantParam[+A] extends java.lang.Object with scala.ScalaObject {
+class CovariantParam[+A] extends java.lang.Object {
def this() = { /* compiled code */ }
def foo[A](a : A) : scala.Int = { /* compiled code */ }
}
diff --git a/test/files/scalap/implicitParam/result.test b/test/files/scalap/implicitParam/result.test
index 11d678df06..0ea212dda6 100644
--- a/test/files/scalap/implicitParam/result.test
+++ b/test/files/scalap/implicitParam/result.test
@@ -1,4 +1,4 @@
-class ImplicitParam extends java.lang.Object with scala.ScalaObject {
+class ImplicitParam extends java.lang.Object {
def this() = { /* compiled code */ }
def foo(i : scala.Int)(implicit f : scala.Float, d : scala.Double) : scala.Int = { /* compiled code */ }
}
diff --git a/test/files/scalap/packageObject/result.test b/test/files/scalap/packageObject/result.test
index 6a8d6ae1d5..94c6a01b08 100644
--- a/test/files/scalap/packageObject/result.test
+++ b/test/files/scalap/packageObject/result.test
@@ -1,4 +1,4 @@
-package object PackageObject extends java.lang.Object with scala.ScalaObject {
+package object PackageObject extends java.lang.Object {
def this() = { /* compiled code */ }
type A = scala.Predef.String
def foo(i : scala.Int) : scala.Int = { /* compiled code */ }
diff --git a/test/files/scalap/paramClauses/result.test b/test/files/scalap/paramClauses/result.test
index 9ef93d2e76..dc4397386c 100644
--- a/test/files/scalap/paramClauses/result.test
+++ b/test/files/scalap/paramClauses/result.test
@@ -1,4 +1,4 @@
-class ParamClauses extends java.lang.Object with scala.ScalaObject {
+class ParamClauses extends java.lang.Object {
def this() = { /* compiled code */ }
def foo(i : scala.Int)(s : scala.Predef.String)(t : scala.Double) : scala.Int = { /* compiled code */ }
}
diff --git a/test/files/scalap/paramNames/result.test b/test/files/scalap/paramNames/result.test
index f9d98d9647..4d3c7d0c1e 100644
--- a/test/files/scalap/paramNames/result.test
+++ b/test/files/scalap/paramNames/result.test
@@ -1,4 +1,4 @@
-class ParamNames extends java.lang.Object with scala.ScalaObject {
+class ParamNames extends java.lang.Object {
def this() = { /* compiled code */ }
def foo(s : => scala.Seq[scala.Int], s2 : => scala.Seq[scala.Any]) : scala.Unit = { /* compiled code */ }
}
diff --git a/test/files/scalap/sequenceParam/result.test b/test/files/scalap/sequenceParam/result.test
index 4b9d7844ab..ed47c094fe 100644
--- a/test/files/scalap/sequenceParam/result.test
+++ b/test/files/scalap/sequenceParam/result.test
@@ -1,3 +1,3 @@
-class SequenceParam extends java.lang.Object with scala.ScalaObject {
+class SequenceParam extends java.lang.Object {
def this(s : scala.Predef.String, i : scala.Int*) = { /* compiled code */ }
}
diff --git a/test/files/scalap/simpleClass/result.test b/test/files/scalap/simpleClass/result.test
index d10b633bce..905046ce52 100644
--- a/test/files/scalap/simpleClass/result.test
+++ b/test/files/scalap/simpleClass/result.test
@@ -1,4 +1,4 @@
-class SimpleClass extends java.lang.Object with scala.ScalaObject {
+class SimpleClass extends java.lang.Object {
def this() = { /* compiled code */ }
def foo : scala.Int = { /* compiled code */ }
}
diff --git a/test/files/scalap/traitObject/result.test b/test/files/scalap/traitObject/result.test
index 0d7de1535d..d0521043c8 100644
--- a/test/files/scalap/traitObject/result.test
+++ b/test/files/scalap/traitObject/result.test
@@ -1,8 +1,8 @@
-trait TraitObject extends java.lang.Object with scala.ScalaObject {
+trait TraitObject extends java.lang.Object {
def $init$() : scala.Unit = { /* compiled code */ }
def foo : scala.Int = { /* compiled code */ }
}
-object TraitObject extends java.lang.Object with scala.ScalaObject {
+object TraitObject extends java.lang.Object {
def this() = { /* compiled code */ }
def bar : scala.Int = { /* compiled code */ }
}
diff --git a/test/files/scalap/typeAnnotations/result.test b/test/files/scalap/typeAnnotations/result.test
index b565d6185b..d28712f12b 100644
--- a/test/files/scalap/typeAnnotations/result.test
+++ b/test/files/scalap/typeAnnotations/result.test
@@ -1,8 +1,8 @@
-abstract class TypeAnnotations[@scala.specialized R] extends java.lang.Object with scala.ScalaObject {
+abstract class TypeAnnotations[@scala.specialized R] extends java.lang.Object {
def this() = { /* compiled code */ }
@scala.specialized
val x : scala.Int = { /* compiled code */ }
@scala.specialized
type T
def compose[@scala.specialized A](x : A, y : R) : A = { /* compiled code */ }
-} \ No newline at end of file
+}
diff --git a/test/files/scalap/valAndVar/result.test b/test/files/scalap/valAndVar/result.test
index 934ad0a086..90081acade 100644
--- a/test/files/scalap/valAndVar/result.test
+++ b/test/files/scalap/valAndVar/result.test
@@ -1,4 +1,4 @@
-class ValAndVar extends java.lang.Object with scala.ScalaObject {
+class ValAndVar extends java.lang.Object {
def this() = { /* compiled code */ }
val foo : java.lang.String = { /* compiled code */ }
var bar : scala.Int = { /* compiled code */ }
diff --git a/test/files/scalap/wildcardType/result.test b/test/files/scalap/wildcardType/result.test
index aa3d5d53bc..28147b6605 100644
--- a/test/files/scalap/wildcardType/result.test
+++ b/test/files/scalap/wildcardType/result.test
@@ -1,3 +1,3 @@
-class WildcardType extends java.lang.Object with scala.ScalaObject {
+class WildcardType extends java.lang.Object {
def this(f : scala.Function1[scala.Int, _]) = { /* compiled code */ }
}
diff --git a/test/files/specialized/SI-5005.check b/test/files/specialized/SI-5005.check
index d2a97512ae..9fc63a2b1d 100644
--- a/test/files/specialized/SI-5005.check
+++ b/test/files/specialized/SI-5005.check
@@ -1,6 +1,6 @@
[[syntax trees at end of specialize]]// Scala source: newSource1
package <empty> {
- class C2[@specialized(scala.Boolean) U >: Nothing <: Any] extends Object with ScalaObject {
+ class C2[@specialized(scala.Boolean) U >: Nothing <: Any] extends Object {
def <init>(): C2[U] = {
C2.super.<init>();
()
@@ -8,7 +8,7 @@ package <empty> {
def apply(x: U): U = x;
<specialized> def apply$mcZ$sp(x: Boolean): Boolean = C2.this.apply(x.asInstanceOf[U]()).asInstanceOf[Boolean]()
};
- class B extends Object with ScalaObject {
+ class B extends Object {
def <init>(): B = {
B.super.<init>();
()
diff --git a/test/files/speclib/instrumented.jar.desired.sha1 b/test/files/speclib/instrumented.jar.desired.sha1
index 27c1e8fc24..2d4cd04a92 100644
--- a/test/files/speclib/instrumented.jar.desired.sha1
+++ b/test/files/speclib/instrumented.jar.desired.sha1
@@ -1 +1 @@
-23b6a7aa89b0a8a210ae9b206dfd0998338798c7 ?instrumented.jar
+d83c6bf3765ab1378943020a8d9cda8851604ffa ?instrumented.jar
diff --git a/test/scaladoc/resources/explicit-inheritance-override.scala b/test/scaladoc/resources/explicit-inheritance-override.scala
new file mode 100644
index 0000000000..62ce653aea
--- /dev/null
+++ b/test/scaladoc/resources/explicit-inheritance-override.scala
@@ -0,0 +1,48 @@
+// This tests the implicit comment inheritance capabilities of scaladoc for class inheritance (no $super, no @inheritdoc)
+class InheritDocBase {
+ /**
+ * The base comment. And another sentence...
+ *
+ * @param arg1 The T term comment
+ * @param arg2 The string comment
+ * @tparam T the type of the first argument
+ * @throws SomeException if the function is not called with correct parameters
+ * @return The return comment
+ * @see The Manual
+ * @note Be careful!
+ * @example function[Int](3, "something")
+ * @author a Scala developer
+ * @version 0.0.2
+ * @since 0.0.1
+ * @todo Call mom.
+ */
+ def function[T](arg1: T, arg2: String): Double = 0.0d
+}
+
+class InheritDocDerived extends InheritDocBase {
+ /**
+ * Starting line
+ *
+ * @inheritdoc
+ * @inheritdoc
+ *
+ * Ending line
+ *
+ * @param arg1 Start1 @inheritdoc End1
+ * @param arg2 Start2 @inheritdoc End2
+ * @param arg3 Start3 ShouldWarn @inheritdoc End3
+ * @tparam T StartT @inheritdoc EndT
+ * @tparam ShouldWarn StartSW @inheritdoc EndSW
+ * @throws SomeException StartEx @inheritdoc EndEx
+ * @throws SomeOtherException StartSOE Should Warn @inheritdoc EndSOE
+ * @return StartRet @inheritdoc EndRet
+ * @see StartSee @inheritdoc EndSee
+ * @note StartNote @inheritdoc EndNote
+ * @example StartExample @inheritdoc EndExample
+ * @author StartAuthor @inheritdoc EndAuthor
+ * @version StartVer @inheritdoc EndVer
+ * @since StartSince @inheritdoc EndSince
+ * @todo StartTodo @inheritdoc And dad! EndTodo
+ */
+ override def function[T](arg1: T, arg2: String): Double = 1.0d
+} \ No newline at end of file
diff --git a/test/scaladoc/resources/explicit-inheritance-usecase.scala b/test/scaladoc/resources/explicit-inheritance-usecase.scala
new file mode 100644
index 0000000000..e10cec437a
--- /dev/null
+++ b/test/scaladoc/resources/explicit-inheritance-usecase.scala
@@ -0,0 +1,47 @@
+// This tests the implicit comment inheritance capabilities of scaladoc for usecases (no $super, no @inheritdoc)
+/** Testing use case inheritance */
+class UseCaseInheritDoc {
+ /**
+ * The base comment. And another sentence...
+ *
+ * @param arg1 The T term comment
+ * @param arg2 The string comment
+ * @tparam T the type of the first argument
+ * @throws SomeException if the function is not called with correct parameters
+ * @return The return comment
+ * @see The Manual
+ * @note Be careful!
+ * @example function[Int](3, "something")
+ * @author a Scala developer
+ * @version 0.0.2
+ * @since 0.0.1
+ * @todo Call mom.
+ *
+ * @usecase def function[T](arg1: T, arg2: String): Double
+ *
+ * Starting line
+ *
+ * @inheritdoc
+ * @inheritdoc
+ *
+ * Ending line
+ *
+ * @param arg1 Start1 @inheritdoc End1
+ * @param arg2 Start2 @inheritdoc End2
+ * @param arg3 Start3 ShouldWarn @inheritdoc End3
+ * @tparam T StartT @inheritdoc EndT
+ * @tparam ShouldWarn StartSW @inheritdoc EndSW
+ * @throws SomeException StartEx @inheritdoc EndEx
+ * @throws SomeOtherException StartSOE Should Warn @inheritdoc EndSOE
+ * @return StartRet @inheritdoc EndRet
+ * @see StartSee @inheritdoc EndSee
+ * @note StartNote @inheritdoc EndNote
+ * @example StartExample @inheritdoc EndExample
+ * @author StartAuthor @inheritdoc EndAuthor
+ * @version StartVer @inheritdoc EndVer
+ * @since StartSince @inheritdoc EndSince
+ * @todo StartTodo @inheritdoc And dad! EndTodo
+ */
+ def function[T](implicit arg1: T, arg2: String): Double = 0.0d
+}
+
diff --git a/test/scaladoc/resources/implicit-inheritance-override.scala b/test/scaladoc/resources/implicit-inheritance-override.scala
index 85b8e8d543..5d692f59ad 100644
--- a/test/scaladoc/resources/implicit-inheritance-override.scala
+++ b/test/scaladoc/resources/implicit-inheritance-override.scala
@@ -2,12 +2,12 @@
class Base {
/**
* The base comment. And another sentence...
- *
- * @param arg1 The T term comment
- * @param arg2 The string comment
+ *
+ * @param arg1 The T term comment
+ * @param arg2 The string comment
* @tparam T the type of the first argument
* @return The return comment
- */
+ */
def function[T](arg1: T, arg2: String): Double = 0.0d
}
diff --git a/test/scaladoc/resources/inheritdoc-corner-cases.scala b/test/scaladoc/resources/inheritdoc-corner-cases.scala
new file mode 100644
index 0000000000..8cd995e605
--- /dev/null
+++ b/test/scaladoc/resources/inheritdoc-corner-cases.scala
@@ -0,0 +1,78 @@
+// TEST1: Inherit from multiple classes
+trait A {
+ /**
+ * Hello 1 comment
+ */
+ def hello1 = 0
+}
+
+trait B {
+ /**
+ * Hello 2 comment
+ */
+ def hello2 = 1
+}
+
+trait C extends B
+
+class D extends A with C {
+ /**
+ * Inherited: @inheritdoc
+ */
+ override def hello1 = super.hello2
+
+ /**
+ * Inherited: @inheritdoc
+ */
+ override def hello2 = super.hello1
+}
+
+// TEST2: Invalid inherit: no parents
+trait E {
+ /**
+ * @inheritdoc
+ */
+ def whereDidThisComeFrom
+}
+
+// TEST3: Invalid inherit, but other parents present
+trait F extends E {
+ /**
+ * @inheritdoc
+ */
+ def howAboutThis
+}
+
+
+// TEST4: Inherit from something that inherits: inherit should propagate
+trait G extends D {
+ /**
+ * @inheritdoc
+ */
+ override def hello1 = 13
+
+ /**
+ * @inheritdoc
+ */
+ override def hello2 = 14
+}
+
+// TEST5: Inherit missing parameters
+trait H extends G {
+ /**
+ * Missing params
+ * @throws HelloException @inheritdoc
+ * @todo @inheritdoc
+ */
+ override def hello1 = 15
+}
+
+// TEST6: Inherit from something that inherits in the usecase
+trait I extends G {
+ /**
+ * @inheritdoc
+ * @usecase def hello1(i: Int)
+ * @inheritdoc
+ */
+ override def hello1 = 13
+} \ No newline at end of file
diff --git a/test/scaladoc/scala/html/HtmlFactoryTest.scala b/test/scaladoc/scala/html/HtmlFactoryTest.scala
index 37aa302ac7..67358e6e70 100644
--- a/test/scaladoc/scala/html/HtmlFactoryTest.scala
+++ b/test/scaladoc/scala/html/HtmlFactoryTest.scala
@@ -21,9 +21,9 @@ object XMLUtil {
}
object Test extends Properties("HtmlFactory") {
-
- final val RESOURCES = "test/scaladoc/resources/"
-
+
+ final val RESOURCES = "test/scaladoc/resources/"
+
import scala.tools.nsc.doc.{DocFactory, Settings}
import scala.tools.nsc.doc.model.IndexModelFactory
import scala.tools.nsc.doc.html.HtmlFactory
@@ -87,7 +87,7 @@ object Test extends Properties("HtmlFactory") {
/**
* This tests the text without the markup - ex:
- *
+ *
* <h4 class="signature">
* <span class="modifier_kind">
* <span class="modifier">implicit</span>
@@ -97,24 +97,24 @@ object Test extends Properties("HtmlFactory") {
* <span class="name">test</span><span class="params">()</span><span class="result">: <span name="scala.Int" class="extype">Int</span></span>
* </span>
* </h4>
- *
+ *
* becomes:
- *
+ *
* implicit def test(): Int
- *
+ *
* and is required to contain the text in the given checks
- *
+ *
* NOTE: Comparison is done ignoring all whitespace
*/
def checkText(scalaFile: String, debug: Boolean = true)(checks: (Option[String], String, Boolean)*): Boolean = {
- val htmlFile = scalaFile.stripSuffix(".scala") + ".html"
+ val htmlFile = scalaFile.stripSuffix(".scala") + ".html"
val htmlAllFiles = createTemplates(scalaFile)
var result = true
-
+
for ((fileHint, check, expected) <- checks) {
// resolve the file to be checked
val fileName = fileHint match {
- case Some(file) =>
+ case Some(file) =>
if (file endsWith ".html")
file
else
@@ -122,20 +122,27 @@ object Test extends Properties("HtmlFactory") {
case None =>
htmlFile
}
- val fileText = htmlAllFiles(fileName).text.replace('→',' ').replaceAll("\\s+","")
- val checkText = check.replace('→',' ').replaceAll("\\s+","")
+ val fileTextPretty = htmlAllFiles(fileName).text.replace('→',' ').replaceAll("\\s+"," ")
+ val fileText = fileTextPretty.replaceAll(" ", "")
+
+ val checkTextPretty = check.replace('→',' ').replaceAll("\\s+"," ")
+ val checkText = checkTextPretty.replaceAll(" ", "")
+
val checkValue = fileText.contains(checkText) == expected
if (debug && (!checkValue)) {
- Console.err.println("Check failed: ")
- Console.err.println("HTML: " + fileText)
- Console.err.println("Check: " + checkText)
+ Console.err.println("")
+ Console.err.println("HTML Check failed for resource file " + scalaFile + ":")
+ Console.err.println("Could not match: \n" + checkTextPretty)
+ Console.err.println("In the extracted HTML text: \n" + fileTextPretty)
+ Console.err.println("NOTE: The whitespaces are eliminated before matching!")
+ Console.err.println("")
}
- result &&= checkValue
+ result &&= checkValue
}
-
+
result
}
-
+
def shortComments(root: scala.xml.Node) =
XMLUtil.stripGroup(root).descendant.flatMap {
@@ -284,7 +291,7 @@ object Test extends Properties("HtmlFactory") {
case _ => false
}
}
-
+
property("Trac #4420 - no whitespace at end of line") = {
val files = createTemplates("Trac4420.scala")
@@ -296,27 +303,27 @@ object Test extends Properties("HtmlFactory") {
case _ => false
}
}
-
- property("Trac #484 - refinements and existentials") = {
- val files = createTemplates("Trac484.scala")
- val lines = """
- |type Bar = AnyRef { type Dingus <: T forSome { type T <: String } }
- |type Foo = AnyRef { ... /* 3 definitions in type refinement */ }
- |def g(x: T forSome { type T <: String }): String
- |def h(x: Float): AnyRef { def quux(x: Int,y: Int): Int }
- |def hh(x: Float): AnyRef { def quux(x: Int,y: Int): Int }
- |def j(x: Int): Bar
- |def k(): AnyRef { type Dingus <: T forSome { type T <: String } }
- """.stripMargin.trim.lines map (_.trim)
-
- files("RefinementAndExistentials.html") match {
- case node: scala.xml.Node => {
- val s = node.text.replaceAll("\\s+", " ")
- lines forall (s contains _)
- }
- case _ => false
- }
- }
+ //
+ // property("Trac #484 - refinements and existentials") = {
+ // val files = createTemplates("Trac484.scala")
+ // val lines = """
+ // |type Bar = AnyRef { type Dingus <: T forSome { type T <: String } }
+ // |type Foo = AnyRef { ... /* 3 definitions in type refinement */ }
+ // |def g(x: T forSome { type T <: String }): String
+ // |def h(x: Float): AnyRef { def quux(x: Int,y: Int): Int }
+ // |def hh(x: Float): AnyRef { def quux(x: Int,y: Int): Int }
+ // |def j(x: Int): Bar
+ // |def k(): AnyRef { type Dingus <: T forSome { type T <: String } }
+ // """.stripMargin.trim.lines map (_.trim)
+ //
+ // files("RefinementAndExistentials.html") match {
+ // case node: scala.xml.Node => {
+ // val s = node.text.replaceAll("\\s+", " ")
+ // lines forall (s contains _)
+ // }
+ // case _ => false
+ // }
+ // }
property("Trac #4289") = {
val files = createTemplates("Trac4289.scala")
@@ -432,47 +439,46 @@ object Test extends Properties("HtmlFactory") {
createTemplate("SI_4898.scala")
true
}
-
+
property("Use cases should override their original members") =
checkText("SI_5054_q1.scala")(
(None,"""def test(): Int""", true),
(None,"""def test(implicit lost: Int): Int""", false)
)
- property("Use cases should keep their flags - final should not be lost") =
+ property("Use cases should keep their flags - final should not be lost") =
checkText("SI_5054_q2.scala")((None, """final def test(): Int""", true))
-
- property("Use cases should keep their flags - implicit should not be lost") =
+
+ property("Use cases should keep their flags - implicit should not be lost") =
checkText("SI_5054_q3.scala")((None, """implicit def test(): Int""", true))
-
- property("Use cases should keep their flags - real abstract should not be lost") =
+
+ property("Use cases should keep their flags - real abstract should not be lost") =
checkText("SI_5054_q4.scala")((None, """abstract def test(): Int""", true))
- property("Use cases should keep their flags - traits should not be affected") =
+ property("Use cases should keep their flags - traits should not be affected") =
checkText("SI_5054_q5.scala")((None, """def test(): Int""", true))
- property("Use cases should keep their flags - traits should not be affected") =
+ property("Use cases should keep their flags - traits should not be affected") =
checkText("SI_5054_q6.scala")((None, """abstract def test(): Int""", true))
-
- property("Use case individual signature test") =
+
+ property("Use case individual signature test") =
checkText("SI_5054_q7.scala")(
(None, """abstract def test2(explicit: Int): Int [use case] This takes the explicit value passed.""", true),
(None, """abstract def test1(): Int [use case] This takes the implicit value in scope.""", true)
)
- property("Display correct \"Definition classes\"") =
- checkText("SI_5287.scala")(
+ property("Display correct \"Definition classes\"") =
+ checkText("SI_5287.scala")(
(None,
"""def method(): Int
[use case] The usecase explanation
[use case] The usecase explanation
Definition Classes SI_5287 SI_5287_B SI_5287_A""", true)
- ) // the explanation appears twice, as small comment and full comment
-
-
- property("Correct comment inheritance for overriding") =
+ ) // the explanation appears twice, as small comment and full comment
+
+ property("Correct comment inheritance for overriding") =
checkText("implicit-inheritance-override.scala")(
- (Some("Base"),
+ (Some("Base"),
"""def function[T](arg1: T, arg2: String): Double
The base comment.
The base comment. And another sentence...
@@ -481,7 +487,7 @@ object Test extends Properties("HtmlFactory") {
arg2 The string comment
returns The return comment
""", true),
- (Some("DerivedA"),
+ (Some("DerivedA"),
"""def function[T](arg1: T, arg2: String): Double
Overriding the comment, the params and returns comments should stay the same.
Overriding the comment, the params and returns comments should stay the same.
@@ -490,21 +496,21 @@ object Test extends Properties("HtmlFactory") {
arg2 The string comment
returns The return comment
""", true),
- (Some("DerivedB"),
+ (Some("DerivedB"),
"""def function[T](arg1: T, arg2: String): Double
T the type of the first argument
arg1 The overridden T term comment
arg2 The overridden string comment
returns The return comment
""", true),
- (Some("DerivedC"),
+ (Some("DerivedC"),
"""def function[T](arg1: T, arg2: String): Double
T the type of the first argument
arg1 The T term comment
arg2 The string comment
returns The overridden return comment
""", true),
- (Some("DerivedD"),
+ (Some("DerivedD"),
"""def function[T](arg1: T, arg2: String): Double
T The overriden type parameter comment
arg1 The T term comment
@@ -512,11 +518,11 @@ object Test extends Properties("HtmlFactory") {
returns The return comment
""", true)
)
-
+
for (useCaseFile <- List("UseCaseInheritance", "UseCaseOverrideInheritance")) {
- property("Correct comment inheritance for usecases") =
+ property("Correct comment inheritance for usecases") =
checkText("implicit-inheritance-usecase.scala")(
- (Some(useCaseFile),
+ (Some(useCaseFile),
"""def missing_arg[T](arg1: T): Double
[use case]
[use case]
@@ -524,7 +530,7 @@ object Test extends Properties("HtmlFactory") {
arg1 The T term comment
returns The return comment
""", true),
- (Some(useCaseFile),
+ (Some(useCaseFile),
"""def missing_targ(arg1: Int, arg2: String): Double
[use case]
[use case]
@@ -532,7 +538,7 @@ object Test extends Properties("HtmlFactory") {
arg2 The string comment
returns The return comment
""", true),
- (Some(useCaseFile),
+ (Some(useCaseFile),
"""def overridden_arg1[T](implicit arg1: T, arg2: String): Double
[use case]
[use case]
@@ -541,7 +547,7 @@ object Test extends Properties("HtmlFactory") {
arg2 The string comment
returns The return comment
""", true),
- (Some(useCaseFile),
+ (Some(useCaseFile),
"""def overridden_targ[T](implicit arg1: T, arg2: String): Double
[use case]
[use case]
@@ -550,7 +556,7 @@ object Test extends Properties("HtmlFactory") {
arg2 The string comment
returns The return comment
""", true),
- (Some(useCaseFile),
+ (Some(useCaseFile),
"""def overridden_return[T](implicit arg1: T, arg2: String): Double
[use case]
[use case]
@@ -559,7 +565,7 @@ object Test extends Properties("HtmlFactory") {
arg2 The string comment
returns The overridden return comment
""", true),
- (Some(useCaseFile),
+ (Some(useCaseFile),
"""def added_arg[T](implicit arg1: T, arg2: String, arg3: Float): Double
[use case]
[use case]
@@ -569,7 +575,7 @@ object Test extends Properties("HtmlFactory") {
arg3 The added float comment
returns The return comment
""", true),
- (Some(useCaseFile),
+ (Some(useCaseFile),
"""def overridden_comment[T](implicit arg1: T, arg2: String): Double
[use case] The overridden comment.
[use case] The overridden comment.
@@ -578,9 +584,93 @@ object Test extends Properties("HtmlFactory") {
arg2 The string comment
returns The return comment
""", true)
- )
- }
-
+ )
+ }
+
+ property("Correct explicit inheritance for override") =
+ checkText("explicit-inheritance-override.scala")(
+ (Some("InheritDocDerived"),
+ """def function[T](arg1: T, arg2: String): Double
+ Starting line
+ Starting line
+ The base comment. And another sentence...
+ The base comment. And another sentence...
+ Ending line
+ T StartT the type of the first argument EndT
+ arg1 Start1 The T term comment End1
+ arg2 Start2 The string comment End2
+ returns StartRet The return comment EndRet
+ Definition Classes InheritDocDerived → InheritDocBase
+ Example: StartExample function[Int](3, "something") EndExample
+ Version StartVer 0.0.2 EndVer
+ Since StartSince 0.0.1 EndSince
+ Exceptions thrown
+ SomeException StartEx if the function is not called with correct parameters EndEx
+ SomeOtherException StartSOE Should Warn <invalid inheritdoc annotation> EndSOE
+ To do StartTodo Call mom. And dad! EndTodo
+ Note StartNote Be careful! EndNote
+ See also StartSee The Manual EndSee
+ """, true))
+
+ property("Correct explicit inheritance for usecase") =
+ checkText("explicit-inheritance-usecase.scala")(
+ (Some("UseCaseInheritDoc"),
+ """def function[T](arg1: T, arg2: String): Double
+ [use case] Starting line
+ [use case] Starting line
+ The base comment. And another sentence...
+ The base comment. And another sentence...
+ Ending line
+ T StartT the type of the first argument EndT
+ arg1 Start1 The T term comment End1
+ arg2 Start2 The string comment End2
+ returns StartRet The return comment EndRet
+ Example: StartExample function[Int](3,"something") EndExample
+ Version StartVer 0.0.2 EndVer
+ Since StartSince 0.0.1 EndSince
+ Exceptions thrown
+ SomeException StartEx if the function is not called with correct parameters EndEx
+ SomeOtherException StartSOE Should Warn <invalid inheritdoc annotation> EndSOE
+ To do StartTodo Call mom. And dad! EndTodo
+ Note StartNote Be careful! EndNote
+ See also StartSee The Manual EndSee
+ """, true))
+
+ property("Correct explicit inheritance in corner cases") =
+ checkText("inheritdoc-corner-cases.scala")(
+ (Some("D"),
+ """def hello1: Int
+ Inherited: Hello 1 comment
+ Inherited: Hello 1 comment
+ Definition Classes D → A
+ """, true),
+ (Some("D"),
+ """def hello2: Int
+ Inherited: Hello 2 comment
+ Inherited: Hello 2 comment
+ Definition Classes D → B
+ """, true),
+ (Some("G"),
+ """def hello1: Int
+ Inherited: Hello 1 comment
+ Inherited: Hello 1 comment
+ Definition Classes G → D → A
+ """, true),
+ (Some("G"),
+ """def hello2: Int
+ Inherited: Hello 2 comment
+ Inherited: Hello 2 comment
+ Definition Classes G → D → B
+ """, true),
+ (Some("I"),
+ """def hello1(i: Int): Unit
+ [use case] Inherited: Hello 1 comment
+ [use case] Inherited: Hello 1 comment
+ Definition Classes I → G → D → A
+ """, true)
+ // traits E, F and H shouldn't crash scaladoc but we don't need to check the output
+ )
+
{
val files = createTemplates("basic.scala")
//println(files)