Skip to content

Commit

Permalink
Merge pull request #2892 from glennw/element-atom
Browse files Browse the repository at this point in the history
Port element traits to use atoms instead of strings.
  • Loading branch information
SimonSapin committed Jul 22, 2014
2 parents 708a344 + 33dcb08 commit 4ccf489
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 15 deletions.
10 changes: 4 additions & 6 deletions src/components/layout/css/matching.rs
Expand Up @@ -12,6 +12,7 @@ use util::{LayoutDataAccess, LayoutDataWrapper};
use wrapper::{LayoutElement, LayoutNode, PostorderNodeMutTraversal, ThreadSafeLayoutNode};

use gfx::font_context::FontContext;
use servo_util::atom::Atom;
use servo_util::cache::{Cache, LRUCache, SimpleHashCache};
use servo_util::namespace::Null;
use servo_util::smallvec::{SmallVec, SmallVec16};
Expand Down Expand Up @@ -162,10 +163,7 @@ pub struct StyleSharingCandidateCache {
pub struct StyleSharingCandidate {
pub style: Arc<ComputedValues>,
pub parent_style: Arc<ComputedValues>,

// TODO(pcwalton): Intern.
pub local_name: DOMString,

pub local_name: Atom,
pub class: Option<DOMString>,
}

Expand Down Expand Up @@ -224,14 +222,14 @@ impl StyleSharingCandidate {
Some(StyleSharingCandidate {
style: style.take_unwrap(),
parent_style: parent_style.take_unwrap(),
local_name: element.get_local_name().to_str(),
local_name: element.get_local_name().clone(),
class: element.get_attr(&Null, "class")
.map(|string| string.to_str()),
})
}

fn can_share_style_with(&self, element: &LayoutElement) -> bool {
if element.get_local_name() != self.local_name.as_slice() {
if *element.get_local_name() != self.local_name {
return false
}
match (&self.class, element.get_attr(&Null, "class")) {
Expand Down
5 changes: 3 additions & 2 deletions src/components/layout/wrapper.rs
Expand Up @@ -47,6 +47,7 @@ use script::dom::node::{DocumentNodeTypeId, ElementNodeTypeId, Node, NodeTypeId}
use script::dom::node::{LayoutNodeHelpers, RawLayoutNodeHelpers, TextNodeTypeId};
use script::dom::text::Text;
use servo_msg::constellation_msg::{PipelineId, SubpageId};
use servo_util::atom::Atom;
use servo_util::namespace::Namespace;
use servo_util::namespace;
use servo_util::str::is_whitespace;
Expand Down Expand Up @@ -359,8 +360,8 @@ impl<'le> LayoutElement<'le> {

impl<'le> TElement for LayoutElement<'le> {
#[inline]
fn get_local_name<'a>(&'a self) -> &'a str {
self.element.local_name.as_slice()
fn get_local_name<'a>(&'a self) -> &'a Atom {
&self.element.local_name
}

#[inline]
Expand Down
8 changes: 4 additions & 4 deletions src/components/script/dom/element.rs
Expand Up @@ -201,7 +201,7 @@ impl LayoutElementHelpers for JS<Element> {

pub trait ElementHelpers {
fn html_element_in_html_document(&self) -> bool;
fn get_local_name<'a>(&'a self) -> &'a str;
fn get_local_name<'a>(&'a self) -> &'a Atom;
fn get_namespace<'a>(&'a self) -> &'a Namespace;
}

Expand All @@ -212,8 +212,8 @@ impl<'a> ElementHelpers for JSRef<'a, Element> {
is_html && node.owner_doc().root().is_html_document
}

fn get_local_name<'a>(&'a self) -> &'a str {
self.deref().local_name.as_slice()
fn get_local_name<'a>(&'a self) -> &'a Atom {
&self.deref().local_name
}

fn get_namespace<'a>(&'a self) -> &'a Namespace {
Expand Down Expand Up @@ -912,7 +912,7 @@ impl<'a> style::TElement for JSRef<'a, Element> {
_ => None,
}
}
fn get_local_name<'a>(&'a self) -> &'a str {
fn get_local_name<'a>(&'a self) -> &'a Atom {
(self as &ElementHelpers).get_local_name()
}
fn get_namespace<'a>(&'a self) -> &'a Namespace {
Expand Down
3 changes: 2 additions & 1 deletion src/components/style/node.rs
Expand Up @@ -6,6 +6,7 @@
//! style.

use selectors::AttrSelector;
use servo_util::atom::Atom;
use servo_util::namespace::Namespace;


Expand All @@ -22,7 +23,7 @@ pub trait TNode<E:TElement> : Clone {
pub trait TElement {
fn get_attr(&self, namespace: &Namespace, attr: &str) -> Option<&'static str>;
fn get_link(&self) -> Option<&'static str>;
fn get_local_name<'a>(&'a self) -> &'a str;
fn get_local_name<'a>(&'a self) -> &'a Atom;
fn get_namespace<'a>(&'a self) -> &'a Namespace;
fn get_hover_state(&self) -> bool;
}
Expand Down
4 changes: 2 additions & 2 deletions src/components/style/selector_matching.rs
Expand Up @@ -147,7 +147,7 @@ impl SelectorMap {
// TODO(pradeep): Case-sensitivity depends on the document type.
SelectorMap::get_matching_rules_from_hash_ignoring_case(node,
&self.element_hash,
element.get_local_name(),
element.get_local_name().as_slice(),
matching_rules_list,
shareable);

Expand Down Expand Up @@ -678,7 +678,7 @@ fn matches_simple_selector<E:TElement,
// TODO: intern element names
LocalNameSelector(ref name) => {
let element = element.as_element();
element.get_local_name().eq_ignore_ascii_case(name.as_slice())
element.get_local_name().as_slice().eq_ignore_ascii_case(name.as_slice())
}

NamespaceSelector(ref namespace) => {
Expand Down

0 comments on commit 4ccf489

Please sign in to comment.