Skip to content

Commit 0803d75

Browse files
committed
offer ways to directly construct a Scalar from unsigned integers
1 parent 3836573 commit 0803d75

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

src/librustc/mir/interpret/value.rs

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,26 @@ impl<'tcx, Tag> Scalar<Tag> {
280280
Scalar::Raw { data: i, size: size.bytes() as u8 }
281281
}
282282

283+
#[inline]
284+
pub fn from_u8(i: u8) -> Self {
285+
Scalar::Raw { data: i as u128, size: 1 }
286+
}
287+
288+
#[inline]
289+
pub fn from_u16(i: u16) -> Self {
290+
Scalar::Raw { data: i as u128, size: 2 }
291+
}
292+
293+
#[inline]
294+
pub fn from_u32(i: u32) -> Self {
295+
Scalar::Raw { data: i as u128, size: 4 }
296+
}
297+
298+
#[inline]
299+
pub fn from_u64(i: u64) -> Self {
300+
Scalar::Raw { data: i as u128, size: 8 }
301+
}
302+
283303
#[inline]
284304
pub fn from_int(i: impl Into<i128>, size: Size) -> Self {
285305
let i = i.into();
@@ -294,12 +314,14 @@ impl<'tcx, Tag> Scalar<Tag> {
294314

295315
#[inline]
296316
pub fn from_f32(f: Single) -> Self {
297-
Scalar::Raw { data: f.to_bits() as u128, size: 4 }
317+
// We trust apfloat to give us properly truncated data
318+
Scalar::Raw { data: f.to_bits(), size: 4 }
298319
}
299320

300321
#[inline]
301322
pub fn from_f64(f: Double) -> Self {
302-
Scalar::Raw { data: f.to_bits() as u128, size: 8 }
323+
// We trust apfloat to give us properly truncated data
324+
Scalar::Raw { data: f.to_bits(), size: 8 }
303325
}
304326

305327
#[inline]

0 commit comments

Comments
 (0)