diff options
author | Paul Phillips <paulp@improving.org> | 2010-03-05 21:06:58 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2010-03-05 21:06:58 +0000 |
commit | 3447b38abc70d910738b5a487ab778a68a6d1f7f (patch) | |
tree | 2100daa18acf520cba2eb99a29a0323682575367 | |
parent | a4558a403ae9e1a9901331526c31c6c2d955a956 (diff) | |
download | scala-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.scala | 13 | ||||
-rw-r--r-- | test/files/pos/bug3136.scala | 19 | ||||
-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 |