/// <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); } } }
/// <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; } }
/// <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; } }
/// <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))); }