From 61c7f2f22026bfa043192eeeea7292ab219214c3 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Mon, 9 Dec 2013 15:10:09 +0000 Subject: [PATCH] Change Namespace::to_str() to not allocate and return a reference. --- src/components/script/dom/attr.rs | 2 +- src/components/script/dom/element.rs | 4 +-- src/components/script/dom/namespace.rs | 30 +++++++++++------------ src/components/style/selector_matching.rs | 8 +++--- src/components/util/tree.rs | 2 +- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/components/script/dom/attr.rs b/src/components/script/dom/attr.rs index 5ff34888015..03d2752fa97 100644 --- a/src/components/script/dom/attr.rs +++ b/src/components/script/dom/attr.rs @@ -75,7 +75,7 @@ impl Attr { } pub fn GetNamespaceURI(&self) -> Option { - self.namespace.to_str() + self.namespace.to_str().map(|s| s.to_owned()) } pub fn GetPrefix(&self) -> Option { diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs index 82cd7207f8e..b5ef23b5031 100644 --- a/src/components/script/dom/element.rs +++ b/src/components/script/dom/element.rs @@ -129,8 +129,8 @@ impl ElementLike for Element { self.tag_name.as_slice() } - fn get_namespace<'a>(&'a self) -> ~str { - self.namespace.to_str().unwrap_or(~"") + fn get_namespace_url<'a>(&'a self) -> &'a str { + self.namespace.to_str().unwrap_or("") } fn get_attr(&self, name: &str) -> Option<~str> { diff --git a/src/components/script/dom/namespace.rs b/src/components/script/dom/namespace.rs index fb255d90419..c446b2969d6 100644 --- a/src/components/script/dom/namespace.rs +++ b/src/components/script/dom/namespace.rs @@ -19,26 +19,26 @@ pub enum Namespace { impl Namespace { pub fn from_str(url: Option) -> Namespace { match null_str_as_empty_ref(&url) { - &"http://www.w3.org/1999/xhtml" => HTML, - &"http://www.w3.org/XML/1998/namespace" => XML, - &"http://www.w3.org/2000/xmlns/" => XMLNS, - &"http://www.w3.org/1999/xlink" => XLink, - &"http://www.w3.org/2000/svg" => SVG, - &"http://www.w3.org/1998/Math/MathML" => MathML, - &"" => Null, + "http://www.w3.org/1999/xhtml" => HTML, + "http://www.w3.org/XML/1998/namespace" => XML, + "http://www.w3.org/2000/xmlns/" => XMLNS, + "http://www.w3.org/1999/xlink" => XLink, + "http://www.w3.org/2000/svg" => SVG, + "http://www.w3.org/1998/Math/MathML" => MathML, + "" => Null, ns => Other(ns.to_owned()) } } - pub fn to_str(&self) -> Option { + pub fn to_str<'a>(&'a self) -> Option<&'a str> { match *self { Null => None, - HTML => Some(~"http://www.w3.org/1999/xhtml"), - XML => Some(~"http://www.w3.org/XML/1998/namespace"), - XMLNS => Some(~"http://www.w3.org/2000/xmlns/"), - XLink => Some(~"http://www.w3.org/1999/xlink"), - SVG => Some(~"http://www.w3.org/2000/svg"), - MathML => Some(~"http://www.w3.org/1998/Math/MathML"), - Other(ref x) => Some(x.to_owned()) + HTML => Some("http://www.w3.org/1999/xhtml"), + XML => Some("http://www.w3.org/XML/1998/namespace"), + XMLNS => Some("http://www.w3.org/2000/xmlns/"), + XLink => Some("http://www.w3.org/1999/xlink"), + SVG => Some("http://www.w3.org/2000/svg"), + MathML => Some("http://www.w3.org/1998/Math/MathML"), + Other(ref x) => Some(x.as_slice()) } } } diff --git a/src/components/style/selector_matching.rs b/src/components/style/selector_matching.rs index 01301bc070b..079e1babf83 100644 --- a/src/components/style/selector_matching.rs +++ b/src/components/style/selector_matching.rs @@ -427,7 +427,7 @@ fn matches_simple_selector, T: TreeNodeRefAsElement, E: Ele } NamespaceSelector(ref url) => { do element.with_imm_element_like |element: &E| { - str::eq_slice(element.get_namespace(), *url) + element.get_namespace_url() == url.as_slice() } } // TODO: case-sensitivity depends on the document type and quirks mode @@ -538,11 +538,11 @@ fn matches_generic_nth_child, T: TreeNodeRefAsElement, E: E }; let mut element_local_name = ""; - let mut element_namespace = ~""; + let mut element_namespace = ""; if is_of_type { do element.with_imm_element_like |element: &E| { element_local_name = element.get_local_name(); - element_namespace = element.get_namespace(); + element_namespace = element.get_namespace_url(); } } @@ -564,7 +564,7 @@ fn matches_generic_nth_child, T: TreeNodeRefAsElement, E: E if is_of_type { do node.with_imm_element_like |node: &E| { if element_local_name == node.get_local_name() && - element_namespace == node.get_namespace() { + element_namespace == node.get_namespace_url() { index += 1; } } diff --git a/src/components/util/tree.rs b/src/components/util/tree.rs index 5f28974a1e3..0f32bd7d469 100644 --- a/src/components/util/tree.rs +++ b/src/components/util/tree.rs @@ -348,7 +348,7 @@ pub trait TreeNode> { pub trait ElementLike { fn get_local_name<'a>(&'a self) -> &'a str; - fn get_namespace<'a>(&'a self) -> ~str; + fn get_namespace_url<'a>(&'a self) -> &'a str; fn get_attr(&self, name: &str) -> Option<~str>; fn get_link(&self) -> Option<~str>; }