示例#1
0
        public ProgramState SetConstraint(SymbolicValue symbolicValue, SymbolicValueConstraint constraint)
        {
            if (constraint == null)
            {
                return(this);
            }

            var updatedConstraintsMap = Constraints.AddConstraintForSymbolicValue(symbolicValue, constraint);

            updatedConstraintsMap = updatedConstraintsMap.AddConstraintTo <EqualsRelationship>(symbolicValue,
                                                                                               constraint, this);

            if (constraint is BoolConstraint)
            {
                updatedConstraintsMap = updatedConstraintsMap.AddConstraintTo <NotEqualsRelationship>(symbolicValue,
                                                                                                      constraint.OppositeForLogicalNot, this);
            }

            return(new ProgramState(
                       Values,
                       updatedConstraintsMap,
                       ProgramPointVisitCounts,
                       ExpressionStack,
                       Relationships));
        }