summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-03-05 21:06:58 +0000
committerPaul Phillips <paulp@improving.org>2010-03-05 21:06:58 +0000
commit3447b38abc70d910738b5a487ab778a68a6d1f7f (patch)
tree2100daa18acf520cba2eb99a29a0323682575367
parenta4558a403ae9e1a9901331526c31c6c2d955a956 (diff)
downloadscala-3447b38abc70d910738b5a487ab778a68a6d1f7f.tar.gz
scala-3447b38abc70d910738b5a487ab778a68a6d1f7f.tar.bz2
scala-3447b38abc70d910738b5a487ab778a68a6d1f7f.zip
Fix for #3136 by reverting the line in r18184 w...
Fix for #3136 by reverting the line in r18184 which caused this and other regressions. The downside is that the #1697 test case no longer passes, but protracted shrug because it wasn't entirely fixed anyway. Review by moors. (Can you triangulate your way to a patch where both work simultaneously? It's today's bonus challenge!)
-rw-r--r--src/compiler/scala/tools/nsc/matching/ParallelMatching.scala13
-rw-r--r--test/files/pos/bug3136.scala19
-rw-r--r--test/pending/run/bug1697.scala (renamed from test/files/run/bug1697.scala)0
3 files changed, 27 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala b/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
index 4a000b1901..ab7b9adf72 100644
--- a/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
+++ b/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
@@ -537,7 +537,10 @@ trait ParallelMatching extends ast.TreeDSL
case Pattern(LIT(null), _) if !(p =:= s) => (None, passr) // (1)
case x if isObjectTest => (passl(), None) // (2)
case Pattern(Typed(pp, _), _) if sMatchesP => (typed(pp), None) // (4)
- case Pattern(_: UnApply, _) => (passl(), passr)
+ // The next line used to be this which "fixed" 1697 but introduced
+ // numerous regressions including #3136.
+ // case Pattern(_: UnApply, _) => (passl(), passr)
+ case Pattern(_: UnApply, _) => (None, passr)
case x if !x.isDefault && sMatchesP => (subs(), None)
case x if x.isDefault || pMatchesS => (passl(), passr)
case _ => (None, passr)
@@ -692,8 +695,8 @@ trait ParallelMatching extends ast.TreeDSL
}
def createLabelBody(index: Int, pvgroup: PatternVarGroup) = {
- def args = pvgroup.syms
- def vdefs = pvgroup.valDefs
+ val args = pvgroup.syms
+ val vdefs = pvgroup.valDefs
val name = "body%" + index
require(_labelSym == null)
@@ -712,8 +715,8 @@ trait ParallelMatching extends ast.TreeDSL
}
def getLabelBody(pvgroup: PatternVarGroup): Tree = {
- def idents = pvgroup map (_.rhs)
- def vdefs = pvgroup.valDefs
+ val idents = pvgroup map (_.rhs)
+ val vdefs = pvgroup.valDefs
referenceCount += 1
// if (idents.size != labelParamTypes.size)
// consistencyFailure(idents, vdefs)
diff --git a/test/files/pos/bug3136.scala b/test/files/pos/bug3136.scala
new file mode 100644
index 0000000000..33d42c2f3c
--- /dev/null
+++ b/test/files/pos/bug3136.scala
@@ -0,0 +1,19 @@
+class Type
+class Symbol
+case class PolyType(tps: List[Symbol], res: Type) extends Type
+class OtherType extends Type
+
+// case class NullaryMethodType(tp: Type) extends Type
+
+object NullaryMethodType {
+ def apply(resTpe: Type): Type = PolyType(List(), resTpe)
+ def unapply(tp: Type): Option[(Type)] = None
+}
+
+object Test {
+ def TEST(tp: Type): String =
+ tp match {
+ case PolyType(ps1, PolyType(ps2, res @ PolyType(a, b))) => "1"+tp // couldn't find a simpler version that still crashes
+ case NullaryMethodType(meh) => "2"+meh
+ }
+}
diff --git a/test/files/run/bug1697.scala b/test/pending/run/bug1697.scala
index 01590dd405..01590dd405 100644
--- a/test/files/run/bug1697.scala
+++ b/test/pending/run/bug1697.scala