diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index d3b5b1946aa..1268c75f5a1 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -15,7 +15,7 @@ use dom::bindings::codegen::Bindings::NamedNodeMapBinding::NamedNodeMapMethods; use dom::bindings::codegen::InheritTypes::{ElementDerived, HTMLInputElementDerived}; use dom::bindings::codegen::InheritTypes::{HTMLTableCellElementDerived, NodeCast}; use dom::bindings::js::{MutNullableJS, JS, JSRef, Temporary, TemporaryPushable}; -use dom::bindings::js::{OptionalSettable, OptionalRootable, Root}; +use dom::bindings::js::{OptionalRootable, Root}; use dom::bindings::utils::{Reflectable, Reflector}; use dom::bindings::error::{ErrorResult, Fallible, NamespaceError, InvalidCharacter, Syntax}; use dom::bindings::utils::{QName, Name, InvalidXMLName, xml_name_type}; @@ -708,25 +708,19 @@ impl<'a> ElementMethods for JSRef<'a, Element> { // http://dom.spec.whatwg.org/#dom-element-classlist fn ClassList(self) -> Temporary { - if self.class_list.get().is_none() { - let class_list = DOMTokenList::new(self, &atom!("class")); - self.class_list.assign(Some(class_list)); - } - self.class_list.get().unwrap() + self.class_list.or_init(|| DOMTokenList::new(self, &atom!("class"))) } // http://dom.spec.whatwg.org/#dom-element-attributes fn Attributes(self) -> Temporary { - if self.attr_list.get().is_none() { + self.attr_list.or_init(|| { let doc = { let node: JSRef = NodeCast::from_ref(self); node.owner_doc().root() }; let window = doc.window().root(); - let list = NamedNodeMap::new(*window, self); - self.attr_list.assign(Some(list)); - } - self.attr_list.get().unwrap() + NamedNodeMap::new(*window, self) + }) } // http://dom.spec.whatwg.org/#dom-element-getattribute diff --git a/components/script/dom/htmlanchorelement.rs b/components/script/dom/htmlanchorelement.rs index 2b1d615a4bf..c712ddad60e 100644 --- a/components/script/dom/htmlanchorelement.rs +++ b/components/script/dom/htmlanchorelement.rs @@ -117,11 +117,8 @@ impl<'a> HTMLAnchorElementMethods for JSRef<'a, HTMLAnchorElement> { } fn RelList(self) -> Temporary { - if self.rel_list.get().is_none() { - let element: JSRef = ElementCast::from_ref(self); - let rel_list = DOMTokenList::new(element, &atom!("rel")); - self.rel_list.assign(Some(rel_list)); - } - self.rel_list.get().unwrap() + self.rel_list.or_init(|| { + DOMTokenList::new(ElementCast::from_ref(self), &atom!("rel")) + }) } } diff --git a/components/script/dom/htmlareaelement.rs b/components/script/dom/htmlareaelement.rs index ffc2eb2b23a..fc4c29bc085 100644 --- a/components/script/dom/htmlareaelement.rs +++ b/components/script/dom/htmlareaelement.rs @@ -11,7 +11,6 @@ use dom::bindings::js::{MutNullableJS, JSRef, Temporary}; use dom::bindings::utils::{Reflectable, Reflector}; use dom::document::Document; use dom::domtokenlist::DOMTokenList; -use dom::element::Element; use dom::element::HTMLAreaElementTypeId; use dom::eventtarget::{EventTarget, NodeTargetTypeId}; use dom::htmlelement::HTMLElement; @@ -73,11 +72,8 @@ impl Reflectable for HTMLAreaElement { impl<'a> HTMLAreaElementMethods for JSRef<'a, HTMLAreaElement> { fn RelList(self) -> Temporary { - if self.rel_list.get().is_none() { - let element: JSRef = ElementCast::from_ref(self); - let rel_list = DOMTokenList::new(element, &atom!("rel")); - self.rel_list.assign(Some(rel_list)); - } - self.rel_list.get().unwrap() + self.rel_list.or_init(|| { + DOMTokenList::new(ElementCast::from_ref(self), &atom!("rel")) + }) } } diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index acec40b942c..e1eeff03ad8 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -146,11 +146,8 @@ impl Reflectable for HTMLLinkElement { impl<'a> HTMLLinkElementMethods for JSRef<'a, HTMLLinkElement> { fn RelList(self) -> Temporary { - if self.rel_list.get().is_none() { - let element: JSRef = ElementCast::from_ref(self); - let rel_list = DOMTokenList::new(element, &atom!("rel")); - self.rel_list.assign(Some(rel_list)); - } - self.rel_list.get().unwrap() + self.rel_list.or_init(|| { + DOMTokenList::new(ElementCast::from_ref(self), &atom!("rel")) + }) } } diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index 51e90d4c3dc..c5e87e90a83 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -6,7 +6,7 @@ use dom::bindings::codegen::Bindings::WorkerGlobalScopeBinding::WorkerGlobalScop use dom::bindings::codegen::Bindings::FunctionBinding::Function; use dom::bindings::error::{ErrorResult, Fallible, Syntax, Network, FailureUnknown}; use dom::bindings::global; -use dom::bindings::js::{MutNullableJS, JSRef, Temporary, OptionalSettable}; +use dom::bindings::js::{MutNullableJS, JSRef, Temporary}; use dom::bindings::utils::{Reflectable, Reflector}; use dom::console::Console; use dom::eventtarget::{EventTarget, WorkerGlobalScopeTypeId}; @@ -93,11 +93,9 @@ impl<'a> WorkerGlobalScopeMethods for JSRef<'a, WorkerGlobalScope> { } fn Location(self) -> Temporary { - if self.location.get().is_none() { - let location = WorkerLocation::new(self, self.worker_url.clone()); - self.location.assign(Some(location)); - } - self.location.get().unwrap() + self.location.or_init(|| { + WorkerLocation::new(self, self.worker_url.clone()) + }) } fn ImportScripts(self, url_strings: Vec) -> ErrorResult { @@ -133,19 +131,11 @@ impl<'a> WorkerGlobalScopeMethods for JSRef<'a, WorkerGlobalScope> { } fn Navigator(self) -> Temporary { - if self.navigator.get().is_none() { - let navigator = WorkerNavigator::new(self); - self.navigator.assign(Some(navigator)); - } - self.navigator.get().unwrap() + self.navigator.or_init(|| WorkerNavigator::new(self)) } fn Console(self) -> Temporary { - if self.console.get().is_none() { - let console = Console::new(global::Worker(self)); - self.console.assign(Some(console)); - } - self.console.get().unwrap() + self.console.or_init(|| Console::new(global::Worker(self))) } fn Btoa(self, btoa: DOMString) -> Fallible {