Пример #1
0
        /// <inheritdoc />
        protected override Value cloneValue()
        {
            AnyBooleanValue value = new AnyBooleanValue();

            value.setStorage(getStorage());
            return(value);
        }
Пример #2
0
        /// <inheritdoc />
        public override void VisitAnyBooleanValue(AnyBooleanValue value)
        {
            switch (operation)
            {
            case Operations.Plus:
                result = OutSet.CreateIntegerInterval(0, 1);
                break;

            case Operations.Minus:
                result = OutSet.CreateIntegerInterval(-1, 0);
                break;

            case Operations.LogicNegation:
                result = value;
                break;

            case Operations.BitNegation:
                // TODO: This must be fatal error
                SetWarning("Unsupported operand types: Bit negation of boolean value");
                result = OutSet.AnyValue;
                break;

            default:
                base.VisitAnyBooleanValue(value);
                break;
            }
        }
Пример #3
0
        /// <inheritdoc />
        public override void VisitAnyBooleanValue(AnyBooleanValue value)
        {
            switch (operation)
            {
            case Operations.Mod:
                SetWarning("Object cannot be converted to integer by modulo operation",
                           AnalysisWarningCause.OBJECT_CONVERTED_TO_INTEGER);
                result = ModuloOperation.ModuloByAnyBooleanValue(flow);
                break;

            default:
                result = Comparison.RightAbstractBooleanCompare(OutSet, operation,
                                                                TypeConversion.ToBoolean(leftOperand));
                if (result != null)
                {
                    break;
                }

                result = ArithmeticOperation.RightAbstractBooleanArithmetic(flow, operation);
                if (result != null)
                {
                    SetWarning("Object cannot be converted to integer by arithmetic operation",
                               AnalysisWarningCause.OBJECT_CONVERTED_TO_INTEGER);
                    break;
                }

                base.VisitAnyBooleanValue(value);
                break;
            }
        }
Пример #4
0
        /// <inheritdoc />
        public override void VisitAnyBooleanValue(AnyBooleanValue value)
        {
            switch (operation)
            {
            case Operations.Identical:
                result = OutSet.CreateBool(false);
                break;

            case Operations.NotIdentical:
                result = OutSet.CreateBool(true);
                break;

            case Operations.Mod:
                result = ModuloOperation.ModuloByAnyBooleanValue(flow);
                break;

            default:
                result = Comparison.RightAbstractBooleanCompare(OutSet, operation, leftOperand);
                if (result != null)
                {
                    break;
                }

                base.VisitAnyBooleanValue(value);
                break;
            }
        }
Пример #5
0
        /// <inheritdoc />
        public override void VisitAnyBooleanValue(AnyBooleanValue value)
        {
            switch (operation)
            {
            case Operations.Mod:
                result = ModuloOperation.ModuloByAnyBooleanValue(flow);
                break;

            default:
                result = Comparison.RightAbstractBooleanCompare(OutSet, operation,
                                                                TypeConversion.ToBoolean(leftOperand));
                if (result != null)
                {
                    break;
                }

                result = ArithmeticOperation.RightAbstractBooleanArithmetic(flow, operation);
                if (result != null)
                {
                    break;
                }

                base.VisitAnyBooleanValue(value);
                break;
            }
        }
Пример #6
0
        /// <inheritdoc />
        public override void VisitAnyBooleanValue(AnyBooleanValue value)
        {
            result = ArithmeticOperation.RightAbstractBooleanArithmetic(flow, operation, leftOperand);
            if (result != null)
            {
                return;
            }

            base.VisitAnyBooleanValue(value);
        }
Пример #7
0
        /// <inheritdoc />
        public override void VisitAnyBooleanValue(AnyBooleanValue value)
        {
            switch (operation)
            {
            case Operations.Mod:
                result = ModuloOperation.ModuloByAnyBooleanValue(flow);
                break;

            default:
                base.VisitAnyBooleanValue(value);
                break;
            }
        }
Пример #8
0
        /// <inheritdoc />
        public override void VisitAnyBooleanValue(AnyBooleanValue value)
        {
            switch (operation)
            {
            case Operations.Mod:
                // Ommitted warnings messages that objects cannot be converted to integers
                result = ModuloOperation.ModuloByAnyBooleanValue(flow);
                break;

            default:
                base.VisitAnyBooleanValue(value);
                break;
            }
        }
Пример #9
0
        /// <inheritdoc />
        public override void VisitAnyBooleanValue(AnyBooleanValue value)
        {
            switch (operation)
            {
            case Operations.Identical:
                result = OutSet.CreateBool(false);
                break;

            case Operations.NotIdentical:
                result = OutSet.CreateBool(true);
                break;

            default:
                base.VisitAnyBooleanValue(value);
                break;
            }
        }
