This commit was manufactured by cvs2svn to create tag 'buildscript'.
[IRC.git] /
1 package Analysis.TaskStateAnalysis;
2 import IR.*;
3 import Util.Namer;
4 import java.util.*;
5 import Util.GraphNode;
6 import Util.Edge;
7
8 public class GarbageAnalysis extends Namer {
9     State state;
10     TaskAnalysis taskanalysis;
11     HashSet garbagestates;
12     HashSet possiblegarbagestates;
13
14
15     public GarbageAnalysis(State state, TaskAnalysis taskanalysis) {
16         this.state=state;
17         this.taskanalysis=taskanalysis;
18         this.garbagestates=new HashSet();
19         this.possiblegarbagestates=new HashSet();
20         doAnalysis();
21     }
22    
23     public void doAnalysis() {
24         for(Iterator it=state.getClassSymbolTable().getDescriptorsIterator();it.hasNext();) {
25             ClassDescriptor cd=(ClassDescriptor) it.next();
26             if (taskanalysis.getFlagStates(cd)==null)
27                 continue;
28             analyzeClass(cd);
29         }
30     }
31
32     public void analyzeClass(ClassDescriptor cd) {
33         Set flagstatenodes=taskanalysis.getFlagStates(cd);
34         HashSet garbage=new HashSet();
35         HashSet possiblegarbage=new HashSet();
36
37         for(Iterator fsit=flagstatenodes.iterator();fsit.hasNext();) {
38             FlagState fs=(FlagState)fsit.next();
39             if (fs.numedges()==0)
40                 garbage.add(fs);
41         }
42
43         Stack tovisit=new Stack();
44         tovisit.addAll(garbage);
45         possiblegarbage.addAll(garbage);
46         while(!tovisit.isEmpty()) {
47             FlagState fs=(FlagState)tovisit.pop();
48             for(int i=0;i<fs.numinedges();i++) {
49                 Edge e=fs.getinedge(i);
50                 FlagState fsnew=(FlagState) e.getSource();
51                 if (!possiblegarbage.contains(fsnew)) {
52                     possiblegarbage.add(fsnew);
53                     tovisit.push(fsnew);
54                 }
55             }
56         }
57         garbagestates.addAll(garbage);
58         possiblegarbagestates.addAll(possiblegarbage);
59     }
60     
61     public String nodeLabel(GraphNode gn) {
62         return "";
63     }
64     
65     public String nodeOption(GraphNode gn) {
66         if (garbagestates.contains(gn)) {
67             return "color=green";
68         } else if (possiblegarbagestates.contains(gn)) {
69             return "color=blue";
70         } else
71             return "color=red";
72     }
73
74     public String edgeLabel(Edge e) {
75         return "";
76     }
77
78     public String edgeOption(Edge e) {
79         return "";
80     }
81 }