public boolean canReach(SymbolicValue symbolicValue) { return isReachable(symbolicValue, references); }
public boolean canReach(SymbolicValue symbolicValue) { return isReachable(symbolicValue, references); }
public boolean canReach(SymbolicValue symbolicValue) { return isReachable(symbolicValue, references); }
public ProgramState cleanupConstraints() { PMap<SymbolicValue, Constraint> newConstraints = constraints; PMap<SymbolicValue, Integer> newReferences = references; boolean newProgramState = false; for (Iterator<Map.Entry<SymbolicValue, Constraint>> iter = newConstraints.entriesIterator(); iter.hasNext();) { Map.Entry<SymbolicValue, Constraint> next = iter.next(); SymbolicValue symbolicValue = next.getKey(); if (!isReachable(symbolicValue, newReferences) && isDisposable(symbolicValue, next.getValue()) && !inStack(stack, symbolicValue)) { if (!newProgramState) { newProgramState = true; } newConstraints = newConstraints.remove(symbolicValue); newReferences = newReferences.remove(symbolicValue); } } return newProgramState ? new ProgramState(values, newReferences, newConstraints, visitedPoints, stack) : this; }
public ProgramState cleanupDeadSymbols(Set<Symbol> liveVariables) { PMap<Symbol, SymbolicValue> newValues = values; PMap<SymbolicValue, Integer> newReferences = references; PMap<SymbolicValue, Constraint> newConstraints = constraints; boolean newProgramState = false; for (Iterator<Map.Entry<Symbol, SymbolicValue>> iter = newValues.entriesIterator(); iter.hasNext();) { Map.Entry<Symbol, SymbolicValue> next = iter.next(); Symbol symbol = next.getKey(); if (isLocalVariable(symbol) && !liveVariables.contains(symbol)) { if (!newProgramState) { newProgramState = true; } SymbolicValue symbolicValue = next.getValue(); newValues = newValues.remove(symbol); newReferences = decreaseReference(newReferences, symbolicValue); if (!isReachable(symbolicValue, newReferences) && isDisposable(symbolicValue, newConstraints.get(symbolicValue)) && !inStack(stack, symbolicValue)) { newConstraints = newConstraints.remove(symbolicValue); newReferences = newReferences.remove(symbolicValue); } } } return newProgramState ? new ProgramState(newValues, newReferences, newConstraints, visitedPoints, stack) : this; }