mirror of
https://github.com/servo/servo.git
synced 2025-07-30 10:40:27 +01:00
style: Use MaybeUninit in style struct clone impls / constructors.
Differential Revision: https://phabricator.services.mozilla.com/D51788
This commit is contained in:
parent
c04a37982c
commit
c28ca7b405
1 changed files with 14 additions and 8 deletions
|
@ -46,7 +46,7 @@ use crate::rule_tree::StrongRuleNode;
|
|||
use crate::selector_parser::PseudoElement;
|
||||
use servo_arc::{Arc, RawOffsetArc, UniqueArc};
|
||||
use std::marker::PhantomData;
|
||||
use std::mem::{forget, zeroed, ManuallyDrop};
|
||||
use std::mem::{forget, MaybeUninit};
|
||||
use std::{cmp, ops, ptr};
|
||||
use crate::values::{self, CustomIdent, Either, KeyframesName, None_};
|
||||
use crate::values::computed::{Percentage, TransitionProperty};
|
||||
|
@ -218,7 +218,7 @@ impl ComputedValuesInner {
|
|||
unsafe {
|
||||
let mut arc = UniqueArc::<ComputedValues>::new_uninit();
|
||||
bindings::Gecko_ComputedStyle_Init(
|
||||
&mut (*arc.as_mut_ptr()).0,
|
||||
arc.as_mut_ptr() as *mut _,
|
||||
&self,
|
||||
pseudo_ty,
|
||||
);
|
||||
|
@ -621,14 +621,17 @@ def set_gecko_property(ffi_name, expr):
|
|||
impl ${style_struct.gecko_struct_name} {
|
||||
#[allow(dead_code, unused_variables)]
|
||||
pub fn default(document: &structs::Document) -> Arc<Self> {
|
||||
let mut result = Arc::new(${style_struct.gecko_struct_name} { gecko: ManuallyDrop::new(unsafe { zeroed() }) });
|
||||
unsafe {
|
||||
let mut result = UniqueArc::<Self>::new_uninit();
|
||||
// FIXME(bug 1595895): Zero the memory to keep valgrind happy, but
|
||||
// these looks like Valgrind false-positives at a quick glance.
|
||||
ptr::write_bytes::<Self>(result.as_mut_ptr(), 0, 1);
|
||||
Gecko_Construct_Default_${style_struct.gecko_ffi_name}(
|
||||
&mut *Arc::get_mut(&mut result).unwrap().gecko,
|
||||
result.as_mut_ptr() as *mut _,
|
||||
document,
|
||||
);
|
||||
UniqueArc::assume_init(result).shareable()
|
||||
}
|
||||
result
|
||||
}
|
||||
}
|
||||
impl Drop for ${style_struct.gecko_struct_name} {
|
||||
|
@ -641,9 +644,12 @@ impl Drop for ${style_struct.gecko_struct_name} {
|
|||
impl Clone for ${style_struct.gecko_struct_name} {
|
||||
fn clone(&self) -> Self {
|
||||
unsafe {
|
||||
let mut result = ${style_struct.gecko_struct_name} { gecko: ManuallyDrop::new(zeroed()) };
|
||||
Gecko_CopyConstruct_${style_struct.gecko_ffi_name}(&mut *result.gecko, &*self.gecko);
|
||||
result
|
||||
let mut result = MaybeUninit::<Self>::uninit();
|
||||
// FIXME(bug 1595895): Zero the memory to keep valgrind happy, but
|
||||
// these looks like Valgrind false-positives at a quick glance.
|
||||
ptr::write_bytes::<Self>(result.as_mut_ptr(), 0, 1);
|
||||
Gecko_CopyConstruct_${style_struct.gecko_ffi_name}(result.as_mut_ptr() as *mut _, &*self.gecko);
|
||||
result.assume_init()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue