style: Temporarily use OrderMap on Gecko.

This will allow us to discard std hash map as a source of crashes.
This commit is contained in:
Emilio Cobos Álvarez 2018-01-31 15:13:15 +01:00
parent a2c2d34753
commit 4d9ce6b880
No known key found for this signature in database
GPG key ID: 056B727BB9C1027C
3 changed files with 30 additions and 14 deletions

View file

@ -9,19 +9,26 @@
use fnv;
// #[cfg(feature = "gecko")]
// pub use hashglobe::hash_map::HashMap;
// #[cfg(feature = "gecko")]
// pub use hashglobe::hash_set::HashSet;
#[cfg(feature = "gecko")]
pub use hashglobe::hash_map::HashMap;
pub use hashglobe::order::HashMap;
#[cfg(feature = "gecko")]
pub use hashglobe::hash_set::HashSet;
pub use hashglobe::order::HashSet;
#[cfg(feature = "servo")]
pub use hashglobe::fake::{HashMap, HashSet};
/// Appropriate reexports of hash_map types
pub mod map {
// #[cfg(feature = "gecko")]
// pub use hashglobe::hash_map::{Entry, Iter};
#[cfg(feature = "gecko")]
pub use hashglobe::hash_map::{Entry, Iter};
pub use hashglobe::order::{Entry, MapIter as Iter};
#[cfg(feature = "servo")]
pub use std::collections::hash_map::{Entry, Iter};
}

View file

@ -273,7 +273,7 @@ impl InvalidationMap {
for class in compound_visitor.classes {
self.class_to_selector
.entry(class, quirks_mode)
.try_entry(class, quirks_mode)?
.or_insert_with(SmallVec::new)
.try_push(Dependency {
selector: selector.clone(),
@ -283,7 +283,7 @@ impl InvalidationMap {
for id in compound_visitor.ids {
self.id_to_selector
.entry(id, quirks_mode)
.try_entry(id, quirks_mode)?
.or_insert_with(SmallVec::new)
.try_push(Dependency {
selector: selector.clone(),

View file

@ -512,19 +512,12 @@ impl<V: 'static> MaybeCaseInsensitiveHashMap<Atom, V> {
MaybeCaseInsensitiveHashMap(PrecomputedHashMap::default())
}
/// HashMap::entry
pub fn entry(&mut self, mut key: Atom, quirks_mode: QuirksMode) -> hash_map::Entry<Atom, V> {
if quirks_mode == QuirksMode::Quirks {
key = key.to_ascii_lowercase()
}
self.0.entry(key)
}
/// HashMap::try_entry
#[cfg(not(feature = "gecko"))]
pub fn try_entry(
&mut self,
mut key: Atom,
quirks_mode: QuirksMode
quirks_mode: QuirksMode,
) -> Result<hash_map::Entry<Atom, V>, FailedAllocationError> {
if quirks_mode == QuirksMode::Quirks {
key = key.to_ascii_lowercase()
@ -532,6 +525,22 @@ impl<V: 'static> MaybeCaseInsensitiveHashMap<Atom, V> {
self.0.try_entry(key)
}
/// HashMap::try_entry
///
/// FIXME(emilio): Remove the extra Entry parameter and unify when ordermap
/// 0.4 is released.
#[cfg(feature = "gecko")]
pub fn try_entry(
&mut self,
mut key: Atom,
quirks_mode: QuirksMode,
) -> Result<hash_map::Entry<Atom, V, BuildHasherDefault<PrecomputedHasher>>, FailedAllocationError> {
if quirks_mode == QuirksMode::Quirks {
key = key.to_ascii_lowercase()
}
self.0.try_entry(key)
}
/// HashMap::iter
pub fn iter(&self) -> hash_map::Iter<Atom, V> {
self.0.iter()