From 0803d75eb6083111504e9bae4fa6baf9104928fe Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Sat, 8 Jun 2019 23:53:10 +0200 Subject: [PATCH] offer ways to directly construct a Scalar from unsigned integers --- src/librustc/mir/interpret/value.rs | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/librustc/mir/interpret/value.rs b/src/librustc/mir/interpret/value.rs index 1909f3cb998b..8d4d61764833 100644 --- a/src/librustc/mir/interpret/value.rs +++ b/src/librustc/mir/interpret/value.rs @@ -280,6 +280,26 @@ impl<'tcx, Tag> Scalar { Scalar::Raw { data: i, size: size.bytes() as u8 } } + #[inline] + pub fn from_u8(i: u8) -> Self { + Scalar::Raw { data: i as u128, size: 1 } + } + + #[inline] + pub fn from_u16(i: u16) -> Self { + Scalar::Raw { data: i as u128, size: 2 } + } + + #[inline] + pub fn from_u32(i: u32) -> Self { + Scalar::Raw { data: i as u128, size: 4 } + } + + #[inline] + pub fn from_u64(i: u64) -> Self { + Scalar::Raw { data: i as u128, size: 8 } + } + #[inline] pub fn from_int(i: impl Into, size: Size) -> Self { let i = i.into(); @@ -294,12 +314,14 @@ impl<'tcx, Tag> Scalar { #[inline] pub fn from_f32(f: Single) -> Self { - Scalar::Raw { data: f.to_bits() as u128, size: 4 } + // We trust apfloat to give us properly truncated data + Scalar::Raw { data: f.to_bits(), size: 4 } } #[inline] pub fn from_f64(f: Double) -> Self { - Scalar::Raw { data: f.to_bits() as u128, size: 8 } + // We trust apfloat to give us properly truncated data + Scalar::Raw { data: f.to_bits(), size: 8 } } #[inline]