diff options
author | David MacIver <david.maciver@gmail.com> | 2008-10-27 22:54:19 +0000 |
---|---|---|
committer | David MacIver <david.maciver@gmail.com> | 2008-10-27 22:54:19 +0000 |
commit | cc84bb54bbc18082700bb86acda66775e358ff29 (patch) | |
tree | b0ff08dcd53876c36337693f7a753959653bd21b /src | |
parent | 09d8adf2076b8383bdb2582809b19a701d252850 (diff) | |
download | scala-cc84bb54bbc18082700bb86acda66775e358ff29.tar.gz scala-cc84bb54bbc18082700bb86acda66775e358ff29.tar.bz2 scala-cc84bb54bbc18082700bb86acda66775e358ff29.zip |
Made DBG call by name.
Commonized code between CaseRuleApplication and MixLiterals.
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/matching/ParallelMatching.scala | 36 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/matching/PatternNodes.scala | 2 |
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 |