diff options
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/bindings/mozmap.rs | 12 | ||||
-rw-r--r-- | components/script/dom/bindings/trace.rs | 16 |
2 files changed, 22 insertions, 6 deletions
diff --git a/components/script/dom/bindings/mozmap.rs b/components/script/dom/bindings/mozmap.rs index 9658d0c0d5e..db46debc58e 100644 --- a/components/script/dom/bindings/mozmap.rs +++ b/components/script/dom/bindings/mozmap.rs @@ -7,6 +7,7 @@ use crate::dom::bindings::conversions::jsid_to_string; use crate::dom::bindings::error::report_pending_exception; use crate::dom::bindings::str::DOMString; +use indexmap::IndexMap; use js::conversions::{ConversionResult, FromJSValConvertible, ToJSValConvertible}; use js::jsapi::JSContext; use js::jsapi::JS_NewPlainObject; @@ -22,28 +23,27 @@ use js::rust::wrappers::JS_GetPropertyById; use js::rust::HandleValue; use js::rust::IdVector; use js::rust::MutableHandleValue; -use std::collections::HashMap; use std::ops::Deref; /// The `MozMap` (open-ended dictionary) type. #[derive(Clone, JSTraceable)] pub struct MozMap<T> { - map: HashMap<DOMString, T>, + map: IndexMap<DOMString, T>, } impl<T> MozMap<T> { /// Create an empty `MozMap`. pub fn new() -> Self { MozMap { - map: HashMap::new(), + map: IndexMap::new(), } } } impl<T> Deref for MozMap<T> { - type Target = HashMap<DOMString, T>; + type Target = IndexMap<DOMString, T>; - fn deref(&self) -> &HashMap<DOMString, T> { + fn deref(&self) -> &IndexMap<DOMString, T> { &self.map } } @@ -82,7 +82,7 @@ where )); } - let mut map = HashMap::new(); + let mut map = IndexMap::new(); for id in &*ids { rooted!(in(cx) let id = *id); diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs index 4fecf083737..ae1a9e6e3b4 100644 --- a/components/script/dom/bindings/trace.rs +++ b/components/script/dom/bindings/trace.rs @@ -61,6 +61,7 @@ use html5ever::{LocalName, Namespace, Prefix, QualName}; use http::header::HeaderMap; use hyper::Method; use hyper::StatusCode; +use indexmap::IndexMap; use ipc_channel::ipc::{IpcReceiver, IpcSender}; use js::glue::{CallObjectTracer, CallValueTracer}; use js::jsapi::{GCTraceKindToAscii, Heap, JSObject, JSTracer, TraceKind}; @@ -356,6 +357,21 @@ unsafe impl<K: Ord + JSTraceable, V: JSTraceable> JSTraceable for BTreeMap<K, V> } } +unsafe impl<K, V, S> JSTraceable for IndexMap<K, V, S> +where + K: Hash + Eq + JSTraceable, + V: JSTraceable, + S: BuildHasher, +{ + #[inline] + unsafe fn trace(&self, trc: *mut JSTracer) { + for (k, v) in &*self { + k.trace(trc); + v.trace(trc); + } + } +} + unsafe impl<A: JSTraceable, B: JSTraceable> JSTraceable for (A, B) { #[inline] unsafe fn trace(&self, trc: *mut JSTracer) { |