/// <inheritdoc /> public override void VisitBooleanValue(BooleanValue value) { switch (operation) { case Operations.Mod: // Ommitted warning message that object cannot be converted to integer result = ModuloOperation.ModuloByBooleanValue(flow, value.Value); break; default: result = Comparison.LeftAbstractBooleanCompare(OutSet, operation, value.Value); if (result != null) { break; } result = LogicalOperation.AbstractLogical(OutSet, operation, value.Value); if (result != null) { break; } base.VisitBooleanValue(value); break; } }
/// <inheritdoc /> public override void VisitBooleanValue(BooleanValue value) { switch (operation) { case Operations.Mod: result = ModuloOperation.ModuloByBooleanValue(flow, value.Value); break; default: result = Comparison.LeftAbstractBooleanCompare(OutSet, operation, value.Value); if (result != null) { break; } result = LogicalOperation.AbstractLogical(OutSet, operation, value.Value); if (result != null) { break; } base.VisitBooleanValue(value); break; } }
/// <inheritdoc /> public override void VisitBooleanValue(BooleanValue value) { switch (operation) { case Operations.Identical: result = OutSet.CreateBool(false); break; case Operations.NotIdentical: result = OutSet.CreateBool(true); break; case Operations.Mod: result = ModuloOperation.ModuloByBooleanValue(flow, value.Value); break; default: result = Comparison.IntervalCompare(OutSet, operation, leftOperand, value.Value); if (result != null) { break; } result = LogicalOperation.Logical(OutSet, operation, leftOperand, value.Value); if (result != null) { break; } base.VisitBooleanValue(value); break; } }
/// <inheritdoc /> public override void VisitBooleanValue(BooleanValue value) { switch (operation) { case Operations.Mod: result = ModuloOperation.ModuloByBooleanValue(flow, value.Value); break; default: var leftBoolean = TypeConversion.ToNativeBoolean(Snapshot, leftOperand); result = Comparison.Compare(OutSet, operation, leftBoolean, value.Value); if (result != null) { break; } result = LogicalOperation.Logical(OutSet, operation, leftBoolean, value.Value); if (result != null) { break; } result = BitwiseOperation.Bitwise(OutSet, operation, TypeConversion.ToNativeInteger(Snapshot, leftOperand), TypeConversion.ToInteger(value.Value)); if (result != null) { break; } base.VisitBooleanValue(value); break; } }
/// <inheritdoc /> public override void VisitBooleanValue(BooleanValue value) { switch (operation) { case Operations.Mod: result = ModuloOperation.ModuloByBooleanValue(flow, value.Value); break; default: var leftBoolean = TypeConversion.ToBoolean(leftOperand); result = Comparison.Compare(OutSet, operation, leftBoolean, value.Value); if (result != null) { break; } result = ArithmeticOperation.LeftAbstractArithmetic(flow, operation, TypeConversion.ToInteger(value.Value)); if (result != null) { break; } result = LogicalOperation.Logical(OutSet, operation, leftBoolean, value.Value); if (result != null) { break; } base.VisitBooleanValue(value); break; } }
/// <inheritdoc /> public override void VisitBooleanValue(BooleanValue value) { switch (operation) { case Operations.Mod: result = ModuloOperation.ModuloByBooleanValue(flow, value.Value); break; default: base.VisitBooleanValue(value); break; } }
/// <inheritdoc /> public override void VisitBooleanValue(BooleanValue value) { switch (operation) { case Operations.Mod: SetWarning("Object cannot be converted to integer by modulo operation", AnalysisWarningCause.OBJECT_CONVERTED_TO_INTEGER); result = ModuloOperation.ModuloByBooleanValue(flow, value.Value); break; default: var leftBoolean = TypeConversion.ToBoolean(leftOperand); result = Comparison.Compare(OutSet, operation, leftBoolean, value.Value); if (result != null) { break; } result = ArithmeticOperation.LeftAbstractArithmetic(flow, operation, TypeConversion.ToInteger(value.Value)); if (result != null) { SetWarning("Object cannot be converted to integer by arithmetic operation", AnalysisWarningCause.OBJECT_CONVERTED_TO_INTEGER); break; } result = LogicalOperation.Logical(OutSet, operation, leftBoolean, value.Value); if (result != null) { break; } base.VisitBooleanValue(value); break; } }
/// <inheritdoc /> public override void VisitBooleanValue(BooleanValue value) { switch (operation) { case Operations.GreaterThan: result = OutSet.CreateBool(false); break; case Operations.LessThanOrEqual: result = OutSet.CreateBool(true); break; case Operations.Equal: case Operations.GreaterThanOrEqual: result = OutSet.CreateBool(!value.Value); break; case Operations.NotEqual: case Operations.LessThan: case Operations.Or: case Operations.Xor: result = value; break; case Operations.Add: case Operations.BitOr: case Operations.BitXor: result = TypeConversion.ToInteger(OutSet, value); break; case Operations.Sub: result = OutSet.CreateInt(-TypeConversion.ToInteger(value.Value)); break; case Operations.Mul: result = OutSet.CreateInt(0); break; case Operations.Div: if (value.Value) { // Division of 0 (null) by non-null is always 0 result = OutSet.CreateInt(0); } else { SetWarning("Division by zero (converted from boolean false)", AnalysisWarningCause.DIVISION_BY_ZERO); // Division or modulo by false returns false boolean value result = OutSet.CreateBool(false); } break; case Operations.Mod: result = ModuloOperation.ModuloByBooleanValue(flow, value.Value); break; default: base.VisitBooleanValue(value); break; } }