summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2007-01-29 17:55:48 +0000
committerIulian Dragos <jaguarul@gmail.com>2007-01-29 17:55:48 +0000
commit8c38668c95c10c02bfcd05cc037bd1b5acc16a02 (patch)
treeb84c50536c4560fa40f42b33129b121073540223
parentfba3480e739e2fe318fa9dcb71da424fb90d06fd (diff)
downloadscala-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.scala10
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 =>