mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-27 05:49:08 +00:00
Replace usages of ManuallyDrop::take with ::into_inner
This commit is contained in:
parent
0ca0da85cf
commit
1ad59c6c45
1 changed files with 29 additions and 6 deletions
|
@ -640,8 +640,14 @@ pub struct {name} {{
|
|||
owned_get_payload = format!(
|
||||
r#"{{
|
||||
let ptr = (self.pointer as usize & !{bitmask}) as *mut {union_name};
|
||||
let mut uninitialized = core::mem::MaybeUninit::uninit();
|
||||
let swapped = core::mem::replace(
|
||||
&mut (*ptr).{tag_name},
|
||||
core::mem::ManuallyDrop::new(uninitialized.assume_init()),
|
||||
);
|
||||
core::mem::forget(self);
|
||||
|
||||
core::mem::ManuallyDrop::take(&mut (*ptr).{tag_name})
|
||||
core::mem::ManuallyDrop::into_inner(swapped)
|
||||
}}"#
|
||||
);
|
||||
borrowed_get_payload = format!(
|
||||
|
@ -674,8 +680,18 @@ pub struct {name} {{
|
|||
}
|
||||
Recursiveness::NonRecursive => {
|
||||
if cannot_derive_copy(payload_type, types) {
|
||||
owned_get_payload =
|
||||
format!("core::mem::ManuallyDrop::take(&mut self.{tag_name})");
|
||||
owned_get_payload = format!(
|
||||
r#"{{
|
||||
let mut uninitialized = core::mem::MaybeUninit::uninit();
|
||||
let swapped = core::mem::replace(
|
||||
&mut self.{tag_name},
|
||||
core::mem::ManuallyDrop::new(uninitialized.assume_init()),
|
||||
);
|
||||
core::mem::forget(self);
|
||||
|
||||
core::mem::ManuallyDrop::into_inner(swapped)
|
||||
}}"#
|
||||
);
|
||||
borrowed_get_payload = format!("&self.{tag_name}");
|
||||
// we need `mut self` for the argument because of ManuallyDrop
|
||||
self_for_into = "mut self";
|
||||
|
@ -1599,7 +1615,16 @@ pub struct {name} {{
|
|||
|
||||
{
|
||||
let assign_payload = if cannot_derive_copy {
|
||||
"core::mem::ManuallyDrop::take(&mut *self.pointer)"
|
||||
r#"{{
|
||||
let mut uninitialized = core::mem::MaybeUninit::uninit();
|
||||
let swapped = core::mem::replace(
|
||||
&mut *self.pointer,
|
||||
core::mem::ManuallyDrop::new(uninitialized.assume_init()),
|
||||
);
|
||||
core::mem::forget(self);
|
||||
|
||||
core::mem::ManuallyDrop::into_inner(swapped)
|
||||
}}"#
|
||||
} else {
|
||||
"*self.pointer"
|
||||
};
|
||||
|
@ -1617,8 +1642,6 @@ pub struct {name} {{
|
|||
|
||||
let payload = {assign_payload};
|
||||
|
||||
core::mem::drop::<Self>(self);
|
||||
|
||||
{owned_ret}
|
||||
}}"#,
|
||||
),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue