diff --git a/components/script/dom/bindings/js.rs b/components/script/dom/bindings/js.rs index 6441bed6746..c35b4905ceb 100644 --- a/components/script/dom/bindings/js.rs +++ b/components/script/dom/bindings/js.rs @@ -461,6 +461,13 @@ pub trait RootedReference<'root> { fn r(&'root self) -> Self::Ref; } +impl<'root, T: JSTraceable + Reflectable + 'root> RootedReference<'root> for [JS] { + type Ref = &'root [&'root T]; + fn r(&'root self) -> &'root [&'root T] { + unsafe { mem::transmute(self) } + } +} + impl<'root, T: Reflectable + 'root> RootedReference<'root> for Rc { type Ref = &'root T; fn r(&'root self) -> &'root T { diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs index 4e37dd45aa0..a81236fc477 100644 --- a/components/script/dom/bindings/trace.rs +++ b/components/script/dom/bindings/trace.rs @@ -36,7 +36,7 @@ use devtools_traits::CSSError; use devtools_traits::WorkerId; use dom::abstractworker::SharedRt; use dom::bindings::cell::DOMRefCell; -use dom::bindings::js::{JS, Root, RootedReference}; +use dom::bindings::js::{JS, Root}; use dom::bindings::refcounted::{Trusted, TrustedPromise}; use dom::bindings::reflector::{Reflectable, Reflector}; use dom::bindings::str::{DOMString, USVString}; @@ -80,7 +80,6 @@ use std::boxed::FnBox; use std::cell::{Cell, UnsafeCell}; use std::collections::{BTreeMap, HashMap, HashSet}; use std::hash::{BuildHasher, Hash}; -use std::mem; use std::ops::{Deref, DerefMut}; use std::path::PathBuf; use std::rc::Rc; @@ -553,13 +552,6 @@ impl<'a, T: JSTraceable + Reflectable> RootedVec<'a, JS> { } } -impl<'a, 'root, T: JSTraceable + Reflectable + 'root> RootedReference<'root> for RootedVec<'a, JS> { - type Ref = &'root [&'root T]; - fn r(&'root self) -> &'root [&'root T] { - unsafe { mem::transmute(&self[..]) } - } -} - impl<'a, T: JSTraceable> Drop for RootedVec<'a, T> { fn drop(&mut self) { self.clear();