summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSergey Pepyakin <s.pepyakin@gmail.com>2017-10-10 15:39:06 +0300
committerSergey Pepyakin <s.pepyakin@gmail.com>2017-10-10 22:58:33 +0300
commitcb7495d2b318d0986229e53c04a2e975f9ec8f15 (patch)
treee3aa0fdb9d13ba32d66b78e0496814dc7f193bf7 /src
parent5dbdadc5cc1d15e23d804b4d0ce80cae90338ef7 (diff)
Emit hex bitfield masks
Diffstat (limited to 'src')
-rw-r--r--src/codegen/helpers.rs7
-rw-r--r--src/codegen/mod.rs4
2 files changed, 9 insertions, 2 deletions
diff --git a/src/codegen/helpers.rs b/src/codegen/helpers.rs
index 9a8b0576..4ff398c4 100644
--- a/src/codegen/helpers.rs
+++ b/src/codegen/helpers.rs
@@ -143,6 +143,13 @@ pub mod ast_ty {
tokens
}
+ /// Returns hex representation of the given value.
+ pub fn hex_expr(val: u64) -> quote::Tokens {
+ let mut tokens = quote! {};
+ tokens.append(format!("{:#x}", val));
+ tokens
+ }
+
pub fn byte_array_expr(bytes: &[u8]) -> quote::Tokens {
let mut bytes: Vec<_> = bytes.iter().cloned().collect();
bytes.push(0);
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs
index 94a62b97..baffae17 100644
--- a/src/codegen/mod.rs
+++ b/src/codegen/mod.rs
@@ -1121,7 +1121,7 @@ impl Bitfield {
let bitfield_int_ty = helpers::blob(bitfield_ty_layout);
let offset = self.offset_into_unit();
- let mask = self.mask();
+ let mask = helpers::ast_ty::hex_expr(self.mask());
// Don't use variables or blocks because const functions do not allow
// them.
@@ -1304,7 +1304,7 @@ impl<'a> FieldCodegen<'a> for Bitfield {
bitfield_ty.to_rust_ty_or_opaque(ctx, bitfield_ty_item);
let offset = self.offset_into_unit();
- let mask = self.mask();
+ let mask = helpers::ast_ty::hex_expr(self.mask());
methods.extend(Some(quote! {
#[inline]