public ProgramState PushWithConstraint() { var refEquals = new ReferenceEqualsSymbolicValue(this.valueLeft, this.valueRight); var newProgramState = this.programState.PushValue(refEquals); return(SetConstraint(refEquals, newProgramState)); }
private ProgramState SetConstraint(ReferenceEqualsSymbolicValue refEquals, ProgramState programState) { if (AreBothArgumentsNull()) { return(programState.SetConstraint(refEquals, BoolConstraint.True)); } if (IsAnyArgumentNonNullValueType() || ArgumentsHaveDifferentNullability()) { return(programState.SetConstraint(refEquals, BoolConstraint.False)); } if (this.valueLeft == this.valueRight) { return(programState.SetConstraint(refEquals, BoolConstraint.True)); } return(programState); }
private ProgramState HandleStringNullOrEmptyCheckMethod() { var newProgramState = this.programState .PopValue(out var arg) .PopValue(out var isNullOrEmptySpaceMethod); var refEquals = new ReferenceEqualsSymbolicValue(arg, isNullOrEmptySpaceMethod); newProgramState = newProgramState.PushValue(refEquals); if (newProgramState.HasConstraint(arg, ObjectConstraint.Null) || newProgramState.HasConstraint(arg, StringConstraint.EmptyString)) { newProgramState = newProgramState.SetConstraint(refEquals, BoolConstraint.True); } else if (newProgramState.HasConstraint(arg, StringConstraint.FullString) || newProgramState.HasConstraint(arg, StringConstraint.WhiteSpaceString) || newProgramState.HasConstraint(arg, StringConstraint.FullNotWhiteSpaceString)) { newProgramState = newProgramState.SetConstraint(refEquals, BoolConstraint.False); } return(newProgramState); }
private ProgramState HandleStringNullOrWhiteSpaceCheckMethod() { var newProgramState = this.programState .PopValue(out var arg) .PopValue(out var isNullOrWhiteSpaceMethod); var refEquals = new ReferenceEqualsSymbolicValue(arg, isNullOrWhiteSpaceMethod); newProgramState = newProgramState.PushValue(refEquals); if (newProgramState.HasConstraint(arg, ObjectConstraint.Null) || newProgramState.HasConstraint(arg, StringConstraint.EmptyString) || newProgramState.HasConstraint(arg, StringConstraint.WhiteSpaceString)) { newProgramState = newProgramState.SetConstraint(refEquals, BoolConstraint.True); } else if (newProgramState.HasConstraint(arg, StringConstraint.FullNotWhiteSpaceString)) { newProgramState = newProgramState.SetConstraint(refEquals, BoolConstraint.False); } // This is reached when we don't know the result of isNullOrWhiteSpaceMethod // for example when there is a FullOrNullString constraint return(newProgramState); }