summaryrefslogtreecommitdiffstats
path: root/vendor/zerovec/src/flexzerovec/databake.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-18 02:49:42 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-18 02:49:42 +0000
commit837b550238aa671a591ccf282dddeab29cadb206 (patch)
tree914b6b8862bace72bd3245ca184d374b08d8a672 /vendor/zerovec/src/flexzerovec/databake.rs
parentAdding debian version 1.70.0+dfsg2-1. (diff)
downloadrustc-837b550238aa671a591ccf282dddeab29cadb206.tar.xz
rustc-837b550238aa671a591ccf282dddeab29cadb206.zip
Merging upstream version 1.71.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/zerovec/src/flexzerovec/databake.rs')
-rw-r--r--vendor/zerovec/src/flexzerovec/databake.rs41
1 files changed, 29 insertions, 12 deletions
diff --git a/vendor/zerovec/src/flexzerovec/databake.rs b/vendor/zerovec/src/flexzerovec/databake.rs
index 23bf156ef..4ce5f7dea 100644
--- a/vendor/zerovec/src/flexzerovec/databake.rs
+++ b/vendor/zerovec/src/flexzerovec/databake.rs
@@ -8,16 +8,24 @@ use databake::*;
impl Bake for FlexZeroVec<'_> {
fn bake(&self, env: &CrateEnv) -> TokenStream {
env.insert("zerovec");
- let bytes = self.as_bytes();
- quote! { unsafe { ::zerovec::vecs::FlexZeroSlice::from_byte_slice_unchecked(&[#(#bytes),*]).as_flexzerovec() } }
+ if self.is_empty() {
+ quote! { ::zerovec::vecs::FlexZeroVec::new() }
+ } else {
+ let slice = self.as_ref().bake(env);
+ quote! { #slice.as_flexzerovec() }
+ }
}
}
impl Bake for &FlexZeroSlice {
fn bake(&self, env: &CrateEnv) -> TokenStream {
env.insert("zerovec");
- let bytes = self.as_bytes();
- quote! { unsafe { ::zerovec::vecs::FlexZeroSlice::from_byte_slice_unchecked(&[#(#bytes),*]) } }
+ if self.is_empty() {
+ quote! { ::zerovec::vecs::FlexZeroSlice::new_empty() }
+ } else {
+ let bytes = databake::Bake::bake(&self.as_bytes(), env);
+ quote! { unsafe { ::zerovec::vecs::FlexZeroSlice::from_byte_slice_unchecked(#bytes) } }
+ }
}
}
@@ -25,12 +33,16 @@ impl Bake for &FlexZeroSlice {
fn test_baked_vec() {
test_bake!(
FlexZeroVec,
+ const: crate::vecs::FlexZeroVec::new(),
+ zerovec
+ );
+ test_bake!(
+ FlexZeroVec,
const: unsafe {
- crate::vecs::FlexZeroSlice::from_byte_slice_unchecked(&[
- 2u8, 1u8, 0u8, 22u8, 0u8, 77u8, 1u8, 92u8, 17u8,
- ])
- .as_flexzerovec()
- },
+ crate::vecs::FlexZeroSlice::from_byte_slice_unchecked(
+ b"\x02\x01\0\x16\0M\x01\x11"
+ )
+ }.as_flexzerovec(),
zerovec
);
}
@@ -39,10 +51,15 @@ fn test_baked_vec() {
fn test_baked_slice() {
test_bake!(
&FlexZeroSlice,
+ const: crate::vecs::FlexZeroSlice::new_empty(),
+ zerovec
+ );
+ test_bake!(
+ &FlexZeroSlice,
const: unsafe {
- crate::vecs::FlexZeroSlice::from_byte_slice_unchecked(&[
- 2u8, 1u8, 0u8, 22u8, 0u8, 77u8, 1u8, 92u8, 17u8,
- ])
+ crate::vecs::FlexZeroSlice::from_byte_slice_unchecked(
+ b"\x02\x01\0\x16\0M\x01\x11"
+ )
},
zerovec
);