Merge pull request #3497 from zwarich/extended-deref

Add an extended_deref method to JSRef

Reviewed-by: Manishearth
This commit is contained in:
bors-servo 2014-09-27 12:48:30 -06:00
commit c10948736f
3 changed files with 21 additions and 13 deletions

View file

@ -147,14 +147,14 @@ impl<'a> AttrMethods for JSRef<'a, Attr> {
} }
} }
pub trait AttrHelpers { pub trait AttrHelpers<'a> {
fn set_value(self, set_type: AttrSettingType, value: AttrValue); fn set_value(self, set_type: AttrSettingType, value: AttrValue);
fn value<'a>(&'a self) -> Ref<'a, AttrValue>; fn value(self) -> Ref<'a, AttrValue>;
fn local_name<'a>(&'a self) -> &'a Atom; fn local_name(self) -> &'a Atom;
fn summarize(self) -> AttrInfo; fn summarize(self) -> AttrInfo;
} }
impl<'a> AttrHelpers for JSRef<'a, Attr> { impl<'a> AttrHelpers<'a> for JSRef<'a, Attr> {
fn set_value(self, set_type: AttrSettingType, value: AttrValue) { fn set_value(self, set_type: AttrSettingType, value: AttrValue) {
let owner = self.owner.root(); let owner = self.owner.root();
let node: JSRef<Node> = NodeCast::from_ref(*owner); let node: JSRef<Node> = NodeCast::from_ref(*owner);
@ -180,12 +180,12 @@ impl<'a> AttrHelpers for JSRef<'a, Attr> {
} }
} }
fn value<'a>(&'a self) -> Ref<'a, AttrValue> { fn value(self) -> Ref<'a, AttrValue> {
self.value.deref().borrow() self.extended_deref().value.borrow()
} }
fn local_name<'a>(&'a self) -> &'a Atom { fn local_name(self) -> &'a Atom {
&self.local_name &self.extended_deref().local_name
} }
fn summarize(self) -> AttrInfo { fn summarize(self) -> AttrInfo {

View file

@ -493,6 +493,14 @@ impl<'a,T> JSRef<'a,T> {
} }
} }
impl<'a, T: Reflectable> JSRef<'a, T> {
pub fn extended_deref(self) -> &'a T {
unsafe {
&*self.ptr
}
}
}
impl<'a, T: Reflectable> Reflectable for JSRef<'a, T> { impl<'a, T: Reflectable> Reflectable for JSRef<'a, T> {
fn reflector<'a>(&'a self) -> &'a Reflector { fn reflector<'a>(&'a self) -> &'a Reflector {
self.deref().reflector() self.deref().reflector()

View file

@ -157,8 +157,8 @@ impl CollectionFilter for AppletsFilter {
} }
} }
pub trait DocumentHelpers { pub trait DocumentHelpers<'a> {
fn url<'a>(&'a self) -> &'a Url; fn url(self) -> &'a Url;
fn quirks_mode(self) -> QuirksMode; fn quirks_mode(self) -> QuirksMode;
fn set_quirks_mode(self, mode: QuirksMode); fn set_quirks_mode(self, mode: QuirksMode);
fn set_last_modified(self, value: DOMString); fn set_last_modified(self, value: DOMString);
@ -171,9 +171,9 @@ pub trait DocumentHelpers {
fn load_anchor_href(self, href: DOMString); fn load_anchor_href(self, href: DOMString);
} }
impl<'a> DocumentHelpers for JSRef<'a, Document> { impl<'a> DocumentHelpers<'a> for JSRef<'a, Document> {
fn url<'a>(&'a self) -> &'a Url { fn url(self) -> &'a Url {
&*self.url &*self.extended_deref().url
} }
fn quirks_mode(self) -> QuirksMode { fn quirks_mode(self) -> QuirksMode {