summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-10-27 00:59:25 +0000
committerPaul Phillips <paulp@improving.org>2010-10-27 00:59:25 +0000
commita15e48df88fde5172526f68939530862f72f19ca (patch)
tree726b918d7de48c3d0da686c7f08ea6fd7ef164fb
parent46d1cfc7f0ee0df50ff92f0acbaaa700269901a6 (diff)
downloadscala-a15e48df88fde5172526f68939530862f72f19ca.tar.gz
scala-a15e48df88fde5172526f68939530862f72f19ca.tar.bz2
scala-a15e48df88fde5172526f68939530862f72f19ca.zip
Merge branch 'oct26' of /scala/trunk
-rw-r--r--src/compiler/scala/tools/nsc/matching/Matrix.scala4
-rw-r--r--src/compiler/scala/tools/nsc/matching/ParallelMatching.scala1
-rw-r--r--test/files/run/bug576-regress.scala17
-rw-r--r--test/files/run/bug576.check5
-rw-r--r--test/files/run/bug576.scala45
5 files changed, 51 insertions, 21 deletions
diff --git a/src/compiler/scala/tools/nsc/matching/Matrix.scala b/src/compiler/scala/tools/nsc/matching/Matrix.scala
index 800200b897..d914f1c17f 100644
--- a/src/compiler/scala/tools/nsc/matching/Matrix.scala
+++ b/src/compiler/scala/tools/nsc/matching/Matrix.scala
@@ -201,9 +201,7 @@ trait Matrix extends MatrixAdditions {
// See #1427 for an example of a crash which occurs unless we retype:
// in that instance there is an existential in the pattern.
lazy val ident = typer typed { ID(lhs) setType null }
- lazy val valDef = typer typedValDef {
- (VAL(lhs) withType ident.tpe) === rhs
- }
+ lazy val valDef = typer typed { (VAL(lhs) withType ident.tpe) === rhs }
override def toString() = "%s: %s = %s".format(lhs, lhs.info, rhs)
}
diff --git a/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala b/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
index b82298f2de..8a0702251d 100644
--- a/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
+++ b/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
@@ -885,7 +885,6 @@ trait ParallelMatching extends ast.TreeDSL
case ConstantType(Constant(value)) => scrutTree MEMBER_== Literal(value)
case SingleType(NoPrefix, sym) => genEquals(sym)
case SingleType(pre, sym) if sym.isModule => genEquals(sym)
- case ThisType(sym) if sym.isAnonymousClass => cunit.error(sym.pos, "self type test in anonymous class forbidden by implementation.") ; EmptyTree
case ThisType(sym) if sym.isModule => genEquals(sym)
case _ if isMatchUnlessNull => scrutTree OBJ_NE NULL
case _ => scrutTree IS tpe
diff --git a/test/files/run/bug576-regress.scala b/test/files/run/bug576-regress.scala
deleted file mode 100644
index b608dd5a42..0000000000
--- a/test/files/run/bug576-regress.scala
+++ /dev/null
@@ -1,17 +0,0 @@
-class A {
- override def equals(other: Any) = other match {
- case _: this.type => true
- case _ => false
- }
-}
-
-object Test {
- def main(args: Array[String]): Unit = {
- val x1 = new A
- val x2 = new A
- assert(x1 == x1)
- assert(x1 != x2)
- assert(x1 != ())
- assert(x2 != x1)
- }
-} \ No newline at end of file
diff --git a/test/files/run/bug576.check b/test/files/run/bug576.check
new file mode 100644
index 0000000000..8a1218a102
--- /dev/null
+++ b/test/files/run/bug576.check
@@ -0,0 +1,5 @@
+1
+2
+3
+4
+5
diff --git a/test/files/run/bug576.scala b/test/files/run/bug576.scala
new file mode 100644
index 0000000000..2fc929f325
--- /dev/null
+++ b/test/files/run/bug576.scala
@@ -0,0 +1,45 @@
+class A {
+ override def equals(other: Any) = other match {
+ case _: this.type => true
+ case _ => false
+ }
+}
+
+object Dingus {
+ def IamDingus = 5
+}
+
+object Test {
+ val x1 = new A
+ val x2 = new A
+
+ val x3 = new { self =>
+ override def equals(other : Any) = other match {
+ case that: self.type => true
+ case _ => false
+ }
+ }
+ val x4 = new { self =>
+ def f(x: Any) = x match {
+ case _: x1.type => 1
+ case _: x2.type => 2
+ case _: x3.type => 3
+ case _: self.type => 4
+ case x: Dingus.type => x.IamDingus
+ }
+ }
+
+ def main(args: Array[String]): Unit = {
+
+ assert(x1 == x1)
+ assert(x1 != x2)
+ assert(x1 != ())
+ assert(x2 != x1)
+
+ assert(x3 == x3)
+ assert(x3 != x2)
+ assert(x2 != x3)
+
+ List(x1, x2, x3, x4, Dingus) map x4.f foreach println
+ }
+} \ No newline at end of file