mirror of
https://codeberg.org/icewind/bitbuffer.git
synced 2026-06-04 00:54:07 +02:00
prevent generated code from triggering unsafe_op_in_unsafe_fn in 2024 edition
wrap the usage of "unchecked" methods in unsafe blocks
This commit is contained in:
parent
5a4c1e6950
commit
1c05418784
2 changed files with 15 additions and 3 deletions
|
|
@ -35,6 +35,12 @@ pub fn derive_encode_enum(params: &EnumParam, unchecked: bool) -> TokenStream {
|
|||
}
|
||||
});
|
||||
|
||||
let r#unsafe = if unchecked {
|
||||
quote_spanned!(span => unsafe)
|
||||
} else {
|
||||
quote_spanned!(span =>)
|
||||
};
|
||||
|
||||
let read_fn = Ident::new(
|
||||
if unchecked {
|
||||
"read_int_unchecked"
|
||||
|
|
@ -58,7 +64,7 @@ pub fn derive_encode_enum(params: &EnumParam, unchecked: bool) -> TokenStream {
|
|||
|
||||
quote_spanned! {span =>
|
||||
#[allow(clippy::unnecessary_cast)]
|
||||
let discriminant:#repr = __stream.#read_fn(#discriminant_bits as usize, #end_param)#error_handle;
|
||||
let discriminant:#repr = #r#unsafe { __stream.#read_fn(#discriminant_bits as usize, #end_param)#error_handle };
|
||||
match discriminant {
|
||||
#(#match_arms)*
|
||||
_ => {
|
||||
|
|
|
|||
|
|
@ -14,6 +14,12 @@ pub fn read_struct_or_enum(
|
|||
let align = &f.align;
|
||||
let field_type = &f.ty;
|
||||
let span = f.span();
|
||||
let r#unsafe = if unchecked {
|
||||
quote_spanned!(span => unsafe)
|
||||
} else {
|
||||
quote_spanned!(span =>)
|
||||
};
|
||||
|
||||
let read_fn = Ident::new(if unchecked { "read_unchecked" } else { "read" }, span);
|
||||
let read_sized_fn = Ident::new(
|
||||
if unchecked {
|
||||
|
|
@ -31,7 +37,7 @@ pub fn read_struct_or_enum(
|
|||
match &f.size {
|
||||
Some(size) => {
|
||||
quote_spanned! { span =>
|
||||
{
|
||||
#r#unsafe {
|
||||
#align
|
||||
let _size: usize = #size;
|
||||
__stream.#read_sized_fn::<#field_type>(_size, #end_param)?
|
||||
|
|
@ -40,7 +46,7 @@ pub fn read_struct_or_enum(
|
|||
}
|
||||
None => {
|
||||
quote_spanned! { span =>
|
||||
{
|
||||
#r#unsafe {
|
||||
#align
|
||||
__stream.#read_fn::<#field_type>(#end_param)?
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue