summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/matching/ParallelMatching.scala12
-rw-r--r--test/files/pos/bug2310.scala38
-rw-r--r--test/files/pos/t0816.scala (renamed from test/pending/pos/t0816.scala)2
-rw-r--r--test/files/pos/t1035.scala (renamed from test/pending/pos/t1035.scala)0
-rw-r--r--test/files/pos/t2691.scala (renamed from test/pending/pos/t2691.scala)0
-rw-r--r--test/files/pos/t425.scala (renamed from test/pending/pos/t425.scala)0
-rw-r--r--test/pending/run/bugs425-and-816.scala27
7 files changed, 42 insertions, 37 deletions
diff --git a/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala b/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
index dda679e96e..79812474ee 100644
--- a/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
+++ b/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
@@ -700,18 +700,12 @@ trait ParallelMatching extends ast.TreeDSL
referenceCount += 1
if (isLabellable) {
- // val mtype = MethodType(freeVars, bodyTpe)
- val mtype = MethodType(args, bodyTpe)
+ val mtype = MethodType(freeVars, bodyTpe)
_labelSym = owner.newLabel(body.pos, name) setInfo mtype
TRACE("Creating index %d: mtype = %s".format(bx, mtype))
- if (freeVars.size != args.size)
- TRACE("We will be hosed! freeVars = %s, args = %s, vdefs = %s".format(freeVars, args, vdefs))
-
- // Labelled expression - the symbols in the array (must be Idents!)
- // are those the label takes as argument
- _label = typer typedLabelDef LabelDef(_labelSym, args, body setType bodyTpe)
- TRACE("[New label] def %s%s: %s = %s".format(name, pp(args), bodyTpe, body))
+ _label = typer typedLabelDef LabelDef(_labelSym, freeVars, body setType bodyTpe)
+ TRACE("[New label] def %s%s: %s = %s".format(name, pp(freeVars), bodyTpe, body))
}
ifLabellable(vdefs, squeezedBlock(vdefs, label))
diff --git a/test/files/pos/bug2310.scala b/test/files/pos/bug2310.scala
new file mode 100644
index 0000000000..68912b4961
--- /dev/null
+++ b/test/files/pos/bug2310.scala
@@ -0,0 +1,38 @@
+import scala.Stream._
+
+object consistencyError {
+ /* this gives an error:
+ Consistency problem compiling (virtual file)!
+ Trying to call method body%1(List(scala.collection.immutable.Stream[A])) with arguments (List(tp2, temp6, temp5))
+ case (l #:: ls, rs) => None
+ ^
+ scala.tools.nsc.symtab.Types$TypeError: too many arguments for method body%1: (val rs: scala.collection.immutable.Stream[A])None.type
+
+ two errors found
+ vss(0) =
+ args = List(tp2, temp6, temp5)
+ vss(1) = value rs, value ls, value l
+ args = List(tp2, temp6, temp5)
+ targets(0) = FinalState(,scala.None)
+ targets(1) = FinalState(,scala.None)
+ labels(1) = method body%1
+ labels(0) = method body%0
+ bx = 1
+ label.tpe = (val rs: scala.collection.immutable.Stream[A])None.type
+ */
+ def crash[A](lefts: Stream[A], rights: Stream[A]) = (lefts, rights) match {
+ case (Stream.Empty, Stream.Empty) => None
+ case (l #:: ls, rs) => None
+ }
+
+ // These work
+ // def works1[A](lefts: Stream[A]) = lefts match {
+ // case Stream.Empty => None
+ // case l #:: ls => None
+ // }
+ //
+ // def works2[A](lefts: Stream[A], rights: Stream[A]) = (lefts, rights) match {
+ // case (Stream.Empty, Stream.Empty) => None
+ // case (ls, rs) => None
+ // }
+}
diff --git a/test/pending/pos/t0816.scala b/test/files/pos/t0816.scala
index 44282ea872..0128a0ad72 100644
--- a/test/pending/pos/t0816.scala
+++ b/test/files/pos/t0816.scala
@@ -1,6 +1,6 @@
abstract class Atest(val data: String)
-case class Btest(override val data: String, val b: boolean) extends Atest(data)
+case class Btest(override val data: String, val b: Boolean) extends Atest(data)
case class Ctest(override val data: String) extends Btest(data, true)
diff --git a/test/pending/pos/t1035.scala b/test/files/pos/t1035.scala
index a280a415d2..a280a415d2 100644
--- a/test/pending/pos/t1035.scala
+++ b/test/files/pos/t1035.scala
diff --git a/test/pending/pos/t2691.scala b/test/files/pos/t2691.scala
index ba2e52f1fe..ba2e52f1fe 100644
--- a/test/pending/pos/t2691.scala
+++ b/test/files/pos/t2691.scala
diff --git a/test/pending/pos/t425.scala b/test/files/pos/t425.scala
index e50c50ac35..e50c50ac35 100644
--- a/test/pending/pos/t425.scala
+++ b/test/files/pos/t425.scala
diff --git a/test/pending/run/bugs425-and-816.scala b/test/pending/run/bugs425-and-816.scala
deleted file mode 100644
index d9267d06af..0000000000
--- a/test/pending/run/bugs425-and-816.scala
+++ /dev/null
@@ -1,27 +0,0 @@
-object Test {
- object bug425 {
- case class A(x: Int)
- case class B(override val x: Int, y: Double) extends A(x)
-
- val b: A = B(5, 3.3)
- b match {
- case B(x, y) => Console.println(y)
- case A(x) => Console.println(x)
- }
- }
-
- object bug816 {
- abstract class Atest(val data: String)
-
- case class Btest(override val data: String, val b: boolean) extends Atest(data)
-
- case class Ctest(override val data: String) extends Btest(data, true)
-
- class testCaseClass {
- def test(x: Atest) = x match {
- case Ctest(data) => Console.println("C")
- case Btest(data, b) => Console.println("B")
- }
- }
- }
-}