aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2015-02-08 21:42:42 -0700
committerbors-servo <metajack+bors@gmail.com>2015-02-08 21:42:42 -0700
commit83a6b5d7705facb9c3fe56d8adeffb2e136231e8 (patch)
tree26a7ec7437f38e80b8e12a94c7bf216a2dfe5f94 /components/script/dom
parent1a47f176ffb059a7a3f29f94485859163cb1284b (diff)
parent057b14dd5c4c6bc53d6d8faf445dbc73dfdeedd7 (diff)
downloadservo-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.rs58
-rw-r--r--components/script/dom/webidls/TreeWalker.webidl2
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]