Bug 1341102 - Revendor Rust dependencies.
authorMatt Brubeck <mbrubeck@mozilla.com>
Fri, 15 Sep 2017 20:52:41 -0700
changeset 665880 b020722d08c09d44e64c3f89a0108820de76b676
parent 665879 5062ee0a6174aaf097fac02f811193b0ae0aa2b5
child 665881 2767b054ed6c3b0bce1b7368023edfed6fd86e49
child 665888 a2832e30d3549b88a43fd545786672904ef22b9f
push id80212
push usermaglione.k@gmail.com
push dateSat, 16 Sep 2017 04:24:53 +0000
bugs1341102
milestone57.0a1
Bug 1341102 - Revendor Rust dependencies. MozReview-Commit-ID: 49YebxPbiR5
third_party/rust/smallbitvec/.cargo-checksum.json
third_party/rust/smallbitvec/Cargo.toml
third_party/rust/smallbitvec/benches/bench.rs
third_party/rust/smallbitvec/src/lib.rs
toolkit/library/gtest/rust/Cargo.lock
toolkit/library/rust/Cargo.lock
--- a/third_party/rust/smallbitvec/.cargo-checksum.json
+++ b/third_party/rust/smallbitvec/.cargo-checksum.json
@@ -1,1 +1,1 @@
-{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","Cargo.toml":"37dbe41747b297eb3344c056e34570fc454cbbc29593e4f147a8db41f6b401c5","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"daa94322de7eab889e055932396160395bd8e3af82f56ae8c419d3049111da72","README.md":"c7b7102e5b19a19c3a0e1cefeddb228fb57c7fac6ce91f15dada4d81d8dc2dac","benches/bench.rs":"753ab48c39c771fb0443bb150b8e7c28f0992ca8e9a725c27efbbf664e7a2f1e","src/lib.rs":"e8aa141e8d27fab0d09cf84ba8e299250cbcb814d790dffef7a6f76e316a27cd"},"package":"c1ebf4681dc284c22efb7248986bbdf8aa23c2749ea85a0107e0e787038d303e"}
\ No newline at end of file
+{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","Cargo.toml":"d5d98ff79b139424aafbc16c69b0b163d5555c8f2587eb0545d3ca23129009be","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"daa94322de7eab889e055932396160395bd8e3af82f56ae8c419d3049111da72","README.md":"c7b7102e5b19a19c3a0e1cefeddb228fb57c7fac6ce91f15dada4d81d8dc2dac","benches/bench.rs":"6d6bc6afac8af5cfb37a672f7a1e8f9abb29b00993b85e94cd701dcd8955aabd","src/lib.rs":"e52f4408a673ce873e231d61d0059c49cb7d735335b24a797f5d071f2954b53c"},"package":"79b776f00dfe01df905fa3b2eaa1659522e99e3fc4a7b1334171622205c4bdcf"}
\ No newline at end of file
--- a/third_party/rust/smallbitvec/Cargo.toml
+++ b/third_party/rust/smallbitvec/Cargo.toml
@@ -7,17 +7,17 @@
 #
 # If you believe there's an error in this file please file an
 # issue against the rust-lang/cargo repository. If you're
 # editing this file be aware that the upstream Cargo.toml
 # will likely look very different (and much more reasonable)
 
 [package]
 name = "smallbitvec"
-version = "1.0.3"
+version = "1.0.6"
 authors = ["Matt Brubeck <mbrubeck@limpet.net>"]
 description = "A bit vector optimized for size and inline storage"
 documentation = "https://docs.rs/smallbitvec"
 readme = "README.md"
 keywords = ["bitvec", "bitmap", "vec", "data-structures"]
 license = "MIT / Apache-2.0"
 repository = "https://github.com/servo/smallbitvec"
 [dev-dependencies.bit-vec]
