diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-02-08 21:42:42 -0700 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-02-08 21:42:42 -0700 |
commit | 83a6b5d7705facb9c3fe56d8adeffb2e136231e8 (patch) | |
tree | 26a7ec7437f38e80b8e12a94c7bf216a2dfe5f94 /components/script/dom | |
parent | 1a47f176ffb059a7a3f29f94485859163cb1284b (diff) | |
parent | 057b14dd5c4c6bc53d6d8faf445dbc73dfdeedd7 (diff) | |
download | servo-83a6b5d7705facb9c3fe56d8adeffb2e136231e8.tar.gz servo-83a6b5d7705facb9c3fe56d8adeffb2e136231e8.zip |
auto merge of #4868 : Ms2ger/servo/treewalker, r=saneyuki
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/treewalker.rs | 58 | ||||
-rw-r--r-- | components/script/dom/webidls/TreeWalker.webidl | 2 |
2 files changed, 26 insertions, 34 deletions
diff --git a/components/script/dom/treewalker.rs b/components/script/dom/treewalker.rs index 25045e50c85..c05798532da 100644 --- a/components/script/dom/treewalker.rs +++ b/components/script/dom/treewalker.rs @@ -11,7 +11,7 @@ use dom::bindings::codegen::Bindings::NodeFilterBinding::NodeFilter; // to move to the NodeFilter binding file (#3149). // For now, it is defined in this file. // use dom::bindings::codegen::Bindings::NodeFilterBinding::NodeFilterConstants; -use dom::bindings::error::{ErrorResult, Fallible}; +use dom::bindings::error::Fallible; use dom::bindings::global::GlobalRef; use dom::bindings::js::{JS, JSRef, OptionalRootable, Temporary, MutHeap}; use dom::bindings::utils::{Reflector, reflect_dom_object}; @@ -84,10 +84,8 @@ impl<'a> TreeWalkerMethods for JSRef<'a, TreeWalker> { Temporary::new(self.current_node.get()) } - fn SetCurrentNode(self, node: JSRef<Node>) -> ErrorResult { - // XXX Future: check_same_origin(root_node, node) (throws) + fn SetCurrentNode(self, node: JSRef<Node>) { self.current_node.set(JS::from_rooted(node)); - Ok(()) } fn ParentNode(self) -> Fallible<Option<Temporary<Node>>> { @@ -162,16 +160,16 @@ impl<'a> PrivateTreeWalkerHelpers for JSRef<'a, TreeWalker> { None => break, Some(node) => { // "1. Filter node and let result be the return value." - match self.accept_node(node) { - Err(e) => return Err(e), + let result = try!(self.accept_node(node)); + match result { // "2. If result is FILTER_ACCEPT, then set the currentNode // attribute to node and return node." - Ok(NodeFilterConstants::FILTER_ACCEPT) => { + NodeFilterConstants::FILTER_ACCEPT => { self.current_node.set(JS::from_rooted(node)); return Ok(Some(Temporary::from_rooted(node))) }, // "3. If result is FILTER_SKIP, run these subsubsteps:" - Ok(NodeFilterConstants::FILTER_SKIP) => { + NodeFilterConstants::FILTER_SKIP => { // "1. Let child be node's first child if type is first, // and node's last child if type is last." match next_child(node) { @@ -249,12 +247,11 @@ impl<'a> PrivateTreeWalkerHelpers for JSRef<'a, TreeWalker> { // "1. Set node to sibling." node = sibling_op.unwrap().root().get_unsound_ref_forever(); // "2. Filter node and let result be the return value." - let result = self.accept_node(node); + let result = try!(self.accept_node(node)); // "3. If result is FILTER_ACCEPT, then set the currentNode // attribute to node and return node." match result { - Err(e) => return Err(e), - Ok(NodeFilterConstants::FILTER_ACCEPT) => { + NodeFilterConstants::FILTER_ACCEPT => { self.current_node.set(JS::from_rooted(node)); return Ok(Some(Temporary::from_rooted(node))) }, @@ -267,7 +264,7 @@ impl<'a> PrivateTreeWalkerHelpers for JSRef<'a, TreeWalker> { // then set sibling to node's next sibling if type is next, // and node's previous sibling if type is previous." match (result, &sibling_op) { - (Ok(NodeFilterConstants::FILTER_REJECT), _) + (NodeFilterConstants::FILTER_REJECT, _) | (_, &None) => sibling_op = next_sibling(node), _ => {} } @@ -280,9 +277,8 @@ impl<'a> PrivateTreeWalkerHelpers for JSRef<'a, TreeWalker> { // "5. Filter node and if the return value is FILTER_ACCEPT, then return null." Some(n) => { node = n; - match self.accept_node(node) { - Err(e) => return Err(e), - Ok(NodeFilterConstants::FILTER_ACCEPT) => return Ok(None), + match try!(self.accept_node(node)) { + NodeFilterConstants::FILTER_ACCEPT => return Ok(None), _ => {} } } @@ -371,9 +367,8 @@ impl<'a> TreeWalkerHelpers<'a> for JSRef<'a, TreeWalker> { node = n.root().get_unsound_ref_forever(); // "2. If node is not null and filtering node returns FILTER_ACCEPT, // then set the currentNode attribute to node, return node." - match self.accept_node(node) { - Err(e) => return Err(e), - Ok(NodeFilterConstants::FILTER_ACCEPT) => { + match try!(self.accept_node(node)) { + NodeFilterConstants::FILTER_ACCEPT => { self.current_node.set(JS::from_rooted(node)); return Ok(Some(Temporary::from_rooted(node))) }, @@ -434,12 +429,12 @@ impl<'a> TreeWalkerHelpers<'a> for JSRef<'a, TreeWalker> { // "4. If result is FILTER_ACCEPT, then // set the currentNode attribute to node and return node." loop { - match self.accept_node(node) { - Err(e) => return Err(e), - Ok(NodeFilterConstants::FILTER_REJECT) => break, + let result = try!(self.accept_node(node)); + match result { + NodeFilterConstants::FILTER_REJECT => break, _ if node.first_child().is_some() => node = node.last_child().unwrap().root().get_unsound_ref_forever(), - Ok(NodeFilterConstants::FILTER_ACCEPT) => { + NodeFilterConstants::FILTER_ACCEPT => { self.current_node.set(JS::from_rooted(node)); return Ok(Some(Temporary::from_rooted(node))) }, @@ -463,9 +458,8 @@ impl<'a> TreeWalkerHelpers<'a> for JSRef<'a, TreeWalker> { } // "5. Filter node and if the return value is FILTER_ACCEPT, then // set the currentNode attribute to node and return node." - match self.accept_node(node) { - Err(e) => return Err(e), - Ok(NodeFilterConstants::FILTER_ACCEPT) => { + match try!(self.accept_node(node)) { + NodeFilterConstants::FILTER_ACCEPT => { self.current_node.set(JS::from_rooted(node)); return Ok(Some(Temporary::from_rooted(node))) }, @@ -481,13 +475,13 @@ impl<'a> TreeWalkerHelpers<'a> for JSRef<'a, TreeWalker> { // "1. Let node be the value of the currentNode attribute." let mut node = self.current_node.get().root().get_unsound_ref_forever(); // "2. Let result be FILTER_ACCEPT." - let mut result = Ok(NodeFilterConstants::FILTER_ACCEPT); + let mut result = NodeFilterConstants::FILTER_ACCEPT; // "3. Run these substeps:" loop { // "1. While result is not FILTER_REJECT and node has a child, run these subsubsteps:" loop { match result { - Ok(NodeFilterConstants::FILTER_REJECT) => break, + NodeFilterConstants::FILTER_REJECT => break, _ => {} } match node.first_child() { @@ -496,12 +490,11 @@ impl<'a> TreeWalkerHelpers<'a> for JSRef<'a, TreeWalker> { // "1. Set node to its first child." node = child.root().get_unsound_ref_forever(); // "2. Filter node and set result to the return value." - result = self.accept_node(node); + result = try!(self.accept_node(node)); // "3. If result is FILTER_ACCEPT, then // set the currentNode attribute to node and return node." match result { - Err(e) => return Err(e), - Ok(NodeFilterConstants::FILTER_ACCEPT) => { + NodeFilterConstants::FILTER_ACCEPT => { self.current_node.set(JS::from_rooted(node)); return Ok(Some(Temporary::from_rooted(node))) }, @@ -518,12 +511,11 @@ impl<'a> TreeWalkerHelpers<'a> for JSRef<'a, TreeWalker> { Some(n) => { node = n.root().get_unsound_ref_forever(); // "3. Filter node and set result to the return value." - result = self.accept_node(node); + result = try!(self.accept_node(node)); // "4. If result is FILTER_ACCEPT, then // set the currentNode attribute to node and return node." match result { - Err(e) => return Err(e), - Ok(NodeFilterConstants::FILTER_ACCEPT) => { + NodeFilterConstants::FILTER_ACCEPT => { self.current_node.set(JS::from_rooted(node)); return Ok(Some(Temporary::from_rooted(node))) }, diff --git a/components/script/dom/webidls/TreeWalker.webidl b/components/script/dom/webidls/TreeWalker.webidl index d879678f615..cdd1f2d8c4c 100644 --- a/components/script/dom/webidls/TreeWalker.webidl +++ b/components/script/dom/webidls/TreeWalker.webidl @@ -14,7 +14,7 @@ interface TreeWalker { readonly attribute unsigned long whatToShow; [Constant] readonly attribute NodeFilter? filter; - [Pure, SetterThrows] + [Pure] attribute Node currentNode; [Throws] |