diff options
author | Iulian Dragos <jaguarul@gmail.com> | 2007-01-29 17:55:48 +0000 |
---|---|---|
committer | Iulian Dragos <jaguarul@gmail.com> | 2007-01-29 17:55:48 +0000 |
commit | 8c38668c95c10c02bfcd05cc037bd1b5acc16a02 (patch) | |
tree | b84c50536c4560fa40f42b33129b121073540223 | |
parent | fba3480e739e2fe318fa9dcb71da424fb90d06fd (diff) | |
download | scala-8c38668c95c10c02bfcd05cc037bd1b5acc16a02.tar.gz scala-8c38668c95c10c02bfcd05cc037bd1b5acc16a02.tar.bz2 scala-8c38668c95c10c02bfcd05cc037bd1b5acc16a02.zip |
Changed from HashSet to LinkedHashSet to circum...
Changed from HashSet to LinkedHashSet to circumvent errors in remove
-rw-r--r-- | src/compiler/scala/tools/nsc/backend/icode/analysis/DataFlowAnalysis.scala | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/icode/analysis/DataFlowAnalysis.scala b/src/compiler/scala/tools/nsc/backend/icode/analysis/DataFlowAnalysis.scala index 8ab7007967..3d4d3e6f14 100644 --- a/src/compiler/scala/tools/nsc/backend/icode/analysis/DataFlowAnalysis.scala +++ b/src/compiler/scala/tools/nsc/backend/icode/analysis/DataFlowAnalysis.scala @@ -7,7 +7,7 @@ package scala.tools.nsc.backend.icode.analysis -import scala.collection.mutable.{Map, HashMap, Set, HashSet} +import scala.collection.mutable.{Map, HashMap, Set, HashSet, LinkedHashSet} /** A generic framework for data flow analysis. */ @@ -16,7 +16,7 @@ trait DataFlowAnalysis[L <: CompleteLattice] { type P <: ProgramPoint[P] val lattice: L - val worklist: Set[P] = new HashSet + val worklist: Set[P] = new LinkedHashSet val in: Map[P, lattice.Elem] = new HashMap val out: Map[P, lattice.Elem] = new HashMap @@ -34,14 +34,18 @@ trait DataFlowAnalysis[L <: CompleteLattice] { * applied when inputs to a Program point change, to obtain the new * output value. * - * @param f ... + * @param f the transfer function. */ def forwardAnalysis(f: (P, lattice.Elem) => lattice.Elem): Unit = while (!worklist.isEmpty) { +// Console.println("worklist in: " + worklist); val point = worklist.elements.next; worklist -= point; visited += point; val output = f(point, in(point)) +// Console.println("taking out point: " + point + " worklist out: " + worklist); if ((lattice.bottom == out(point)) || output != out(point)) { +// Console.println("Output changed at " + point + " added to worklist: ") +// Console.println("\t" + worklist) out(point) = output val succs = point.successors succs foreach { p => |