SharedLocMap currDeleteSet, SharedLocMap sharedLocMap, SharedLocMap deleteSet,
boolean isEventLoopBody) {
+ MethodDescriptor md = fm.getMethod();
+
SharedLocMap killSet = new SharedLocMap();
SharedLocMap genSet = new SharedLocMap();
fieldLoc = locTuple.get(locTuple.size() - 1);
}
+ NTuple<Location> fieldLocTuple = new NTuple<Location>();
+ if (fld.isStatic()) {
+ if (fld.isFinal()) {
+ // in this case, fld has TOP location
+ Location topLocation = Location.createTopLocation(md);
+ fieldLocTuple.add(topLocation);
+ } else {
+ fieldLocTuple.addAll(deriveGlobalLocationTuple(md));
+ fieldLocTuple.add((Location) fld.getType().getExtension());
+ }
+
+ } else {
+ fieldLocTuple.addAll(deriveLocationTuple(md, lhs));
+ fieldLocTuple.add((Location) fld.getType().getExtension());
+ }
+
// shared loc extension
Location srcLoc = getLocation(rhs);
if (ssjava.isSharedLocation(fieldLoc)) {
// only care the case that loc(f) is shared location
// write(field)
- NTuple<Location> fieldLocTuple = new NTuple<Location>();
-
- fieldLocTuple.addAll(mapDescriptorToLocationPath.get(lhs));
- fieldLocTuple.add(fieldLoc);
+ // NTuple<Location> fieldLocTuple = new NTuple<Location>();
+ // fieldLocTuple.addAll(mapDescriptorToLocationPath.get(lhs));
+ // fieldLocTuple.add(fieldLoc);
NTuple<Descriptor> fldHeapPath = computePath(fld);
TempDescriptor rhs;
FieldDescriptor fld;
-
switch (fn.kind()) {
case FKind.FlatLiteralNode: {
}
-
if (lhs.getType().isPrimitive() && !lhs.getSymbol().startsWith("neverused")
&& !lhs.getSymbol().startsWith("srctmp") && !lhs.getSymbol().startsWith("leftop")
&& !lhs.getSymbol().startsWith("rightop")) {
-
NTuple<Descriptor> lhsHeapPath = computePath(lhs);
if (lhsLocTuple != null) {
fieldLocation = locTuple.get(locTuple.size() - 1);
}
+ NTuple<Location> fieldLocTuple = new NTuple<Location>();
+ if (fld.isStatic()) {
+ if (fld.isFinal()) {
+ // in this case, fld has TOP location
+ Location topLocation = Location.createTopLocation(md);
+ fieldLocTuple.add(topLocation);
+ } else {
+ fieldLocTuple.addAll(deriveGlobalLocationTuple(md));
+ fieldLocTuple.add((Location) fld.getType().getExtension());
+ }
+
+ } else {
+ fieldLocTuple.addAll(deriveLocationTuple(md, lhs));
+ fieldLocTuple.add((Location) fld.getType().getExtension());
+ }
+
NTuple<Location> lTuple = deriveLocationTuple(md, lhs);
if (lTuple != null) {
NTuple<Location> lhsLocTuple = new NTuple<Location>();
if (ssjava.isSharedLocation(fieldLocation)) {
addSharedLocDescriptor(fieldLocation, fld);
- NTuple<Location> locTuple = new NTuple<Location>();
- locTuple.addAll(deriveLocationTuple(md, lhs));
- locTuple.add(fieldLocation);
-
NTuple<Descriptor> fieldHeapPath = new NTuple<Descriptor>();
fieldHeapPath.addAll(computePath(lhs));
fieldHeapPath.add(fld);
// mapLocationPathToMayWrittenSet.put(locTuple, null, fld);
- addMayWrittenSet(md, locTuple, fieldHeapPath);
+ addMayWrittenSet(md, fieldLocTuple, fieldHeapPath);
}
fld = getArrayField(td);
}
- if (fld.isFinal()) {
- // if field is final no need to check
- break;
- }
-
NTuple<Location> locTuple = new NTuple<Location>();
- locTuple.addAll(deriveLocationTuple(md, rhs));
- locTuple.add((Location) fld.getType().getExtension());
+
+ if (fld.isStatic()) {
+
+ if (fld.isFinal()) {
+ // in this case, fld has TOP location
+ Location topLocation = Location.createTopLocation(md);
+ locTuple.add(topLocation);
+ } else {
+ locTuple.addAll(deriveGlobalLocationTuple(md));
+ locTuple.add((Location) fld.getType().getExtension());
+ }
+
+ } else {
+ locTuple.addAll(deriveLocationTuple(md, rhs));
+ locTuple.add((Location) fld.getType().getExtension());
+ }
mapDescriptorToLocationPath.put(lhs, locTuple);
NTuple<Descriptor> path = new NTuple<Descriptor>();
path.add(lhs);
-
Location lhsLoc = getLocation(lhs);
if (ssjava.isSharedLocation(lhsLoc)) {
writeHeapPath.addAll(heapPath);
writeHeapPath.add(lhs);
-
}
}
}
return locTuple;
}
+ private NTuple<Location> deriveGlobalLocationTuple(MethodDescriptor md) {
+ String globalLocIdentifier = ssjava.getMethodLattice(md).getGlobalLoc();
+ Location globalLoc = new Location(md, globalLocIdentifier);
+ NTuple<Location> locTuple = new NTuple<Location>();
+ locTuple.add(globalLoc);
+ return locTuple;
+ }
+
private NTuple<Location> deriveLocationTuple(MethodDescriptor md, TempDescriptor td) {
assert td.getType() != null;