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 ) {
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+")";
}
}