aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/xpath/eval_value.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/xpath/eval_value.rs')
-rw-r--r--components/script/xpath/eval_value.rs14
1 files changed, 8 insertions, 6 deletions
diff --git a/components/script/xpath/eval_value.rs b/components/script/xpath/eval_value.rs
index de6c13e3454..66f1b92c6d4 100644
--- a/components/script/xpath/eval_value.rs
+++ b/components/script/xpath/eval_value.rs
@@ -8,7 +8,6 @@ use std::{fmt, string};
use crate::dom::bindings::codegen::Bindings::NodeBinding::Node_Binding::NodeMethods;
use crate::dom::bindings::root::DomRoot;
-use crate::dom::bindings::utils::AsVoidPtr;
use crate::dom::node::Node;
/// The primary types of values that an XPath expression returns as a result.
@@ -216,7 +215,7 @@ impl NodesetHelpers for Vec<DomRoot<Node>> {
}
fn document_order(&self) -> Vec<DomRoot<Node>> {
let mut nodes: Vec<DomRoot<Node>> = self.clone();
- if nodes.len() == 1 {
+ if nodes.len() <= 1 {
return nodes;
}
@@ -233,10 +232,13 @@ impl NodesetHelpers for Vec<DomRoot<Node>> {
nodes
}
fn document_order_unique(&self) -> Vec<DomRoot<Node>> {
- let mut nodes: Vec<DomRoot<Node>> = self.document_order();
-
- nodes.dedup_by_key(|n| n.as_void_ptr());
+ let mut seen = HashSet::new();
+ let unique_nodes: Vec<DomRoot<Node>> = self
+ .iter()
+ .filter(|node| seen.insert(node.to_opaque()))
+ .cloned()
+ .collect();
- nodes
+ unique_nodes.document_order()
}
}