mirror of
https://github.com/servo/servo.git
synced 2025-08-05 05:30:08 +01:00
Avoid extra O(n) scan in validate_and_extract
Also `debug_assert!`s that `splitn` was called with the correct `count` argument.
This commit is contained in:
parent
8759d42559
commit
a3d463093e
1 changed files with 21 additions and 11 deletions
|
@ -637,19 +637,29 @@ pub fn validate_and_extract(namespace: Option<DOMString>, qualified_name: &str)
|
||||||
// Step 2.
|
// Step 2.
|
||||||
try!(validate_qualified_name(qualified_name));
|
try!(validate_qualified_name(qualified_name));
|
||||||
|
|
||||||
let (prefix, local_name) = if qualified_name.contains(":") {
|
let colon = ':';
|
||||||
// Step 5.
|
|
||||||
let mut parts = qualified_name.splitn(2, ':');
|
// Step 5.
|
||||||
let prefix = parts.next().unwrap();
|
let mut parts = qualified_name.splitn(2, colon);
|
||||||
debug_assert!(!prefix.is_empty());
|
|
||||||
let local_name = parts.next().unwrap();
|
let (maybe_prefix, local_name) = {
|
||||||
debug_assert!(!local_name.contains(":"));
|
let maybe_prefix = parts.next();
|
||||||
(Some(prefix), local_name)
|
let maybe_local_name = parts.next();
|
||||||
} else {
|
|
||||||
(None, qualified_name)
|
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(_)) => {
|
(ns!(""), Some(_)) => {
|
||||||
// Step 6.
|
// Step 6.
|
||||||
Err(Error::Namespace)
|
Err(Error::Namespace)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue