コード例 #1
0
        private IEnumerable <ProgramState> TrySetObjectConstraint(ObjectConstraint constraint,
                                                                  SymbolicValueConstraints oldConstraints, ProgramState programState)
        {
            if (oldConstraints.HasConstraint <BoolConstraint>())
            {
                if (constraint == ObjectConstraint.Null)
                {
                    return(Enumerable.Empty <ProgramState>());
                }

                return(new[] { programState });
            }

            var oldObjectConstraint = oldConstraints.GetConstraintOrDefault <ObjectConstraint>();

            if (oldObjectConstraint != null)
            {
                if (oldObjectConstraint != constraint)
                {
                    return(Enumerable.Empty <ProgramState>());
                }

                return(new[] { programState.SetConstraint(this, constraint) });
            }

            throw new NotSupportedException($"Neither {nameof(BoolConstraint)}, nor {nameof(ObjectConstraint)}");
        }
コード例 #2
0
 private void SetupObject(ObjectConstraint constraint)
 {
     AllowsCustomFields = false;
     IsCastable         = true;
     IsIndexable        = false;
     Fields             = null;
     Types = TypeHelper.GetDerivedTypes <Component>(true).ToList();
 }
コード例 #3
0
        private IEnumerable <ProgramState> UpdateObjectConstraint(StringConstraint constraint, ProgramState programState, ObjectConstraint oldObjectConstraint)
        {
            if (oldObjectConstraint == ObjectConstraint.Null)
            {
                if (constraint == StringConstraint.FullString || constraint == StringConstraint.EmptyString ||
                    constraint == StringConstraint.FullNotWhiteSpaceString || constraint == StringConstraint.WhiteSpaceString)
                {
                    return(Enumerable.Empty <ProgramState>());
                }
                return(new[] { programState });
            }
            else
            {
                if (constraint == StringConstraint.FullOrNullString)
                {
                    return(new[] { programState.SetConstraint(this, StringConstraint.FullString) });
                }

                if (constraint == StringConstraint.NotWhiteSpaceString)
                {
                    return(new[] { programState.SetConstraint(this, StringConstraint.FullNotWhiteSpaceString) });
                }

                return(new[] { programState.SetConstraint(this, constraint) });
            }
        }