Skip to content

Commit

Permalink
Avoid extra O(n) scan in validate_and_extract
Browse files Browse the repository at this point in the history
Also `debug_assert!`s that `splitn` was called with the
correct `count` argument.
  • Loading branch information
tamird committed May 26, 2015
1 parent 8759d42 commit a3d4630
Showing 1 changed file with 21 additions and 11 deletions.
32 changes: 21 additions & 11 deletions components/script/dom/bindings/utils.rs
Expand Up @@ -637,19 +637,29 @@ pub fn validate_and_extract(namespace: Option<DOMString>, qualified_name: &str)
// Step 2.
try!(validate_qualified_name(qualified_name));

let (prefix, local_name) = if qualified_name.contains(":") {
// Step 5.
let mut parts = qualified_name.splitn(2, ':');
let prefix = parts.next().unwrap();
debug_assert!(!prefix.is_empty());
let local_name = parts.next().unwrap();
debug_assert!(!local_name.contains(":"));
(Some(prefix), local_name)
} else {
(None, qualified_name)
let colon = ':';

// Step 5.
let mut parts = qualified_name.splitn(2, colon);

let (maybe_prefix, local_name) = {
let maybe_prefix = parts.next();
let maybe_local_name = parts.next();

debug_assert!(parts.next().is_none());

if let Some(local_name) = maybe_local_name {
debug_assert!(!maybe_prefix.unwrap().is_empty());

(maybe_prefix, local_name)
} else {
(None, maybe_prefix.unwrap())
}
};

match (namespace, prefix) {
debug_assert!(!local_name.contains(colon));

match (namespace, maybe_prefix) {
(ns!(""), Some(_)) => {
// Step 6.
Err(Error::Namespace)
Expand Down

0 comments on commit a3d4630

Please sign in to comment.