1 package Analysis.Disjoint;
3 import IR.FieldDescriptor;
4 import IR.Flat.TempDescriptor;
9 public static final int read = 1;
10 public static final int write = 2;
11 public static final int strongupdate = 4;
13 // identify an allocation site of affected object
14 protected Alloc affectedAllocSite;
16 // identify operation type
20 protected FieldDescriptor field;
22 public Effect(Alloc affectedAS, int type, FieldDescriptor field) {
23 this.affectedAllocSite = affectedAS;
28 public static boolean isWrite(int effect) {
29 return (effect & Effect.write)==Effect.write;
32 public boolean isWrite() {
36 public boolean isRead() {
40 public Alloc getAffectedAllocSite() {
41 return affectedAllocSite;
44 public void setAffectedAllocSite(Alloc affectedAllocSite) {
45 this.affectedAllocSite = affectedAllocSite;
48 public int getType() {
52 public void setType(int type) {
56 public FieldDescriptor getField() {
60 public void setField(FieldDescriptor field) {
64 public boolean equals(Object o) {
70 if (!(o instanceof Effect)) {
74 Effect in = (Effect) o;
76 if (affectedAllocSite.equals(in.getAffectedAllocSite())
77 && type == in.getType()
78 && ((field!=null&&field.equals(in.getField()))||
79 (field==null&&in.getField()==null))) {
86 public int hashCode() {
88 int hash = affectedAllocSite.hashCode();
93 hash = hash ^ field.hashCode();
100 public String toString() {
103 s += affectedAllocSite.toStringBrief();
107 } else if (type == write) {
116 s += ", " + field.toStringBrief();