1
0
Fork 0
mirror of https://codeberg.org/icewind/bitbuffer.git synced 2026-06-03 16:44:06 +02:00

Merge pull request #11 from DCNick3/2024-edition

fix `unsafe_op_in_unsafe_fn` in generated code on 2024 edition
This commit is contained in:
Robin Appelman 2025-02-23 22:20:23 +01:00 committed by GitHub
commit 0b781fa64a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 15 additions and 3 deletions

View file

@ -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( let read_fn = Ident::new(
if unchecked { if unchecked {
"read_int_unchecked" "read_int_unchecked"
@ -58,7 +64,7 @@ pub fn derive_encode_enum(params: &EnumParam, unchecked: bool) -> TokenStream {
quote_spanned! {span => quote_spanned! {span =>
#[allow(clippy::unnecessary_cast)] #[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 discriminant {
#(#match_arms)* #(#match_arms)*
_ => { _ => {

View file

@ -14,6 +14,12 @@ pub fn read_struct_or_enum(
let align = &f.align; let align = &f.align;
let field_type = &f.ty; let field_type = &f.ty;
let span = f.span(); 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_fn = Ident::new(if unchecked { "read_unchecked" } else { "read" }, span);
let read_sized_fn = Ident::new( let read_sized_fn = Ident::new(
if unchecked { if unchecked {
@ -31,7 +37,7 @@ pub fn read_struct_or_enum(
match &f.size { match &f.size {
Some(size) => { Some(size) => {
quote_spanned! { span => quote_spanned! { span =>
{ #r#unsafe {
#align #align
let _size: usize = #size; let _size: usize = #size;
__stream.#read_sized_fn::<#field_type>(_size, #end_param)? __stream.#read_sized_fn::<#field_type>(_size, #end_param)?
@ -40,7 +46,7 @@ pub fn read_struct_or_enum(
} }
None => { None => {
quote_spanned! { span => quote_spanned! { span =>
{ #r#unsafe {
#align #align
__stream.#read_fn::<#field_type>(#end_param)? __stream.#read_fn::<#field_type>(#end_param)?
} }