summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/scala/tools/nsc/matching/ParallelMatching.scala')
-rw-r--r--src/compiler/scala/tools/nsc/matching/ParallelMatching.scala16
1 files changed, 6 insertions, 10 deletions
diff --git a/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala b/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
index 3b8c876bd2..e1bc8b1518 100644
--- a/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
+++ b/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
@@ -44,16 +44,11 @@ trait ParallelMatching {
def isSimpleSwitch: Boolean = {
(isSameType(scrutinee.tpe.widen, definitions.IntClass.tpe) ||
- isSameType(scrutinee.tpe.widen, definitions.CharClass.tpe)) && {
- var xs = column; while(!xs.isEmpty) { // forall
- val h = xs.head
- if (strip2(h).isInstanceOf[Literal] || isDefaultPattern(h))
- xs = xs.tail
- else
- return false
- }
- return true
- }}
+ isSameType(scrutinee.tpe.widen, definitions.CharClass.tpe)) &&
+ column.init.forall(h => strip2(h).isInstanceOf[Literal]) && {
+ val last = column.last;
+ last.isInstanceOf[Literal] || isDefaultPattern(last);
+ }}
// an unapply for which we don't need a type test
def isUnapplyHead(): Boolean = column.head match {
@@ -321,6 +316,7 @@ trait ParallelMatching {
private def sanity(pos:Position, tag: Int, pvars:List[Symbol]) {
varMap = (tag,pvars)::varMap
}
+
//lazy
private def bindVars(Tag:Int, orig: Binding): Binding = {
def myBindVars(rest:List[(Int,List[Symbol])], bnd: Binding): Binding = rest match {