internal static ProgramState SetConstraintOnValueEquals(ValueEqualsSymbolicValue equals, ProgramState programState) { if (equals.LeftOperand == equals.RightOperand) { return(programState.SetConstraint(equals, BoolConstraint.True)); } return(programState); }
private static ProgramState VisitValueEquals(ProgramState programState) { var newProgramState = programState .PopValue(out var rightSymbol) .PopValue(out var leftSymbol); var equals = new ValueEqualsSymbolicValue(leftSymbol, rightSymbol); newProgramState = newProgramState.PushValue(equals); return(InvocationVisitor.SetConstraintOnValueEquals(equals, newProgramState)); }
private ProgramState HandleStaticEqualsCall() { var newProgramState = this.programState .PopValue(out var arg1) .PopValue(out var arg2) .PopValue(); var equals = new ValueEqualsSymbolicValue(arg1, arg2); newProgramState = newProgramState.PushValue(equals); return(SetConstraintOnValueEquals(equals, newProgramState)); }
private ProgramState HandleInstanceEqualsCall() { var newProgramState = this.programState .PopValue(out var arg1) .PopValue(out var expression); var arg2 = expression is MemberAccessSymbolicValue memberAccess ? memberAccess.MemberExpression : SymbolicValue.This; var equals = new ValueEqualsSymbolicValue(arg1, arg2); newProgramState = newProgramState.PushValue(equals); return(SetConstraintOnValueEquals(equals, newProgramState)); }
private ProgramState HandleInstanceEqualsCall() { SymbolicValue arg1; SymbolicValue expression; var newProgramState = programState .PopValue(out arg1) .PopValue(out expression); var memberAccess = expression as MemberAccessSymbolicValue; SymbolicValue arg2 = memberAccess != null ? memberAccess.MemberExpression : SymbolicValue.This; var equals = new ValueEqualsSymbolicValue(arg1, arg2); newProgramState = newProgramState.PushValue(equals); return(SetConstraintOnValueEquals(equals, newProgramState)); }