1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

checker: restrict numeric promotions to cases where no data is lost

This commit is contained in:
Uwe Krüger
2020-05-27 05:42:48 +02:00
committed by GitHub
parent fc67046bac
commit 013fdb8a4b
81 changed files with 510 additions and 247 deletions

View File

@@ -59,7 +59,7 @@ const(
const(
mantbits32 = u32(23)
expbits32 = u32(8)
bias32 = u32(127) // f32 exponent bias
bias32 = 127 // f32 exponent bias
maxexp32 = 255
)
@@ -189,10 +189,10 @@ pub fn f32_to_decimal(mant u32, exp u32) Dec32 {
if exp == 0 {
// We subtract 2 so that the bounds computation has
// 2 additional bits.
e2 = 1 - bias32 - mantbits32 - 2
e2 = 1 - bias32 - int(mantbits32) - 2
m2 = mant
} else {
e2 = int(exp) - bias32 - mantbits32 - 2
e2 = int(exp) - bias32 - int(mantbits32) - 2
m2 = (u32(1) << mantbits32) | mant
}
even := (m2 & 1) == 0

View File

@@ -73,7 +73,7 @@ const(
const(
mantbits64 = u32(52)
expbits64 = u32(11)
bias64 = u32(1023) // f64 exponent bias
bias64 = 1023 // f64 exponent bias
maxexp64 = 2047
)
@@ -220,10 +220,10 @@ fn f64_to_decimal(mant u64, exp u64) Dec64 {
if exp == 0 {
// We subtract 2 so that the bounds computation has
// 2 additional bits.
e2 = 1 - bias64 - mantbits64 - 2
e2 = 1 - bias64 - int(mantbits64) - 2
m2 = mant
} else {
e2 = int(exp) - bias64 - mantbits64 - 2
e2 = int(exp) - bias64 - int(mantbits64) - 2
m2 = (u64(1)<<mantbits64) | mant
}
even := (m2 & 1) == 0