public static Abstraction getZeroAbstraction(boolean flowSensitiveAliasing) { Abstraction zeroValue = new Abstraction(AccessPath.getZeroAccessPath(), null, false, false); Abstraction.flowSensitiveAliasing = flowSensitiveAliasing; return zeroValue; }
@Override public Abstraction clone() { Abstraction abs = new Abstraction(accessPath, this); abs.predecessor = this; abs.neighbors = null; abs.currentStmt = null; abs.correspondingCallSite = null; abs.propagationPathLength = propagationPathLength + 1; assert abs.equals(this); return abs; }
protected Abstraction deriveNewAbstractionMutable(AccessPath p, Stmt currentStmt) { // An abstraction needs an access path if (p == null) return null; if (this.accessPath.equals(p) && this.currentStmt == currentStmt) { Abstraction abs = clone(); abs.currentStmt = currentStmt; return abs; } Abstraction abs = new Abstraction(p, this); abs.predecessor = this; abs.currentStmt = currentStmt; abs.propagationPathLength = propagationPathLength + 1; if (!abs.getAccessPath().isEmpty()) abs.postdominators = null; if (!abs.isAbstractionActive()) abs.dependsOnCutAP = abs.dependsOnCutAP || p.isCutOffApproximation(); abs.sourceContext = null; return abs; }
for (AccessPath ap : sourceInfo.getAccessPaths()) { Abstraction abs = new Abstraction(sourceInfo.getDefinition(), ap, stmt, sourceInfo.getUserData(), false, false); res.add(abs);
Abstraction abs = new Abstraction(null, ap, null, null, false, false);