mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
Make RootedVec/RootCollection #[no_move]; improve code (fixes #5737)
This commit is contained in:
parent
dcb0a0eab6
commit
369a568264
7 changed files with 8 additions and 8 deletions
|
@ -577,6 +577,7 @@ impl<T: Assignable<U>, U: Reflectable> TemporaryPushable<T> for Vec<JS<U>> {
|
||||||
///
|
///
|
||||||
/// See also [*Exact Stack Rooting - Storing a GCPointer on the CStack*]
|
/// See also [*Exact Stack Rooting - Storing a GCPointer on the CStack*]
|
||||||
/// (https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Internals/GC/Exact_Stack_Rooting).
|
/// (https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Internals/GC/Exact_Stack_Rooting).
|
||||||
|
#[no_move]
|
||||||
pub struct RootCollection {
|
pub struct RootCollection {
|
||||||
roots: UnsafeCell<RootedVec<*mut JSObject>>,
|
roots: UnsafeCell<RootedVec<*mut JSObject>>,
|
||||||
}
|
}
|
||||||
|
|
|
@ -401,6 +401,7 @@ impl VecRootableType for *mut JSObject {
|
||||||
/// A vector of items that are rooted for the lifetime
|
/// A vector of items that are rooted for the lifetime
|
||||||
/// of this struct
|
/// of this struct
|
||||||
#[allow(unrooted_must_root)]
|
#[allow(unrooted_must_root)]
|
||||||
|
#[no_move]
|
||||||
pub struct RootedVec<T> {
|
pub struct RootedVec<T> {
|
||||||
v: Vec<T>
|
v: Vec<T>
|
||||||
}
|
}
|
||||||
|
|
|
@ -728,7 +728,7 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> {
|
||||||
fn get_attributes(self, local_name: &Atom, attributes: &mut RootedVec<JS<Attr>>) {
|
fn get_attributes(self, local_name: &Atom, attributes: &mut RootedVec<JS<Attr>>) {
|
||||||
// FIXME(https://github.com/rust-lang/rust/issues/23338)
|
// FIXME(https://github.com/rust-lang/rust/issues/23338)
|
||||||
let attrs = self.attrs.borrow();
|
let attrs = self.attrs.borrow();
|
||||||
for attr in attrs.iter().map(|attr| attr.root()) {
|
for ref attr in attrs.iter().map(|attr| attr.root()) {
|
||||||
// FIXME(https://github.com/rust-lang/rust/issues/23338)
|
// FIXME(https://github.com/rust-lang/rust/issues/23338)
|
||||||
let attr = attr.r();
|
let attr = attr.r();
|
||||||
let attr_local_name = attr.local_name();
|
let attr_local_name = attr.local_name();
|
||||||
|
|
|
@ -841,7 +841,7 @@ impl<'a> Activatable for JSRef<'a, HTMLInputElement> {
|
||||||
.find(|r| r.r().form_owner() == owner);
|
.find(|r| r.r().form_owner() == owner);
|
||||||
}
|
}
|
||||||
match submit_button {
|
match submit_button {
|
||||||
Some(button) => {
|
Some(ref button) => {
|
||||||
if button.r().is_instance_activatable() {
|
if button.r().is_instance_activatable() {
|
||||||
button.r().synthetic_click_activation(ctrlKey, shiftKey, altKey, metaKey)
|
button.r().synthetic_click_activation(ctrlKey, shiftKey, altKey, metaKey)
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ use dom::bindings::codegen::Bindings::HTMLLinkElementBinding::HTMLLinkElementMet
|
||||||
use dom::bindings::codegen::InheritTypes::HTMLLinkElementDerived;
|
use dom::bindings::codegen::InheritTypes::HTMLLinkElementDerived;
|
||||||
use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLElementCast, NodeCast};
|
use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLElementCast, NodeCast};
|
||||||
use dom::bindings::js::{JS, JSRef, MutNullableHeap, Temporary};
|
use dom::bindings::js::{JS, JSRef, MutNullableHeap, Temporary};
|
||||||
use dom::bindings::js::OptionalRootable;
|
use dom::bindings::js::{OptionalRootable, RootedReference};
|
||||||
use dom::document::Document;
|
use dom::document::Document;
|
||||||
use dom::domtokenlist::DOMTokenList;
|
use dom::domtokenlist::DOMTokenList;
|
||||||
use dom::element::{AttributeHandlers, Element};
|
use dom::element::{AttributeHandlers, Element};
|
||||||
|
@ -60,9 +60,7 @@ impl HTMLLinkElement {
|
||||||
|
|
||||||
fn get_attr(element: JSRef<Element>, local_name: &Atom) -> Option<String> {
|
fn get_attr(element: JSRef<Element>, local_name: &Atom) -> Option<String> {
|
||||||
let elem = element.get_attribute(&ns!(""), local_name).root();
|
let elem = element.get_attribute(&ns!(""), local_name).root();
|
||||||
elem.as_ref().map(|e| {
|
elem.r().map(|e| {
|
||||||
// FIXME(https://github.com/rust-lang/rust/issues/23338)
|
|
||||||
let e = e.r();
|
|
||||||
let value = e.value();
|
let value = e.value();
|
||||||
(**value).to_owned()
|
(**value).to_owned()
|
||||||
})
|
})
|
||||||
|
|
|
@ -298,7 +298,7 @@ impl<'a> PrivateNodeHelpers for JSRef<'a, Node> {
|
||||||
}
|
}
|
||||||
|
|
||||||
let parent = self.parent_node().root();
|
let parent = self.parent_node().root();
|
||||||
parent.as_ref().map(|parent| vtable_for(&parent.r()).child_inserted(self));
|
parent.r().map(|parent| vtable_for(&parent).child_inserted(self));
|
||||||
document.r().content_and_heritage_changed(self, NodeDamage::OtherNodeDamage);
|
document.r().content_and_heritage_changed(self, NodeDamage::OtherNodeDamage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -937,7 +937,7 @@ impl ScriptTask {
|
||||||
self.find_iframe(doc.r(), old_subpage_id)
|
self.find_iframe(doc.r(), old_subpage_id)
|
||||||
}).root();
|
}).root();
|
||||||
|
|
||||||
frame_element.as_ref().unwrap().r().update_subpage_id(new_subpage_id);
|
frame_element.r().unwrap().update_subpage_id(new_subpage_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Handles a notification that reflow completed.
|
/// Handles a notification that reflow completed.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue