Simplify RootedReference and make it specifically about slicesIt's now called DomSlice<T>.

This commit is contained in:
Anthony Ramine 2019-03-10 18:37:14 +01:00
parent 1744a42dad
commit 4d527b20ee
6 changed files with 20 additions and 15 deletions

View file

@ -5899,7 +5899,7 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries
'crate::dom::bindings::root::Dom', 'crate::dom::bindings::root::Dom',
'crate::dom::bindings::root::DomRoot', 'crate::dom::bindings::root::DomRoot',
'crate::dom::bindings::root::OptionalHeapSetter', 'crate::dom::bindings::root::OptionalHeapSetter',
'crate::dom::bindings::root::RootedReference', 'crate::dom::bindings::root::DomSlice',
'crate::dom::bindings::utils::AsVoidPtr', 'crate::dom::bindings::utils::AsVoidPtr',
'crate::dom::bindings::utils::DOMClass', 'crate::dom::bindings::utils::DOMClass',
'crate::dom::bindings::utils::DOMJSClass', 'crate::dom::bindings::utils::DOMJSClass',

View file

@ -256,18 +256,23 @@ pub unsafe fn trace_roots(tracer: *mut JSTracer) {
}); });
} }
/// Get a reference out of a rooted value. /// Get a slice of references to DOM objects.
pub trait RootedReference<'root> { pub trait DomSlice<T>
/// The type of the reference. where
type Ref: 'root; T: JSTraceable + DomObject,
/// Obtain a reference out of the rooted value. {
fn r(&'root self) -> Self::Ref; /// Returns the slice of `T` references.
fn r(&self) -> &[&T];
} }
impl<'root, T: JSTraceable + DomObject + 'root> RootedReference<'root> for [Dom<T>] { impl<T> DomSlice<T> for [Dom<T>]
type Ref = &'root [&'root T]; where
fn r(&'root self) -> &'root [&'root T] { T: JSTraceable + DomObject,
unsafe { mem::transmute(self) } {
#[inline]
fn r(&self) -> &[&T] {
let _ = mem::transmute::<Dom<T>, &T>;
unsafe { &*(self as *const [Dom<T>] as *const [&T]) }
} }
} }

View file

@ -29,7 +29,7 @@ use crate::dom::bindings::inheritance::{Castable, ElementTypeId, HTMLElementType
use crate::dom::bindings::num::Finite; use crate::dom::bindings::num::Finite;
use crate::dom::bindings::refcounted::{Trusted, TrustedPromise}; use crate::dom::bindings::refcounted::{Trusted, TrustedPromise};
use crate::dom::bindings::reflector::{reflect_dom_object, DomObject}; use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot, LayoutDom, MutNullableDom, RootedReference}; use crate::dom::bindings::root::{Dom, DomRoot, DomSlice, LayoutDom, MutNullableDom};
use crate::dom::bindings::str::{DOMString, USVString}; use crate::dom::bindings::str::{DOMString, USVString};
use crate::dom::bindings::xmlname::XMLName::InvalidXMLName; use crate::dom::bindings::xmlname::XMLName::InvalidXMLName;
use crate::dom::bindings::xmlname::{ use crate::dom::bindings::xmlname::{

View file

@ -10,7 +10,7 @@ use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable; use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::refcounted::Trusted; use crate::dom::bindings::refcounted::Trusted;
use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector}; use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
use crate::dom::bindings::root::{DomRoot, MutNullableDom, RootedReference}; use crate::dom::bindings::root::{DomRoot, DomSlice, MutNullableDom};
use crate::dom::bindings::str::DOMString; use crate::dom::bindings::str::DOMString;
use crate::dom::document::Document; use crate::dom::document::Document;
use crate::dom::eventtarget::{CompiledEventListener, EventTarget, ListenerPhase}; use crate::dom::eventtarget::{CompiledEventListener, EventTarget, ListenerPhase};

View file

@ -5,7 +5,7 @@
use crate::dom::bindings::codegen::Bindings::GamepadButtonListBinding; use crate::dom::bindings::codegen::Bindings::GamepadButtonListBinding;
use crate::dom::bindings::codegen::Bindings::GamepadButtonListBinding::GamepadButtonListMethods; use crate::dom::bindings::codegen::Bindings::GamepadButtonListBinding::GamepadButtonListMethods;
use crate::dom::bindings::reflector::{reflect_dom_object, Reflector}; use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
use crate::dom::bindings::root::{Dom, DomRoot, RootedReference}; use crate::dom::bindings::root::{Dom, DomRoot, DomSlice};
use crate::dom::gamepadbutton::GamepadButton; use crate::dom::gamepadbutton::GamepadButton;
use crate::dom::globalscope::GlobalScope; use crate::dom::globalscope::GlobalScope;
use dom_struct::dom_struct; use dom_struct::dom_struct;

View file

@ -21,7 +21,7 @@ use crate::dom::bindings::inheritance::{Castable, CharacterDataTypeId, ElementTy
use crate::dom::bindings::inheritance::{EventTargetTypeId, HTMLElementTypeId, NodeTypeId}; use crate::dom::bindings::inheritance::{EventTargetTypeId, HTMLElementTypeId, NodeTypeId};
use crate::dom::bindings::inheritance::{SVGElementTypeId, SVGGraphicsElementTypeId}; use crate::dom::bindings::inheritance::{SVGElementTypeId, SVGGraphicsElementTypeId};
use crate::dom::bindings::reflector::{reflect_dom_object, DomObject}; use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot, LayoutDom, MutNullableDom, RootedReference}; use crate::dom::bindings::root::{Dom, DomRoot, DomSlice, LayoutDom, MutNullableDom};
use crate::dom::bindings::str::{DOMString, USVString}; use crate::dom::bindings::str::{DOMString, USVString};
use crate::dom::bindings::xmlname::namespace_from_domstring; use crate::dom::bindings::xmlname::namespace_from_domstring;
use crate::dom::characterdata::{CharacterData, LayoutCharacterDataHelpers}; use crate::dom::characterdata::{CharacterData, LayoutCharacterDataHelpers};