Пример #10
0
        /// <inheritdoc />
        public override void VisitAnyBooleanValue(AnyBooleanValue value)
        {
            switch (operation)
            {
            case Operations.Equal:
            case Operations.NotEqual:
            case Operations.GreaterThanOrEqual:
            case Operations.LessThan:
            case Operations.Or:
            case Operations.Xor:
                result = value;
                break;

            case Operations.Add:
            case Operations.BitOr:
            case Operations.BitXor:
                result = TypeConversion.AnyBooleanToIntegerInterval(OutSet);
                break;

            case Operations.Sub:
                var booleanInterval = TypeConversion.AnyBooleanToIntegerInterval(OutSet);
                result = OutSet.CreateIntegerInterval(-booleanInterval.End, -booleanInterval.Start);
                break;

            case Operations.Mul:
                result = OutSet.CreateInt(0);
                break;

            case Operations.Div:
                SetWarning("Possible division by zero (converted from boolean false)",
                           AnalysisWarningCause.DIVISION_BY_ZERO);

                // Division or modulo by false returns false boolean value
                result = OutSet.AnyValue;
                break;

            case Operations.Mod:
                result = ModuloOperation.ModuloByAnyBooleanValue(flow);
                break;

            default:
                base.VisitAnyBooleanValue(value);
                break;
            }
        }
Пример #11
0
        /// <inheritdoc />
        public override void VisitAnyBooleanValue(AnyBooleanValue value)
        {
            switch (operation)
            {
            case Operations.Identical:
                result = OutSet.CreateBool(false);
                break;

            case Operations.NotIdentical:
                result = OutSet.CreateBool(true);
                break;

            default:
                result = Comparison.RightAbstractBooleanCompare(OutSet, operation,
                                                                TypeConversion.ToBoolean(leftOperand.Value));
                if (result != null)
                {
                    break;
                }

                result = BitwiseOperation.Bitwise(OutSet, operation);
                if (result != null)
                {
                    break;
                }

                int    integerValue;
                double floatValue;
                bool   isInteger;
                TypeConversion.TryConvertToNumber(leftOperand.Value, true,
                                                  out integerValue, out floatValue, out isInteger);

                result = isInteger
                        ? ArithmeticOperation.RightAbstractBooleanArithmetic(flow, operation, integerValue)
                        : ArithmeticOperation.RightAbstractBooleanArithmetic(flow, operation, floatValue);

                if (result != null)
                {
                    break;
                }

                base.VisitAnyBooleanValue(value);
                break;
            }
        }
Пример #12
0
        /// <inheritdoc />
        public override void VisitAnyBooleanValue(AnyBooleanValue value)
        {
            result = Comparison.RightAbstractBooleanCompare(OutSet, operation,
                                                            TypeConversion.ToBoolean(leftOperand.Value));
            if (result != null)
            {
                return;
            }

            result = ArithmeticOperation.RightAbstractBooleanArithmetic(flow,
                                                                        operation, leftOperand.Value);
            if (result != null)
            {
                return;
            }

            base.VisitAnyBooleanValue(value);
        }
Пример #13
0
        /// <inheritdoc />
        public override void VisitAnyBooleanValue(AnyBooleanValue value)
        {
            switch (operation)
            {
            case Operations.Mod:
                result = ModuloOperation.ModuloByAnyBooleanValue(flow);
                break;

            default:
                result = Comparison.AbstractCompare(OutSet, operation);
                if (result != null)
                {
                    break;
                }

                base.VisitAnyBooleanValue(value);
                break;
            }
        }
Пример #14
0
        /// <inheritdoc />
        public override void VisitAnyBooleanValue(AnyBooleanValue value)
        {
            switch (operation)
            {
            case Operations.Identical:
            case Operations.NotIdentical:
                result = OutSet.AnyBooleanValue;
                break;

            default:
                result = ArithmeticOperation.RightAbstractBooleanArithmetic(flow,
                                                                            operation, TypeConversion.ToInteger(leftOperand.Value));
                if (result != null)
                {
                    break;
                }

                base.VisitAnyBooleanValue(value);
                break;
            }
        }
Пример #15
0
        /// <inheritdoc />
        public override void VisitAnyBooleanValue(AnyBooleanValue value)
        {
            switch (operation)
            {
            case Operations.Identical:
                result = OutSet.CreateBool(false);
                break;

            case Operations.NotIdentical:
                result = OutSet.CreateBool(true);
                break;

            default:
                result = Comparison.AbstractCompare(OutSet, operation);
                if (result != null)
                {
                    break;
                }

                base.VisitAnyBooleanValue(value);
                break;
            }
        }
Пример #16
0
 /// <inheritdoc />
 public override void VisitAnyBooleanValue(AnyBooleanValue value)
 {
     result         = null;
     abstractResult = OutSet.AnyStringValue;
 }
Пример #17
0
        /// <inheritdoc />
        public override void VisitAnyBooleanValue(AnyBooleanValue value)
        {
            isNotConvertibleToInteger = false;

            base.VisitAnyBooleanValue(value);
        }
Пример #18
0
 /// <inheritdoc />
 public override void VisitAnyBooleanValue(AnyBooleanValue value)
 {
     booleans.Add(value);
 }
Пример #19
0
 /// <inheritdoc />
 public override void VisitAnyBooleanValue(AnyBooleanValue value)
 {
     booleanFound();
 }
Пример #20
0
 /// <inheritdoc />
 public override void VisitAnyBooleanValue(AnyBooleanValue value)
 {
     anyBooleanVisitor.SetLeftOperand(value);
     visitor = anyBooleanVisitor;
 }
Пример #21
0
 /// <inheritdoc />
 public override void VisitAnyBooleanValue(AnyBooleanValue value)
 {
     result = value;
 }