summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid MacIver <david.maciver@gmail.com>2008-10-27 22:54:19 +0000
committerDavid MacIver <david.maciver@gmail.com>2008-10-27 22:54:19 +0000
commitcc84bb54bbc18082700bb86acda66775e358ff29 (patch)
treeb0ff08dcd53876c36337693f7a753959653bd21b
parent09d8adf2076b8383bdb2582809b19a701d252850 (diff)
downloadscala-cc84bb54bbc18082700bb86acda66775e358ff29.tar.gz
scala-cc84bb54bbc18082700bb86acda66775e358ff29.tar.bz2
scala-cc84bb54bbc18082700bb86acda66775e358ff29.zip
Made DBG call by name.
Commonized code between CaseRuleApplication and MixLiterals.
-rw-r--r--src/compiler/scala/tools/nsc/matching/ParallelMatching.scala36
-rw-r--r--src/compiler/scala/tools/nsc/matching/PatternNodes.scala2
2 files changed, 10 insertions, 28 deletions
diff --git a/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala b/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
index d2867b2eec..ea0d7f2cca 100644
--- a/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
+++ b/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
@@ -144,24 +144,19 @@ trait ParallelMatching {
def rest:Rep
// e.g. (1,1) (1,3) (42,2) for column {case ..1.. => ;; case ..42..=> ;; case ..1.. => }
- protected var defaults: List[Int] = Nil
var defaultV: collection.immutable.Set[Symbol] = emptySymbolSet
+ var defaultIndexSet = new BitSet(column.length)
- lazy val defaultRows: List[Row] =
- defaults.reverseMap(grabRow);
-
- // sorted e.g. case _ => 7,5,1
- protected def insertDefault(tag: Int,vs:Set[Symbol]) {
+ def insertDefault(tag: Int, vs: Set[Symbol]) {
+ defaultIndexSet += tag
defaultV = defaultV ++ vs
- def insertSorted(tag: Int, xs:List[Int]):List[Int] = xs match {
- case y::ys if y > tag => y::insertSorted(tag, ys)
- case ys => tag :: ys
- }
-
- defaults = insertSorted(tag, defaults)
}
- protected def haveDefault: Boolean = !defaults.isEmpty
+ def haveDefault: Boolean = !defaultIndexSet.isEmpty
+
+ lazy val defaultRows: List[Row] =
+ defaultIndexSet.toList.reverseMap(grabRow);
+
protected var tagIndices = IntMap.empty[List[Int]]
protected def grabTemps: List[Symbol] = rest.temp
@@ -254,19 +249,6 @@ trait ParallelMatching {
/** mixture rule for literals
*/
class MixLiterals(val scrutinee:Symbol, val column:List[Tree], val rest:Rep)(implicit rep:RepFactory) extends CaseRuleApplication(rep) {
-
- private var defaultIndexSet = new BitSet(column.length)
-
- override def insertDefault(tag: Int, vs: Set[Symbol]) {
- defaultIndexSet += tag
- defaultV = defaultV ++ vs
- }
-
- protected override def haveDefault: Boolean = !defaultIndexSet.isEmpty
-
- override lazy val defaultRows: List[Row] =
- defaultIndexSet.filter(defaultIndexSet(_)).toList.reverseMap(grabRow)
-
var varMap: List[(Int,List[Symbol])] = Nil
private def sanity(pos:Position, tag: Int, pvars:List[Symbol]) {
@@ -1170,7 +1152,7 @@ trait ParallelMatching {
val restTemp = temp.take(px) ::: temp.drop(px+1)
val restRows = row map { r => r.replace(r.pat.take(px) ::: r.pat.drop(px+1)) }
val mr = MixtureRule(temps.head, column, rep.make(restTemp, restRows))
- DBG("\n---\nmixture rule is = "/*+mr.getClass.toString*/)
+ DBG("\n---\nmixture rule is = " + mr.getClass.toString)
mr
}
diff --git a/src/compiler/scala/tools/nsc/matching/PatternNodes.scala b/src/compiler/scala/tools/nsc/matching/PatternNodes.scala
index 6994c2e393..97266912b8 100644
--- a/src/compiler/scala/tools/nsc/matching/PatternNodes.scala
+++ b/src/compiler/scala/tools/nsc/matching/PatternNodes.scala
@@ -87,7 +87,7 @@ trait PatternNodes { self: transform.ExplicitOuter =>
// case Typed(nme.WILDCARD,_) => pattern.tpe <:< scrutinee.tpe
}
- final def DBG(x:String) { if (settings_debug) Console.println(x) }
+ final def DBG(x : =>String) { if (settings_debug) Console.println(x) }
/** returns all variables that are binding the given pattern
* @param x a pattern