changes.
[IRC.git] / Robust / src / Analysis / MLP / VariableSourceToken.java
index fe43742a2cf740c2bdb5bf04c9bc0a1f4ab11cc8..b34b88c70d064ad70621545dc32663cdb97b1604 100644 (file)
@@ -7,30 +7,51 @@ import java.io.*;
 
 public class VariableSourceToken {
 
-  private FlatSESEEnterNode sese;
-  private TempDescriptor    var;
-  private Integer           age;
+  private Set<TempDescriptor> refVars;
+  private FlatSESEEnterNode   sese;
+  private Integer             seseAge;
+  private TempDescriptor      addrVar; 
 
-  public VariableSourceToken( FlatSESEEnterNode sese,
-                             TempDescriptor    var, 
-                             Integer           age ) {
-    this.sese = sese;
-    this.var  = var;
-    this.age  = age;
+  public VariableSourceToken( Set<TempDescriptor> refVars, 
+                              FlatSESEEnterNode   sese,                              
+                             Integer             seseAge, 
+                              TempDescriptor      addrVar 
+                              ) {
+    this.refVars = refVars;
+    this.sese    = sese;
+    this.seseAge = seseAge;
+    this.addrVar = addrVar; 
+  }
+
+  public Set<TempDescriptor> getRefVars() {
+    return refVars;
   }
 
   public FlatSESEEnterNode getSESE() {
     return sese;
   }
 
-  public TempDescriptor getVar() {
-    return var;
+  public Integer getAge() {
+    return seseAge;
   }
 
-  public Integer getAge() {
-    return age;
+  public TempDescriptor getAddrVar() {
+    return addrVar;
   }
 
+  public VariableSourceToken copy() {
+    Set<TempDescriptor> refVarsCopy = new HashSet<TempDescriptor>();
+
+    Iterator<TempDescriptor> rvItr = refVars.iterator();
+    while( rvItr.hasNext() ) {
+      refVarsCopy.add( rvItr.next() );
+    }
+
+    return new VariableSourceToken( refVarsCopy,
+                                    sese,
+                                    new Integer( seseAge ),
+                                    addrVar );
+  }
 
   public boolean equals( Object o ) {
     if( o == null ) {
@@ -43,16 +64,19 @@ public class VariableSourceToken {
 
     VariableSourceToken vst = (VariableSourceToken) o;
 
-    return var.equals( vst.var ) &&
-           age.equals( vst.age );
+    // the reference vars have no bearing on equality
+    return    sese.equals( vst.sese    ) &&
+           addrVar.equals( vst.addrVar ) &&
+           seseAge.equals( vst.seseAge );
   }
 
   public int hashCode() {
-    return (var.hashCode() << 2) ^ age.intValue();
+    // the reference vars have no bearing on hashCode
+    return (sese.hashCode() << 3) * (addrVar.hashCode() << 4) ^ seseAge.intValue();
   }
 
 
   public String toString() {
-    return "["+var+", "+age+"]";
+    return refVars+"\tref "+addrVar+"\t@"+sese.toPrettyString()+"("+seseAge+")";
   }
 }