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 value<'a>(&'a self) -> Ref<'a, AttrValue>;
fn local_name<'a>(&'a self) -> &'a Atom;
fn value(self) -> Ref<'a, AttrValue>;
fn local_name(self) -> &'a Atom;
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) {
let owner = self.owner.root();
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> {
self.value.deref().borrow()
fn value(self) -> Ref<'a, AttrValue> {
self.extended_deref().value.borrow()
}
fn local_name<'a>(&'a self) -> &'a Atom {
&self.local_name
fn local_name(self) -> &'a Atom {
&self.extended_deref().local_name
}
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> {
fn reflector<'a>(&'a self) -> &'a Reflector {
self.deref().reflector()

View file

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