Пример #1
0
 /// <inheritdoc />
 public override void VisitLongintValue(LongintValue value)
 {
     if (isIncrement)
     {
         if (value.Value < long.MaxValue)
         {
             result = OutSet.CreateLong(value.Value + 1);
         }
         else
         {
             result = OutSet.CreateDouble(TypeConversion.ToFloat(value.Value) + 1.0);
         }
     }
     else
     {
         if (value.Value > long.MinValue)
         {
             result = OutSet.CreateLong(value.Value - 1);
         }
         else
         {
             result = OutSet.CreateDouble(TypeConversion.ToFloat(value.Value) - 1.0);
         }
     }
 }
Пример #2
0
        /// <inheritdoc />
        public override void VisitIntervalLongintValue(LongintIntervalValue value)
        {
            if (value.Start == value.End)
            {
                VisitLongintValue(OutSet.CreateLong(value.Start));
                return;
            }

            switch (operation)
            {
            case Operations.Minus:
                // Result of arithmetic negation can overflow
                if ((value.Start == 0) || ((-value.Start) != 0))
                {
                    result = OutSet.CreateLongintInterval(-value.End, -value.Start);
                }
                else
                {
                    // <seealso cref="UnaryOperationEvaluator.VisitIntegerValue" />
                    result = OutSet.CreateFloatInterval(-TypeConversion.ToFloat(value.End),
                                                        -TypeConversion.ToFloat(value.Start));
                }
                break;

            case Operations.BitNegation:
                result = OutSet.CreateLongintInterval(~value.End, ~value.Start);
                break;

            case Operations.Int32Cast:
                IntervalValue <int> integerInterval;
                if (TypeConversion.TryConvertToIntegerInterval(OutSet, value, out integerInterval))
                {
                    result = integerInterval;
                }
                else
                {
                    result = OutSet.AnyIntegerValue;
                }
                break;

            case Operations.FloatCast:
            case Operations.DoubleCast:
                result = OutSet.CreateFloatInterval(TypeConversion.ToFloat(value.Start),
                                                    TypeConversion.ToFloat(value.End));
                break;

            default:
                base.VisitIntervalLongintValue(value);
                break;
            }
        }
Пример #3
0
        /// <inheritdoc />
        public override void VisitLongintValue(LongintValue value)
        {
            switch (operation)
            {
            case Operations.Plus:
                result = value;
                break;

            case Operations.Minus:
                // Result of arithmetic negation can overflow
                if ((value.Value == 0) || ((-value.Value) != 0))
                {
                    result = OutSet.CreateLong(-value.Value);
                }
                else
                {
                    // <seealso cref="UnaryOperationEvaluator.VisitIntegerValue" />
                    result = OutSet.CreateDouble(-(TypeConversion.ToFloat(value.Value)));
                }
                break;

            case Operations.BitNegation:
                result = OutSet.CreateLong(~value.Value);
                break;

            case Operations.Int32Cast:
                IntegerValue convertedValue;
                if (TypeConversion.TryConvertToInteger(OutSet, value, out convertedValue))
                {
                    result = convertedValue;
                }
                else
                {
                    result = OutSet.AnyIntegerValue;
                }
                break;

            case Operations.FloatCast:
            case Operations.DoubleCast:
                result = TypeConversion.ToFloat(Snapshot, value);
                break;

            default:
                base.VisitLongintValue(value);
                break;
            }
        }
Пример #4
0
 /// <summary>
 /// Create long integer representation of given literal
 /// </summary>
 /// <param name="x">Literal value</param>
 /// <returns>Created literal value representation</returns>
 public virtual MemoryEntry LongIntLiteral(LongIntLiteral x)
 {
     return(new MemoryEntry(OutSet.CreateLong((long)x.Value)));
 }