コード例 #1
0
 /// <inheritdoc />
 public override void VisitAnyScalarValue(AnyScalarValue value)
 {
     // Skip <see cref="AnyValue" />. The type is super-type of <see cref="AnyScalarValue" />,
     // but it is concrete type and its visit method can contain code that is solving the same
     // problem as the previous visit methods. In this case, use additional method with shared code.
     VisitValue(value);
 }
コード例 #2
0
        /// <inheritdoc />
        public override void VisitAnyScalarValue(AnyScalarValue value)
        {
            result = Comparison.AbstractCompare(OutSet, operation);
            if (result != null)
            {
                // Ommitted warning message that object cannot be converted to integer
                return;
            }

            result = ArithmeticOperation.AbstractFloatArithmetic(Snapshot, operation);
            if (result != null)
            {
                // Ommitted warning message that object cannot be converted to integer
                // Ommitted error report that array is unsupported operand in arithmetic operation
                return;
            }

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

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

            base.VisitAnyScalarValue(value);
        }
コード例 #3
0
        /// <inheritdoc />
        public override void VisitAnyScalarValue(AnyScalarValue value)
        {
            switch (operation)
            {
            case Operations.Identical:
                result = OutSet.CreateBool(false);
                break;

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

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

                result = BitwiseOperation.Bitwise(OutSet, operation);
                if (result != null)
                {
                    SetWarning("Object cannot be converted to integer by bitwise operation",
                               AnalysisWarningCause.OBJECT_CONVERTED_TO_INTEGER);
                    break;
                }

                base.VisitAnyScalarValue(value);
                break;
            }
        }
コード例 #4
0
        /// <inheritdoc />
        public override void VisitAnyScalarValue(AnyScalarValue value)
        {
            switch (operation)
            {
            case Operations.Identical:
                result = OutSet.CreateBool(false);
                break;

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

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

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

                base.VisitAnyScalarValue(value);
                break;
            }
        }
コード例 #5
0
        /// <inheritdoc />
        public override void VisitAnyScalarValue(AnyScalarValue value)
        {
            isConcrete = false;

            integerIndex    = null;
            stringIndex     = null;
            isCompoundValue = false;
        }
コード例 #6
0
        /// <inheritdoc />
        public override void VisitAnyScalarValue(AnyScalarValue value)
        {
            result = BitwiseOperation.Bitwise(OutSet, operation);
            if (result != null)
            {
                return;
            }

            base.VisitAnyScalarValue(value);
        }
コード例 #7
0
        /// <inheritdoc />
        public override void VisitAnyScalarValue(AnyScalarValue value)
        {
            result = ArithmeticOperation.AbstractFloatArithmetic(Snapshot, operation);
            if (result != null)
            {
                return;
            }

            base.VisitAnyScalarValue(value);
        }
コード例 #8
0
        /// <inheritdoc />
        public override void VisitAnyScalarValue(AnyScalarValue value)
        {
            result = LogicalOperation.AbstractLogical(OutSet, operation);
            if (result != null)
            {
                return;
            }

            base.VisitAnyScalarValue(value);
        }
コード例 #9
0
        /// <inheritdoc />
        public override void VisitAnyScalarValue(AnyScalarValue value)
        {
            result = LogicalOperation.AbstractLogical(OutSet, operation,
                                                      TypeConversion.ToBoolean(leftOperand.Value));
            if (result != null)
            {
                return;
            }

            base.VisitAnyScalarValue(value);
        }
コード例 #10
0
        /// <inheritdoc />
        public override void VisitAnyScalarValue(AnyScalarValue value)
        {
            switch (operation)
            {
            case Operations.BitAnd:
            case Operations.ShiftLeft:
            case Operations.ShiftRight:
                result = OutSet.CreateInt(0);
                break;

            default:
                if (PerformCommonAnyOperandOperations())
                {
                    break;
                }

                base.VisitAnyScalarValue(value);
                break;
            }
        }
コード例 #11
0
        /// <inheritdoc />
        public override void VisitAnyScalarValue(AnyScalarValue value)
        {
            result = Comparison.RightAbstractBooleanCompare(OutSet, operation, leftOperand.Value);
            if (result != null)
            {
                return;
            }

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

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

            base.VisitAnyScalarValue(value);
        }
コード例 #12
0
        /// <inheritdoc />
        public override void VisitAnyScalarValue(AnyScalarValue value)
        {
            switch (operation)
            {
            case Operations.Int32Cast:
                result = OutSet.AnyIntegerValue;
                break;

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

            default:
                if (PerformUsualOperation(value))
                {
                    // AnyValue has its own implementation, thou must be skipped
                    break;
                }

                base.VisitAnyScalarValue(value);
                break;
            }
        }
コード例 #13
0
 /// <inheritdoc />
 public override void VisitAnyScalarValue(AnyScalarValue value)
 {
     result = null;
 }