diff options
-rw-r--r-- | src/compiler/scala/tools/nsc/matching/ParallelMatching.scala | 12 | ||||
-rw-r--r-- | test/files/pos/bug2310.scala | 38 | ||||
-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.scala | 27 |
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") - } - } - } -} |