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

            value.setStorage(getStorage());
            return(value);
        }
Пример #2
0
        /// <inheritdoc />
        public override void VisitAnyArrayValue(AnyArrayValue value)
        {
            switch (operation)
            {
            case Operations.Mod:
                result = ModuloOperation.AbstractModulo(flow);
                break;

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

                if (ArithmeticOperation.IsArithmetic(operation))
                {
                    // TODO: This must be fatal error
                    SetWarning("Unsupported operand type: Arithmetic of array and scalar type");
                    result = OutSet.AnyValue;
                    break;
                }

                base.VisitAnyArrayValue(value);
                break;
            }
        }
Пример #3
0
        /// <inheritdoc />
        public override void VisitAnyArrayValue(AnyArrayValue value)
        {
            result = Comparison.RightAlwaysGreater(OutSet, operation);
            if (result != null)
            {
                return;
            }

            base.VisitAnyArrayValue(value);
        }
Пример #4
0
        /// <inheritdoc />
        public override void VisitAnyArrayValue(AnyArrayValue value)
        {
            result = Comparison.AbstractCompare(OutSet, operation);
            if (result != null)
            {
                return;
            }

            base.VisitAnyArrayValue(value);
        }
Пример #5
0
        /// <inheritdoc />
        public override void VisitAnyArrayValue(AnyArrayValue value)
        {
            switch (operation)
            {
            case Operations.Plus:
                // TODO: This must be fatal error
                SetWarning("Unsupported operand types: Unary plus of array");
                result = OutSet.AnyValue;
                break;

            case Operations.Minus:
                // TODO: This must be fatal error
                SetWarning("Unsupported operand types: Unary minus of array");
                result = OutSet.AnyValue;
                break;

            case Operations.LogicNegation:
                result = OutSet.AnyBooleanValue;
                break;

            case Operations.Int32Cast:
                result = OutSet.AnyIntegerValue;
                break;

            case Operations.FloatCast:
            case Operations.DoubleCast:
                result = OutSet.AnyFloatValue;
                break;

            case Operations.Print:
                // The operator convert value to string and print it. The string value is not used
                // to resolve the entire expression. Instead, the false value is returned.
                // TODO: This is a quest for tainted analysis
                result = OutSet.CreateBool(false);
                break;

            case Operations.Clone:
                // TODO: This must be fatal error
                SetWarning("__clone method called on non-object");
                result = OutSet.AnyValue;
                break;

            case Operations.ObjectCast:
                result = OutSet.AnyObjectValue;
                break;

            case Operations.ArrayCast:
                result = value;
                break;

            default:
                base.VisitAnyArrayValue(value);
                break;
            }
        }
Пример #6
0
        /// <inheritdoc />
        public override void VisitAnyArrayValue(AnyArrayValue value)
        {
            result = LogicalOperation.AbstractLogical(OutSet, operation,
                                                      TypeConversion.ToBoolean(leftOperand.Value));
            if (result != null)
            {
                return;
            }

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

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

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

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

                result = LogicalOperation.AbstractLogical(OutSet, operation,
                                                          TypeConversion.ToBoolean(leftOperand));
                if (result != null)
                {
                    break;
                }

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

                if (ArithmeticOperation.IsArithmetic(operation))
                {
                    // TODO: This must be fatal error
                    SetWarning("Unsupported operand type: Arithmetic of array and object type");
                    result = OutSet.AnyValue;
                    break;
                }

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

            result = LogicalOperation.AbstractLogical(OutSet, operation, leftOperand.Value);
            if (result != null)
            {
                return;
            }

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

            case Operations.BitAnd:
            case Operations.ShiftLeft:
            case Operations.ShiftRight:
                result = OutSet.CreateInt(0);
                break;

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

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

            default:
                if (ArithmeticOperation.IsArithmetic(operation))
                {
                    // TODO: This must be fatal error
                    SetWarning("Unsupported operand type: Arithmetic of array and null type");
                    result = OutSet.AnyValue;
                    break;
                }

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

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

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

                result = LogicalOperation.AbstractLogical(OutSet, operation,
                                                          TypeConversion.ToNativeBoolean(Snapshot, leftOperand));
                if (result != null)
                {
                    break;
                }

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

                base.VisitAnyArrayValue(value);
                break;
            }
        }
Пример #11
0
        /// <inheritdoc />
        public override void VisitAnyArrayValue(AnyArrayValue value)
        {
            switch (operation)
            {
            case Operations.Mod:
                // Ommitted warning message that object cannot be converted to integer
                result = ModuloOperation.AbstractModulo(flow);
                break;

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

                result = BitwiseOperation.Bitwise(OutSet, operation);
                if (result != null)
                {
                    // Ommitted warning message that object cannot be converted to integer
                    break;
                }

                if (ArithmeticOperation.IsArithmetic(operation))
                {
                    // Ommitted warning message that object cannot be converted to integer
                    // TODO: This must be fatal error
                    SetWarning("Unsupported operand type: Arithmetic of array and other type");
                    result = OutSet.AnyValue;
                    break;
                }

                base.VisitAnyArrayValue(value);
                break;
            }
        }
Пример #12
0
 public override void VisitAnyArrayValue(AnyArrayValue value)
 {
     ContainsAnyValue = true;
     locations.Add(new ArrayAnyValueLocation(containingIndex, index, value));
 }
Пример #13
0
 /// <inheritdoc />
 public override void VisitAnyArrayValue(AnyArrayValue value)
 {
     result = "Array";
 }
Пример #14
0
 public override void VisitAnyArrayValue(AnyArrayValue value)
 {
     this.AddLocation(new ArrayAnyValueLocation(null, index, value));
 }
Пример #15
0
 /// <inheritdoc />
 public override void VisitAnyArrayValue(AnyArrayValue value)
 {
     anyArrayVisitor.SetLeftOperand(value);
     visitor = anyArrayVisitor;
 }
Пример #16
0
 /// <inheritdoc />
 public override void VisitAnyArrayValue(AnyArrayValue value)
 {
     result         = TypeConversion.ToString(OutSet, value);
     abstractResult = null;
 }