mirror of
https://github.com/servo/servo.git
synced 2025-06-11 01:50:10 +00:00
Add assertions to LayoutDataRef accessors.
This commit is contained in:
parent
ebd0a62eec
commit
a217ffb00a
1 changed files with 8 additions and 3 deletions
|
@ -53,6 +53,7 @@ use script_traits::UntrustedNodeAddress;
|
||||||
use util::geometry::Au;
|
use util::geometry::Au;
|
||||||
use util::namespace;
|
use util::namespace;
|
||||||
use util::str::DOMString;
|
use util::str::DOMString;
|
||||||
|
use util::task_state;
|
||||||
use selectors::parser::{Selector, AttrSelector, NamespaceConstraint};
|
use selectors::parser::{Selector, AttrSelector, NamespaceConstraint};
|
||||||
use selectors::parser::parse_author_origin_selector_list_from_str;
|
use selectors::parser::parse_author_origin_selector_list_from_str;
|
||||||
use selectors::matching::matches;
|
use selectors::matching::matches;
|
||||||
|
@ -222,7 +223,7 @@ pub struct LayoutData {
|
||||||
unsafe impl Send for LayoutData {}
|
unsafe impl Send for LayoutData {}
|
||||||
|
|
||||||
pub struct LayoutDataRef {
|
pub struct LayoutDataRef {
|
||||||
pub data_cell: RefCell<Option<LayoutData>>,
|
data_cell: RefCell<Option<LayoutData>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
no_jsmanaged_fields!(LayoutDataRef);
|
no_jsmanaged_fields!(LayoutDataRef);
|
||||||
|
@ -236,7 +237,8 @@ impl LayoutDataRef {
|
||||||
|
|
||||||
/// Sends layout data, if any, back to the layout task to be destroyed.
|
/// Sends layout data, if any, back to the layout task to be destroyed.
|
||||||
pub fn dispose(&self) {
|
pub fn dispose(&self) {
|
||||||
if let Some(mut layout_data) = mem::replace(&mut *self.borrow_mut(), None) {
|
debug_assert!(task_state::get().is_script());
|
||||||
|
if let Some(mut layout_data) = mem::replace(&mut *self.data_cell.borrow_mut(), None) {
|
||||||
let layout_chan = layout_data.chan.take();
|
let layout_chan = layout_data.chan.take();
|
||||||
match layout_chan {
|
match layout_chan {
|
||||||
None => {}
|
None => {}
|
||||||
|
@ -248,18 +250,20 @@ impl LayoutDataRef {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Borrows the layout data immutably, *asserting that there are no mutators*. Bad things will
|
/// Borrows the layout data immutably, *assuming that there are no mutators*. Bad things will
|
||||||
/// happen if you try to mutate the layout data while this is held. This is the only thread-
|
/// happen if you try to mutate the layout data while this is held. This is the only thread-
|
||||||
/// safe layout data accessor.
|
/// safe layout data accessor.
|
||||||
#[inline]
|
#[inline]
|
||||||
#[allow(unsafe_code)]
|
#[allow(unsafe_code)]
|
||||||
pub unsafe fn borrow_unchecked(&self) -> *const Option<LayoutData> {
|
pub unsafe fn borrow_unchecked(&self) -> *const Option<LayoutData> {
|
||||||
|
debug_assert!(task_state::get().is_layout());
|
||||||
self.data_cell.as_unsafe_cell().get() as *const _
|
self.data_cell.as_unsafe_cell().get() as *const _
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Borrows the layout data immutably. This function is *not* thread-safe.
|
/// Borrows the layout data immutably. This function is *not* thread-safe.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn borrow<'a>(&'a self) -> Ref<'a,Option<LayoutData>> {
|
pub fn borrow<'a>(&'a self) -> Ref<'a,Option<LayoutData>> {
|
||||||
|
debug_assert!(task_state::get().is_layout());
|
||||||
self.data_cell.borrow()
|
self.data_cell.borrow()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -270,6 +274,7 @@ impl LayoutDataRef {
|
||||||
/// on it. This has already resulted in one bug!
|
/// on it. This has already resulted in one bug!
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn borrow_mut<'a>(&'a self) -> RefMut<'a,Option<LayoutData>> {
|
pub fn borrow_mut<'a>(&'a self) -> RefMut<'a,Option<LayoutData>> {
|
||||||
|
debug_assert!(task_state::get().is_layout());
|
||||||
self.data_cell.borrow_mut()
|
self.data_cell.borrow_mut()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue