public Pair<List<ProgramState>, List<ProgramState>> assumeDual(ProgramState programState) { ProgramState.Pop unstack = programState.unstackValue(1); SymbolicValue sv = unstack.values.get(0); List<ProgramState> falseConstraint = sv.setConstraint(unstack.state, BooleanConstraint.FALSE); List<ProgramState> trueConstraint = sv.setConstraint(unstack.state, BooleanConstraint.TRUE); return new Pair<>(falseConstraint, trueConstraint); }
private static ObjectConstraint openedConstraint( ProgramState programState, SymbolicValue value) { final Object constraint = programState.getConstraint(value.wrappedValue()); if (constraint instanceof ObjectConstraint) { ObjectConstraint oConstraint = (ObjectConstraint) constraint; if (oConstraint.hasStatus(Status.OPENED)) { return oConstraint; } } return null; }
private static ProgramState closeResource( ProgramState programState, @Nullable final SymbolicValue target) { if (target != null) { ObjectConstraint oConstraint = openedConstraint(programState, target); if (oConstraint != null) { return programState.addConstraint( target.wrappedValue(), oConstraint.withStatus(Status.CLOSED)); } } return programState; }
public boolean isNull(ProgramState ps, SymbolicValue val) { Object constraint = ps.getConstraint(val); return constraint instanceof ObjectConstraint && ((ObjectConstraint) constraint).isNull(); }