--- a/third_party/rust/smallbitvec/benches/bench.rs
+++ b/third_party/rust/smallbitvec/benches/bench.rs
@@ -202,8 +202,28 @@ fn bench_from_elem_bv(b: &mut Bencher) {
 fn bench_from_elem_sbv(b: &mut Bencher) {
     let cap = black_box(BENCH_BITS) as u32;
     let bit = black_box(true);
     b.iter(|| {
         SmallBitVec::from_elem(cap, bit)
     });
     b.bytes = cap as u64 / 8;
 }
+
+#[bench]
+fn bench_remove_small(b: &mut Bencher) {
+    b.iter(|| {
+        let mut v = SmallBitVec::from_elem(U32_BITS as u32, false);
+        for _ in 0..U32_BITS {
+            v.remove(0);
+        }
+    });
+}
+
+#[bench]
+fn bench_remove_big(b: &mut Bencher) {
+    b.iter(|| {
+        let mut v = SmallBitVec::from_elem(BENCH_BITS as u32, false);
+        for _ in 0..200 {
+            v.remove(0);
+        }
+    });
+}
--- a/third_party/rust/smallbitvec/src/lib.rs
+++ b/third_party/rust/smallbitvec/src/lib.rs
@@ -39,21 +39,35 @@ fn inline_bits() -> u32 {
 /// For an inline vector, all bits except two can be used as storage capacity:
 ///
 /// - The rightmost bit is set to zero to signal an inline vector.
 /// - The position of the rightmost nonzero bit encodes the length.
 fn inline_capacity() -> u32 {
     inline_bits() - 2
 }
 
-/// The position of the nth bit of storage in an inline vector.
-fn inline_index(n: u32) -> usize {
+/// Left shift amount to access the nth bit
+fn inline_shift(n: u32) -> u32 {
     debug_assert!(n <= inline_capacity());
     // The storage starts at the leftmost bit.
-    1 << (inline_bits() - 1 - n)
+    inline_bits() - 1 - n
+}
+
+/// An inline vector with the nth bit set.
+fn inline_index(n: u32) -> usize {
+    1 << inline_shift(n)
+}
+
+/// An inline vector with the leftmost `n` bits set.
+fn inline_ones(n: u32) -> usize {
+    if n == 0 {
+        0
+    } else {
+        !0 << (inline_bits() - n)
+    }
 }
 
 /// If the rightmost bit of `data` is set, then the remaining bits of `data`
 /// are a pointer to a heap allocation.
 const HEAP_FLAG: usize = 1;
 
 /// The allocation will contain a `Header` followed by a [Storage] buffer.
 type Storage = u32;
@@ -113,23 +127,33 @@ impl SmallBitVec {
     pub fn new() -> SmallBitVec {
         SmallBitVec {
             data: inline_index(0)
         }
     }
 
     /// Create a vector containing `len` bits, each set to `val`.
     pub fn from_elem(len: u32, val: bool) -> SmallBitVec {
+        if len <= inline_capacity() {
+            return SmallBitVec {
+                data: if val {
+                    inline_ones(len + 1)
+                } else {
+                    inline_index(len)
+                }
+            }
+        }
         let header_ptr = Header::new(len, len, val);
         SmallBitVec {
             data: (header_ptr as usize) | HEAP_FLAG
         }
     }
 
-    /// Create a vector with at least `cap` bits of storage.
+    /// Create an empty vector enough storage pre-allocated to store at least `cap` bits without
+    /// resizing.
     pub fn with_capacity(cap: u32) -> SmallBitVec {
         // Use inline storage if possible.
         if cap <= inline_capacity() {
             return SmallBitVec::new()
         }
 
         // Otherwise, allocate on the heap.
         let header_ptr = Header::new(cap, 0, false);
@@ -255,25 +279,51 @@ impl SmallBitVec {
             Some(val)
         }
     }
 
     /// Remove the bit at index `idx`, shifting all later bits toward the front.
     ///
     /// Panics if the index is out of bounds.
     pub fn remove(&mut self, idx: u32) {
-        assert!(idx < self.len(), "Index {} out of bounds", idx);
+        let len = self.len();
+        assert!(idx < len, "Index {} out of bounds", idx);
 
-        for i in (idx+1)..self.len() {
+        if self.is_inline() {
+            // Shift later bits, including the length bit, toward the front.
+            let mask = !inline_ones(idx);
+            let new_vals = (self.data & mask) << 1;
+            self.data = (self.data & !mask) | (new_vals & mask);
+        } else {
+            let first = (idx / bits_per_storage()) as usize;
+            let offset = idx % bits_per_storage();
+            let count = buffer_len(len);
+            {
+                // Shift bits within the first storage block.
+                let buf = self.buffer_mut();
+                let mask = !0 << offset;
+                let new_vals = (buf[first] & mask) >> 1;
+                buf[first] = (buf[first] & !mask) | (new_vals & mask);
+            }
+            // Shift bits in subsequent storage blocks.
+            for i in (first + 1)..count {
+                // Move the first bit into the previous block.
+                let bit_idx = i as u32 * bits_per_storage();
+                unsafe {
+                    let first_bit = self.get_unchecked(bit_idx);
+                    self.set_unchecked(bit_idx - 1, first_bit);
+                }
+                // Shift the remaining bits.
+                self.buffer_mut()[i] >>= 1;
+            }
+            // Decrement the length.
             unsafe {
-                let next_val = self.get_unchecked(i);
-                self.set_unchecked(i - 1, next_val);
+                self.set_len(len - 1);
             }
         }
-        self.pop();
     }
 
     /// Remove all elements from the vector, without deallocating its buffer.
     pub fn clear(&mut self) {
         unsafe {
             self.set_len(0);
         }
     }
@@ -320,17 +370,17 @@ impl SmallBitVec {
     /// Returns true if all the bits in the vec are set to zero/false.
     pub fn all_false(&self) -> bool {
         let mut len = self.len();
         if len == 0 {
             return true
         }
 
         if self.is_inline() {
-            let mask = !(inline_index(len - 1) - 1);
+            let mask = inline_ones(len);
             self.data & mask == 0
         } else {
             for &storage in self.buffer() {
                 if len >= bits_per_storage() {
                     if storage != 0 {
                         return false
                     }
                     len -= bits_per_storage();
@@ -349,17 +399,17 @@ impl SmallBitVec {
     /// Returns true if all the bits in the vec are set to one/true.
     pub fn all_true(&self) -> bool {
         let mut len = self.len();
         if len == 0 {
             return true
         }
 
         if self.is_inline() {
-            let mask = !(inline_index(len - 1) - 1);
+            let mask = inline_ones(len);
             self.data & mask == mask
         } else {
             for &storage in self.buffer() {
                 if len >= bits_per_storage() {
                     if storage != !0 {
                         return false
                     }
                     len -= bits_per_storage();
@@ -408,16 +458,26 @@ impl SmallBitVec {
                 self.set_len(old_self.len());
                 for i in 0..old_self.len() {
                     self.set_unchecked(i, old_self.get_unchecked(i));
                 }
             }
         }
     }
 
+    /// If the vector owns a heap allocation, returns a pointer to the start of the allocation.
+    ///
+    /// The layout of the data at this allocation is a private implementation detail.
+    pub fn heap_ptr(&self) -> Option<*const u32> {
+        match self.is_heap() {
+            true => Some((self.data & !HEAP_FLAG) as *const Storage),
+            false => None
+        }
+    }
+
     /// If the rightmost bit is set, then we treat it as inline storage.
     fn is_inline(&self) -> bool {
         self.data & HEAP_FLAG == 0
     }
 
     /// Otherwise, `data` is a pointer to a heap allocation.
     fn is_heap(&self) -> bool {
         !self.is_inline()
@@ -443,17 +503,17 @@ impl SmallBitVec {
             let header_ptr = self.header_raw();
             let buffer_len = (*header_ptr).buffer_len as usize;
             let buffer_ptr = (header_ptr as *mut Storage)
                 .offset((size_of::<Header>() / size_of::<Storage>()) as isize);
             slice::from_raw_parts_mut(buffer_ptr, buffer_len)
         }
     }
 
-    fn buffer_mut(&self) -> &mut [Storage] {
+    fn buffer_mut(&mut self) -> &mut [Storage] {
         unsafe { &mut *self.buffer_raw() }
     }
 
     fn buffer(&self) -> &[Storage] {
         unsafe { &*self.buffer_raw() }
     }
 }
 
@@ -590,17 +650,17 @@ impl<'a> IntoIterator for &'a SmallBitVe
     type IntoIter = Iter<'a>;
 
     #[inline]
     fn into_iter(self) -> Iter<'a> {
         self.iter()
     }
 }
 
-/// An iterator that borrows a SmallBitVec and yields its bits as `bool` values.
+/// An iterator that owns a SmallBitVec and yields its bits as `bool` values.
 ///
 /// Returned from [`SmallBitVec::into_iter`][1].
 ///
 /// [1]: struct.SmallBitVec.html#method.into_iter
 pub struct IntoIter {
     vec: SmallBitVec,
     range: Range<u32>,
 }
@@ -860,17 +920,49 @@ mod tests {
         let mut v = SmallBitVec::new();
         v.push(false);
         v.push(true);
         v.push(false);
         v.push(false);
         v.push(true);
 
         v.remove(1);
-        assert_eq!(format!("{:?}", v), "[0, 0, 0, 1]")
+        assert_eq!(format!("{:?}", v), "[0, 0, 0, 1]");
+        v.remove(0);
+        assert_eq!(format!("{:?}", v), "[0, 0, 1]");
+        v.remove(2);
+        assert_eq!(format!("{:?}", v), "[0, 0]");
+        v.remove(1);
+        assert_eq!(format!("{:?}", v), "[0]");
+        v.remove(0);
+        assert_eq!(format!("{:?}", v), "[]");
+    }
+
+    #[test]
+    fn remove_big() {
+        let mut v = SmallBitVec::from_elem(256, false);
+        v.set(100, true);
+        v.set(255, true);
+        v.remove(0);
+        assert_eq!(v.len(), 255);
+        assert_eq!(v.get(0), false);
+        assert_eq!(v.get(99), true);
+        assert_eq!(v.get(100), false);
+        assert_eq!(v.get(253), false);
+        assert_eq!(v.get(254), true);
+
+        v.remove(254);
+        assert_eq!(v.len(), 254);
+        assert_eq!(v.get(0), false);
+        assert_eq!(v.get(99), true);
+        assert_eq!(v.get(100), false);
+        assert_eq!(v.get(253), false);
+
+        v.remove(99);
+        assert_eq!(v, SmallBitVec::from_elem(253, false));
     }
 
     #[test]
     fn eq() {
         assert_eq!(v![], v![]);
         assert_eq!(v![true], v![true]);
         assert_eq!(v![false], v![false]);
 
--- a/toolkit/library/gtest/rust/Cargo.lock
+++ b/toolkit/library/gtest/rust/Cargo.lock
@@ -741,17 +741,17 @@ source = "registry+https://github.com/ru
 name = "malloc_size_of"
 version = "0.0.1"
 dependencies = [
  "app_units 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "cssparser 0.21.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.15.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "hashglobe 0.1.0",
  "servo_arc 0.0.1",
- "smallbitvec 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallbitvec 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "smallvec 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "malloc_size_of_derive"
 version = "0.0.1"
 dependencies = [
  "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1239,17 +1239,17 @@ source = "registry+https://github.com/ru
 
 [[package]]
 name = "slab"
 version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "smallbitvec"
-version = "1.0.3"
+version = "1.0.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "smallvec"
 version = "0.4.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -1294,17 +1294,17 @@ dependencies = [
  "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "parking_lot 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "pdqsort 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "precomputed-hash 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "rayon 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "regex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "selectors 0.19.0",
  "servo_arc 0.0.1",
- "smallbitvec 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallbitvec 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "smallvec 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "style_derive 0.0.1",
  "style_traits 0.0.1",
  "time 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)",
  "toml 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-bidi 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-segmentation 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "walkdir 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1745,17 +1745,17 @@ dependencies = [
 "checksum semver 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537"
 "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
 "checksum serde 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "c2f530d36fb84ec48fb7146936881f026cdbf4892028835fd9398475f82c1bb4"
 "checksum serde_derive 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "10552fad5500771f3902d0c5ba187c5881942b811b7ba0d8fbbfbf84d80806d3"
 "checksum serde_derive_internals 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)" = "37aee4e0da52d801acfbc0cc219eb1eda7142112339726e427926a6f6ee65d3a"
 "checksum simd 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a94d14a2ae1f1f110937de5fb69e494372560181c7e1739a097fcc2cee37ba0"
 "checksum siphasher 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2ffc669b726f2bc9a3bcff66e5e23b56ba6bf70e22a34c3d7b6d0b3450b65b84"
 "checksum slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23"
-"checksum smallbitvec 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c1ebf4681dc284c22efb7248986bbdf8aa23c2749ea85a0107e0e787038d303e"
+"checksum smallbitvec 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "79b776f00dfe01df905fa3b2eaa1659522e99e3fc4a7b1334171622205c4bdcf"
 "checksum smallvec 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8fcd03faf178110ab0334d74ca9631d77f94c8c11cc77fcb59538abf0025695d"
 "checksum stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "15132e0e364248108c5e2c02e3ab539be8d6f5d52a01ca9bbf27ed657316f02b"
 "checksum strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694"
 "checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad"
 "checksum synom 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "27e31aa4b09b9f4cb12dff3c30ba503e17b1a624413d764d32dab76e3920e5bc"
 "checksum synstructure 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "cf318c34a2f8381a4f3d4db2c91b45bca2b1cd8cbe56caced900647be164800c"
 "checksum syntex 0.58.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a8f5e3aaa79319573d19938ea38d068056b826db9883a5d47f86c1cecc688f0e"
 "checksum syntex_errors 0.58.1 (registry+https://github.com/rust-lang/crates.io-index)" = "867cc5c2d7140ae7eaad2ae9e8bf39cb18a67ca651b7834f88d46ca98faadb9c"
--- a/toolkit/library/rust/Cargo.lock
+++ b/toolkit/library/rust/Cargo.lock
@@ -739,17 +739,17 @@ source = "registry+https://github.com/ru
 name = "malloc_size_of"
 version = "0.0.1"
 dependencies = [
  "app_units 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "cssparser 0.21.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.15.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "hashglobe 0.1.0",
  "servo_arc 0.0.1",
- "smallbitvec 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallbitvec 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "smallvec 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "malloc_size_of_derive"
 version = "0.0.1"
 dependencies = [
  "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1226,17 +1226,17 @@ source = "registry+https://github.com/ru
 
 [[package]]
 name = "slab"
 version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "smallbitvec"
-version = "1.0.3"
+version = "1.0.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "smallvec"
 version = "0.4.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -1281,17 +1281,17 @@ dependencies = [
  "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "parking_lot 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "pdqsort 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "precomputed-hash 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "rayon 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "regex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "selectors 0.19.0",
  "servo_arc 0.0.1",
- "smallbitvec 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallbitvec 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "smallvec 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "style_derive 0.0.1",
  "style_traits 0.0.1",
  "time 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)",
  "toml 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-bidi 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-segmentation 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "walkdir 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1732,17 +1732,17 @@ dependencies = [
 "checksum semver 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537"
 "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
 "checksum serde 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "c2f530d36fb84ec48fb7146936881f026cdbf4892028835fd9398475f82c1bb4"
 "checksum serde_derive 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "10552fad5500771f3902d0c5ba187c5881942b811b7ba0d8fbbfbf84d80806d3"
 "checksum serde_derive_internals 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)" = "37aee4e0da52d801acfbc0cc219eb1eda7142112339726e427926a6f6ee65d3a"
 "checksum simd 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a94d14a2ae1f1f110937de5fb69e494372560181c7e1739a097fcc2cee37ba0"
 "checksum siphasher 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2ffc669b726f2bc9a3bcff66e5e23b56ba6bf70e22a34c3d7b6d0b3450b65b84"
 "checksum slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23"
-"checksum smallbitvec 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c1ebf4681dc284c22efb7248986bbdf8aa23c2749ea85a0107e0e787038d303e"
+"checksum smallbitvec 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "79b776f00dfe01df905fa3b2eaa1659522e99e3fc4a7b1334171622205c4bdcf"
 "checksum smallvec 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8fcd03faf178110ab0334d74ca9631d77f94c8c11cc77fcb59538abf0025695d"
 "checksum stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "15132e0e364248108c5e2c02e3ab539be8d6f5d52a01ca9bbf27ed657316f02b"
 "checksum strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694"
 "checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad"
 "checksum synom 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "27e31aa4b09b9f4cb12dff3c30ba503e17b1a624413d764d32dab76e3920e5bc"
 "checksum synstructure 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "cf318c34a2f8381a4f3d4db2c91b45bca2b1cd8cbe56caced900647be164800c"
 "checksum syntex 0.58.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a8f5e3aaa79319573d19938ea38d068056b826db9883a5d47f86c1cecc688f0e"
 "checksum syntex_errors 0.58.1 (registry+https://github.com/rust-lang/crates.io-index)" = "867cc5c2d7140ae7eaad2ae9e8bf39cb18a67ca651b7834f88d46ca98faadb9c"