collects live-in var's allocation sites when it references to parameter heap region.
[IRC.git] / Robust / src / Analysis / MLP / VariableSourceToken.java
1 package Analysis.MLP;
2
3 import IR.*;
4 import IR.Flat.*;
5 import java.util.*;
6 import java.io.*;
7
8 public class VariableSourceToken {
9
10   private Set<TempDescriptor> refVars;
11   private FlatSESEEnterNode   sese;
12   private Integer             seseAge;
13   private TempDescriptor      addrVar; 
14
15   public VariableSourceToken( Set<TempDescriptor> refVars, 
16                               FlatSESEEnterNode   sese,                       
17                               Integer             seseAge, 
18                               TempDescriptor      addrVar 
19                               ) {
20     this.refVars = refVars;
21     this.sese    = sese;
22     this.seseAge = seseAge;
23     this.addrVar = addrVar; 
24   }
25
26   public Set<TempDescriptor> getRefVars() {
27     return refVars;
28   }
29
30   public FlatSESEEnterNode getSESE() {
31     return sese;
32   }
33
34   public Integer getAge() {
35     return seseAge;
36   }
37
38   public TempDescriptor getAddrVar() {
39     return addrVar;
40   }
41
42   public VariableSourceToken copy() {
43     Set<TempDescriptor> refVarsCopy = new HashSet<TempDescriptor>();
44
45     Iterator<TempDescriptor> rvItr = refVars.iterator();
46     while( rvItr.hasNext() ) {
47       refVarsCopy.add( rvItr.next() );
48     }
49
50     return new VariableSourceToken( refVarsCopy,
51                                     sese,
52                                     new Integer( seseAge ),
53                                     addrVar );
54   }
55
56   public boolean equals( Object o ) {
57     if( o == null ) {
58       return false;
59     }
60
61     if( !(o instanceof VariableSourceToken) ) {
62       return false;
63     }
64
65     VariableSourceToken vst = (VariableSourceToken) o;
66
67     // the reference vars have no bearing on equality
68     return    sese.equals( vst.sese    ) &&
69            addrVar.equals( vst.addrVar ) &&
70            seseAge.equals( vst.seseAge );
71   }
72
73   public int hashCode() {
74     // the reference vars have no bearing on hashCode
75     return (sese.hashCode() << 3) * (addrVar.hashCode() << 4) ^ seseAge.intValue();
76   }
77
78
79   public String toString() {
80     return refVars+"\tref "+addrVar+"\t@"+sese.getPrettyIdentifier()+"("+seseAge+")";
81   }
82 }