[rust] Update latest semver-compatible-versions

TEST: CQ
Change-Id: I6819ed3128254d58f59508900c40562dd0289ea5
diff --git a/rustc_deps/Cargo.lock b/rustc_deps/Cargo.lock
index fcca920..bcaef88 100644
--- a/rustc_deps/Cargo.lock
+++ b/rustc_deps/Cargo.lock
@@ -42,7 +42,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "backtrace-sys 0.1.24",
- "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.3.6",
@@ -76,7 +76,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -85,7 +85,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -170,7 +170,7 @@
 
 [[package]]
 name = "cfg-if"
-version = "0.1.5"
+version = "0.1.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -318,22 +318,22 @@
 
 [[package]]
 name = "failure"
-version = "0.1.2"
+version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
- "failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "failure_derive 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "failure_derive"
-version = "0.1.2"
+version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)",
- "synstructure 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "synstructure 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -346,18 +346,18 @@
 version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
  "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "flate2"
-version = "1.0.3"
+version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
- "miniz_oxide_c_api 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "miniz_oxide_c_api 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -383,7 +383,7 @@
  "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "crossbeam 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.19.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "font-rs 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "futures-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "getopts 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -404,8 +404,8 @@
  "rouille 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "rust-crypto 0.2.36",
  "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)",
  "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "structopt 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -429,7 +429,7 @@
 version = "0.3.3"
 dependencies = [
  "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "fuchsia-zircon-sys 0.3.3",
 ]
 
@@ -439,15 +439,15 @@
 
 [[package]]
 name = "futures-channel-preview"
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "futures-core-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-core-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "futures-core-preview"
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -455,12 +455,12 @@
 
 [[package]]
 name = "futures-executor-preview"
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "futures-channel-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-util-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-channel-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-core-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-util-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "pin-utils 0.1.0-alpha.3 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -468,10 +468,10 @@
 
 [[package]]
 name = "futures-io-preview"
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "futures-core-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-core-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -480,34 +480,34 @@
 version = "0.3.0-alpha.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "futures-channel-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-executor-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-io-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-sink-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-util-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-channel-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-core-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-executor-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-io-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-sink-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-util-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "futures-sink-preview"
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-channel-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-channel-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-core-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "futures-util-preview"
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-channel-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-io-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-sink-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-channel-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-core-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-io-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-sink-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "pin-utils 0.1.0-alpha.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -614,7 +614,7 @@
 version = "0.4.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -635,7 +635,7 @@
 version = "2.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
  "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -661,22 +661,21 @@
 
 [[package]]
 name = "miniz_oxide"
-version = "0.1.3"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "miniz_oxide_c_api"
-version = "0.1.3"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
  "crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
- "miniz_oxide 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "miniz_oxide 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -700,7 +699,7 @@
 version = "0.2.33"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.3.6",
 ]
@@ -868,7 +867,7 @@
  "base64 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
  "xml-rs 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -985,8 +984,8 @@
  "multipart 0.13.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)",
  "sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "term 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1042,17 +1041,17 @@
 
 [[package]]
 name = "serde"
-version = "1.0.79"
+version = "1.0.80"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "serde_derive"
-version = "1.0.79"
+version = "1.0.80"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 0.15.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.13 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -1062,7 +1061,7 @@
 dependencies = [
  "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "ryu 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -1125,22 +1124,12 @@
 dependencies = [
  "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 0.15.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.13 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "syn"
-version = "0.14.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "syn"
-version = "0.15.9"
+version = "0.15.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1150,12 +1139,12 @@
 
 [[package]]
 name = "synstructure"
-version = "0.9.0"
+version = "0.10.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)",
  "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -1166,11 +1155,11 @@
 dependencies = [
  "bincode 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "flate2 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "flate2 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "plist 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)",
  "walkdir 2.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -1189,7 +1178,7 @@
 version = "3.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1269,7 +1258,7 @@
 version = "0.4.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -1403,8 +1392,8 @@
 version = "0.2.0"
 dependencies = [
  "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)",
  "sha2 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "syntect 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1423,8 +1412,8 @@
 dependencies = [
  "bytecount 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "memchr 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -1432,8 +1421,8 @@
 version = "0.2.0"
 dependencies = [
  "crossbeam 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)",
  "xi-trace 0.1.0",
 ]
@@ -1444,8 +1433,8 @@
 dependencies = [
  "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
  "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -1454,8 +1443,8 @@
 version = "0.1.0"
 dependencies = [
  "bincode 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)",
  "xi-trace 0.1.0",
 ]
@@ -1496,7 +1485,7 @@
 "checksum byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "90492c5858dd7d2e78691cfb89f90d273a2800fc11d98f60786e5d87e2f83781"
 "checksum bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "0ce55bd354b095246fc34caf4e9e242f5297a7fd938b090cadfea6eee614aa62"
 "checksum cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16"
-"checksum cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0c4e7bb64a8ebb0d856483e1e682ea3422f883c5f5615a90d51a2c82fe87fdd3"
+"checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4"
 "checksum chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "45912881121cb26fad7c38c17ba7daa18764771836b34fab7d3fbd93ed633878"
 "checksum chunked_transfer 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "498d20a7aaf62625b9bf26e637cf7736417cde1d0c99f1d04d1170229a85cf87"
 "checksum clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b957d88f4b6a63b9d70d5f454ac8011819c6efa7727858f458ab71c756ce2d3e"
@@ -1515,19 +1504,19 @@
 "checksum encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18"
 "checksum encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569"
 "checksum euclid 0.19.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4019b11e3498dd84d8893848c3d70e40c6dc71bb277ae5252cc16af006d06872"
-"checksum failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7efb22686e4a466b1ec1a15c2898f91fa9cb340452496dca654032de20ff95b9"
-"checksum failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "946d0e98a50d9831f5d589038d2ca7f8f455b1c21028c0db0e84116a12696426"
+"checksum failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6dd377bcc1b1b7ce911967e3ec24fa19c3224394ec05b54aa7b083d498341ac7"
+"checksum failure_derive 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "64c2d913fe8ed3b6c6518eedf4538255b989945c14c2a7d5cbff62a5e2120596"
 "checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
 "checksum filetime 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "da4b9849e77b13195302c174324b5ba73eec9b236b24c221a61000daefb95c5f"
-"checksum flate2 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4af030962d89d62aa52cd9492083b1cd9b2d1a77764878102a6c0f86b4d5444d"
+"checksum flate2 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3b0c7353385f92079524de3b7116cf99d73947c08a7472774e9b3b04bff3b901"
 "checksum font-rs 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "33939d997b0ef798cc92c9cc49a535c9b085273e121cc8e8281561be1fd76cd2"
-"checksum futures-channel-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)" = "0c94a8271a814b531d77cc7276c96eb608592f4b0b3ad59b85b222dadbe7c956"
-"checksum futures-core-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)" = "9e675b722fce30dc1e28fd56158ce7df5c8479b84a6d5145f51e70d4d9c01280"
-"checksum futures-executor-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6eb82c5e5cfea3721b532299906e9f151deaeaf153d98d576cd55dc63a8152e5"
-"checksum futures-io-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)" = "269e02056dbec264699c385999d67c5cc098e7d39c52c8b21a5adc26cfde62ee"
+"checksum futures-channel-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)" = "ab71b4d4948210b1ff4703e66cc9d931afd8ba35b5657cf369374a091cca96ed"
+"checksum futures-core-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e5fea6d4920bf1745d87f8624abdd38ed03fb5b644767b84a0de882fe46c4153"
+"checksum futures-executor-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)" = "43d4bb2cc4c0cefc554b0cf12f7151e0a578cf1820a36453eff1d955dde762ff"
+"checksum futures-io-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)" = "91bd6aba63f52d532c0f4ca6e9960f80a1b4295c292362baf2cad6d739fa9123"
 "checksum futures-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)" = "12ca220b8c9cf700a5dc1afa999b9e20b46a231824d040007f43b05f297c78cc"
-"checksum futures-sink-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6b1b0cb0849f75d1c58117c3cea8fd8850a2ad4a85f65c94a45325bbe73d9c09"
-"checksum futures-util-preview 0.3.0-alpha.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f50fb4d68c9cf04222863445797d974d4d32d11eb45cc86bcb16dc46f3fa80f5"
+"checksum futures-sink-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)" = "cd7799480a224d80e9e915a6bf8bff27498e8210b831f5a513af09d5c1db2e36"
+"checksum futures-util-preview 0.3.0-alpha.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b73a6f85964a8291914db0114ccb0045c994c58b2110c4cf4ac47f5d2176ec90"
 "checksum gcc 0.3.55 (registry+https://github.com/rust-lang/crates.io-index)" = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2"
 "checksum generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d"
 "checksum getopts 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "0a7292d30132fb5424b354f5dc02512a86e4c516fe544bb7a25e7f266951b797"
@@ -1548,8 +1537,8 @@
 "checksum memchr 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4b3629fe9fdbff6daa6c33b90f7c08355c1aca05a3d01fa8063b822fcf185f3b"
 "checksum mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0"
 "checksum mime_guess 1.8.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2d4c0961143b8efdcfa29c3ae63281601b446a4a668165454b6c90f8024954c5"
-"checksum miniz_oxide 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9ba430291c9d6cedae28bcd2d49d1c32fc57d60cd49086646c5dd5673a870eb5"
-"checksum miniz_oxide_c_api 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "5a5b8234d6103ebfba71e29786da4608540f862de5ce980a1c94f86a40ca0d51"
+"checksum miniz_oxide 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5ad30a47319c16cde58d0314f5d98202a80c9083b5f61178457403dfb14e509c"
+"checksum miniz_oxide_c_api 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "28edaef377517fd9fe3e085c37d892ce7acd1fbeab9239c5a36eec352d8a8b7e"
 "checksum multipart 0.13.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92f54eb45230c3aa20864ccf0c277eeaeadcf5e437e91731db498dbf7fbe0ec6"
 "checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88"
 "checksum nom 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05aec50c70fd288702bcd93284a8444607f3292dbdf2a30de5ea5dcdbe72287b"
@@ -1590,8 +1579,8 @@
 "checksum safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e27a8b19b835f7aea908818e871f5cc3a5a186550c30773be987e155e8163d8f"
 "checksum safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8dca453248a96cb0749e36ccdfe2b0b4e54a61bfef89fb97ec621eb8e0a93dd9"
 "checksum same-file 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "10f7794e2fda7f594866840e95f5c5962e886e228e68b6505885811a94dd728c"
-"checksum serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)" = "84257ccd054dc351472528c8587b4de2dbf0dc0fe2e634030c1a90bfdacebaa9"
-"checksum serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)" = "31569d901045afbff7a9479f793177fe9259819aff10ab4f89ef69bbc5f567fe"
+"checksum serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)" = "15c141fc7027dd265a47c090bf864cf62b42c4d228bbcf4e51a0c9e2b0d3f7ef"
+"checksum serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)" = "225de307c6302bec3898c51ca302fc94a7a1697ef0845fcee6448f33c032249c"
 "checksum serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)" = "43344e7ce05d0d8280c5940cabb4964bea626aa58b1ec0e8c73fa2a8512a38ce"
 "checksum sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d"
 "checksum sha2 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9eb6be24e4c23a84d7184280d2722f7f2731fcdd4a9d886efbfe4413e4847ea0"
@@ -1602,9 +1591,8 @@
 "checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550"
 "checksum structopt 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "d77af7242f18c40fd19cb270985930f239ee1646cfb482050bbae9da1d18743b"
 "checksum structopt-derive 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "17ff01fe96de9d16e7372ae5f19dd7ece2c703b51043c3db9ea27f9e393ea311"
-"checksum syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)" = "261ae9ecaa397c42b960649561949d69311f08eeaea86a65696e6e46517cf741"
-"checksum syn 0.15.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b10ee269228fb723234fce98e9aac0eaed2bd5f1ad2f6930e8d5b93f04445a1a"
-"checksum synstructure 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "85bb9b7550d063ea184027c9b8c20ac167cd36d3e06b3a40bceb9d746dc1a7b7"
+"checksum syn 0.15.13 (registry+https://github.com/rust-lang/crates.io-index)" = "7b4439ee8325b4e4b57e59309c3724c9a4478eaeb4eb094b6f3fac180a3b2876"
+"checksum synstructure 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ec37f4fab4bafaf6b5621c1d54e6aa5d4d059a8f84929e87abfdd7f9f04c6db2"
 "checksum syntect 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dc8a6f0db88d4afc340522c20d260411e746b2225b257c6b238a75de9d7cec78"
 "checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
 "checksum tempfile 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "55c1195ef8513f3273d55ff59fe5da6940287a0d7a98331254397f464833675b"
diff --git a/rustc_deps/vendor/cfg-if/.cargo-checksum.json b/rustc_deps/vendor/cfg-if/.cargo-checksum.json
index eb39a16..970762f 100644
--- a/rustc_deps/vendor/cfg-if/.cargo-checksum.json
+++ b/rustc_deps/vendor/cfg-if/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{".travis.yml":"b1310eed4c508d9bf0d4cd22a1b900ebf2ffe87669973bbedd063722307d4329","Cargo.toml":"6e30f3dfe9757697f5d5dec122bd09115cf7b4d03a9227c717a00469a63bdf9e","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"1cd0ebc3b30a9c9eddb0fda5515b5a52ec2b85a087328f0ee9f4d68cbb28afc2","src/lib.rs":"a21722870f592590f6d9deb949bf1ff0cb41ba4607c5420bc91012e8e15f9559","tests/xcrate.rs":"30dcb70fbb9c96fda2b7825592558279f534776f72e2a8a0a3e26df4dedb3caa"},"package":"0c4e7bb64a8ebb0d856483e1e682ea3422f883c5f5615a90d51a2c82fe87fdd3"}
\ No newline at end of file
+{"files":{".travis.yml":"b1310eed4c508d9bf0d4cd22a1b900ebf2ffe87669973bbedd063722307d4329","Cargo.toml":"090d983ec20ad09e59f6b7679b48b9b54e9c0841cf2922b81cba485edcd40876","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"1cd0ebc3b30a9c9eddb0fda5515b5a52ec2b85a087328f0ee9f4d68cbb28afc2","src/lib.rs":"f02d6e295109365cf54884e5282a3e7d1e1f62857c700f23cd013e94a56bd803","tests/xcrate.rs":"30dcb70fbb9c96fda2b7825592558279f534776f72e2a8a0a3e26df4dedb3caa"},"package":"082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/cfg-if/Cargo.toml b/rustc_deps/vendor/cfg-if/Cargo.toml
index fcf22de..84c4fc7 100644
--- a/rustc_deps/vendor/cfg-if/Cargo.toml
+++ b/rustc_deps/vendor/cfg-if/Cargo.toml
@@ -12,7 +12,7 @@
 
 [package]
 name = "cfg-if"
-version = "0.1.5"
+version = "0.1.6"
 authors = ["Alex Crichton <alex@alexcrichton.com>"]
 description = "A macro to ergonomically define an item depending on a large number of #[cfg]\nparameters. Structured like an if-else chain, the first matching branch is the\nitem that gets emitted.\n"
 homepage = "https://github.com/alexcrichton/cfg-if"
diff --git a/rustc_deps/vendor/cfg-if/src/lib.rs b/rustc_deps/vendor/cfg-if/src/lib.rs
index 87de21d..ff144f6 100644
--- a/rustc_deps/vendor/cfg-if/src/lib.rs
+++ b/rustc_deps/vendor/cfg-if/src/lib.rs
@@ -32,7 +32,7 @@
 #![deny(missing_docs)]
 #![cfg_attr(test, deny(warnings))]
 
-#[macro_export]
+#[macro_export(local_inner_macros)]
 macro_rules! cfg_if {
     // match if/else chains with a final `else`
     ($(
diff --git a/rustc_deps/vendor/failure/.cargo-checksum.json b/rustc_deps/vendor/failure/.cargo-checksum.json
index cee2be5..0213c3b 100644
--- a/rustc_deps/vendor/failure/.cargo-checksum.json
+++ b/rustc_deps/vendor/failure/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{".gitlab-ci.yml":"dfbe8fcda3a10c658667ea934358eae2189f7c711e3cff710fba47615b80c75f",".travis.yml":"a2f3133877d5c4b9a7bbbff6baa7773800243ff2e1e58a06203c4568afe3a305","CODE_OF_CONDUCT.md":"9a7bc3fdffac1288f51485e70a910a4e9de1260a64fbe894f60ad73b3386dda9","Cargo.toml":"3a98883b13c1a173040be8f56823d99ad386a6f6af9b132409ee73abf3216f37","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","Makefile":"61a649ecb55115ba0f357215eb322fa6676ce163ca20bff59d7c5e275aa37035","README.md":"d4dba8ed8b388c1e24bcaaa0f0e75a0830885d6db9bedc9630591a180c744f73","RELEASES.md":"1bc2465747601bb73792db0522dd65811c48344bf3dfe4647403a9e02b52c0ad","book/src/SUMMARY.md":"362b6457309da979003cbd447fe24be43ac62bfee1aab764b41b43d21451cdf9","book/src/bail-and-ensure.md":"08fb463570143ec6568189468f1f54a7210b0a1ad66a57f7f7c36619831b4d72","book/src/custom-fail.md":"d4b1501201f9c54637bc40a2413e333f6f7d4fcfc8e3de74bf40d48eca0d4e41","book/src/derive-fail.md":"69916338286f970ae6709fb309bd4d80c321fea10b927f14efe402e3c0a5fdc9","book/src/error-errorkind.md":"40663de622bfb89a3dedcf6e093ec61eb1ab704d512d725e33f66aec38911757","book/src/error-msg.md":"2ab003bde8e88e0e3b9d1559d95e84b0ca7068522e324235bc4b2fdb88996d51","book/src/error.md":"c978778e7986e5febfb37e635525053ef73c534e4b6e9fc25deb576fdbdc111d","book/src/fail.md":"fab53bd4c0ad9a70809a95221c6c6b7103130b1f399a91bef9b963a8c924e210","book/src/guidance.md":"614cb85ae32c2b59119cd1db7eea008e50b051563c15ba1305f312fa2eeb3ac0","book/src/howto.md":"e18744011f5cc5779f5bb981ebd10f0af440c98398b2eb5af0ee27b9662ee410","book/src/intro.md":"eeb23e1ac3ccf75c4779603662910e96df647a02c73665a206dcc34c56d77eaf","book/src/use-error.md":"a7f91e06eb676318da04a56e4b31c73dd7db888d43c215e1534a5bc415e98258","build-docs.sh":"27b611219773192b9f972b2054522481fd5c2c9419c155535f58d05bfc31fffe","examples/bail_ensure.rs":"fffc71e41f9fbbc2a7db453ef20779716007ed6bbb01e45fbcefb1e073745ecc","examples/simple.rs":"7a5fc0673b6bb5bd3716416a6545f7ff471d182292a2c8424cf18bc4a72f6936","src/backtrace/internal.rs":"3fc4943061d4396c855571f134cd922f428cbe930689c8191376867b729d7b08","src/backtrace/mod.rs":"df3a348300775182c2780c542f119c989a6004cff841d817bdf7b93eef9a0dd3","src/box_std.rs":"224f3e3f48ad217ba34a54a62f608f9cba3ce95b176558684706c2f7fe72ce72","src/compat.rs":"97ed4fa49ac80c915b384b29a1bf678430cf1ea8ea61aa794a6014a1c3217762","src/context.rs":"ec6407ce720bbb92219b02500647e1e72c9e1dca3bbb8d67b4231c81f60d1157","src/error/error_impl.rs":"df9f904ee1e7d3aeb18ea5de7ea2fb38f9b6f500244093fa253036f066a785ea","src/error/error_impl_small.rs":"e6cbbd4d12e8eec1bd0f15713d33a0e525599268c9316dd40240eb7cd9e19a9d","src/error/mod.rs":"48e9504329eb894a37b5d800ae448acfdc15ef2acf5f73f402867ca6719197de","src/error_message.rs":"2a45a3bd142e6547fc5da27c182fb690e2990de11db2a9b8ce63e50d9c589997","src/lib.rs":"c09752622baad0ef9d8d7deb828f2e3e48afe8231802350f2612fa1b4dce4cd4","src/macros.rs":"79c2acd8127a8dc2a3a8dab9bc7f72db549990d297120fcd9dd80a416781dd55","src/result_ext.rs":"8088c3cb1481e81891014c99cc0f1b75f25a2f212b52ae856583e4c1f1901d09","src/small_error.rs":"652bf6ff2016d8e31b6ee709ad3efaff9f4e96d5aec8120ea3986a0bb8f57c54","src/sync_failure.rs":"a92a2e8b416196322718a4e7e1262f5b1b0a6be47b849d9a7e1050c1d33490db","travis.sh":"836024f7a56fdbe24a99ab9ce9350713831f4375a60f02593aad6637b766a330"},"package":"7efb22686e4a466b1ec1a15c2898f91fa9cb340452496dca654032de20ff95b9"}
\ No newline at end of file
+{"files":{".gitlab-ci.yml":"dfbe8fcda3a10c658667ea934358eae2189f7c711e3cff710fba47615b80c75f",".travis.yml":"a2f3133877d5c4b9a7bbbff6baa7773800243ff2e1e58a06203c4568afe3a305","CODE_OF_CONDUCT.md":"9a7bc3fdffac1288f51485e70a910a4e9de1260a64fbe894f60ad73b3386dda9","Cargo.toml":"2e6b46b3ac49b9890868cd4ea2118efbaf4ca80e136a1b5b417ce95ea91fb293","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","Makefile":"61a649ecb55115ba0f357215eb322fa6676ce163ca20bff59d7c5e275aa37035","README.md":"d4dba8ed8b388c1e24bcaaa0f0e75a0830885d6db9bedc9630591a180c744f73","RELEASES.md":"42304b5bc4cfd3a5f93d17bfe34d24f6b8bb918e89c57425adbb503f500b558c","book/src/SUMMARY.md":"32f211f5aeb51a05b3c6a41a128bdb9e410ae84008a93e6b13442e45cd1c91d4","book/src/bail-and-ensure.md":"08fb463570143ec6568189468f1f54a7210b0a1ad66a57f7f7c36619831b4d72","book/src/custom-fail.md":"d4b1501201f9c54637bc40a2413e333f6f7d4fcfc8e3de74bf40d48eca0d4e41","book/src/derive-fail.md":"69916338286f970ae6709fb309bd4d80c321fea10b927f14efe402e3c0a5fdc9","book/src/error-errorkind.md":"40663de622bfb89a3dedcf6e093ec61eb1ab704d512d725e33f66aec38911757","book/src/error-msg.md":"2ab003bde8e88e0e3b9d1559d95e84b0ca7068522e324235bc4b2fdb88996d51","book/src/error.md":"c978778e7986e5febfb37e635525053ef73c534e4b6e9fc25deb576fdbdc111d","book/src/fail.md":"076ed560e9ad293bf99611f9407d4dc17310c42cf1652dd1f3f4be85fb5f17b8","book/src/guidance.md":"614cb85ae32c2b59119cd1db7eea008e50b051563c15ba1305f312fa2eeb3ac0","book/src/howto.md":"e18744011f5cc5779f5bb981ebd10f0af440c98398b2eb5af0ee27b9662ee410","book/src/intro.md":"eeb23e1ac3ccf75c4779603662910e96df647a02c73665a206dcc34c56d77eaf","book/src/string-custom-error.md":"f1d94e211f1d2dfb2d9d9a0d7eb745b8ea7f08f26243283fddb440cb099893ff","book/src/use-error.md":"a7f91e06eb676318da04a56e4b31c73dd7db888d43c215e1534a5bc415e98258","build-docs.sh":"27b611219773192b9f972b2054522481fd5c2c9419c155535f58d05bfc31fffe","examples/bail_ensure.rs":"fffc71e41f9fbbc2a7db453ef20779716007ed6bbb01e45fbcefb1e073745ecc","examples/error_as_cause.rs":"e0a6472455db5e484febc196667bc46c939d9f890bfe550ab7435d52b1ac6b2b","examples/simple.rs":"7a5fc0673b6bb5bd3716416a6545f7ff471d182292a2c8424cf18bc4a72f6936","examples/string_custom_error_pattern.rs":"23b5bf79a7219aa8a80484c0df70cd43d882b7dccd91de9ceb1aac05b0b1b4f2","src/as_fail.rs":"8a381a9624b3d28b45f92f8b527d7496e7a722c8aa0d632f0b23bbe0af98a76e","src/backtrace/internal.rs":"3fc4943061d4396c855571f134cd922f428cbe930689c8191376867b729d7b08","src/backtrace/mod.rs":"df3a348300775182c2780c542f119c989a6004cff841d817bdf7b93eef9a0dd3","src/box_std.rs":"224f3e3f48ad217ba34a54a62f608f9cba3ce95b176558684706c2f7fe72ce72","src/compat.rs":"97ed4fa49ac80c915b384b29a1bf678430cf1ea8ea61aa794a6014a1c3217762","src/context.rs":"d91ed85add638af7c9d481cb82ee6633c3678978951a5530c166fc156efac2e4","src/error/error_impl.rs":"063b9d9127f455b7555184af2576bc59e650add13c820be4960a3a5e5da0a9e4","src/error/error_impl_small.rs":"e6cbbd4d12e8eec1bd0f15713d33a0e525599268c9316dd40240eb7cd9e19a9d","src/error/mod.rs":"103621b313bd729c94054c5d88edd59d8c07311b650873e81b5021362647ae7a","src/error_message.rs":"2a45a3bd142e6547fc5da27c182fb690e2990de11db2a9b8ce63e50d9c589997","src/lib.rs":"0969303376ab328e16d7c64d690fc71a1e4eee00b413e79009cd590a2c4abbc0","src/macros.rs":"47cc9c73291e6edb3365d72b772d781215d123240f89a5fff914d23927781efa","src/result_ext.rs":"8088c3cb1481e81891014c99cc0f1b75f25a2f212b52ae856583e4c1f1901d09","src/small_error.rs":"652bf6ff2016d8e31b6ee709ad3efaff9f4e96d5aec8120ea3986a0bb8f57c54","src/sync_failure.rs":"a92a2e8b416196322718a4e7e1262f5b1b0a6be47b849d9a7e1050c1d33490db","travis.sh":"836024f7a56fdbe24a99ab9ce9350713831f4375a60f02593aad6637b766a330"},"package":"6dd377bcc1b1b7ce911967e3ec24fa19c3224394ec05b54aa7b083d498341ac7"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/failure/Cargo.toml b/rustc_deps/vendor/failure/Cargo.toml
index 89d0c0d..e478d73 100644
--- a/rustc_deps/vendor/failure/Cargo.toml
+++ b/rustc_deps/vendor/failure/Cargo.toml
@@ -12,7 +12,7 @@
 
 [package]
 name = "failure"
-version = "0.1.2"
+version = "0.1.3"
 authors = ["Without Boats <boats@mozilla.com>"]
 description = "Experimental error handling abstraction."
 homepage = "https://boats.gitlab.io/failure"
@@ -24,7 +24,7 @@
 optional = true
 
 [dependencies.failure_derive]
-version = "0.1.2"
+version = "0.1.3"
 optional = true
 
 [features]
diff --git a/rustc_deps/vendor/failure/RELEASES.md b/rustc_deps/vendor/failure/RELEASES.md
index f4263fe..2de325e 100644
--- a/rustc_deps/vendor/failure/RELEASES.md
+++ b/rustc_deps/vendor/failure/RELEASES.md
@@ -1,3 +1,29 @@
+# Version 0.1.3
+
+- Added `Context::map`
+- Fixed a memory leak for older rust versions on error downcast
+
+# Version 0.1.2
+
+The original plan to release 1.0.0 was changed so that version 0.1.1 is released and a related [RFC to fix the error trait](https://github.com/rust-lang/rfcs/pull/2504) is submitted. See README for details.
+
+- Fix `failure_derive` to work with Rust 2018.
+- Add `#[fail(cause)]` that works similarly with `#[cause]`. The new form is preferred.
+- Fix `"backtrace"` feature to work without `"std"` feature.
+- Add `Compat::get_ref`.
+- Add `Fallible`.
+- Deprecate `Fail::causes` and `<dyn Fail>::causes` in favor of newly added `<dyn Fail>::iter_causes`.
+- Deprecate `Fail::root_cause` and `<dyn Fail>::root_cause` in favor of newly added `<dyn Fail>::find_root_cause`.
+- Add `<dyn Fail>::iter_chain`.
+- Implement `Box<Fail>: Fail`.
+- Add `Error::from_boxed_compat`.
+- Deprecate `Error::cause` in favor of newly added `Error::as_fail`.
+- Deprecate `Error::causes` in favor of newly added `Error::iter_chain`.
+- Deprecate `Error::root_cause` in favor of newly added `Error::find_root_cause`.
+- Add `Error::iter_causes`.
+- Implement `Error: AsRef<Fail>`.
+- Fix `Debug` implementation of `SyncFailure`.
+
 # Version 0.1.1
 
 - Add a `Causes` iterator, which iterates over the causes of a failure. Can be
diff --git a/rustc_deps/vendor/failure/book/src/SUMMARY.md b/rustc_deps/vendor/failure/book/src/SUMMARY.md
index 20a86d9..e5c8a3b 100644
--- a/rustc_deps/vendor/failure/book/src/SUMMARY.md
+++ b/rustc_deps/vendor/failure/book/src/SUMMARY.md
@@ -11,3 +11,4 @@
     - [A Custom Fail type](./custom-fail.md)
     - [Using the Error type](./use-error.md)
     - [An Error and ErrorKind pair](./error-errorkind.md)
+    - [Strings and custom fail type](./string-custom-error.md)
diff --git a/rustc_deps/vendor/failure/book/src/fail.md b/rustc_deps/vendor/failure/book/src/fail.md
index 5664005..4d337c3 100644
--- a/rustc_deps/vendor/failure/book/src/fail.md
+++ b/rustc_deps/vendor/failure/book/src/fail.md
@@ -8,7 +8,7 @@
 - It has both a `backtrace` and a `cause` method, allowing users to get
   information about how the error occurred.
 - It supports wrapping failures in additional contextual information.
-- Because it is bound by `Send` and `Sync`, failures can be moved and share
+- Because it is bound by `Send` and `Sync`, failures can be moved and shared
   between threads easily.
 - Because it is bound by `'static`, the abstract `Fail` trait object can be
   downcast into concrete types.
diff --git a/rustc_deps/vendor/failure/book/src/string-custom-error.md b/rustc_deps/vendor/failure/book/src/string-custom-error.md
new file mode 100644
index 0000000..a567836
--- /dev/null
+++ b/rustc_deps/vendor/failure/book/src/string-custom-error.md
@@ -0,0 +1,160 @@
+# Strings and custom fail type
+
+This pattern is an hybrid between the [_An Error and ErrorKind pair_](./error-errorkind.md) and
+[_Using the Error type_](./use-error.md).
+
+Such an error type can be implemented in the same way that what was shown in
+the [_An Error and ErrorKind pair_](./error-errorkind.md) pattern, but here, the context is a
+simple string:
+
+```rust
+extern crate core;
+extern crate failure;
+
+use core::fmt::{self, Display};
+use failure::{Backtrace, Context, Fail, ResultExt};
+
+#[derive(Debug)]
+pub struct MyError {
+    inner: Context<String>,
+}
+
+impl Fail for MyError {
+    fn cause(&self) -> Option<&Fail> {
+        self.inner.cause()
+    }
+
+    fn backtrace(&self) -> Option<&Backtrace> {
+        self.inner.backtrace()
+    }
+}
+
+impl Display for MyError {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        Display::fmt(&self.inner, f)
+    }
+}
+```
+
+To make the type easier to use, a few impls can be added:
+
+```rust
+// Allows writing `MyError::from("oops"))?`
+impl From<&'static str> for MyError {
+    fn from(msg: &'static str) -> MyError {
+        MyError {
+            inner: Context::new(msg),
+        }
+    }
+}
+
+// Allows adding more context via a String
+impl From<Context<String>> for MyError {
+    fn from(inner: Context<String>) -> MyError {
+        MyError { inner }
+    }
+}
+
+// Allows adding more context via a &str
+impl From<Context<&'static str>> for MyError {
+    fn from(inner: Context<&'static str>) -> MyError {
+        MyError {
+            inner: inner.map(|s| s.to_string()),
+        }
+    }
+}
+```
+
+Here is how it is used:
+
+```rust
+fn main() {
+    println!("{:?}", err2());
+}
+
+// Unlike the "Using the Error type" pattern, functions return our own error
+// type here.
+fn err1() -> Result<(), MyError> {
+    Ok(Err(MyError::from("err1"))?)
+}
+
+fn err2() -> Result<(), MyError> {
+    // Unlike the "An Error and ErrorKind pair" pattern, our context is a
+    // simple string. We can chain errors and provide detailed error messages,
+    // but we don't have to deal with the complexity of an error kind type
+    Ok(err1().context("err2")?)
+}
+```
+
+## Variant with `&'static str`
+
+If you don't need to format strings, you can avoid an
+allocation by using a `Context<&'static str>` instead of a
+`Context<String>`.
+
+```rust
+extern crate core;
+extern crate failure;
+
+use core::fmt::{self, Display};
+use failure::{Backtrace, Context, Fail, ResultExt};
+
+#[derive(Debug)]
+pub struct MyError {
+    inner: Context<&'static str>,
+}
+
+impl Fail for MyError {
+    fn cause(&self) -> Option<&Fail> {
+        self.inner.cause()
+    }
+
+    fn backtrace(&self) -> Option<&Backtrace> {
+        self.inner.backtrace()
+    }
+}
+
+impl Display for MyError {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        Display::fmt(&self.inner, f)
+    }
+}
+
+impl From<&'static str> for MyError {
+    fn from(msg: &'static str) -> MyError {
+        MyError {
+            inner: Context::new(msg.into()),
+        }
+    }
+}
+
+impl From<Context<&'static str>> for MyError {
+    fn from(inner: Context<&'static str>) -> MyError {
+        MyError {
+            inner,
+        }
+    }
+}
+```
+
+## When might you use this pattern?
+
+Sometimes, you don't want to use the [_Using the Error type_](./use-error.md)
+pattern, because you want to expose a few different error types. But you don't
+want to use the [_An Error and ErrorKind pair_](./error-errorkind.md) pattern
+either, because there is no need to provide the context as an enum or because
+it would be too much work, if the error can occur in many different contexts.
+
+For instance, if you're writing a library that decodes/encodes a complex binary
+format, you might want to expose a `DecodeError` and an `EncodeError` error
+type, but provide the context as a simple string instead of an error kind, because:
+
+- users may not care too much about the context in which a `DecodeError` or
+  `EncodeError` was encountered, they just want a nice message to explain it
+- your binary format is really complex, errors can occur in many different
+  places, and you don't want to end up with a giant `ErrorKind` enum
+
+
+## Caveats on this pattern
+
+If using the `Context<String>` variant, an extra allocation is used for the string.
diff --git a/rustc_deps/vendor/failure/examples/error_as_cause.rs b/rustc_deps/vendor/failure/examples/error_as_cause.rs
new file mode 100644
index 0000000..24e5b06
--- /dev/null
+++ b/rustc_deps/vendor/failure/examples/error_as_cause.rs
@@ -0,0 +1,18 @@
+#[macro_use]
+extern crate failure;
+
+use failure::{err_msg, Error, Fail};
+
+#[derive(Debug, Fail)]
+#[fail(display = "my wrapping error")]
+struct WrappingError(#[fail(cause)] Error);
+
+fn bad_function() -> Result<(), WrappingError> {
+    Err(WrappingError(err_msg("this went bad")))
+}
+
+fn main() {
+    for cause in Fail::iter_causes(&bad_function().unwrap_err()) {
+        println!("{}", cause);
+    }
+}
diff --git a/rustc_deps/vendor/failure/examples/string_custom_error_pattern.rs b/rustc_deps/vendor/failure/examples/string_custom_error_pattern.rs
new file mode 100644
index 0000000..72cf651
--- /dev/null
+++ b/rustc_deps/vendor/failure/examples/string_custom_error_pattern.rs
@@ -0,0 +1,76 @@
+//! This example show the pattern "Strings and custom fail type" described in the book
+extern crate core;
+extern crate failure;
+
+use core::fmt::{self, Display};
+use failure::{Backtrace, Context, Fail, ResultExt};
+
+fn main() {
+    let err = err1().unwrap_err();
+    // Print the error itself
+    println!("error: {}", err);
+    // Print the chain of errors that caused it
+    for cause in Fail::iter_causes(&err) {
+        println!("caused by: {}", cause);
+    }
+}
+
+fn err1() -> Result<(), MyError> {
+    // The context can be a String
+    Ok(err2().context("err1".to_string())?)
+}
+
+fn err2() -> Result<(), MyError> {
+    // The context can be a &'static str
+    Ok(err3().context("err2")?)
+}
+
+fn err3() -> Result<(), MyError> {
+    Ok(Err(MyError::from("err3"))?)
+}
+
+#[derive(Debug)]
+pub struct MyError {
+    inner: Context<String>,
+}
+
+impl Fail for MyError {
+    fn cause(&self) -> Option<&Fail> {
+        self.inner.cause()
+    }
+
+    fn backtrace(&self) -> Option<&Backtrace> {
+        self.inner.backtrace()
+    }
+}
+
+impl Display for MyError {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        Display::fmt(&self.inner, f)
+    }
+}
+
+// Allows writing `MyError::from("oops"))?`
+impl From<&'static str> for MyError {
+    fn from(msg: &'static str) -> MyError {
+        MyError {
+            inner: Context::new(msg.into()),
+        }
+    }
+}
+
+// Allows adding more context via a String
+impl From<Context<String>> for MyError {
+    fn from(inner: Context<String>) -> MyError {
+        MyError { inner }
+    }
+}
+
+// Allows adding more context via a &str
+impl From<Context<&'static str>> for MyError {
+    fn from(inner: Context<&'static str>) -> MyError {
+        MyError {
+            inner: inner.map(|s| s.to_string()),
+        }
+    }
+}
diff --git a/rustc_deps/vendor/failure/src/as_fail.rs b/rustc_deps/vendor/failure/src/as_fail.rs
new file mode 100644
index 0000000..dd53a46
--- /dev/null
+++ b/rustc_deps/vendor/failure/src/as_fail.rs
@@ -0,0 +1,37 @@
+use Fail;
+
+/// The `AsFail` trait
+///
+/// This trait is similar to `AsRef<Fail>`, but it is specialized to handle
+/// the dynamic object of `Fail`. Implementors of `Fail` have a blanket
+/// implementation. It is used in `failure_derive` in order to generate a
+/// custom cause.
+pub trait AsFail {
+    /// Converts a reference to `Self` into a dynamic trait object of `Fail`.
+    fn as_fail(&self) -> &Fail;
+}
+
+impl<T> AsFail for T
+where
+    T: Fail,
+{
+    fn as_fail(&self) -> &Fail {
+        self
+    }
+}
+
+impl AsFail for Fail {
+    fn as_fail(&self) -> &Fail {
+        self
+    }
+}
+
+with_std! {
+    use error::Error;
+
+    impl AsFail for Error {
+        fn as_fail(&self) -> &Fail {
+            self.as_fail()
+        }
+    }
+}
diff --git a/rustc_deps/vendor/failure/src/context.rs b/rustc_deps/vendor/failure/src/context.rs
index 6e1fe90..3316b76 100644
--- a/rustc_deps/vendor/failure/src/context.rs
+++ b/rustc_deps/vendor/failure/src/context.rs
@@ -26,6 +26,16 @@
             &self.context
         }
 
+        /// Maps `Context<D>` to `Context<T>` by applying a function to the contained context.
+        pub fn map<F, T>(self, op: F) -> Context<T>
+            where F: FnOnce(D) -> T,
+                  T: Display + Send + Sync + 'static
+        {
+            Context {
+                context: op(self.context),
+            }
+        }
+
         pub(crate) fn with_err<E: Fail>(context: D, _: E) -> Context<D> {
             Context { context }
         }
@@ -44,6 +54,12 @@
             write!(f, "{}", self.context)
         }
     }
+
+    #[test]
+    fn test_map() {
+        let ctx = Context::new("a string").map(|s| format!("{} with some more stuff", s));
+        assert_eq!(ctx.context, String::from("a string with some more stuff"));
+    }
 }
 
 with_std! {
@@ -74,6 +90,17 @@
             &self.context
         }
 
+        /// Maps `Context<D>` to `Context<T>` by applying a function to the contained context.
+        pub fn map<F, T>(self, op: F) -> Context<T>
+            where F: FnOnce(D) -> T,
+                  T: Display + Send + Sync + 'static
+        {
+            Context {
+                context: op(self.context),
+                failure: self.failure,
+            }
+        }
+
         pub(crate) fn with_err<E: Into<Error>>(context: D, error: E) -> Context<D> {
             let failure = Either::That(error.into());
             Context { context, failure }
@@ -131,6 +158,12 @@
             }
         }
     }
+
+    #[test]
+    fn test_map() {
+        let ctx = Context::new("a string").map(|s| format!("{} with some more stuff", s));
+        assert_eq!(ctx.context, String::from("a string with some more stuff"));
+    }
 }
 
 impl<D> From<D> for Context<D>
diff --git a/rustc_deps/vendor/failure/src/error/error_impl.rs b/rustc_deps/vendor/failure/src/error/error_impl.rs
index f033c56..d1644ca 100644
--- a/rustc_deps/vendor/failure/src/error/error_impl.rs
+++ b/rustc_deps/vendor/failure/src/error/error_impl.rs
@@ -1,5 +1,4 @@
-use core::mem;
-use core::ptr;
+use core::any::TypeId;
 
 use Fail;
 use backtrace::Backtrace;
@@ -39,21 +38,13 @@
     }
 
     pub(crate) fn downcast<T: Fail>(self) -> Result<T, ErrorImpl> {
-        let ret: Option<T> = self.failure().downcast_ref().map(|fail| {
-            unsafe {
-                // drop the backtrace
-                let _ = ptr::read(&self.inner.backtrace as *const Backtrace);
-                // read out the fail type
-                ptr::read(fail as *const T)
-            }
-        });
-        match ret {
-            Some(ret) => {
-                // forget self (backtrace is dropped, failure is moved
-                mem::forget(self);
-                Ok(ret)
-            }
-            _ => Err(self)
+        if self.failure().__private_get_type_id__() == TypeId::of::<T>() {
+            let ErrorImpl { inner } = self;
+            let casted = unsafe { Box::from_raw(Box::into_raw(inner) as *mut Inner<T>) };
+            let Inner { backtrace:_, failure } = *casted;
+            Ok(failure)
+        } else {
+            Err(self)
         }
     }
 }
diff --git a/rustc_deps/vendor/failure/src/error/mod.rs b/rustc_deps/vendor/failure/src/error/mod.rs
index 04c0303..30e69cc 100644
--- a/rustc_deps/vendor/failure/src/error/mod.rs
+++ b/rustc_deps/vendor/failure/src/error/mod.rs
@@ -225,4 +225,19 @@
         drop(error);
         assert!(true);
     }
+
+    #[test]
+    fn downcast_can_be_used() {
+        let mut error: Error = io::Error::new(io::ErrorKind::NotFound, "test").into();
+        {
+            let real_io_error_ref = error.downcast_ref::<io::Error>().unwrap();
+            assert_eq!(real_io_error_ref.to_string(), "test");
+        }
+        {
+            let real_io_error_mut = error.downcast_mut::<io::Error>().unwrap();
+            assert_eq!(real_io_error_mut.to_string(), "test");
+        }
+        let real_io_error = error.downcast::<io::Error>().unwrap();
+        assert_eq!(real_io_error.to_string(), "test");
+    }
 }
diff --git a/rustc_deps/vendor/failure/src/lib.rs b/rustc_deps/vendor/failure/src/lib.rs
index 1002e76..82c021f 100644
--- a/rustc_deps/vendor/failure/src/lib.rs
+++ b/rustc_deps/vendor/failure/src/lib.rs
@@ -23,7 +23,10 @@
 #![cfg_attr(not(feature = "std"), no_std)]
 #![deny(missing_docs)]
 #![deny(warnings)]
-#![cfg_attr(feature = "small-error", feature(extern_types, allocator_api))]
+#![cfg_attr(
+    feature = "small-error",
+    feature(extern_types, allocator_api)
+)]
 
 macro_rules! with_std { ($($i:item)*) => ($(#[cfg(feature = "std")]$i)*) }
 macro_rules! without_std { ($($i:item)*) => ($(#[cfg(not(feature = "std"))]$i)*) }
@@ -33,6 +36,7 @@
 #[doc(hidden)]
 pub extern crate core as _core;
 
+mod as_fail;
 mod backtrace;
 #[cfg(feature = "std")]
 mod box_std;
@@ -43,6 +47,7 @@
 use core::any::TypeId;
 use core::fmt::{Debug, Display};
 
+pub use as_fail::AsFail;
 pub use backtrace::Backtrace;
 pub use compat::Compat;
 pub use context::Context;
@@ -161,7 +166,10 @@
     }
 
     #[doc(hidden)]
-    #[deprecated(since = "0.1.2", note = "please use the 'iter_causes()' method instead")]
+    #[deprecated(
+        since = "0.1.2",
+        note = "please use the 'iter_chain()' method instead"
+    )]
     fn causes(&self) -> Causes
     where
         Self: Sized,
@@ -170,7 +178,10 @@
     }
 
     #[doc(hidden)]
-    #[deprecated(since = "0.1.2", note = "please use the 'find_root_cause()' method instead")]
+    #[deprecated(
+        since = "0.1.2",
+        note = "please use the 'find_root_cause()' method instead"
+    )]
     fn root_cause(&self) -> &Fail
     where
         Self: Sized,
@@ -239,13 +250,19 @@
     }
 
     /// Deprecated alias to `find_root_cause`.
-    #[deprecated(since = "0.1.2", note = "please use the 'find_root_cause()' method instead")]
+    #[deprecated(
+        since = "0.1.2",
+        note = "please use the 'find_root_cause()' method instead"
+    )]
     pub fn root_cause(&self) -> &Fail {
         find_root_cause(self)
     }
 
-    /// Deprecated alias to `iter_causes`.
-    #[deprecated(since = "0.1.2", note = "please use the 'iter_chain()' method instead")]
+    /// Deprecated alias to `iter_chain`.
+    #[deprecated(
+        since = "0.1.2",
+        note = "please use the 'iter_chain()' method instead"
+    )]
     pub fn causes(&self) -> Causes {
         Causes { fail: Some(self) }
     }
diff --git a/rustc_deps/vendor/failure/src/macros.rs b/rustc_deps/vendor/failure/src/macros.rs
index b9e363a..b96e91a 100644
--- a/rustc_deps/vendor/failure/src/macros.rs
+++ b/rustc_deps/vendor/failure/src/macros.rs
@@ -21,7 +21,7 @@
 /// Similar to `assert!`, `ensure!` takes a condition and exits the function
 /// if the condition fails. Unlike `assert!`, `ensure!` returns an `Error`,
 /// it does not panic.
-#[macro_export]
+#[macro_export(local_inner_macros)]
 macro_rules! ensure {
     ($cond:expr, $e:expr) => {
         if !($cond) {
diff --git a/rustc_deps/vendor/failure_derive/.cargo-checksum.json b/rustc_deps/vendor/failure_derive/.cargo-checksum.json
index 5939052..9abeff9 100644
--- a/rustc_deps/vendor/failure_derive/.cargo-checksum.json
+++ b/rustc_deps/vendor/failure_derive/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"f6b769cd7eea271de41074015d661f7a5a3a1cbafb4c59607eaa329c4cea2066","build.rs":"c7481c027fc4c09e2d6dc8ac642ec5314b6a02269fb022b0f3c1850f000d31f5","src/lib.rs":"10c93690a2a73dd862a6ac483b86a2aa16f4c6b682f343868350856d3d0aedea","tests/backtrace.rs":"56b2b97f83e5341108aac403a50491560dc6d897d6002973248c9c9014c0e494","tests/custom_type_bounds.rs":"745d3e488738f5d90bcb1fa66a6784b64a88881b1d62c241cba2f863f4eb31c8","tests/no_derive_display.rs":"3ab159aadf809a95d578b4909470f6ecca24cea0caf514509d326601cc7b933b","tests/tests.rs":"eaf131c01cc101b94fd6478a9964f5e3d919f2260f6d327f0e435ac3520fe71e","tests/wraps.rs":"e00c2761ccd9fe84df47bd102945818f5d8868c95bcab719ebdde0db8334d4a6"},"package":"946d0e98a50d9831f5d589038d2ca7f8f455b1c21028c0db0e84116a12696426"}
\ No newline at end of file
+{"files":{"Cargo.toml":"e00026aba3492ad169fcb6123e896280d679ffb9a198c6830052c99df3246142","build.rs":"c7481c027fc4c09e2d6dc8ac642ec5314b6a02269fb022b0f3c1850f000d31f5","src/lib.rs":"833b9916cd18b2e0b4fa79cc795afd00089697be7a25bf6895e85ed4cef97916","tests/backtrace.rs":"56b2b97f83e5341108aac403a50491560dc6d897d6002973248c9c9014c0e494","tests/custom_type_bounds.rs":"745d3e488738f5d90bcb1fa66a6784b64a88881b1d62c241cba2f863f4eb31c8","tests/no_derive_display.rs":"3ab159aadf809a95d578b4909470f6ecca24cea0caf514509d326601cc7b933b","tests/tests.rs":"eaf131c01cc101b94fd6478a9964f5e3d919f2260f6d327f0e435ac3520fe71e","tests/wraps.rs":"e00c2761ccd9fe84df47bd102945818f5d8868c95bcab719ebdde0db8334d4a6"},"package":"64c2d913fe8ed3b6c6518eedf4538255b989945c14c2a7d5cbff62a5e2120596"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/failure_derive/Cargo.toml b/rustc_deps/vendor/failure_derive/Cargo.toml
index 3672252..cba085a 100644
--- a/rustc_deps/vendor/failure_derive/Cargo.toml
+++ b/rustc_deps/vendor/failure_derive/Cargo.toml
@@ -12,7 +12,7 @@
 
 [package]
 name = "failure_derive"
-version = "0.1.2"
+version = "0.1.3"
 authors = ["Without Boats <woboats@gmail.com>"]
 build = "build.rs"
 description = "derives for the failure crate"
@@ -30,10 +30,10 @@
 version = "0.6.3"
 
 [dependencies.syn]
-version = "0.14.4"
+version = "0.15.0"
 
 [dependencies.synstructure]
-version = "0.9.0"
+version = "0.10.0"
 [dev-dependencies.failure]
 version = "0.1.0"
 
diff --git a/rustc_deps/vendor/failure_derive/src/lib.rs b/rustc_deps/vendor/failure_derive/src/lib.rs
index 230d2ee..4e9b22f 100644
--- a/rustc_deps/vendor/failure_derive/src/lib.rs
+++ b/rustc_deps/vendor/failure_derive/src/lib.rs
@@ -19,7 +19,7 @@
 
     let cause_body = s.each_variant(|v| {
         if let Some(cause) = v.bindings().iter().find(is_cause) {
-            quote!(return Some(#cause))
+            quote!(return Some(::failure::AsFail::as_fail(#cause)))
         } else {
             quote!(return None)
         }
diff --git a/rustc_deps/vendor/flate2/.cargo-checksum.json b/rustc_deps/vendor/flate2/.cargo-checksum.json
index eff7f83..a5cb22c 100644
--- a/rustc_deps/vendor/flate2/.cargo-checksum.json
+++ b/rustc_deps/vendor/flate2/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{".travis.yml":"ec9f436e398aa09209c1dafb2675fb876d894fd7aca985817f38323d9a650af0","Cargo.toml":"82289f6f211051f40f39405850e2b883667247b9e9fd4f6466881389de1fa71b","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"29b1dac7c214deaa3f4f8305102cbc166ac9015a2d3d641f3a539103a97b6c8a","appveyor.yml":"7293e690b6b1fb75cbab1f72ffc5077dd145c806282969b595cc1a82ce1a2e62","examples/deflatedecoder-bufread.rs":"286995f7fa968c3cb935f4a9436db035691112fd1999ad001fb17da1a76162be","examples/deflatedecoder-read.rs":"7d7347a31317d288291847369032cefad5688defe6043a3f0d2a72b8567eb056","examples/deflatedecoder-write.rs":"23723a260ac6916243089666d25e2d7c5fdf390fb2fa20d0c2a957647a0e1880","examples/deflateencoder-bufread.rs":"c9a798336ed81c104fc01c3620380bb3369af90a710a89b19c2402f25c25d375","examples/deflateencoder-read.rs":"3af2fe62fb464c2c38a16099c38ce6ce510356ac47de2fc8a8a46ad1660992d7","examples/deflateencoder-write.rs":"0c6d3590b925a731bdd7e4a899ff5783539a4f48f88a8d95e7acecde5d426521","examples/gzbuilder.rs":"d0fe0fc8b6f302f35af80f61d2cbb4e55b1d511f7894e06756bda0d53f9505f9","examples/gzdecoder-bufread.rs":"2ec57910cb86a03566476f9b65562c2bfc661c7e094fb5b847d84e4127b7dd8d","examples/gzdecoder-read.rs":"af29581f5eadd76f1079b3da73b5cd97557c1abe435014ecad4b3be22518a2bb","examples/gzdecoder-write.rs":"4b14123f9e2d5aa08d1d94fdc911ecc0728cdb9d68888ad2bfd34545975ab6a2","examples/gzencoder-bufread.rs":"ad79e9f8630359ed21b74a1431d49fdb08c0673df7b21e98d0cad05b29357460","examples/gzencoder-read.rs":"b37c7d18e58c916bdaff4d698cbfc7fe99c03b7d440eb386694a268dbc938134","examples/gzencoder-write.rs":"3dc712c3100caab0e29bd8c48314a964392cd2f2443e988dfbe5416909fb5e1d","examples/gzmultidecoder-bufread.rs":"b55840b1139c7351cff67320c88bc8f2e4e74eecc20ed617deb48d27c855a5a4","examples/gzmultidecoder-read.rs":"a5cd59f0ea2543ce8c6ac8a77128a9f9242b0eca27dfd82c7842a2d63930e874","examples/hello_world.txt":"d2a84f4b8b650937ec8f73cd8be2c74add5a911ba64df27458ed8229da804a26","examples/zlibdecoder-bufread.rs":"688999ef801a8ecccb741eb9a6e6a89fbc5c9857bc1fdffd4b613d4522f47407","examples/zlibdecoder-read.rs":"c8d414640ae3e7c356ac06ae3e3802ae88b2db7b40be4f567598335e90f969f4","examples/zlibdecoder-write.rs":"fd581a7bdfb992eba5b96c66eb9e143dabd6970762e8f92fd05215b1566f915c","examples/zlibencoder-bufread.rs":"667d3bdc83878e97d4faae6c820693339799989db1031e976dc52d7bc1e119ce","examples/zlibencoder-read.rs":"8f3e87c001a028f5f38495c1ca4b7b60a92429b0d93f783d7be5c02c4d0043e2","examples/zlibencoder-write.rs":"03e4559325a749ee378739ddc2fb9d43afcf3d60a7be714d0708ec590b2d50af","src/bufreader.rs":"7fc0b74ca751e9e11689d3e57abc3aadbda92f25f2a9a80fca009f43a112642d","src/crc.rs":"2f98a8b14e4e8f1ed6fadb87f62e2c5c23f6019847a1bd5275414bc92f4f061b","src/deflate/bufread.rs":"ed1b17ebeae9dd5549a5c6dfdc983f6b0becd8a588e4674ba36ec463f4b0aad5","src/deflate/mod.rs":"b9123e045fcb205d4f08cc76e904b67d83809349f5699e0ae95d924b73bb4050","src/deflate/read.rs":"8a579ab97396a22cb9196743753d7d6f1c4cc4e7c7ed8f86e4f2d3f6971796cb","src/deflate/write.rs":"3852f51611562237e35791b80dc450558949c173fa875d4b91e13c1d18cf23a7","src/ffi.rs":"296303ccd1967ab866f13661ad9b1336fb2497a53487b0efd08b5600bff30b6b","src/gz/bufread.rs":"b5bf00737dee1b4ffdbe78436726a5a0b12272bf0eadb9e4ab5464bf47eccfd4","src/gz/mod.rs":"b37dde138590a047572f5cf3c5a3d3eaa9032ffb9b9a5dbe567c03bddf56f478","src/gz/read.rs":"d5e5d127a9083ee5ce5a162a2c03965b7fbabc1ca3e221d74bdd68349ba7a7ce","src/gz/write.rs":"3a510433f6f76004599a201a18790c5b2451c1742967665ba51513d79c4f3f0d","src/lib.rs":"65c14a9f37010948c8836b149e21bf48e20ef933d4979e01e59c8b589a3a971c","src/mem.rs":"9e1a4f24b04fac9c4230bc93389997450f2dc24acd3c9df72d66dc9af3d516cb","src/zio.rs":"98133cafdc0014e075c14cd8a271cfd5e67a4ad4572e798f6f62bbe6425d0cff","src/zlib/bufread.rs":"8eff1bb0c2b557ca0428a087f81e5c93b6e5e71176930eb19fc73322a4b7092c","src/zlib/mod.rs":"7e565ec477d26e80eecd583148a21ba778ebb6eb625388f884f95fc623b3db4f","src/zlib/read.rs":"dd34b36a33257d428b449b41738dae79faf4d02955aea4be905fed313d3cf38f","src/zlib/write.rs":"abd3a640d09e82a890f66d18fd4618ad09d7e25c9e1c23fcd3532a7003d742b6","tests/corrupt-file.gz":"083dd284aa1621916a2d0f66ea048c8d3ba7a722b22d0d618722633f51e7d39c","tests/early-flush.rs":"5b12ab43ddb2dbc458b2fdf05fe2245bf8abea554756dfa7bc64a095adfde365","tests/empty-read.rs":"45477d316f77a048d747e9d18292abfec0cac667768385c8a061e18fd1240238","tests/good-file.gz":"87296963e53024a74752179ce7e54087565d358a85d3e65c3b37ef36eaa3d4a6","tests/good-file.txt":"bc4e03658a441fe2ad2df7cd2197144b87e41696f01e327b380e869cd9b485a0","tests/gunzip.rs":"18c2509e8795337faa955bd8429210217ecc6081e1647d3968d10e01ae876bb0","tests/multi.gz":"efa3341da052f95056314cc6920e02a3da15bdef30234b2552fb407812db5cc6","tests/multi.txt":"dbea9325179efe46ea2add94f7b6b745ca983fabb208dc6d34aa064623d7ee23","tests/tokio.rs":"1d256e3d38abc6a9dde87d9ec78dc94ab56670e102d64e2ed649a46ff0d4d615","tests/zero-write.rs":"ff8d0349a540b54363c55807c5fd7fbbdc363d08a536d35a3a40f0ce92c16489"},"package":"4af030962d89d62aa52cd9492083b1cd9b2d1a77764878102a6c0f86b4d5444d"}
\ No newline at end of file
+{"files":{".travis.yml":"1280d59a59d2559b75fc720b623046f698f5f6aaf22a47e268f321a222f03fe8","Cargo.toml":"01897cf6527c394116e2b60014987ae536ee93f657c21ec0553029673de550a2","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"29b1dac7c214deaa3f4f8305102cbc166ac9015a2d3d641f3a539103a97b6c8a","appveyor.yml":"7293e690b6b1fb75cbab1f72ffc5077dd145c806282969b595cc1a82ce1a2e62","examples/deflatedecoder-bufread.rs":"286995f7fa968c3cb935f4a9436db035691112fd1999ad001fb17da1a76162be","examples/deflatedecoder-read.rs":"7d7347a31317d288291847369032cefad5688defe6043a3f0d2a72b8567eb056","examples/deflatedecoder-write.rs":"23723a260ac6916243089666d25e2d7c5fdf390fb2fa20d0c2a957647a0e1880","examples/deflateencoder-bufread.rs":"c9a798336ed81c104fc01c3620380bb3369af90a710a89b19c2402f25c25d375","examples/deflateencoder-read.rs":"3af2fe62fb464c2c38a16099c38ce6ce510356ac47de2fc8a8a46ad1660992d7","examples/deflateencoder-write.rs":"0c6d3590b925a731bdd7e4a899ff5783539a4f48f88a8d95e7acecde5d426521","examples/gzbuilder.rs":"d0fe0fc8b6f302f35af80f61d2cbb4e55b1d511f7894e06756bda0d53f9505f9","examples/gzdecoder-bufread.rs":"2ec57910cb86a03566476f9b65562c2bfc661c7e094fb5b847d84e4127b7dd8d","examples/gzdecoder-read.rs":"af29581f5eadd76f1079b3da73b5cd97557c1abe435014ecad4b3be22518a2bb","examples/gzdecoder-write.rs":"4b14123f9e2d5aa08d1d94fdc911ecc0728cdb9d68888ad2bfd34545975ab6a2","examples/gzencoder-bufread.rs":"ad79e9f8630359ed21b74a1431d49fdb08c0673df7b21e98d0cad05b29357460","examples/gzencoder-read.rs":"b37c7d18e58c916bdaff4d698cbfc7fe99c03b7d440eb386694a268dbc938134","examples/gzencoder-write.rs":"3dc712c3100caab0e29bd8c48314a964392cd2f2443e988dfbe5416909fb5e1d","examples/gzmultidecoder-bufread.rs":"b55840b1139c7351cff67320c88bc8f2e4e74eecc20ed617deb48d27c855a5a4","examples/gzmultidecoder-read.rs":"a5cd59f0ea2543ce8c6ac8a77128a9f9242b0eca27dfd82c7842a2d63930e874","examples/hello_world.txt":"d2a84f4b8b650937ec8f73cd8be2c74add5a911ba64df27458ed8229da804a26","examples/zlibdecoder-bufread.rs":"688999ef801a8ecccb741eb9a6e6a89fbc5c9857bc1fdffd4b613d4522f47407","examples/zlibdecoder-read.rs":"c8d414640ae3e7c356ac06ae3e3802ae88b2db7b40be4f567598335e90f969f4","examples/zlibdecoder-write.rs":"fd581a7bdfb992eba5b96c66eb9e143dabd6970762e8f92fd05215b1566f915c","examples/zlibencoder-bufread.rs":"667d3bdc83878e97d4faae6c820693339799989db1031e976dc52d7bc1e119ce","examples/zlibencoder-read.rs":"8f3e87c001a028f5f38495c1ca4b7b60a92429b0d93f783d7be5c02c4d0043e2","examples/zlibencoder-write.rs":"03e4559325a749ee378739ddc2fb9d43afcf3d60a7be714d0708ec590b2d50af","src/bufreader.rs":"7fc0b74ca751e9e11689d3e57abc3aadbda92f25f2a9a80fca009f43a112642d","src/crc.rs":"2f98a8b14e4e8f1ed6fadb87f62e2c5c23f6019847a1bd5275414bc92f4f061b","src/deflate/bufread.rs":"ed1b17ebeae9dd5549a5c6dfdc983f6b0becd8a588e4674ba36ec463f4b0aad5","src/deflate/mod.rs":"b9123e045fcb205d4f08cc76e904b67d83809349f5699e0ae95d924b73bb4050","src/deflate/read.rs":"8a579ab97396a22cb9196743753d7d6f1c4cc4e7c7ed8f86e4f2d3f6971796cb","src/deflate/write.rs":"3852f51611562237e35791b80dc450558949c173fa875d4b91e13c1d18cf23a7","src/ffi.rs":"de766ce6bfef61b54296a0418ca09330957e39c74042c6294d151743fe9d5cfb","src/gz/bufread.rs":"b5bf00737dee1b4ffdbe78436726a5a0b12272bf0eadb9e4ab5464bf47eccfd4","src/gz/mod.rs":"b37dde138590a047572f5cf3c5a3d3eaa9032ffb9b9a5dbe567c03bddf56f478","src/gz/read.rs":"d5e5d127a9083ee5ce5a162a2c03965b7fbabc1ca3e221d74bdd68349ba7a7ce","src/gz/write.rs":"3a510433f6f76004599a201a18790c5b2451c1742967665ba51513d79c4f3f0d","src/lib.rs":"74491cc75445e677413537bcd958f9284967d1c2c4f1d0f2ddb79981e844f507","src/mem.rs":"9e1a4f24b04fac9c4230bc93389997450f2dc24acd3c9df72d66dc9af3d516cb","src/zio.rs":"98133cafdc0014e075c14cd8a271cfd5e67a4ad4572e798f6f62bbe6425d0cff","src/zlib/bufread.rs":"8eff1bb0c2b557ca0428a087f81e5c93b6e5e71176930eb19fc73322a4b7092c","src/zlib/mod.rs":"7e565ec477d26e80eecd583148a21ba778ebb6eb625388f884f95fc623b3db4f","src/zlib/read.rs":"dd34b36a33257d428b449b41738dae79faf4d02955aea4be905fed313d3cf38f","src/zlib/write.rs":"abd3a640d09e82a890f66d18fd4618ad09d7e25c9e1c23fcd3532a7003d742b6","tests/corrupt-file.gz":"083dd284aa1621916a2d0f66ea048c8d3ba7a722b22d0d618722633f51e7d39c","tests/early-flush.rs":"5b12ab43ddb2dbc458b2fdf05fe2245bf8abea554756dfa7bc64a095adfde365","tests/empty-read.rs":"45477d316f77a048d747e9d18292abfec0cac667768385c8a061e18fd1240238","tests/good-file.gz":"87296963e53024a74752179ce7e54087565d358a85d3e65c3b37ef36eaa3d4a6","tests/good-file.txt":"bc4e03658a441fe2ad2df7cd2197144b87e41696f01e327b380e869cd9b485a0","tests/gunzip.rs":"18c2509e8795337faa955bd8429210217ecc6081e1647d3968d10e01ae876bb0","tests/multi.gz":"efa3341da052f95056314cc6920e02a3da15bdef30234b2552fb407812db5cc6","tests/multi.txt":"dbea9325179efe46ea2add94f7b6b745ca983fabb208dc6d34aa064623d7ee23","tests/tokio.rs":"1d256e3d38abc6a9dde87d9ec78dc94ab56670e102d64e2ed649a46ff0d4d615","tests/zero-write.rs":"ff8d0349a540b54363c55807c5fd7fbbdc363d08a536d35a3a40f0ce92c16489"},"package":"3b0c7353385f92079524de3b7116cf99d73947c08a7472774e9b3b04bff3b901"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/flate2/.travis.yml b/rustc_deps/vendor/flate2/.travis.yml
index 6496af1..14da335 100644
--- a/rustc_deps/vendor/flate2/.travis.yml
+++ b/rustc_deps/vendor/flate2/.travis.yml
@@ -11,6 +11,10 @@
     - rust: stable
       script: cargo run --manifest-path systest/Cargo.toml
 
+    - rust: nightly
+      install: rustup target add wasm32-unknown-unknown
+      script: cargo build --target wasm32-unknown-unknown
+
     - rust: stable
       env: RUST_BACKEND=1
       script:
diff --git a/rustc_deps/vendor/flate2/Cargo.toml b/rustc_deps/vendor/flate2/Cargo.toml
index 4f32e91..d4dd0eb 100644
--- a/rustc_deps/vendor/flate2/Cargo.toml
+++ b/rustc_deps/vendor/flate2/Cargo.toml
@@ -12,7 +12,7 @@
 
 [package]
 name = "flate2"
-version = "1.0.3"
+version = "1.0.4"
 authors = ["Alex Crichton <alex@alexcrichton.com>"]
 description = "Bindings to miniz.c for DEFLATE compression and decompression exposed as\nReader/Writer streams. Contains bindings for zlib, deflate, and gzip-based\nstreams.\n"
 homepage = "https://github.com/alexcrichton/flate2-rs"
@@ -34,11 +34,11 @@
 optional = true
 
 [dependencies.miniz-sys]
-version = "0.1.10"
+version = "0.1.11"
 optional = true
 
 [dependencies.miniz_oxide_c_api]
-version = "0.1"
+version = "0.2"
 features = ["no_c_export"]
 optional = true
 
@@ -60,6 +60,9 @@
 rust_backend = ["miniz_oxide_c_api"]
 tokio = ["tokio-io", "futures"]
 zlib = ["libz-sys"]
+[target."cfg(all(target_arch = \"wasm32\", not(target_os = \"emscripten\")))".dependencies.miniz_oxide_c_api]
+version = "0.2"
+features = ["no_c_export"]
 [badges.appveyor]
 repository = "alexcrichton/flate2-rs"
 
diff --git a/rustc_deps/vendor/flate2/src/ffi.rs b/rustc_deps/vendor/flate2/src/ffi.rs
index f154ba8..f8b31cc 100644
--- a/rustc_deps/vendor/flate2/src/ffi.rs
+++ b/rustc_deps/vendor/flate2/src/ffi.rs
@@ -108,7 +108,7 @@
     }
 }
 
-#[cfg(all(not(feature = "zlib"), feature = "rust_backend"))]
+#[cfg(any(all(not(feature = "zlib"), feature = "rust_backend"), all(target_arch = "wasm32", not(target_os = "emscripten"))))]
 mod imp {
     extern crate miniz_oxide_c_api;
     use std::ops::{Deref, DerefMut};
@@ -137,7 +137,7 @@
     }
 }
 
-#[cfg(all(not(feature = "zlib"), not(feature = "rust_backend")))]
+#[cfg(all(not(feature = "zlib"), not(feature = "rust_backend"), not(all(target_arch = "wasm32", not(target_os = "emscripten")))))]
 mod imp {
     extern crate miniz_sys;
     use std::mem;
diff --git a/rustc_deps/vendor/flate2/src/lib.rs b/rustc_deps/vendor/flate2/src/lib.rs
index 7d2a4c3..550e68b 100644
--- a/rustc_deps/vendor/flate2/src/lib.rs
+++ b/rustc_deps/vendor/flate2/src/lib.rs
@@ -81,6 +81,7 @@
 
 #[cfg(feature = "tokio")]
 extern crate futures;
+#[cfg(not(all(target_arch = "wasm32", not(target_os = "emscripten"))))]
 extern crate libc;
 #[cfg(test)]
 extern crate quickcheck;
@@ -90,6 +91,22 @@
 #[macro_use]
 extern crate tokio_io;
 
+// These must currently agree with here --
+// https://github.com/Frommi/miniz_oxide/blob/e6c214efd253491ac072c2c9adba87ef5b4cd5cb/src/lib.rs#L14-L19
+//
+// Eventually we'll want to actually move these into `libc` itself for wasm, or
+// otherwise not use the capi crate for miniz_oxide but rather use the
+// underlying types.
+#[cfg(all(target_arch = "wasm32", not(target_os = "emscripten")))]
+mod libc {
+    #![allow(non_camel_case_types)]
+    pub type c_ulong = u64;
+    pub type off_t = i64;
+    pub type c_int = i32;
+    pub type c_uint = u32;
+    pub type size_t = usize;
+}
+
 pub use gz::GzBuilder;
 pub use gz::GzHeader;
 pub use mem::{Compress, CompressError, Decompress, DecompressError, Status};
diff --git a/rustc_deps/vendor/futures-channel-preview/.cargo-checksum.json b/rustc_deps/vendor/futures-channel-preview/.cargo-checksum.json
index 73b1569..19d9341 100644
--- a/rustc_deps/vendor/futures-channel-preview/.cargo-checksum.json
+++ b/rustc_deps/vendor/futures-channel-preview/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"45a24f9fabbb45cb14d8b183a9c5167f6988293b4b7a7d41521e5e8da6ccf6c6","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","benches/sync_mpsc.rs":"029f7782110373442a985f5b151edb3d09ae0eed41a13ac9f07d9572843fd8b0","src/lib.rs":"4e505ea11f019733c03f052013f708e252115cb312099b87d8dfa75158c7e276","src/lock.rs":"069d717759d9353274005630e182f080e94ba8b9e52ba94ec9a8b6e884a832d4","src/mpsc/mod.rs":"a2b703831091b23f888e67698981cd77fa2feb9861b3f1b03dc237c16d1927b0","src/mpsc/queue.rs":"ab8fa445ceb023c9ca984a5527c52ab3de7656bce1c64cd4d1c7e31ec1f25ee7","src/oneshot.rs":"57bc5eb2cae9adcc158b462cfa8a37ccb482aa91f6c831c438bc856665ce376c","tests/channel.rs":"f45a113390c4ac4a7c0b0354c12ada9a5e8127fc6649711c22ed3ed8ea1e500c","tests/mpsc-close.rs":"b41315392df9e6fe48ab4c2bf0e36a3b32b09e4c8c4d3bac2c22f79fa7f24b1c","tests/mpsc.rs":"9f792ba34b69d9c71594a7c46cba381e423ea22d9de4df81ff8d83a213085e85","tests/oneshot.rs":"d19be518c6b4a8b361958582b2a4bb076d1210d9161719329fb95f184e484dc1"},"package":"0c94a8271a814b531d77cc7276c96eb608592f4b0b3ad59b85b222dadbe7c956"}
\ No newline at end of file
+{"files":{"Cargo.toml":"d8909e15d21a61b957202869e030172d6ea3dab21e46071b02d74feb10a5fb8f","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","benches/sync_mpsc.rs":"029f7782110373442a985f5b151edb3d09ae0eed41a13ac9f07d9572843fd8b0","src/lib.rs":"33607b5c45c5b9160384f09dc60f32e0f98a9b83f3425c69dcc1a287e1bd9a50","src/lock.rs":"069d717759d9353274005630e182f080e94ba8b9e52ba94ec9a8b6e884a832d4","src/mpsc/mod.rs":"a2b703831091b23f888e67698981cd77fa2feb9861b3f1b03dc237c16d1927b0","src/mpsc/queue.rs":"fa8c6b81cc66a429842db1532fb7753e1ba1bd80e07d0ec3093f259f1a1d78cf","src/oneshot.rs":"57bc5eb2cae9adcc158b462cfa8a37ccb482aa91f6c831c438bc856665ce376c","tests/channel.rs":"f45a113390c4ac4a7c0b0354c12ada9a5e8127fc6649711c22ed3ed8ea1e500c","tests/mpsc-close.rs":"b41315392df9e6fe48ab4c2bf0e36a3b32b09e4c8c4d3bac2c22f79fa7f24b1c","tests/mpsc.rs":"9f792ba34b69d9c71594a7c46cba381e423ea22d9de4df81ff8d83a213085e85","tests/oneshot.rs":"d19be518c6b4a8b361958582b2a4bb076d1210d9161719329fb95f184e484dc1"},"package":"ab71b4d4948210b1ff4703e66cc9d931afd8ba35b5657cf369374a091cca96ed"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/futures-channel-preview/Cargo.toml b/rustc_deps/vendor/futures-channel-preview/Cargo.toml
index c365704..dc45b41 100644
--- a/rustc_deps/vendor/futures-channel-preview/Cargo.toml
+++ b/rustc_deps/vendor/futures-channel-preview/Cargo.toml
@@ -13,18 +13,18 @@
 [package]
 edition = "2018"
 name = "futures-channel-preview"
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 authors = ["Alex Crichton <alex@alexcrichton.com>"]
 description = "Channels for asynchronous communication using futures-rs.\n"
 homepage = "https://rust-lang-nursery.github.io/futures-rs"
-documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.7/futures_channel"
+documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.9/futures_channel"
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-lang-nursery/futures-rs"
 
 [lib]
 name = "futures_channel"
 [dependencies.futures-core-preview]
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 default-features = false
 
 [features]
diff --git a/rustc_deps/vendor/futures-channel-preview/src/lib.rs b/rustc_deps/vendor/futures-channel-preview/src/lib.rs
index 90f3238..4f6653b 100644
--- a/rustc_deps/vendor/futures-channel-preview/src/lib.rs
+++ b/rustc_deps/vendor/futures-channel-preview/src/lib.rs
@@ -5,12 +5,12 @@
 
 #![feature(pin, arbitrary_self_types, futures_api)]
 
-#![no_std]
+#![cfg_attr(not(feature = "std"), no_std)]
 
 #![warn(missing_docs, missing_debug_implementations)]
 #![deny(bare_trait_objects)]
 
-#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.7/futures_channel")]
+#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.9/futures_channel")]
 
 macro_rules! if_std {
     ($($i:item)*) => ($(
diff --git a/rustc_deps/vendor/futures-channel-preview/src/mpsc/queue.rs b/rustc_deps/vendor/futures-channel-preview/src/mpsc/queue.rs
index 0c4d795..90fe656 100644
--- a/rustc_deps/vendor/futures-channel-preview/src/mpsc/queue.rs
+++ b/rustc_deps/vendor/futures-channel-preview/src/mpsc/queue.rs
@@ -80,6 +80,7 @@
 unsafe impl<T: Send> Sync for Queue<T> { }
 
 impl<T> Node<T> {
+    #[allow(clippy::new_ret_no_self)]
     unsafe fn new(v: Option<T>) -> *mut Node<T> {
         Box::into_raw(Box::new(Node {
             next: AtomicPtr::new(ptr::null_mut()),
diff --git a/rustc_deps/vendor/futures-core-preview/.cargo-checksum.json b/rustc_deps/vendor/futures-core-preview/.cargo-checksum.json
index 081e694..65489c7 100644
--- a/rustc_deps/vendor/futures-core-preview/.cargo-checksum.json
+++ b/rustc_deps/vendor/futures-core-preview/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{".cargo_vcs_info.json":"8ee85a563120ff8c307ae2455a0b591fe534790cba36693f4a39ec3cad5ee16c","Cargo.toml":"7bcb418274ad0de3bdc8d70dc3f7fb1d00c4a79597d1ba61bda50c8d5630395f","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","src/future/future_obj.rs":"40e8f2d4b1ef058928089208ec1af49218e02a7637c09d223c88fbb4d2ffb298","src/future/mod.rs":"556b1194b5af1414e43dfd160495f0c0e6af36735e2cb4ab52acc7aea2e1e113","src/lib.rs":"b7b4b2bacbf09f0b22b0c19769e736b8d2a1ad50c884bef7242b179b2a9c8353","src/stream/mod.rs":"a85e2966a19ed058e1485b4a6ad32203bce613af84164204bf35c99c81e0c7ea","src/stream/stream_obj.rs":"a387d3540e65579080997e61aed5633c25542b1973cc3b115726afe026e06bfb","src/task/mod.rs":"497186e4789567daa6c2f5fc1e3a8140877ae8e9e67e09d8bb3a50b976891268","src/task/spawn.rs":"733572db0157b98e3b77b4af6e0b7d9b209fe6c9da50db773cd876d7ce344b8d"},"package":"9e675b722fce30dc1e28fd56158ce7df5c8479b84a6d5145f51e70d4d9c01280"}
\ No newline at end of file
+{"files":{".cargo_vcs_info.json":"1d2ef3b537ed5321b988f4d35b69cce4bd868aa151fb50ce0a74c3e318244194","Cargo.toml":"c08ed65b9851b1237e37d51700bdcbfbd3c4109a2ba9df1f529741723d4e4d7c","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","src/future/future_obj.rs":"59fa8255e1eee57f933845f28a6f8023a079cedb5d189507755a657759fcf9ae","src/future/mod.rs":"556b1194b5af1414e43dfd160495f0c0e6af36735e2cb4ab52acc7aea2e1e113","src/lib.rs":"e085c217e978dfcd64a3434e9c1456cd52d71e793b92b810be4d80fdb8d367ee","src/stream/mod.rs":"a85e2966a19ed058e1485b4a6ad32203bce613af84164204bf35c99c81e0c7ea","src/stream/stream_obj.rs":"a387d3540e65579080997e61aed5633c25542b1973cc3b115726afe026e06bfb","src/task/mod.rs":"497186e4789567daa6c2f5fc1e3a8140877ae8e9e67e09d8bb3a50b976891268","src/task/spawn.rs":"733572db0157b98e3b77b4af6e0b7d9b209fe6c9da50db773cd876d7ce344b8d"},"package":"e5fea6d4920bf1745d87f8624abdd38ed03fb5b644767b84a0de882fe46c4153"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/futures-core-preview/.cargo_vcs_info.json b/rustc_deps/vendor/futures-core-preview/.cargo_vcs_info.json
index 3b3cdbc..33118c3 100644
--- a/rustc_deps/vendor/futures-core-preview/.cargo_vcs_info.json
+++ b/rustc_deps/vendor/futures-core-preview/.cargo_vcs_info.json
@@ -1,5 +1,5 @@
 {
   "git": {
-    "sha1": "99795ef1629b221d8721671938276dd958a073eb"
+    "sha1": "6d9733c5e1d4adc7d21a94bcf19e9b8214f360a0"
   }
 }
diff --git a/rustc_deps/vendor/futures-core-preview/Cargo.toml b/rustc_deps/vendor/futures-core-preview/Cargo.toml
index 53a0e34..9eddff2 100644
--- a/rustc_deps/vendor/futures-core-preview/Cargo.toml
+++ b/rustc_deps/vendor/futures-core-preview/Cargo.toml
@@ -13,11 +13,11 @@
 [package]
 edition = "2018"
 name = "futures-core-preview"
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 authors = ["Alex Crichton <alex@alexcrichton.com>"]
 description = "The core traits and types in for the `futures` library.\n"
 homepage = "https://rust-lang-nursery.github.io/futures-rs"
-documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.7/futures_core"
+documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.9/futures_core"
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-lang-nursery/futures-rs"
 
diff --git a/rustc_deps/vendor/futures-core-preview/src/future/future_obj.rs b/rustc_deps/vendor/futures-core-preview/src/future/future_obj.rs
index 90326ac..1549c0f 100644
--- a/rustc_deps/vendor/futures-core-preview/src/future/future_obj.rs
+++ b/rustc_deps/vendor/futures-core-preview/src/future/future_obj.rs
@@ -230,7 +230,7 @@
 
         unsafe fn drop(ptr: *mut ()) {
             #[allow(clippy::cast_ptr_alignment)]
-            drop(Box::from_raw(ptr as *mut Pin<Box<T>>));
+            drop(Pin::from(Box::from_raw(ptr as *mut F)));
         }
     }
 
diff --git a/rustc_deps/vendor/futures-core-preview/src/lib.rs b/rustc_deps/vendor/futures-core-preview/src/lib.rs
index 8fcd30e..73cd124 100644
--- a/rustc_deps/vendor/futures-core-preview/src/lib.rs
+++ b/rustc_deps/vendor/futures-core-preview/src/lib.rs
@@ -1,14 +1,13 @@
 //! Core traits and types for asynchronous operations in Rust.
 
 #![feature(pin, arbitrary_self_types, futures_api)]
-#![feature(tool_lints)] // to allow clippy lints
 
-#![no_std]
+#![cfg_attr(not(feature = "std"), no_std)]
 
 #![warn(missing_docs, missing_debug_implementations)]
 #![deny(bare_trait_objects)]
 
-#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.7/futures_core")]
+#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.9/futures_core")]
 
 #[doc(hidden)] pub use crate::future::Future;
 #[doc(hidden)] pub use crate::future::TryFuture;
diff --git a/rustc_deps/vendor/futures-executor-preview/.cargo-checksum.json b/rustc_deps/vendor/futures-executor-preview/.cargo-checksum.json
index bb2117b..3d6e0cc 100644
--- a/rustc_deps/vendor/futures-executor-preview/.cargo-checksum.json
+++ b/rustc_deps/vendor/futures-executor-preview/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"b69be9421ec2c50a4229de16aec99c5cd280a7f2de0d1fbfb3554e5769992bdf","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","benches/thread_notify.rs":"11075595b09e324cd185fcf0604f36bcd4df9a99c95726c58701a3d530ea3249","src/enter.rs":"96f74df35aca1de4dbec9d051482d4957ff56209e44ced6f489ac9cb15df6ba6","src/lib.rs":"74e69d9b23df41019454f44e666d892f0bc449528b22796af12f30445f377e47","src/local_pool.rs":"0c0dab0635bed84c4d4e882325042de79c7541800b85f5dc0a5b2ff22acf5c72","src/thread_pool.rs":"3c694767e65bfa38ce5ae43312a7962f56169782c365671fd20ab27b8f2af857","src/unpark_mutex.rs":"7d37d56bd632fbd49e232e057ac55517f9714745eacc72c397aa07bb14450840","tests/local_pool.rs":"2bed595bdb0610fe8c53581a9964fe8b5c5b83def120249d83884acae8124007"},"package":"6eb82c5e5cfea3721b532299906e9f151deaeaf153d98d576cd55dc63a8152e5"}
\ No newline at end of file
+{"files":{"Cargo.toml":"4b9daf513b3a71e35e868eda93b526ae8b936dca0cab98c7f0226a8b1d96a948","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","benches/thread_notify.rs":"11075595b09e324cd185fcf0604f36bcd4df9a99c95726c58701a3d530ea3249","src/enter.rs":"96f74df35aca1de4dbec9d051482d4957ff56209e44ced6f489ac9cb15df6ba6","src/lib.rs":"a6db808821a0516ec46c19ef81b9fdaefbd537be76f701c6a750e3d548bcfb2d","src/local_pool.rs":"0c0dab0635bed84c4d4e882325042de79c7541800b85f5dc0a5b2ff22acf5c72","src/thread_pool.rs":"c29845a00c3e19003578609f9c8da4d2202aa48cade48482442f1ea395bfaecb","src/unpark_mutex.rs":"7d37d56bd632fbd49e232e057ac55517f9714745eacc72c397aa07bb14450840","tests/local_pool.rs":"2bed595bdb0610fe8c53581a9964fe8b5c5b83def120249d83884acae8124007"},"package":"43d4bb2cc4c0cefc554b0cf12f7151e0a578cf1820a36453eff1d955dde762ff"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/futures-executor-preview/Cargo.toml b/rustc_deps/vendor/futures-executor-preview/Cargo.toml
index b00f676..581ca00 100644
--- a/rustc_deps/vendor/futures-executor-preview/Cargo.toml
+++ b/rustc_deps/vendor/futures-executor-preview/Cargo.toml
@@ -13,26 +13,26 @@
 [package]
 edition = "2018"
 name = "futures-executor-preview"
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 authors = ["Alex Crichton <alex@alexcrichton.com>"]
 description = "Executors for asynchronous tasks based on the futures-rs library.\n"
 homepage = "https://rust-lang-nursery.github.io/futures-rs"
-documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.7/futures_executor"
+documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.9/futures_executor"
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-lang-nursery/futures-rs"
 
 [lib]
 name = "futures_executor"
 [dependencies.futures-channel-preview]
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 default-features = false
 
 [dependencies.futures-core-preview]
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 default-features = false
 
 [dependencies.futures-util-preview]
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 default-features = false
 
 [dependencies.lazy_static]
diff --git a/rustc_deps/vendor/futures-executor-preview/src/lib.rs b/rustc_deps/vendor/futures-executor-preview/src/lib.rs
index ec88db1..d1cf244 100644
--- a/rustc_deps/vendor/futures-executor-preview/src/lib.rs
+++ b/rustc_deps/vendor/futures-executor-preview/src/lib.rs
@@ -7,7 +7,7 @@
 #![warn(missing_docs, missing_debug_implementations)]
 #![deny(bare_trait_objects)]
 
-#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.7/futures_executor")]
+#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.9/futures_executor")]
 
 macro_rules! if_std {
     ($($i:item)*) => ($(
diff --git a/rustc_deps/vendor/futures-executor-preview/src/thread_pool.rs b/rustc_deps/vendor/futures-executor-preview/src/thread_pool.rs
index 125c26e..5ab0af0 100644
--- a/rustc_deps/vendor/futures-executor-preview/src/thread_pool.rs
+++ b/rustc_deps/vendor/futures-executor-preview/src/thread_pool.rs
@@ -72,6 +72,7 @@
     /// See documentation for the methods in
     /// [`ThreadPoolBuilder`](ThreadPoolBuilder) for details on the default
     /// configuration.
+    #[allow(clippy::new_ret_no_self)]
     pub fn new() -> Result<ThreadPool, io::Error> {
         ThreadPoolBuilder::new().create()
     }
diff --git a/rustc_deps/vendor/futures-io-preview/.cargo-checksum.json b/rustc_deps/vendor/futures-io-preview/.cargo-checksum.json
index 5f2df8f..6118381 100644
--- a/rustc_deps/vendor/futures-io-preview/.cargo-checksum.json
+++ b/rustc_deps/vendor/futures-io-preview/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"22c7822ec54ed7e190f751e4d0786bf5f02d0f4f79eb6f95fdf94513d79a733d","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","src/lib.rs":"0b72c442a3ac6158f50e2c6a5678195124d61be8a5ce4ed01d9737e61b6d3d89","tests/cursor.rs":"663dbdd2a7ac4aa21636dbe0f46e444f5c613d4afdc5aed669ecf080ed297189"},"package":"269e02056dbec264699c385999d67c5cc098e7d39c52c8b21a5adc26cfde62ee"}
\ No newline at end of file
+{"files":{"Cargo.toml":"7e9ae9e61cbaa4c7551ef09e04e7f2f3d5daab838f346e2afc9c11e8c8b1d507","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","src/lib.rs":"bc2ca6d4cf29b103c719dff6d90a0c13c79d4620c0900967616e82c90b18a033","tests/cursor.rs":"663dbdd2a7ac4aa21636dbe0f46e444f5c613d4afdc5aed669ecf080ed297189"},"package":"91bd6aba63f52d532c0f4ca6e9960f80a1b4295c292362baf2cad6d739fa9123"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/futures-io-preview/Cargo.toml b/rustc_deps/vendor/futures-io-preview/Cargo.toml
index 7de080e..d36e661 100644
--- a/rustc_deps/vendor/futures-io-preview/Cargo.toml
+++ b/rustc_deps/vendor/futures-io-preview/Cargo.toml
@@ -13,18 +13,18 @@
 [package]
 edition = "2018"
 name = "futures-io-preview"
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 authors = ["Alex Crichton <alex@alexcrichton.com>"]
 description = "The `AsyncRead` and `AsyncWrite` traits for the futures-rs library.\n"
 homepage = "https://rust-lang-nursery.github.io/futures-rs"
-documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.7/futures_io"
+documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.9/futures_io"
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-lang-nursery/futures-rs"
 
 [lib]
 name = "futures_io"
 [dependencies.futures-core-preview]
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 default-features = false
 
 [dependencies.iovec]
diff --git a/rustc_deps/vendor/futures-io-preview/src/lib.rs b/rustc_deps/vendor/futures-io-preview/src/lib.rs
index 9eba7ff..4bcc12f 100644
--- a/rustc_deps/vendor/futures-io-preview/src/lib.rs
+++ b/rustc_deps/vendor/futures-io-preview/src/lib.rs
@@ -4,12 +4,12 @@
 //! asynchronous analogs to `std::io::{Read, Write}`. The primary difference is
 //! that these traits integrate with the asynchronous task system.
 
-#![no_std]
+#![cfg_attr(not(feature = "std"), no_std)]
 
 #![warn(missing_docs, missing_debug_implementations)]
 #![deny(bare_trait_objects)]
 
-#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.7/futures_io")]
+#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.9/futures_io")]
 
 #![feature(futures_api)]
 
diff --git a/rustc_deps/vendor/futures-sink-preview/.cargo-checksum.json b/rustc_deps/vendor/futures-sink-preview/.cargo-checksum.json
index 7985bf3..87aadd1 100644
--- a/rustc_deps/vendor/futures-sink-preview/.cargo-checksum.json
+++ b/rustc_deps/vendor/futures-sink-preview/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{".cargo_vcs_info.json":"8ee85a563120ff8c307ae2455a0b591fe534790cba36693f4a39ec3cad5ee16c","Cargo.toml":"0fa288c6952e38761a95277192bc6437b768195526d5c5c9a91f6d6b0388ae78","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","src/channel_impls.rs":"eea5cdf5da95c694fe95cc3809a5153ae6c926b2b54582ee7d2e2bdeb2d5ce4c","src/lib.rs":"50aefb695d72c6b66872707b810c26c39d078b82bdcc190dcd6c600afaa58ffb"},"package":"6b1b0cb0849f75d1c58117c3cea8fd8850a2ad4a85f65c94a45325bbe73d9c09"}
\ No newline at end of file
+{"files":{".cargo_vcs_info.json":"1d2ef3b537ed5321b988f4d35b69cce4bd868aa151fb50ce0a74c3e318244194","Cargo.toml":"5f811a2cf4db87833a45ead12010ea60a6f1a559530a253cefbcccdd6fb3f654","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","src/channel_impls.rs":"eea5cdf5da95c694fe95cc3809a5153ae6c926b2b54582ee7d2e2bdeb2d5ce4c","src/lib.rs":"d80fa95e0b7bd0fed1a58dd341119cc8bd2d687a93c8b4adf0c74417d4f66f0d"},"package":"cd7799480a224d80e9e915a6bf8bff27498e8210b831f5a513af09d5c1db2e36"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/futures-sink-preview/.cargo_vcs_info.json b/rustc_deps/vendor/futures-sink-preview/.cargo_vcs_info.json
index 3b3cdbc..33118c3 100644
--- a/rustc_deps/vendor/futures-sink-preview/.cargo_vcs_info.json
+++ b/rustc_deps/vendor/futures-sink-preview/.cargo_vcs_info.json
@@ -1,5 +1,5 @@
 {
   "git": {
-    "sha1": "99795ef1629b221d8721671938276dd958a073eb"
+    "sha1": "6d9733c5e1d4adc7d21a94bcf19e9b8214f360a0"
   }
 }
diff --git a/rustc_deps/vendor/futures-sink-preview/Cargo.toml b/rustc_deps/vendor/futures-sink-preview/Cargo.toml
index 45da91f..793bf2e 100644
--- a/rustc_deps/vendor/futures-sink-preview/Cargo.toml
+++ b/rustc_deps/vendor/futures-sink-preview/Cargo.toml
@@ -13,11 +13,11 @@
 [package]
 edition = "2018"
 name = "futures-sink-preview"
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 authors = ["Alex Crichton <alex@alexcrichton.com>"]
 description = "The asynchronous `Sink` trait for the futures-rs library.\n"
 homepage = "https://rust-lang-nursery.github.io/futures-rs"
-documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.7/futures_sink"
+documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.9/futures_sink"
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-lang-nursery/futures-rs"
 
@@ -29,11 +29,11 @@
 default-features = false
 
 [dependencies.futures-channel-preview]
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 default-features = false
 
 [dependencies.futures-core-preview]
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 default-features = false
 
 [features]
diff --git a/rustc_deps/vendor/futures-sink-preview/src/lib.rs b/rustc_deps/vendor/futures-sink-preview/src/lib.rs
index be37f94..10bdb37 100644
--- a/rustc_deps/vendor/futures-sink-preview/src/lib.rs
+++ b/rustc_deps/vendor/futures-sink-preview/src/lib.rs
@@ -3,9 +3,9 @@
 //! This crate contains the `Sink` trait which allows values to be sent
 //! asynchronously.
 
-#![no_std]
+#![cfg_attr(not(feature = "std"), no_std)]
 #![warn(missing_docs, missing_debug_implementations)]
-#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.7/futures_sink")]
+#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.9/futures_sink")]
 
 #![feature(pin, arbitrary_self_types, futures_api)]
 
diff --git a/rustc_deps/vendor/futures-util-preview/.cargo-checksum.json b/rustc_deps/vendor/futures-util-preview/.cargo-checksum.json
index 25803b8..9fdb87e 100644
--- a/rustc_deps/vendor/futures-util-preview/.cargo-checksum.json
+++ b/rustc_deps/vendor/futures-util-preview/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"9a6c7f9d97725764955aca2f27528600b397a871ff4e2603855cbe6ffe666112","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","benches/futures_unordered.rs":"c4067ca205a37be6692a7685a1429169609fc2661178b7e2962f42e9f51bf08c","benches_disabled/bilock.rs":"d8e365e7f7a918de865f76cf27ee54cdee43959487459689c6c935d626f6a295","bilock.rs":"17d56a1e9bd8bc7437088ec6d2e3572604a1856253a30737f0c4f1a1ba2b338d","src/async_await/join.rs":"d217167b5f58c117fee656110caeda57d96d032e50bd6ff1c77768b60e1f72f1","src/async_await/mod.rs":"fda8f6abd7f6c49cb5d8b48ce11f0fbe04b64a5f7446698c85ab9972e3bc8e17","src/async_await/pending.rs":"dbbf37f4d18dc3f769da0ae8b4f43d55558525aa40e445d736a74c87297bad0a","src/async_await/poll.rs":"acd81ba4aeb7d5dc66f76dd9b34aebefc1d2c835ede99d81457b574f693e78db","src/async_await/select.rs":"e7b1a52069eeef240446774dec60cf19b74912230ab52a94f153c0c9c0dc8d0c","src/compat/compat.rs":"5f600f2f30747d5856ae4e04332fa3668c57189d4d4c8af9b671050f97817d82","src/compat/compat01to03.rs":"1c4843c3a8e928f1a1299c825dc319421e6d878d9c50f419916355572a4f461b","src/compat/compat03to01.rs":"665111d15d309a889fc5c036f327b03495cf300a253e66698bfa480d8065686e","src/compat/executor.rs":"907649a03fd9b165791e5e90ad302636a7f000a007d3ca3b1791127060f60dab","src/compat/future01ext.rs":"be2ee3d4666dc6a20652e2f92ed4cd5fadae2fdc45706c68fd4ca680627ead52","src/compat/mod.rs":"4adc6e52bdea8960bf06600a5ef41afb7d650c6cece42ac140e9d309e4a09cc0","src/compat/stream01ext.rs":"72620a0e0200997bafe1dc0ac9cb37cac8a4e94bb643dfc15c912304412a09c0","src/compat/tokio.rs":"f0a8d0a90ac8659832bcd5d6a8622d3c63a67113394c265e8ec37191d79c30a0","src/future/abortable.rs":"4e0f1a3a7bdde4bf86bc36360c2e4dea9b1817c20e1868488fe777a661f474e1","src/future/catch_unwind.rs":"52ef2de818bae86f0d9d0b77be38c9f4745cd125b76d4e01c70aa34fe8ac88ca","src/future/chain.rs":"e03be6a07490f6be7d1abac4a81b054ad866e5e4e6d7787629a8ae2826aef610","src/future/disabled/join_all.rs":"ba2b9f2d2fa0f782d753c63e0c0baf03e8bbd0bdb720492df28d1ea3bb51164f","src/future/disabled/select.rs":"71d192c9f61405ea75a2dd70d8fb289a6c7c3ec54d7831ba26b255361e689135","src/future/disabled/select_all.rs":"a5408e25c0203f5b7fcc49b5404dd67ad0e8cda90c3f9b9988c4fe5956b77ca1","src/future/disabled/select_ok.rs":"9a3e0eb3b25ab07d5e12b03ea517681da8f02c97c2dc47eb8039df5776bd269d","src/future/empty.rs":"c53eaafdd9159a481d2b7909c68a5ff281b1d42ee19d219679d09197db76b570","src/future/flatten.rs":"286eec59fa62d611badd17c577df1eaf866499e91565d2efc5fe6322ac6fc1eb","src/future/flatten_stream.rs":"93bbee3491e73b356944a42822b1d3a0abcd3fe5407448e5336c31f4fe6f5836","src/future/fuse.rs":"30bc6c332a5a46f69645746809eec3e668f9e23fb298d50ca92caba4e4db5f60","src/future/inspect.rs":"223a0434f9e988add1548f282376e202503cfb8e584f192383797c826b9e4bb6","src/future/into_stream.rs":"dc6d9da71d9c1e072e9d515abb4c104eb2c5a76272206542abb63fb900a085ce","src/future/join.rs":"c1f05f12a0934ca08d8d37485382b21eadef0ab27da57a08f4233d85299efe2b","src/future/lazy.rs":"7a91ec34a11b453a1fdee3c0210d142be688680977dee570978dbc277e5dcb5a","src/future/map.rs":"537f3ab8ec020d8ca88e82c4a4a0d313c82ac8c4c2cd9ed51d9e38a6057d50dc","src/future/maybe_done.rs":"3c597368bcbd49f89c8d3943969e00b50a5d1275bd7aa7a1eeb885741e1127e6","src/future/mod.rs":"0cae5b93512bb1e5e32ffc9687e0e3457be9146123b0ce95428307c64ec7e493","src/future/option.rs":"2e1b92c27b215e683b219906d6877382bfead03db75c439d2944659c84fe5a9e","src/future/poll_fn.rs":"8fdb810ee39e1fab63849aaa6209d3c743cf341ca312f1e9c6163292c192f052","src/future/ready.rs":"b637e38bc15438e9bff906816698b147c9fd2cc9fe32daea701787ce12128331","src/future/remote_handle.rs":"e72e43f887eb8b3609f2d43cd4d131b6b42c25c61c0dffb9987f34a42ff80b69","src/future/shared.rs":"0d5b278c479a4e1c67fffa6168a7a47e434b93d6ea0694ce9776d3a3ea566463","src/future/then.rs":"24f19ae495101e82e68ba7643abf3913622d405d0b2ae318a442714462c2aa1a","src/future/unit_error.rs":"0c7bef53a96053f9e554a445222c7a8cf0f8cee2fc10b11fab9129a450441b54","src/io/allow_std.rs":"0ebf0f6f362a751a66098988fcde3e412e8cf776e6c646f391aa682dbcbc69c8","src/io/close.rs":"d0f43812e07a0af83d39ea0d62c6d44043e898591b9edba60b79b307c6d8e47b","src/io/copy_into.rs":"b034242ff365f6c34c83ac593715355b928cb7ce8b4cdc238dd532ebc84d3c4d","src/io/disabled/lines.rs":"19104891ba87e8199a95dcb742e0311a40a058a3e191d5152f1f8fbe20221d6f","src/io/disabled/read_until.rs":"b5771d78aaea0b6d7e5efa3c3cbbc745227ef008f7c9a3a8d6803ad3917c2934","src/io/flush.rs":"7e123732d927b8a723efbbe2a850245ca780c2e1028f3d1477f4d9cc2b39a36d","src/io/mod.rs":"aee3c460eb646c436c0eb8702e3630c8fbd514fc9bb49641b81616384c767cfc","src/io/read.rs":"9b16fdb9f1885708fe68b186aed0ac72c17ed27cc13ff9216a24f0ad0be48bd8","src/io/read_exact.rs":"63604de3cdc064dbcd46ab41e8d108c041222e8addcebe55570daff9ab4dbd6b","src/io/read_to_end.rs":"df77cff3e3c0937d79581350caf0065215bba29efe3db06cb5e290f559898d1f","src/io/split.rs":"03f5fd14eaa33ea6363a03c6bfbc3ea8cba5bf1c78954551e62ca7facc546b52","src/io/window.rs":"e6fca0e2e8d99c76b4fe3ab9956997c6fd8167005d4dec01cae0c7879203e3c5","src/io/write_all.rs":"fb7d2b22899d9e63f78d7f2cec5a7b04d6ee187ec0dae9e1afc91b394923dd9e","src/lib.rs":"3c9c08292a5a838863940d197c98559e10e4862d47d6b4ec252efdf1cae3e7d2","src/lock.rs":"1327fc1d218fbea6aee79aaaae8e20d87ac312148e258bd521ef5187267a8ace","src/macros/mod.rs":"8a71fe88cb0d13cac1cdc36083c2d7c2683699d5adaf62978f1dccf6ed7e7365","src/macros/poll.rs":"bce71e2fafd7453a551d66d48dfc7a1ab552adc68e85aaa00362aeffd4c89ac1","src/sink/buffer.rs":"e0877350739624f8166d6ab5b409e851b3459404aa81ed29678ed30c9e17fa7a","src/sink/close.rs":"da3bd919834d481f227dde4fb4c803b870fc8608a9fc10c650f12a10dd81c33a","src/sink/drain.rs":"cb9dbe44c90f5954b46ee2ee4f4fb0ff8196df986c2594c2167f9df1244c7009","src/sink/err_into.rs":"fbd8c80e57691bd96d8c63a08129ed6e52a6c7c80101ed1e7a1b3583af47ca42","src/sink/fanout.rs":"6b588848ba271d2a0a3603a06026d6e26f9d1b72f7dd305931ca28451fd40727","src/sink/flush.rs":"c0ab495c6356210f33fbce6e4007622d23b4489312f81525d3765692fdc90f04","src/sink/map_err.rs":"25f19ad27276ed35c709b03d2dea195c57cfa52bfba2d938e62cee565c8c1d2b","src/sink/mod.rs":"aa371e9981142a1d22c8275fb3e688c9ec550918aeb2f055cd521d2e5242fd4a","src/sink/send.rs":"76f54ba56bc07277a07f241a925a1eb6e798cea66a6b0855f5816867e55110ba","src/sink/send_all.rs":"667548057131fbc0dcb41e241b8d62dacfd3b92c4583c47bcf1c703fac7f398a","src/sink/wait.rs":"b2d016ad492a04d589c6766f7761b1c3e977cac17344feefe932cbd4d804ac53","src/sink/with.rs":"a143456bd6d6052cb03d9e3c0050ce421c9bf711af9e5e1c3b9e1467ba9d1da0","src/sink/with_flat_map.rs":"b972f8b97abdaba70bc61dfa92c9386ef216b60dfac23cc7c6c42cbf4b191dae","src/stream/buffer_unordered.rs":"797fd1c756ccffcd7109438a24bf885ecb0107fb99826be4ca01594c72d005d4","src/stream/buffered.rs":"855c8d6964c06656d8e0d348c004d3e8108d338c9a3e181ce692f09876ebc689","src/stream/catch_unwind.rs":"d963302bc32999b5ab633a81715d4b586709c001c7a1a65134fefe81f9d64abb","src/stream/chain.rs":"0b36ec205a09d718a1591668adbf94588aff8ea74b37b8f2e6df70bc17791f51","src/stream/chunks.rs":"46e4f65eb2826cfa7a749d20ab828cb6b404a80efabf53586629373a4e6938bc","src/stream/collect.rs":"10c0064324eb7f94aee2a6a07c8c0298d6dbbf9a4673bc238abaff79b13144b6","src/stream/concat.rs":"32ef8ff64e6525e051c639c1d9b32d13b443d808b9c81c697ae2f5bde8f37a87","src/stream/disabled/select_all.rs":"8c39b58462e8d64a0b07e1cfdaf01cd3b851715b7a2c4cb10b9e2a990ea6f6fc","src/stream/empty.rs":"8a6dc6561d75890cc9110cbe2f0a9736f89b737258a15667d27eb3f36594075f","src/stream/filter.rs":"896b74b85ba5c99cf742a0777ce05cd4e81f0db1aa68a0663b6fce0bca8b0e3f","src/stream/filter_map.rs":"24a939dfcdcfd10d0300ceee20911460dbe4a8dab7e0a9195f67b5feda2af7a1","src/stream/flatten.rs":"0b96baee2e9c4f3fdb2d0f6b454da077e8540a4bf59f394ff7fa997fa9639073","src/stream/fold.rs":"64c577bc56a5a3de42f9cef9e2d0d97ba42955f43d2b045cb37e6d3ba9fa96e2","src/stream/for_each.rs":"3381d8ab099269ecd7a9a731777f2aa06d86a31a608514263d72c1fa1167c50f","src/stream/for_each_concurrent.rs":"b024de23272912e302e55ddf218424693790817a2930d9c1b60e57e5fe518c31","src/stream/forward.rs":"055705c015b789b1735bf84a8ea3a16abc519eca022fa0b2c8ec3f0164897995","src/stream/fuse.rs":"3d1474adc3b3c23b57353769d046a68cecb28d615abcae488542b57327a6ede2","src/stream/futures_ordered.rs":"bcdd4aed40724ae0244f4fe529b79900f2bc0e716e0d5d40efc04c912d772b68","src/stream/futures_unordered/abort.rs":"bdfece9f91accafd5122be36d628c37c5b219ac0eecec181267840fbb1e95a45","src/stream/futures_unordered/iter.rs":"c023ed97bf6239ed3bfdca5fa9db175e2a8e4107bb248b71bb304e0aa896d296","src/stream/futures_unordered/mod.rs":"fcffd4a99e3e10e5942669352838c7d96d5b647f1e22e065ae0c8f20bd786c97","src/stream/futures_unordered/ready_to_run_queue.rs":"81382095c3e08ee909e07893de37350bd35e353a034652569706b5e0b2d7c8cb","src/stream/futures_unordered/task.rs":"f78fe2a3c68670d319c5a20062ecfc64f07914fcae08edb4d061719555fa91a7","src/stream/inspect.rs":"28cdd6aa5b381c80d9e2cc0ea4203aaecd40098f21a3d817b8a78c51ce2cab2f","src/stream/into_future.rs":"8ee3d45df633d01c1d912cc1657c7310b60b5ad7b88c137d1ddc494e509d8cf9","src/stream/iter.rs":"c9fdfec8ec39c63b9d97d0ec87fdc0ae67731e4b365c71defaf77f226fb5aa67","src/stream/map.rs":"d67c154189196f756700ee403265ad0cd2fe4746267e8b06b55ceb9a3d667544","src/stream/mod.rs":"6792bc246ec5e57ab1e40310ead79e62e7935a897c8fa3bfc4676dafa81c2fe2","src/stream/next.rs":"d2b26eb528d34897e1a76f50916d4847913c57fbd51bffc5f3c37963810194b2","src/stream/once.rs":"cb0625aabcb651ea5c7eb15247492927ac5b35bdbfaa8fb8a0c5c2e9b5615da8","src/stream/peek.rs":"ac7fab40679c8ae58e99051318553754dc48521121492a87eb4a2da15ebde0cd","src/stream/poll_fn.rs":"fca1f30bb53247e8304f4e28eb5719240147f5f0d8e9b77088b6f30ff863ecee","src/stream/repeat.rs":"3dcd126b309498248a5737af9a55d86bbd1a3c1f4270d28bc63004010ad4408e","src/stream/select.rs":"175441d319f056f2dfd87fe0094d7dc212212070ade2b6cca761cc700b54c4ee","src/stream/skip.rs":"8272eeed0f377f586515df4192aaf5c00d1787b1c2903b7241fc54d641da113d","src/stream/skip_while.rs":"9d12932bfc35d09f5c9392e7f321602a4b954537c488f4ed155698555eac18e6","src/stream/split.rs":"0bb9ae3d34021cacc2def57c01e5311766ba4675004fca74e137a99ce7cc4cdf","src/stream/take.rs":"67315dace30a985489cdf94617dd9cf1583b0f676a86ab29d116ca9ea8910bb1","src/stream/take_while.rs":"e3aeac1975fdbbe5996398c7e0b6fc9d52cd2b4cedccde73c05bce283f07ffff","src/stream/then.rs":"c642b4906c6c0c021bd690cf88d4372e39b4dc5446e7f6e96bf4895e0300899f","src/stream/unfold.rs":"fc25d439d42789a892b48938bc97ff36243e4771e80635787b42a7647c596197","src/stream/zip.rs":"678902ca05a6ea82c1111247dacf53dccbcc5e724bd3d089008ea15354f754ed","src/task/atomic_waker.rs":"951fdba753597bc4d2aeb430a0b64178c5dd5837695bbf434b84cf18b506f2b4","src/task/local_waker_ref.rs":"80ec2c71794198da44067563f26e499056d5ad7c96c1f0c3a9735ac627dfea1f","src/task/mod.rs":"1f0e543c6acb4f376b7d456b14940619d824c1539554c462dbfee63cf41e5a9d","src/task/spawn.rs":"9dc2254eff8dbf09d576eeedab26dae9817854f492314febd493e11b0af3033f","src/try_future/and_then.rs":"70dd4f7836255346a16677c35dedeb8e88da1d156bba4829b9e56030a0d5f79c","src/try_future/err_into.rs":"7e861ee1210f4ee3aff74d4c98d9f7a81069bdc2649e1a14fe0b4157607253d1","src/try_future/flatten_sink.rs":"357b647b5d3999256f1fa029155e08ef4efd40526426cb040cb84585e31dafa5","src/try_future/into_future.rs":"bdf824aba9cb7d0ee08b1cc1de9b1bd44d5865b2ddf7af1de670f3910686e6d3","src/try_future/map_err.rs":"0aa408b37b604711559d656d60216d9e0aa509f67bdc64aea92db64906d0f89d","src/try_future/map_ok.rs":"6769ad289293e0b7ffc7d3f36761739f5731c917fbe403627675ee2c0b382392","src/try_future/mod.rs":"744791e753822dd823e5a69193417b48a2c7f0b543c209422269720e41908b87","src/try_future/or_else.rs":"98d56cfc992c974067a1654f44f41a6610eb7782cbf033e04269c4347f3a7ce4","src/try_future/try_chain.rs":"88008a469e0e6c82d370b4a0cc2f23286ab1dc9af135913e6a2b7c9a25f0f0c5","src/try_future/try_join.rs":"4479b5f33123057992b0bf1c3d436e9344fb5e77e3ceaf56c1fe17d46f6765ec","src/try_future/unwrap_or_else.rs":"779426f2cd1e18a2c7d46a7857292a444a746e7789931a183856fe7c5347402c","src/try_stream/err_into.rs":"d657f0de843bba6d5cd97b3fd5f0b9d1dd625cdcfd1b9d985d9c116e03e88515","src/try_stream/into_stream.rs":"85e1b40732c80e51af7a4b3b89f8e2f999df63799809e85977bbc6403306c430","src/try_stream/map_err.rs":"3c8303719b1a0a85c69ad2f0b316f68759e98744a9bca212884d10b4f2d19fcd","src/try_stream/map_ok.rs":"ae8a8c44b90ccf0e220bd608b8462d96a3cfd83edbad728d3b36d351d7f83567","src/try_stream/mod.rs":"536dfab10c59a0d59f5ec44575ec390bb473eac8d1d917676d5231c2626231eb","src/try_stream/try_buffer_unordered.rs":"cfbba47a7da2a13564c9e0bffe23f9010e8c91e280e24eb6046a0524c7da530e","src/try_stream/try_collect.rs":"094235f8d17c4d0f8919b7624333c58f063962ebe60811b50730cd7b48c3058d","src/try_stream/try_filter_map.rs":"71cc02d738f809ce587b38e9047844194a0e163ae438063d8cba064ceac92260","src/try_stream/try_fold.rs":"b3b37855250920a6a46c210c688919b8e6c510e26d2a342495c70fc3cd7bd9f7","src/try_stream/try_for_each.rs":"251b5d75ff75dd4711cf66fb2c999d89d3b8b33dba965cdf1696efed8d613b60","src/try_stream/try_for_each_concurrent.rs":"c1974e4e35b798962865ec3aa227a8569aec7fafcab32e2096f6724946686c2b","src/try_stream/try_next.rs":"170344db6da775f0104d6583d79efb33bca039504954cdfb692a980e0c58ba4b","src/try_stream/try_skip_while.rs":"9331959b80a60ee73a2d5c2256c0df56052e64e404b0c0eb9e69f58f1689b78c"},"package":"f50fb4d68c9cf04222863445797d974d4d32d11eb45cc86bcb16dc46f3fa80f5"}
\ No newline at end of file
+{"files":{"Cargo.toml":"e5e9d6de6b8bcaaf10f47e3747fdd132db3d584730b8c17ef5ebbafe2c66c276","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","benches/futures_unordered.rs":"c4067ca205a37be6692a7685a1429169609fc2661178b7e2962f42e9f51bf08c","benches_disabled/bilock.rs":"d8e365e7f7a918de865f76cf27ee54cdee43959487459689c6c935d626f6a295","bilock.rs":"17d56a1e9bd8bc7437088ec6d2e3572604a1856253a30737f0c4f1a1ba2b338d","src/async_await/join.rs":"d217167b5f58c117fee656110caeda57d96d032e50bd6ff1c77768b60e1f72f1","src/async_await/mod.rs":"fda8f6abd7f6c49cb5d8b48ce11f0fbe04b64a5f7446698c85ab9972e3bc8e17","src/async_await/pending.rs":"dbbf37f4d18dc3f769da0ae8b4f43d55558525aa40e445d736a74c87297bad0a","src/async_await/poll.rs":"acd81ba4aeb7d5dc66f76dd9b34aebefc1d2c835ede99d81457b574f693e78db","src/async_await/select.rs":"e7b1a52069eeef240446774dec60cf19b74912230ab52a94f153c0c9c0dc8d0c","src/compat/compat01as03.rs":"9d5c8c79f05f8c46bef72a36b17c54d887343bb5ffd313199d6590df8edbb153","src/compat/compat03as01.rs":"53dbd7d38e973ce0d9394578e3f766d66b4bb7a02696e721edb82138ecc67359","src/compat/executor.rs":"e15e85f4d92b4e3b998065805d46ed3d9bdc9d94d16524e96c780fdd58bc74de","src/compat/mod.rs":"9aac31c47bcee666c0c9ba306ac9405b873d3ef2928bc3439853b9ba49c057d5","src/compat/tokio.rs":"f0a8d0a90ac8659832bcd5d6a8622d3c63a67113394c265e8ec37191d79c30a0","src/future/abortable.rs":"4e0f1a3a7bdde4bf86bc36360c2e4dea9b1817c20e1868488fe777a661f474e1","src/future/catch_unwind.rs":"52ef2de818bae86f0d9d0b77be38c9f4745cd125b76d4e01c70aa34fe8ac88ca","src/future/chain.rs":"e03be6a07490f6be7d1abac4a81b054ad866e5e4e6d7787629a8ae2826aef610","src/future/disabled/join_all.rs":"ba2b9f2d2fa0f782d753c63e0c0baf03e8bbd0bdb720492df28d1ea3bb51164f","src/future/disabled/select.rs":"71d192c9f61405ea75a2dd70d8fb289a6c7c3ec54d7831ba26b255361e689135","src/future/disabled/select_all.rs":"a5408e25c0203f5b7fcc49b5404dd67ad0e8cda90c3f9b9988c4fe5956b77ca1","src/future/disabled/select_ok.rs":"9a3e0eb3b25ab07d5e12b03ea517681da8f02c97c2dc47eb8039df5776bd269d","src/future/empty.rs":"c53eaafdd9159a481d2b7909c68a5ff281b1d42ee19d219679d09197db76b570","src/future/flatten.rs":"286eec59fa62d611badd17c577df1eaf866499e91565d2efc5fe6322ac6fc1eb","src/future/flatten_stream.rs":"93bbee3491e73b356944a42822b1d3a0abcd3fe5407448e5336c31f4fe6f5836","src/future/fuse.rs":"30bc6c332a5a46f69645746809eec3e668f9e23fb298d50ca92caba4e4db5f60","src/future/inspect.rs":"223a0434f9e988add1548f282376e202503cfb8e584f192383797c826b9e4bb6","src/future/into_stream.rs":"dc6d9da71d9c1e072e9d515abb4c104eb2c5a76272206542abb63fb900a085ce","src/future/join.rs":"c1f05f12a0934ca08d8d37485382b21eadef0ab27da57a08f4233d85299efe2b","src/future/lazy.rs":"7a91ec34a11b453a1fdee3c0210d142be688680977dee570978dbc277e5dcb5a","src/future/map.rs":"537f3ab8ec020d8ca88e82c4a4a0d313c82ac8c4c2cd9ed51d9e38a6057d50dc","src/future/maybe_done.rs":"3c597368bcbd49f89c8d3943969e00b50a5d1275bd7aa7a1eeb885741e1127e6","src/future/mod.rs":"0cae5b93512bb1e5e32ffc9687e0e3457be9146123b0ce95428307c64ec7e493","src/future/option.rs":"2e1b92c27b215e683b219906d6877382bfead03db75c439d2944659c84fe5a9e","src/future/poll_fn.rs":"8fdb810ee39e1fab63849aaa6209d3c743cf341ca312f1e9c6163292c192f052","src/future/ready.rs":"b637e38bc15438e9bff906816698b147c9fd2cc9fe32daea701787ce12128331","src/future/remote_handle.rs":"e72e43f887eb8b3609f2d43cd4d131b6b42c25c61c0dffb9987f34a42ff80b69","src/future/shared.rs":"0d5b278c479a4e1c67fffa6168a7a47e434b93d6ea0694ce9776d3a3ea566463","src/future/then.rs":"24f19ae495101e82e68ba7643abf3913622d405d0b2ae318a442714462c2aa1a","src/future/unit_error.rs":"0c7bef53a96053f9e554a445222c7a8cf0f8cee2fc10b11fab9129a450441b54","src/io/allow_std.rs":"0ebf0f6f362a751a66098988fcde3e412e8cf776e6c646f391aa682dbcbc69c8","src/io/close.rs":"d0f43812e07a0af83d39ea0d62c6d44043e898591b9edba60b79b307c6d8e47b","src/io/copy_into.rs":"b034242ff365f6c34c83ac593715355b928cb7ce8b4cdc238dd532ebc84d3c4d","src/io/disabled/lines.rs":"19104891ba87e8199a95dcb742e0311a40a058a3e191d5152f1f8fbe20221d6f","src/io/disabled/read_until.rs":"b5771d78aaea0b6d7e5efa3c3cbbc745227ef008f7c9a3a8d6803ad3917c2934","src/io/flush.rs":"7e123732d927b8a723efbbe2a850245ca780c2e1028f3d1477f4d9cc2b39a36d","src/io/mod.rs":"30e53102ad28edbe2f08f946532e876e9bcf2ab3e7f4cef9bae670d86a68b1d2","src/io/read.rs":"9b16fdb9f1885708fe68b186aed0ac72c17ed27cc13ff9216a24f0ad0be48bd8","src/io/read_exact.rs":"63604de3cdc064dbcd46ab41e8d108c041222e8addcebe55570daff9ab4dbd6b","src/io/read_to_end.rs":"df77cff3e3c0937d79581350caf0065215bba29efe3db06cb5e290f559898d1f","src/io/split.rs":"03f5fd14eaa33ea6363a03c6bfbc3ea8cba5bf1c78954551e62ca7facc546b52","src/io/window.rs":"e6fca0e2e8d99c76b4fe3ab9956997c6fd8167005d4dec01cae0c7879203e3c5","src/io/write_all.rs":"fb7d2b22899d9e63f78d7f2cec5a7b04d6ee187ec0dae9e1afc91b394923dd9e","src/lib.rs":"00b4ab5537574f79c039c6871dfc5c1ff5564b0f1006c87794be0733c3248660","src/lock.rs":"fc3ac9a4991546da6f0bc8341b75c3c8433cd39dc0057a47a6cfc385f1495830","src/macros/mod.rs":"8a71fe88cb0d13cac1cdc36083c2d7c2683699d5adaf62978f1dccf6ed7e7365","src/macros/poll.rs":"bce71e2fafd7453a551d66d48dfc7a1ab552adc68e85aaa00362aeffd4c89ac1","src/sink/buffer.rs":"e0877350739624f8166d6ab5b409e851b3459404aa81ed29678ed30c9e17fa7a","src/sink/close.rs":"da3bd919834d481f227dde4fb4c803b870fc8608a9fc10c650f12a10dd81c33a","src/sink/drain.rs":"cb9dbe44c90f5954b46ee2ee4f4fb0ff8196df986c2594c2167f9df1244c7009","src/sink/err_into.rs":"fbd8c80e57691bd96d8c63a08129ed6e52a6c7c80101ed1e7a1b3583af47ca42","src/sink/fanout.rs":"6b588848ba271d2a0a3603a06026d6e26f9d1b72f7dd305931ca28451fd40727","src/sink/flush.rs":"c0ab495c6356210f33fbce6e4007622d23b4489312f81525d3765692fdc90f04","src/sink/map_err.rs":"25f19ad27276ed35c709b03d2dea195c57cfa52bfba2d938e62cee565c8c1d2b","src/sink/mod.rs":"aa371e9981142a1d22c8275fb3e688c9ec550918aeb2f055cd521d2e5242fd4a","src/sink/send.rs":"76f54ba56bc07277a07f241a925a1eb6e798cea66a6b0855f5816867e55110ba","src/sink/send_all.rs":"667548057131fbc0dcb41e241b8d62dacfd3b92c4583c47bcf1c703fac7f398a","src/sink/wait.rs":"b2d016ad492a04d589c6766f7761b1c3e977cac17344feefe932cbd4d804ac53","src/sink/with.rs":"a143456bd6d6052cb03d9e3c0050ce421c9bf711af9e5e1c3b9e1467ba9d1da0","src/sink/with_flat_map.rs":"b972f8b97abdaba70bc61dfa92c9386ef216b60dfac23cc7c6c42cbf4b191dae","src/stream/buffer_unordered.rs":"797fd1c756ccffcd7109438a24bf885ecb0107fb99826be4ca01594c72d005d4","src/stream/buffered.rs":"855c8d6964c06656d8e0d348c004d3e8108d338c9a3e181ce692f09876ebc689","src/stream/catch_unwind.rs":"d963302bc32999b5ab633a81715d4b586709c001c7a1a65134fefe81f9d64abb","src/stream/chain.rs":"0b36ec205a09d718a1591668adbf94588aff8ea74b37b8f2e6df70bc17791f51","src/stream/chunks.rs":"46e4f65eb2826cfa7a749d20ab828cb6b404a80efabf53586629373a4e6938bc","src/stream/collect.rs":"10c0064324eb7f94aee2a6a07c8c0298d6dbbf9a4673bc238abaff79b13144b6","src/stream/concat.rs":"32ef8ff64e6525e051c639c1d9b32d13b443d808b9c81c697ae2f5bde8f37a87","src/stream/disabled/select_all.rs":"8c39b58462e8d64a0b07e1cfdaf01cd3b851715b7a2c4cb10b9e2a990ea6f6fc","src/stream/empty.rs":"8a6dc6561d75890cc9110cbe2f0a9736f89b737258a15667d27eb3f36594075f","src/stream/filter.rs":"896b74b85ba5c99cf742a0777ce05cd4e81f0db1aa68a0663b6fce0bca8b0e3f","src/stream/filter_map.rs":"24a939dfcdcfd10d0300ceee20911460dbe4a8dab7e0a9195f67b5feda2af7a1","src/stream/flatten.rs":"0b96baee2e9c4f3fdb2d0f6b454da077e8540a4bf59f394ff7fa997fa9639073","src/stream/fold.rs":"64c577bc56a5a3de42f9cef9e2d0d97ba42955f43d2b045cb37e6d3ba9fa96e2","src/stream/for_each.rs":"3381d8ab099269ecd7a9a731777f2aa06d86a31a608514263d72c1fa1167c50f","src/stream/for_each_concurrent.rs":"b024de23272912e302e55ddf218424693790817a2930d9c1b60e57e5fe518c31","src/stream/forward.rs":"055705c015b789b1735bf84a8ea3a16abc519eca022fa0b2c8ec3f0164897995","src/stream/fuse.rs":"3d1474adc3b3c23b57353769d046a68cecb28d615abcae488542b57327a6ede2","src/stream/futures_ordered.rs":"bcdd4aed40724ae0244f4fe529b79900f2bc0e716e0d5d40efc04c912d772b68","src/stream/futures_unordered/abort.rs":"bdfece9f91accafd5122be36d628c37c5b219ac0eecec181267840fbb1e95a45","src/stream/futures_unordered/iter.rs":"c023ed97bf6239ed3bfdca5fa9db175e2a8e4107bb248b71bb304e0aa896d296","src/stream/futures_unordered/mod.rs":"fcffd4a99e3e10e5942669352838c7d96d5b647f1e22e065ae0c8f20bd786c97","src/stream/futures_unordered/ready_to_run_queue.rs":"81382095c3e08ee909e07893de37350bd35e353a034652569706b5e0b2d7c8cb","src/stream/futures_unordered/task.rs":"f78fe2a3c68670d319c5a20062ecfc64f07914fcae08edb4d061719555fa91a7","src/stream/inspect.rs":"28cdd6aa5b381c80d9e2cc0ea4203aaecd40098f21a3d817b8a78c51ce2cab2f","src/stream/into_future.rs":"8ee3d45df633d01c1d912cc1657c7310b60b5ad7b88c137d1ddc494e509d8cf9","src/stream/iter.rs":"c9fdfec8ec39c63b9d97d0ec87fdc0ae67731e4b365c71defaf77f226fb5aa67","src/stream/map.rs":"d67c154189196f756700ee403265ad0cd2fe4746267e8b06b55ceb9a3d667544","src/stream/mod.rs":"6792bc246ec5e57ab1e40310ead79e62e7935a897c8fa3bfc4676dafa81c2fe2","src/stream/next.rs":"d2b26eb528d34897e1a76f50916d4847913c57fbd51bffc5f3c37963810194b2","src/stream/once.rs":"cb0625aabcb651ea5c7eb15247492927ac5b35bdbfaa8fb8a0c5c2e9b5615da8","src/stream/peek.rs":"ac7fab40679c8ae58e99051318553754dc48521121492a87eb4a2da15ebde0cd","src/stream/poll_fn.rs":"fca1f30bb53247e8304f4e28eb5719240147f5f0d8e9b77088b6f30ff863ecee","src/stream/repeat.rs":"3dcd126b309498248a5737af9a55d86bbd1a3c1f4270d28bc63004010ad4408e","src/stream/select.rs":"175441d319f056f2dfd87fe0094d7dc212212070ade2b6cca761cc700b54c4ee","src/stream/skip.rs":"8272eeed0f377f586515df4192aaf5c00d1787b1c2903b7241fc54d641da113d","src/stream/skip_while.rs":"9d12932bfc35d09f5c9392e7f321602a4b954537c488f4ed155698555eac18e6","src/stream/split.rs":"0bb9ae3d34021cacc2def57c01e5311766ba4675004fca74e137a99ce7cc4cdf","src/stream/take.rs":"67315dace30a985489cdf94617dd9cf1583b0f676a86ab29d116ca9ea8910bb1","src/stream/take_while.rs":"e3aeac1975fdbbe5996398c7e0b6fc9d52cd2b4cedccde73c05bce283f07ffff","src/stream/then.rs":"c642b4906c6c0c021bd690cf88d4372e39b4dc5446e7f6e96bf4895e0300899f","src/stream/unfold.rs":"fc25d439d42789a892b48938bc97ff36243e4771e80635787b42a7647c596197","src/stream/zip.rs":"678902ca05a6ea82c1111247dacf53dccbcc5e724bd3d089008ea15354f754ed","src/task/atomic_waker.rs":"94e58d23adfa662063347c41ac6a39083f9a6b623d02ac11891ba865ac19f8db","src/task/local_waker_ref.rs":"80ec2c71794198da44067563f26e499056d5ad7c96c1f0c3a9735ac627dfea1f","src/task/mod.rs":"1f0e543c6acb4f376b7d456b14940619d824c1539554c462dbfee63cf41e5a9d","src/task/spawn.rs":"67b8bd3ae3f7c62a6d15804d7d0de472493628444e6f48ad5cdd2a07b5b13dc9","src/try_future/and_then.rs":"70dd4f7836255346a16677c35dedeb8e88da1d156bba4829b9e56030a0d5f79c","src/try_future/err_into.rs":"7e861ee1210f4ee3aff74d4c98d9f7a81069bdc2649e1a14fe0b4157607253d1","src/try_future/flatten_sink.rs":"357b647b5d3999256f1fa029155e08ef4efd40526426cb040cb84585e31dafa5","src/try_future/into_future.rs":"bdf824aba9cb7d0ee08b1cc1de9b1bd44d5865b2ddf7af1de670f3910686e6d3","src/try_future/map_err.rs":"0aa408b37b604711559d656d60216d9e0aa509f67bdc64aea92db64906d0f89d","src/try_future/map_ok.rs":"6769ad289293e0b7ffc7d3f36761739f5731c917fbe403627675ee2c0b382392","src/try_future/mod.rs":"744791e753822dd823e5a69193417b48a2c7f0b543c209422269720e41908b87","src/try_future/or_else.rs":"98d56cfc992c974067a1654f44f41a6610eb7782cbf033e04269c4347f3a7ce4","src/try_future/try_chain.rs":"88008a469e0e6c82d370b4a0cc2f23286ab1dc9af135913e6a2b7c9a25f0f0c5","src/try_future/try_join.rs":"4479b5f33123057992b0bf1c3d436e9344fb5e77e3ceaf56c1fe17d46f6765ec","src/try_future/unwrap_or_else.rs":"779426f2cd1e18a2c7d46a7857292a444a746e7789931a183856fe7c5347402c","src/try_stream/err_into.rs":"d657f0de843bba6d5cd97b3fd5f0b9d1dd625cdcfd1b9d985d9c116e03e88515","src/try_stream/into_stream.rs":"85e1b40732c80e51af7a4b3b89f8e2f999df63799809e85977bbc6403306c430","src/try_stream/map_err.rs":"3c8303719b1a0a85c69ad2f0b316f68759e98744a9bca212884d10b4f2d19fcd","src/try_stream/map_ok.rs":"ae8a8c44b90ccf0e220bd608b8462d96a3cfd83edbad728d3b36d351d7f83567","src/try_stream/mod.rs":"f1f58b31b9d3b5541016810b8c04b95f6b9305e73fe4a5521acd9a8666ca0432","src/try_stream/try_buffer_unordered.rs":"cfbba47a7da2a13564c9e0bffe23f9010e8c91e280e24eb6046a0524c7da530e","src/try_stream/try_collect.rs":"094235f8d17c4d0f8919b7624333c58f063962ebe60811b50730cd7b48c3058d","src/try_stream/try_filter_map.rs":"71cc02d738f809ce587b38e9047844194a0e163ae438063d8cba064ceac92260","src/try_stream/try_fold.rs":"b3b37855250920a6a46c210c688919b8e6c510e26d2a342495c70fc3cd7bd9f7","src/try_stream/try_for_each.rs":"251b5d75ff75dd4711cf66fb2c999d89d3b8b33dba965cdf1696efed8d613b60","src/try_stream/try_for_each_concurrent.rs":"c1974e4e35b798962865ec3aa227a8569aec7fafcab32e2096f6724946686c2b","src/try_stream/try_next.rs":"170344db6da775f0104d6583d79efb33bca039504954cdfb692a980e0c58ba4b","src/try_stream/try_skip_while.rs":"9331959b80a60ee73a2d5c2256c0df56052e64e404b0c0eb9e69f58f1689b78c"},"package":"b73a6f85964a8291914db0114ccb0045c994c58b2110c4cf4ac47f5d2176ec90"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/futures-util-preview/Cargo.toml b/rustc_deps/vendor/futures-util-preview/Cargo.toml
index 8fe8cdf..c0e7212 100644
--- a/rustc_deps/vendor/futures-util-preview/Cargo.toml
+++ b/rustc_deps/vendor/futures-util-preview/Cargo.toml
@@ -10,14 +10,16 @@
 # editing this file be aware that the upstream Cargo.toml
 # will likely look very different (and much more reasonable)
 
+cargo-features = ["rename-dependency"]
+
 [package]
 edition = "2018"
 name = "futures-util-preview"
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 authors = ["Alex Crichton <alex@alexcrichton.com>"]
 description = "Common utilities and extension traits for the futures-rs library.\n"
 homepage = "https://rust-lang-nursery.github.io/futures-rs"
-documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.7/futures_util"
+documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.9/futures_util"
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-lang-nursery/futures-rs"
 
@@ -27,26 +29,27 @@
 version = "1.4"
 default-features = false
 
-[dependencies.futures]
-version = "0.1"
-optional = true
-
 [dependencies.futures-channel-preview]
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 default-features = false
 
 [dependencies.futures-core-preview]
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 default-features = false
 
 [dependencies.futures-io-preview]
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 default-features = false
 
 [dependencies.futures-sink-preview]
-version = "0.3.0-alpha.7"
+version = "0.3.0-alpha.9"
 default-features = false
 
+[dependencies.futures_01]
+version = "0.1.25"
+optional = true
+package = "futures"
+
 [dependencies.pin-utils]
 version = "0.1.0-alpha.3"
 
@@ -58,10 +61,15 @@
 version = "0.1.2"
 optional = true
 
+[dependencies.tokio-io]
+version = "0.1.9"
+optional = true
+
 [features]
 bench = []
-compat = ["std", "futures"]
+compat = ["std", "futures_01"]
 default = ["std", "futures-core-preview/either", "futures-sink-preview/either"]
+io-compat = ["compat", "tokio-io"]
 nightly = []
 std = ["futures-core-preview/std", "futures-io-preview/std", "futures-sink-preview/std", "either/use_std", "slab"]
 tokio-compat = ["compat", "tokio-executor"]
diff --git a/rustc_deps/vendor/futures-util-preview/src/compat/compat.rs b/rustc_deps/vendor/futures-util-preview/src/compat/compat.rs
deleted file mode 100644
index 396909c..0000000
--- a/rustc_deps/vendor/futures-util-preview/src/compat/compat.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-/// Converts a futures 0.3 [`TryFuture`](futures_core::future::TryFuture),
-/// [`TryStream`](futures_core::stream::TryStream) or
-/// [`Sink`](futures_sink::Sink) into a futures 0.1
-/// [`Future`](futures::future::Future),
-/// [`Stream`](futures::stream::Stream) or
-/// [`Sink`](futures::sink::Sink) and vice versa.
-#[derive(Debug)]
-#[must_use = "futures do nothing unless polled"]
-pub struct Compat<T> {
-    pub(crate) inner: T,
-}
-
-impl<T> Compat<T> {
-    /// Returns the inner item.
-    pub fn into_inner(self) -> T {
-        self.inner
-    }
-
-    /// Creates a new [`Compat`].
-    pub(crate) fn new(inner: T) -> Compat<T> {
-        Compat { inner }
-    }
-}
diff --git a/rustc_deps/vendor/futures-util-preview/src/compat/compat01as03.rs b/rustc_deps/vendor/futures-util-preview/src/compat/compat01as03.rs
new file mode 100644
index 0000000..35bb1b3
--- /dev/null
+++ b/rustc_deps/vendor/futures-util-preview/src/compat/compat01as03.rs
@@ -0,0 +1,181 @@
+use futures_01::executor::{
+    Spawn as Spawn01, spawn as spawn01,
+    UnsafeNotify as UnsafeNotify01,
+    Notify as Notify01,
+    NotifyHandle as NotifyHandle01,
+};
+use futures_01::{Async as Async01, Future as Future01, Stream as Stream01};
+use futures_core::{task as task03, Future as Future03, Stream as Stream03};
+use std::mem;
+use std::task::{LocalWaker, Waker};
+use std::pin::{Pin, Unpin};
+
+/// Converts a futures 0.1 Future, Stream, AsyncRead, or AsyncWrite
+/// object to a futures 0.3-compatible version,
+#[derive(Debug)]
+#[must_use = "futures do nothing unless polled"]
+pub struct Compat01As03<T> {
+    pub(crate) inner: Spawn01<T>,
+}
+
+impl<T> Unpin for Compat01As03<T> {}
+
+impl<T> Compat01As03<T> {
+    /// Wraps a futures 0.1 Future, Stream, AsyncRead, or AsyncWrite
+    /// object in a futures 0.3-compatible wrapper.
+    pub fn new(object: T) -> Compat01As03<T> {
+        Compat01As03 {
+            inner: spawn01(object),
+        }
+    }
+
+    fn in_notify<R>(&mut self, lw: &LocalWaker, f: impl FnOnce(&mut T) -> R) -> R {
+        let notify = &WakerToHandle(local_as_waker(lw));
+        self.inner.poll_fn_notify(notify, 0, f)
+    }
+}
+
+/// Extension trait for futures 0.1 [`Future`](futures::future::Future)
+pub trait Future01CompatExt: Future01 {
+    /// Converts a futures 0.1
+    /// [`Future<Item = T, Error = E>`](futures::future::Future)
+    /// into a futures 0.3
+    /// [`Future<Output = Result<T, E>>`](futures_core::future::Future).
+    fn compat(self) -> Compat01As03<Self> where Self: Sized {
+        Compat01As03::new(self)
+    }
+}
+impl<Fut: Future01> Future01CompatExt for Fut {}
+
+/// Extension trait for futures 0.1 [`Stream`](futures::stream::Stream)
+pub trait Stream01CompatExt: Stream01 {
+    /// Converts a futures 0.1
+    /// [`Stream<Item = T, Error = E>`](futures::stream::Stream)
+    /// into a futures 0.3
+    /// [`Stream<Item = Result<T, E>>`](futures_core::stream::Stream).
+    fn compat(self) -> Compat01As03<Self> where Self: Sized {
+        Compat01As03::new(self)
+    }
+}
+impl<St: Stream01> Stream01CompatExt for St {}
+
+// TODO(cramertj) use as_waker from std when it lands
+fn local_as_waker(lw: &LocalWaker) -> &Waker {
+    unsafe { mem::transmute(lw) }
+}
+
+fn poll_01_to_03<T, E>(x: Result<Async01<T>, E>)
+    -> task03::Poll<Result<T, E>>
+{
+    match x {
+        Ok(Async01::Ready(t)) => task03::Poll::Ready(Ok(t)),
+        Ok(Async01::NotReady) => task03::Poll::Pending,
+        Err(e) => task03::Poll::Ready(Err(e)),
+    }
+}
+
+impl<Fut: Future01> Future03 for Compat01As03<Fut> {
+    type Output = Result<Fut::Item, Fut::Error>;
+
+    fn poll(
+        mut self: Pin<&mut Self>,
+        lw: &LocalWaker,
+    ) -> task03::Poll<Self::Output> {
+        poll_01_to_03(self.in_notify(lw, |f| f.poll()))
+    }
+}
+
+impl<St: Stream01> Stream03 for Compat01As03<St> {
+    type Item = Result<St::Item, St::Error>;
+
+    fn poll_next(
+        mut self: Pin<&mut Self>,
+        lw: &LocalWaker,
+    ) -> task03::Poll<Option<Self::Item>> {
+        match self.in_notify(lw, |f| f.poll()) {
+            Ok(Async01::Ready(Some(t))) => task03::Poll::Ready(Some(Ok(t))),
+            Ok(Async01::Ready(None)) => task03::Poll::Ready(None),
+            Ok(Async01::NotReady) => task03::Poll::Pending,
+            Err(e) => task03::Poll::Ready(Some(Err(e))),
+        }
+    }
+}
+
+struct NotifyWaker(task03::Waker);
+
+#[derive(Clone)]
+struct WakerToHandle<'a>(&'a task03::Waker);
+
+impl<'a> From<WakerToHandle<'a>> for NotifyHandle01 {
+    fn from(handle: WakerToHandle<'a>) -> NotifyHandle01 {
+        let ptr = Box::new(NotifyWaker(handle.0.clone()));
+
+        unsafe { NotifyHandle01::new(Box::into_raw(ptr)) }
+    }
+}
+
+impl Notify01 for NotifyWaker {
+    fn notify(&self, _: usize) {
+        self.0.wake();
+    }
+}
+
+unsafe impl UnsafeNotify01 for NotifyWaker {
+    unsafe fn clone_raw(&self) -> NotifyHandle01 {
+        WakerToHandle(&self.0).into()
+    }
+
+    unsafe fn drop_raw(&self) {
+        let ptr: *const dyn UnsafeNotify01 = self;
+        drop(Box::from_raw(ptr as *mut dyn UnsafeNotify01));
+    }
+}
+
+#[cfg(feature = "io-compat")]
+mod io {
+    use super::*;
+    use futures_io::{
+        AsyncRead as AsyncRead03,
+        AsyncWrite as AsyncWrite03,
+        Initializer,
+    };
+    use std::io::Error;
+    use tokio_io::{AsyncRead as AsyncRead01, AsyncWrite as AsyncWrite01};
+
+    impl<R: AsyncRead01> AsyncRead03 for Compat01As03<R> {
+        unsafe fn initializer(&self) -> Initializer {
+            // check if `prepare_uninitialized_buffer` needs zeroing
+            if self.inner.get_ref().prepare_uninitialized_buffer(&mut [1]) {
+                Initializer::zeroing()
+            } else {
+                Initializer::nop()
+            }
+        }
+
+        fn poll_read(&mut self, lw: &task03::LocalWaker, buf: &mut [u8])
+            -> task03::Poll<Result<usize, Error>>
+        {
+            poll_01_to_03(self.in_notify(lw, |x| x.poll_read(buf)))
+        }
+    }
+
+    impl<W: AsyncWrite01> AsyncWrite03 for Compat01As03<W> {
+        fn poll_write(&mut self, lw: &task03::LocalWaker, buf: &[u8])
+            -> task03::Poll<Result<usize, Error>>
+        {
+            poll_01_to_03(self.in_notify(lw, |x| x.poll_write(buf)))
+        }
+
+        fn poll_flush(&mut self, lw: &task03::LocalWaker)
+            -> task03::Poll<Result<(), Error>>
+        {
+            poll_01_to_03(self.in_notify(lw, |x| x.poll_flush()))
+        }
+
+        fn poll_close(&mut self, lw: &task03::LocalWaker)
+            -> task03::Poll<Result<(), Error>>
+        {
+            poll_01_to_03(self.in_notify(lw, |x| x.shutdown()))
+        }
+    }
+}
diff --git a/rustc_deps/vendor/futures-util-preview/src/compat/compat01to03.rs b/rustc_deps/vendor/futures-util-preview/src/compat/compat01to03.rs
deleted file mode 100644
index 481508a..0000000
--- a/rustc_deps/vendor/futures-util-preview/src/compat/compat01to03.rs
+++ /dev/null
@@ -1,82 +0,0 @@
-use super::Compat;
-use futures::executor::{
-    self as executor01, UnsafeNotify as UnsafeNotify01,
-    Notify as Notify01, NotifyHandle as NotifyHandle01,
-};
-use futures::{Async as Async01, Future as Future01, Stream as Stream01};
-use futures_core::{task as task03, Future as Future03, Stream as Stream03};
-use std::mem;
-use std::task::{LocalWaker, Waker};
-use std::pin::Pin;
-
-// TODO(cramertj) use as_waker from std when it lands
-fn local_as_waker(lw: &LocalWaker) -> &Waker {
-    unsafe { mem::transmute(lw) }
-}
-
-impl<Fut: Future01> Future03 for Compat<Fut> {
-    type Output = Result<Fut::Item, Fut::Error>;
-
-    fn poll(
-        self: Pin<&mut Self>,
-        lw: &LocalWaker,
-    ) -> task03::Poll<Self::Output> {
-        let notify = &WakerToHandle(local_as_waker(lw));
-        executor01::with_notify(notify, 0, move || {
-            match unsafe { Pin::get_mut_unchecked(self) }.inner.poll() {
-                Ok(Async01::Ready(t)) => task03::Poll::Ready(Ok(t)),
-                Ok(Async01::NotReady) => task03::Poll::Pending,
-                Err(e) => task03::Poll::Ready(Err(e)),
-            }
-        })
-    }
-}
-
-impl<St: Stream01> Stream03 for Compat<St> {
-    type Item = Result<St::Item, St::Error>;
-
-    fn poll_next(
-        self: Pin<&mut Self>,
-        lw: &LocalWaker,
-    ) -> task03::Poll<Option<Self::Item>> {
-        let notify = &WakerToHandle(local_as_waker(lw));
-        executor01::with_notify(notify, 0, move || {
-            match unsafe { Pin::get_mut_unchecked(self) }.inner.poll() {
-                Ok(Async01::Ready(Some(t))) => task03::Poll::Ready(Some(Ok(t))),
-                Ok(Async01::Ready(None)) => task03::Poll::Ready(None),
-                Ok(Async01::NotReady) => task03::Poll::Pending,
-                Err(e) => task03::Poll::Ready(Some(Err(e))),
-            }
-        })
-    }
-}
-
-struct NotifyWaker(task03::Waker);
-
-#[derive(Clone)]
-struct WakerToHandle<'a>(&'a task03::Waker);
-
-impl<'a> From<WakerToHandle<'a>> for NotifyHandle01 {
-    fn from(handle: WakerToHandle<'a>) -> NotifyHandle01 {
-        let ptr = Box::new(NotifyWaker(handle.0.clone()));
-
-        unsafe { NotifyHandle01::new(Box::into_raw(ptr)) }
-    }
-}
-
-impl Notify01 for NotifyWaker {
-    fn notify(&self, _: usize) {
-        self.0.wake();
-    }
-}
-
-unsafe impl UnsafeNotify01 for NotifyWaker {
-    unsafe fn clone_raw(&self) -> NotifyHandle01 {
-        WakerToHandle(&self.0).into()
-    }
-
-    unsafe fn drop_raw(&self) {
-        let ptr: *const dyn UnsafeNotify01 = self;
-        drop(Box::from_raw(ptr as *mut dyn UnsafeNotify01));
-    }
-}
diff --git a/rustc_deps/vendor/futures-util-preview/src/compat/compat03as01.rs b/rustc_deps/vendor/futures-util-preview/src/compat/compat03as01.rs
new file mode 100644
index 0000000..f10e833
--- /dev/null
+++ b/rustc_deps/vendor/futures-util-preview/src/compat/compat03as01.rs
@@ -0,0 +1,224 @@
+use futures_01::{
+    task as task01, Async as Async01, AsyncSink as AsyncSink01,
+    Future as Future01, Poll as Poll01, Sink as Sink01,
+    StartSend as StartSend01, Stream as Stream01,
+};
+use futures_core::{
+    task as task03, TryFuture as TryFuture03, TryStream as TryStream03,
+};
+use futures_sink::Sink as Sink03;
+use std::{marker::{PhantomData, Unpin}, ops::Deref, pin::Pin, ptr::NonNull, sync::Arc};
+
+/// Converts a futures 0.3 [`TryFuture`](futures_core::future::TryFuture),
+/// [`TryStream`](futures_core::stream::TryStream) or
+/// [`Sink`](futures_sink::Sink) into a futures 0.1
+/// [`Future`](futures::future::Future),
+/// [`Stream`](futures::stream::Stream) or
+/// [`Sink`](futures::sink::Sink).
+#[derive(Debug)]
+#[must_use = "futures do nothing unless polled"]
+pub struct Compat<T> {
+    pub(crate) inner: T,
+}
+
+impl<T> Compat<T> {
+    /// Returns the inner item.
+    pub fn into_inner(self) -> T {
+        self.inner
+    }
+
+    /// Creates a new [`Compat`].
+    pub(crate) fn new(inner: T) -> Compat<T> {
+        Compat { inner }
+    }
+}
+
+fn poll_03_to_01<T, E>(x: task03::Poll<Result<T, E>>)
+    -> Result<Async01<T>, E>
+{
+    match x {
+        task03::Poll::Ready(Ok(t)) => Ok(Async01::Ready(t)),
+        task03::Poll::Pending => Ok(Async01::NotReady),
+        task03::Poll::Ready(Err(e)) => Err(e),
+    }
+}
+
+impl<Fut> Future01 for Compat<Fut>
+where
+    Fut: TryFuture03 + Unpin,
+{
+    type Item = Fut::Ok;
+    type Error = Fut::Error;
+
+    fn poll(&mut self) -> Poll01<Self::Item, Self::Error> {
+        with_context(self, |inner, lw| poll_03_to_01(inner.try_poll(lw)))
+    }
+}
+
+impl<St> Stream01 for Compat<St>
+where
+    St: TryStream03 + Unpin,
+{
+    type Item = St::Ok;
+    type Error = St::Error;
+
+    fn poll(&mut self) -> Poll01<Option<Self::Item>, Self::Error> {
+        with_context(self, |inner, lw| match inner.try_poll_next(lw) {
+            task03::Poll::Ready(None) => Ok(Async01::Ready(None)),
+            task03::Poll::Ready(Some(Ok(t))) => Ok(Async01::Ready(Some(t))),
+            task03::Poll::Pending => Ok(Async01::NotReady),
+            task03::Poll::Ready(Some(Err(e))) => Err(e),
+        })
+    }
+}
+
+impl<T> Sink01 for Compat<T>
+where
+    T: Sink03 + Unpin,
+{
+    type SinkItem = T::SinkItem;
+    type SinkError = T::SinkError;
+
+    fn start_send(
+        &mut self,
+        item: Self::SinkItem,
+    ) -> StartSend01<Self::SinkItem, Self::SinkError> {
+        with_context(self, |mut inner, lw| {
+            match inner.as_mut().poll_ready(lw) {
+                task03::Poll::Ready(Ok(())) => {
+                    inner.start_send(item).map(|()| AsyncSink01::Ready)
+                }
+                task03::Poll::Pending => Ok(AsyncSink01::NotReady(item)),
+                task03::Poll::Ready(Err(e)) => Err(e),
+            }
+        })
+    }
+
+    fn poll_complete(&mut self) -> Poll01<(), Self::SinkError> {
+        with_context(self, |inner, lw| poll_03_to_01(inner.poll_flush(lw)))
+    }
+
+    fn close(&mut self) -> Poll01<(), Self::SinkError> {
+        with_context(self, |inner, lw| poll_03_to_01(inner.poll_close(lw)))
+    }
+}
+
+// `task::LocalWaker` with a lifetime tied to it.
+struct LocalWakerLt<'a> {
+    inner: task03::LocalWaker,
+    _marker: PhantomData<&'a ()>,
+}
+
+impl<'a> Deref for LocalWakerLt<'a> {
+    type Target = task03::LocalWaker;
+
+    fn deref(&self) -> &Self::Target {
+        &self.inner
+    }
+}
+
+struct Current(task01::Task);
+
+impl Current {
+    fn new() -> Current {
+        Current(task01::current())
+    }
+
+    fn as_waker(&self) -> LocalWakerLt {
+        unsafe {
+            LocalWakerLt {
+                inner: task03::LocalWaker::new(NonNull::new_unchecked(self as *const Current as *mut Current)),
+                _marker: PhantomData,
+            }
+        }
+    }
+}
+
+unsafe impl task03::UnsafeWake for Current {
+    #[inline]
+    unsafe fn clone_raw(&self) -> task03::Waker {
+        task03::Waker::from(Arc::new(Current(self.0.clone())))
+    }
+
+    #[inline]
+    unsafe fn drop_raw(&self) {} // Does nothing
+
+    #[inline]
+    unsafe fn wake(&self) {
+        self.0.notify();
+    }
+}
+
+impl task03::Wake for Current {
+    fn wake(arc_self: &Arc<Self>) {
+        arc_self.0.notify();
+    }
+}
+
+fn with_context<T, R, F>(compat: &mut Compat<T>, f: F) -> R
+where
+    T: Unpin,
+    F: FnOnce(Pin<&mut T>, &task03::LocalWaker) -> R,
+{
+    let current = Current::new();
+    let lw = current.as_waker();
+    f(Pin::new(&mut compat.inner), &lw)
+}
+
+#[cfg(feature = "io-compat")]
+mod io {
+    use super::*;
+    use futures_io::{AsyncRead as AsyncRead03, AsyncWrite as AsyncWrite03};
+    use tokio_io::{AsyncRead as AsyncRead01, AsyncWrite as AsyncWrite01};
+
+    fn poll_03_to_io<T>(x: task03::Poll<Result<T, std::io::Error>>)
+        -> Result<T, std::io::Error>
+    {
+        match x {
+            task03::Poll::Ready(Ok(t)) => Ok(t),
+            task03::Poll::Pending => Err(std::io::ErrorKind::WouldBlock.into()),
+            task03::Poll::Ready(Err(e)) => Err(e),
+        }
+    }
+
+    impl<R: AsyncRead03> std::io::Read for Compat<R> {
+        fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
+            let current = Current::new();
+            let lw = current.as_waker();
+            poll_03_to_io(self.inner.poll_read(&lw, buf))
+        }
+    }
+
+    impl<R: AsyncRead03> AsyncRead01 for Compat<R> {
+        unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [u8]) -> bool {
+            let initializer = self.inner.initializer();
+            let does_init = initializer.should_initialize();
+            if does_init {
+                initializer.initialize(buf);
+            }
+            does_init
+        }
+    }
+
+    impl<W: AsyncWrite03> std::io::Write for Compat<W> {
+        fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
+            let current = Current::new();
+            let lw = current.as_waker();
+            poll_03_to_io(self.inner.poll_write(&lw, buf))
+        }
+
+        fn flush(&mut self) -> std::io::Result<()> {
+            let current = Current::new();
+            let lw = current.as_waker();
+            poll_03_to_io(self.inner.poll_flush(&lw))
+        }
+    }
+
+    impl<W: AsyncWrite03> AsyncWrite01 for Compat<W> {
+        fn shutdown(&mut self) -> std::io::Result<Async01<()>> {
+            let current = Current::new();
+            let lw = current.as_waker();
+            poll_03_to_01(self.inner.poll_close(&lw))
+        }
+    }
+}
diff --git a/rustc_deps/vendor/futures-util-preview/src/compat/compat03to01.rs b/rustc_deps/vendor/futures-util-preview/src/compat/compat03to01.rs
deleted file mode 100644
index 76d7f9c..0000000
--- a/rustc_deps/vendor/futures-util-preview/src/compat/compat03to01.rs
+++ /dev/null
@@ -1,123 +0,0 @@
-use super::Compat;
-use futures::{
-    task as task01, Async as Async01, AsyncSink as AsyncSink01,
-    Future as Future01, Poll as Poll01, Sink as Sink01,
-    StartSend as StartSend01, Stream as Stream01,
-};
-use futures_core::{
-    task as task03, TryFuture as TryFuture03, TryStream as TryStream03,
-};
-use futures_sink::Sink as Sink03;
-use std::{marker::Unpin, pin::Pin, ptr::NonNull, sync::Arc};
-
-impl<Fut> Future01 for Compat<Fut>
-where
-    Fut: TryFuture03 + Unpin,
-{
-    type Item = Fut::Ok;
-    type Error = Fut::Error;
-
-    fn poll(&mut self) -> Poll01<Self::Item, Self::Error> {
-        with_context(self, |inner, lw| match inner.try_poll(lw) {
-            task03::Poll::Ready(Ok(t)) => Ok(Async01::Ready(t)),
-            task03::Poll::Pending => Ok(Async01::NotReady),
-            task03::Poll::Ready(Err(e)) => Err(e),
-        })
-    }
-}
-
-impl<St> Stream01 for Compat<St>
-where
-    St: TryStream03 + Unpin,
-{
-    type Item = St::Ok;
-    type Error = St::Error;
-
-    fn poll(&mut self) -> Poll01<Option<Self::Item>, Self::Error> {
-        with_context(self, |inner, lw| match inner.try_poll_next(lw) {
-            task03::Poll::Ready(None) => Ok(Async01::Ready(None)),
-            task03::Poll::Ready(Some(Ok(t))) => Ok(Async01::Ready(Some(t))),
-            task03::Poll::Pending => Ok(Async01::NotReady),
-            task03::Poll::Ready(Some(Err(e))) => Err(e),
-        })
-    }
-}
-
-impl<T> Sink01 for Compat<T>
-where
-    T: Sink03 + Unpin,
-{
-    type SinkItem = T::SinkItem;
-    type SinkError = T::SinkError;
-
-    fn start_send(
-        &mut self,
-        item: Self::SinkItem,
-    ) -> StartSend01<Self::SinkItem, Self::SinkError> {
-        with_context(self, |mut inner, lw| {
-            match inner.as_mut().poll_ready(lw) {
-                task03::Poll::Ready(Ok(())) => {
-                    inner.start_send(item).map(|()| AsyncSink01::Ready)
-                }
-                task03::Poll::Pending => Ok(AsyncSink01::NotReady(item)),
-                task03::Poll::Ready(Err(e)) => Err(e),
-            }
-        })
-    }
-
-    fn poll_complete(&mut self) -> Poll01<(), Self::SinkError> {
-        with_context(self, |inner, lw| match inner.poll_flush(lw) {
-            task03::Poll::Ready(Ok(())) => Ok(Async01::Ready(())),
-            task03::Poll::Pending => Ok(Async01::NotReady),
-            task03::Poll::Ready(Err(e)) => Err(e),
-        })
-    }
-
-    fn close(&mut self) -> Poll01<(), Self::SinkError> {
-        with_context(self, |inner, lw| match inner.poll_close(lw) {
-            task03::Poll::Ready(Ok(())) => Ok(Async01::Ready(())),
-            task03::Poll::Pending => Ok(Async01::NotReady),
-            task03::Poll::Ready(Err(e)) => Err(e),
-        })
-    }
-}
-
-fn current_ref_as_waker() -> task03::LocalWaker {
-    unsafe {
-        task03::LocalWaker::new(NonNull::<CurrentRef>::dangling())
-    }
-}
-
-struct CurrentRef;
-
-struct CurrentOwned(task01::Task);
-
-unsafe impl task03::UnsafeWake for CurrentRef {
-    #[inline]
-    unsafe fn clone_raw(&self) -> task03::Waker {
-        task03::Waker::from(Arc::new(CurrentOwned(task01::current())))
-    }
-
-    #[inline]
-    unsafe fn drop_raw(&self) {} // Does nothing
-
-    #[inline]
-    unsafe fn wake(&self) {
-        task01::current().notify();
-    }
-}
-
-impl task03::Wake for CurrentOwned {
-    fn wake(arc_self: &Arc<Self>) {
-        arc_self.0.notify();
-    }
-}
-
-fn with_context<T, R, F>(compat: &mut Compat<T>, f: F) -> R
-where
-    T: Unpin,
-    F: FnOnce(Pin<&mut T>, &task03::LocalWaker) -> R,
-{
-    let lw = current_ref_as_waker();
-    f(Pin::new(&mut compat.inner), &lw)
-}
diff --git a/rustc_deps/vendor/futures-util-preview/src/compat/executor.rs b/rustc_deps/vendor/futures-util-preview/src/compat/executor.rs
index 61a568e..4450f60 100644
--- a/rustc_deps/vendor/futures-util-preview/src/compat/executor.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/compat/executor.rs
@@ -1,7 +1,12 @@
 
-use super::Compat;
-use crate::{TryFutureExt, FutureExt, future::UnitError};
-use futures::future::Executor as Executor01;
+use super::{Compat, Future01CompatExt};
+use crate::{
+    future::{FutureExt, UnitError},
+    try_future::TryFutureExt,
+    task::SpawnExt,
+};
+use futures_01::Future as Future01;
+use futures_01::future::{Executor as Executor01, ExecuteError as ExecuteError01};
 use futures_core::task::{Spawn as Spawn03, SpawnError as SpawnError03};
 use futures_core::future::FutureObj;
 
@@ -77,3 +82,15 @@
         )
     }
 }
+
+impl<Sp, Fut> Executor01<Fut> for Compat<Sp>
+where
+    for<'a> &'a Sp: Spawn03,
+    Fut: Future01<Item = (), Error = ()> + Send + 'static,
+{
+    fn execute(&self, future: Fut) -> Result<(), ExecuteError01<Fut>> {
+        (&self.inner).spawn(future.compat().map(|_| ()))
+            .expect("unable to spawn future from Compat executor");
+        Ok(())
+    }
+}
diff --git a/rustc_deps/vendor/futures-util-preview/src/compat/future01ext.rs b/rustc_deps/vendor/futures-util-preview/src/compat/future01ext.rs
deleted file mode 100644
index 1286f10..0000000
--- a/rustc_deps/vendor/futures-util-preview/src/compat/future01ext.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-use super::Compat;
-use futures::Future as Future01;
-
-impl<Fut: Future01> Future01CompatExt for Fut {}
-
-/// Extension trait for futures 0.1 [`Future`](futures::future::Future)
-pub trait Future01CompatExt: Future01 {
-    /// Converts a futures 0.1
-    /// [`Future<Item = T, Error = E>`](futures::future::Future)
-    /// into a futures 0.3
-    /// [`Future<Output = Result<T, E>>`](futures_core::future::Future).
-    fn compat(self) -> Compat<Self> where Self: Sized {
-        Compat::new(self)
-    }
-}
diff --git a/rustc_deps/vendor/futures-util-preview/src/compat/mod.rs b/rustc_deps/vendor/futures-util-preview/src/compat/mod.rs
index 52db15b..2689117 100644
--- a/rustc_deps/vendor/futures-util-preview/src/compat/mod.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/compat/mod.rs
@@ -5,17 +5,11 @@
 mod executor;
 pub use self::executor::{Executor01CompatExt, Executor01Future, Executor01As03};
 
-mod compat;
-pub use self::compat::Compat;
+mod compat01as03;
+pub use self::compat01as03::{Compat01As03, Future01CompatExt, Stream01CompatExt};
 
-mod compat01to03;
-mod compat03to01;
-
-mod future01ext;
-pub use self::future01ext::Future01CompatExt;
-
-mod stream01ext;
-pub use self::stream01ext::Stream01CompatExt;
+mod compat03as01;
+pub use self::compat03as01::Compat;
 
 #[cfg(feature = "tokio-compat")]
 mod tokio;
diff --git a/rustc_deps/vendor/futures-util-preview/src/compat/stream01ext.rs b/rustc_deps/vendor/futures-util-preview/src/compat/stream01ext.rs
deleted file mode 100644
index a09a433..0000000
--- a/rustc_deps/vendor/futures-util-preview/src/compat/stream01ext.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-use super::Compat;
-use futures::Stream as Stream01;
-
-impl<St: Stream01> Stream01CompatExt for St {}
-
-/// Extension trait for futures 0.1 [`Stream`](futures::stream::Stream)
-pub trait Stream01CompatExt: Stream01 {
-    /// Converts a futures 0.1
-    /// [`Stream<Item = T, Error = E>`](futures::stream::Stream)
-    /// into a futures 0.3
-    /// [`Stream<Item = Result<T, E>>`](futures_core::stream::Stream).
-    fn compat(self) -> Compat<Self> where Self: Sized {
-        Compat::new(self)
-    }
-}
diff --git a/rustc_deps/vendor/futures-util-preview/src/io/mod.rs b/rustc_deps/vendor/futures-util-preview/src/io/mod.rs
index f312d31..6ebbab4 100644
--- a/rustc_deps/vendor/futures-util-preview/src/io/mod.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/io/mod.rs
@@ -9,6 +9,8 @@
 
 pub use futures_io::{AsyncRead, AsyncWrite, IoVec};
 
+#[cfg(feature = "io-compat")] use crate::compat::Compat;
+
 // Temporarily removed until AsyncBufRead is implemented
 // pub use io::lines::{lines, Lines};
 // pub use io::read_until::{read_until, ReadUntil};
@@ -221,6 +223,19 @@
     {
         split::split(self)
     }
+
+    /// Wraps an [`AsyncRead`] in a compatibility wrapper that allows it to be
+    /// used as a futures 0.1 / tokio-io 0.1 `AsyncRead`. If the wrapped type
+    /// implements [`AsyncWrite`] as well, the result will also implement the
+    /// futures 0.1 / tokio 0.1 `AsyncWrite` trait.
+    ///
+    /// Requires the `io-compat` feature to enable.
+    #[cfg(feature = "io-compat")]
+    fn compat(self) -> Compat<Self>
+        where Self: Sized,
+    {
+        Compat::new(self)
+    }
 }
 
 impl<R: AsyncRead + ?Sized> AsyncReadExt for R {}
@@ -284,6 +299,16 @@
     fn write_all<'a>(&'a mut self, buf: &'a [u8]) -> WriteAll<'a, Self> {
         WriteAll::new(self, buf)
     }
+
+    /// Wraps an [`AsyncWrite`] in a compatibility wrapper that allows it to be
+    /// used as a futures 0.1 / tokio-io 0.1 `AsyncWrite`.
+    /// Requires the `io-compat` feature to enable.
+    #[cfg(feature = "io-compat")]
+    fn compat_write(self) -> Compat<Self>
+        where Self: Sized,
+    {
+        Compat::new(self)
+    }
 }
 
 impl<W: AsyncWrite + ?Sized> AsyncWriteExt for W {}
diff --git a/rustc_deps/vendor/futures-util-preview/src/lib.rs b/rustc_deps/vendor/futures-util-preview/src/lib.rs
index 10d62f0..1b76630 100644
--- a/rustc_deps/vendor/futures-util-preview/src/lib.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/lib.rs
@@ -2,7 +2,6 @@
 //! and the `AsyncRead` and `AsyncWrite` traits.
 
 #![feature(async_await, pin, arbitrary_self_types, futures_api)]
-#![feature(tool_lints)]
 #![cfg_attr(feature = "std", feature(await_macro))]
 #![cfg_attr(feature = "nightly", feature(cfg_target_has_atomic))]
 
@@ -10,7 +9,7 @@
 #![warn(missing_docs, missing_debug_implementations)]
 #![deny(bare_trait_objects)]
 
-#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.7/futures_util")]
+#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.9/futures_util")]
 
 macro_rules! if_std {
     ($($i:item)*) => ($(
diff --git a/rustc_deps/vendor/futures-util-preview/src/lock.rs b/rustc_deps/vendor/futures-util-preview/src/lock.rs
index a61b1c7..48cc80f 100644
--- a/rustc_deps/vendor/futures-util-preview/src/lock.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/lock.rs
@@ -60,6 +60,7 @@
     /// will only be available through `Pin<&mut T>` (not `&mut T`) unless `T` is `Unpin`.
     /// Similarly, reuniting the lock and extracting the inner value is only
     /// possible when `T` is `Unpin`.
+    #[allow(clippy::new_ret_no_self)]
     pub fn new(t: T) -> (BiLock<T>, BiLock<T>) {
         let arc = Arc::new(Inner {
             state: AtomicUsize::new(0),
diff --git a/rustc_deps/vendor/futures-util-preview/src/task/atomic_waker.rs b/rustc_deps/vendor/futures-util-preview/src/task/atomic_waker.rs
index 88ce2e9..45d8695 100644
--- a/rustc_deps/vendor/futures-util-preview/src/task/atomic_waker.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/task/atomic_waker.rs
@@ -211,40 +211,28 @@
                     //
                     // Start by assuming that the state is `REGISTERING` as this
                     // is what we jut set it to.
-                    let mut curr = REGISTERING;
+                    let res = self.state.compare_exchange(
+                        REGISTERING, WAITING, AcqRel, Acquire);
 
-                    // If a task has to be woken, the waker will be set here.
-                    let mut wake_now: Option<Waker> = None;
+                    match res {
+                        Ok(_) => {}
+                        Err(actual) => {
+                            // This branch can only be reached if a
+                            // concurrent thread called `wake`. In this
+                            // case, `actual` **must** be `REGISTERING |
+                            // `WAKING`.
+                            debug_assert_eq!(actual, REGISTERING | WAKING);
 
-                    loop {
-                        let res = self.state.compare_exchange(
-                            curr, WAITING, AcqRel, Acquire);
+                            // Take the waker to wake once the atomic operation has
+                            // completed.
+                            let waker = (*self.waker.get()).take().unwrap();
 
-                        match res {
-                            Ok(_) => {
-                                // The atomic exchange was successful, now
-                                // wake the task (if set) and return.
-                                if let Some(waker) = wake_now {
-                                    waker.wake();
-                                }
+                            // Just swap, because no one could change state while state == `REGISTERING` | `WAKING`.
+                            self.state.swap(WAITING, AcqRel);
 
-                                return;
-                            }
-                            Err(actual) => {
-                                // This branch can only be reached if a
-                                // concurrent thread called `wake`. In this
-                                // case, `actual` **must** be `REGISTERING |
-                                // `WAKING`.
-                                debug_assert_eq!(actual, REGISTERING | WAKING);
-
-                                // Take the waker to wake once the atomic operation has
-                                // completed.
-                                wake_now = (*self.waker.get()).take();
-
-                                // Update `curr` for the next iteration of the
-                                // loop
-                                curr = actual;
-                            }
+                            // The atomic swap was complete, now
+                            // wake the task and return.
+                            waker.wake();
                         }
                     }
                 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/task/spawn.rs b/rustc_deps/vendor/futures-util-preview/src/task/spawn.rs
index 509556e..859f98d 100644
--- a/rustc_deps/vendor/futures-util-preview/src/task/spawn.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/task/spawn.rs
@@ -1,5 +1,7 @@
 use futures_core::task::{LocalSpawn, Spawn};
 
+#[cfg(feature = "compat")] use crate::compat::Compat;
+
 if_std! {
     use crate::future::{FutureExt, RemoteHandle};
     use futures_core::future::{Future, FutureObj, LocalFutureObj};
@@ -76,6 +78,15 @@
         self.spawn(future)?;
         Ok(handle)
     }
+
+    /// Wraps a [`Spawn`] and makes it usable as a futures 0.1 `Executor`.
+    /// Requires the `compat` feature to enable.
+    #[cfg(feature = "compat")]
+    fn compat(self) -> Compat<Self>
+        where Self: Sized,
+    {
+        Compat::new(self)
+    }
 }
 
 /// Extension trait for `LocalSpawn`.
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_stream/mod.rs b/rustc_deps/vendor/futures-util-preview/src/try_stream/mod.rs
index 0917ae2..1e28c2d 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_stream/mod.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_stream/mod.rs
@@ -506,15 +506,11 @@
     /// ```
     /// #![feature(async_await, await_macro, futures_api)]
     /// use futures::future::{FutureExt, TryFutureExt};
-    /// use futures::spawn;
     /// # let (tx, rx) = futures::channel::oneshot::channel();
     ///
     /// let future03 = async {
     ///     println!("Running on the pool");
-    ///     spawn!(async {
-    ///         println!("Spawned!");
-    ///         # tx.send(42).unwrap();
-    ///     }).unwrap();
+    ///     tx.send(42).unwrap();
     /// };
     ///
     /// let future01 = future03
@@ -523,7 +519,7 @@
     ///     .compat();
     ///
     /// tokio::run(future01);
-    /// # futures::executor::block_on(rx).unwrap();
+    /// # assert_eq!(42, futures::executor::block_on(rx).unwrap());
     /// ```
     #[cfg(feature = "compat")]
     fn compat(self) -> Compat<Self>
diff --git a/rustc_deps/vendor/miniz_oxide/.cargo-checksum.json b/rustc_deps/vendor/miniz_oxide/.cargo-checksum.json
index 0e39834..2c60174 100644
--- a/rustc_deps/vendor/miniz_oxide/.cargo-checksum.json
+++ b/rustc_deps/vendor/miniz_oxide/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"4fdc4521f48d843b10cce602b9770de792be407aa6beef7b37092bcb292eb94d","LICENSE":"e190940e8ad3cdd4fca962a6508ed6865d589d314b1cb055f86000e124b88d8d","Readme.md":"78fe2edfd0d8d14dbf30823ba7f5d985395606543ee7a0e97f84944176be5e57","src/deflate/buffer.rs":"e2b00cc64ffca3bfe28291a9c19589628f9c55558e37bd46756822aa472b39dd","src/deflate/core.rs":"cc9859e4c8a4df6d5d93f3a2476c64062e64f7eb0340b74a06c7e0a8daac010d","src/deflate/mod.rs":"f9684537f1f53916994276779bbce42570f988b8f555a0e691a4490437978e2d","src/inflate/core.rs":"aa6019b3193494f3b26fcfa3eee103cff03ef3cd225403b947724a4c0e8f0a82","src/inflate/mod.rs":"06b289ec082202941aa1754112136057346699b28fbbd8752c58cc2472ed9889","src/inflate/output_buffer.rs":"bc0b90e385a6f097f5e7269dcc1fe355f1f0123d587f74ec816d69b4bd57be03","src/lib.rs":"4cfbd93b8e62ce79af7a7b766365242526390681eeafdc0f6015b5887c676478","src/shared.rs":"ab841c941f09d51d05a8f58bb56dbfc10d8cf7028a39110a9baa44a42adf47b8","tests/test.rs":"e5df402ab983a0c8cda206f8f97db67e0b28e273ab59565a1c9781e5a7d6c95e","tests/test_data/invalid_code_len_oom":"83bbc3ef852079eac34ba21d91434079d23f71da6ffd93c9fb438e3be48be0ba","tests/test_data/invalid_code_len_short":"f8b65f7327234574ec243875500d21bf29966d5cc6ba3b374fbe7dd51cd87da1","tests/test_data/issue_14.zlib":"2f8841d57ed549cdd1a037ef2f24adaa79d6df84bc71dba1af5958005a8e7fb8","tests/test_data/issue_19.deflate":"14ccf218d1c71dae13399a03f51f15e0479d820554c244959f1012d971fde196"},"package":"9ba430291c9d6cedae28bcd2d49d1c32fc57d60cd49086646c5dd5673a870eb5"}
\ No newline at end of file
+{"files":{".cargo_vcs_info.json":"40a911cfa8e12628f59eae6aebb3ad22a9b2a7ea82affc211c935c2ff6a501c0","Cargo.toml":"535d1254a0dc6bebfec8ecbfbf2c63157fb717fb2b0f715456ab53f5e71b8555","LICENSE":"e190940e8ad3cdd4fca962a6508ed6865d589d314b1cb055f86000e124b88d8d","Readme.md":"78fe2edfd0d8d14dbf30823ba7f5d985395606543ee7a0e97f84944176be5e57","src/deflate/buffer.rs":"e2b00cc64ffca3bfe28291a9c19589628f9c55558e37bd46756822aa472b39dd","src/deflate/core.rs":"2c9d9c3ee062924a90a8cd27f4f2d7d4606468a73d5fe26ae27ef6b64a8ec828","src/deflate/mod.rs":"8fab92afd5e7f3f722f5a4865aac45a27ebd11a8bf91980305f7f1a80bb986a2","src/inflate/core.rs":"1906ebd0cb5b703d870137926eb6bf9056ce0c8ca24c399ed84d0144e8edffe6","src/inflate/mod.rs":"31bc3fef8e6924a6af3c3e9767fb55316dab74181dd0bc2a04211debdf8b2afe","src/inflate/output_buffer.rs":"bc0b90e385a6f097f5e7269dcc1fe355f1f0123d587f74ec816d69b4bd57be03","src/lib.rs":"06abbdc6dc6ef2b70366de34de8ba372e7432d70542048f1ed0224bef839b64d","src/shared.rs":"abae3f3cc3d8e13ebb19cb79082004ec113f5ff69c917976acb10327e096ac13","tests/test.rs":"e5df402ab983a0c8cda206f8f97db67e0b28e273ab59565a1c9781e5a7d6c95e","tests/test_data/invalid_code_len_oom":"83bbc3ef852079eac34ba21d91434079d23f71da6ffd93c9fb438e3be48be0ba","tests/test_data/invalid_code_len_short":"f8b65f7327234574ec243875500d21bf29966d5cc6ba3b374fbe7dd51cd87da1","tests/test_data/issue_14.zlib":"2f8841d57ed549cdd1a037ef2f24adaa79d6df84bc71dba1af5958005a8e7fb8","tests/test_data/issue_19.deflate":"14ccf218d1c71dae13399a03f51f15e0479d820554c244959f1012d971fde196"},"package":"5ad30a47319c16cde58d0314f5d98202a80c9083b5f61178457403dfb14e509c"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/miniz_oxide/.cargo_vcs_info.json b/rustc_deps/vendor/miniz_oxide/.cargo_vcs_info.json
new file mode 100644
index 0000000..60f83e1
--- /dev/null
+++ b/rustc_deps/vendor/miniz_oxide/.cargo_vcs_info.json
@@ -0,0 +1,5 @@
+{
+  "git": {
+    "sha1": "e6c214efd253491ac072c2c9adba87ef5b4cd5cb"
+  }
+}
diff --git a/rustc_deps/vendor/miniz_oxide/Cargo.toml b/rustc_deps/vendor/miniz_oxide/Cargo.toml
index 292b7b3..dcd61b7 100644
--- a/rustc_deps/vendor/miniz_oxide/Cargo.toml
+++ b/rustc_deps/vendor/miniz_oxide/Cargo.toml
@@ -12,7 +12,7 @@
 
 [package]
 name = "miniz_oxide"
-version = "0.1.3"
+version = "0.2.0"
 authors = ["Frommi <daniil.liferenko@gmail.com>"]
 description = "DEFLATE compression and decompression library rewritten in Rust based on miniz"
 homepage = "https://github.com/Frommi/miniz_oxide/tree/master/miniz_oxide"
@@ -27,6 +27,3 @@
 name = "miniz_oxide"
 [dependencies.adler32]
 version = "1.0.2"
-
-[dependencies.libc]
-version = "0.2.22"
diff --git a/rustc_deps/vendor/miniz_oxide/src/deflate/core.rs b/rustc_deps/vendor/miniz_oxide/src/deflate/core.rs
index 86e2a12..217c6a7 100644
--- a/rustc_deps/vendor/miniz_oxide/src/deflate/core.rs
+++ b/rustc_deps/vendor/miniz_oxide/src/deflate/core.rs
@@ -155,11 +155,6 @@
     sym_index: u16,
 }
 
-/// Compression callback function type.
-pub type PutBufFuncPtrNotNull = unsafe extern "C" fn(*const c_void, c_int, *mut c_void) -> bool;
-/// `Option` alias for compression callback function type.
-pub type PutBufFuncPtr = Option<PutBufFuncPtrNotNull>;
-
 pub mod deflate_flags {
     /// Whether to use a zlib wrapper.
     pub const TDEFL_WRITE_ZLIB_HEADER: u32 = 0x0000_1000;
@@ -221,7 +216,7 @@
 }
 
 impl TDEFLFlush {
-    pub fn new(flush: c_int) -> Result<Self, MZError> {
+    pub fn new(flush: i32) -> Result<Self, MZError> {
         match flush {
             0 => Ok(TDEFLFlush::None),
             2 => Ok(TDEFLFlush::Sync),
@@ -362,13 +357,11 @@
 }
 
 /// Callback function and user used in `compress_to_output`.
-#[derive(Copy, Clone)]
-pub struct CallbackFunc {
-    pub put_buf_func: PutBufFuncPtrNotNull,
-    pub put_buf_user: *mut c_void,
+pub struct CallbackFunc<'a> {
+    pub put_buf_func: Box<FnMut(&[u8]) -> bool + 'a>,
 }
 
-impl CallbackFunc {
+impl<'a> CallbackFunc<'a> {
     fn flush_output(
         &mut self,
         saved_output: SavedOutputBufferOxide,
@@ -377,13 +370,8 @@
         // TODO: As this could be unsafe since
         // we can't verify the function pointer
         // this whole function should maybe be unsafe as well.
-        let call_success = unsafe {
-            (self.put_buf_func)(
-                &params.local_buf.b[0] as *const u8 as *const c_void,
-                saved_output.pos as i32,
-                self.put_buf_user,
-            )
-        };
+        let call_success = (self.put_buf_func)
+            (&params.local_buf.b[0..saved_output.pos as usize]);
 
         if !call_success {
             params.prev_return_status = TDEFLStatus::PutBufFailed;
@@ -426,7 +414,7 @@
 }
 
 enum CallbackOut<'a> {
-    Func(CallbackFunc),
+    Func(CallbackFunc<'a>),
     Buf(CallbackBuf<'a>),
 }
 
@@ -473,11 +461,11 @@
             in_buf: Some(in_buf),
             in_buf_size: None,
             out_buf_size: None,
-            out: CallbackOut::Buf(CallbackBuf { out_buf: out_buf }),
+            out: CallbackOut::Buf(CallbackBuf { out_buf }),
         }
     }
 
-    fn new_callback_func(in_buf: &'a [u8], callback_func: CallbackFunc) -> Self {
+    fn new_callback_func(in_buf: &'a [u8], callback_func: CallbackFunc<'a>) -> Self {
         CallbackOxide {
             in_buf: Some(in_buf),
             in_buf_size: None,
@@ -2032,15 +2020,18 @@
 /// # Returns
 /// Returns a tuple containing the current status of the compressor, the current position
 /// in the input buffer.
+///
+/// The caller is responsible for ensuring the CallbackFunc struct will not cause undefined
+/// behaviour.
 pub fn compress_to_output(
     d: &mut CompressorOxide,
     in_buf: &[u8],
-    callback_func: CallbackFunc,
     flush: TDEFLFlush,
+    callback_func: impl FnMut(&[u8]) -> bool,
 ) -> (TDEFLStatus, usize) {
     let res = compress_inner(
         d,
-        &mut CallbackOxide::new_callback_func(in_buf, callback_func),
+        &mut CallbackOxide::new_callback_func(in_buf, CallbackFunc { put_buf_func: Box::new(callback_func)}),
         flush
     );
 
@@ -2170,7 +2161,9 @@
 
 #[cfg(test)]
 mod test {
-    use super::{write_u16_le, write_u16_le_uc, read_u16_le};
+    use super::{write_u16_le, write_u16_le_uc, read_u16_le,
+                CompressorOxide, compress_to_output, create_comp_flags_from_zip_params, TDEFLFlush, TDEFLStatus};
+    use ::inflate::{decompress_to_vec, TINFLStatus};
 
     #[test]
     fn u16_to_slice() {
@@ -2187,4 +2180,24 @@
         let mut slice = [208, 7];
         assert_eq!(read_u16_le(&mut slice, 0), 2000);
     }
+
+    #[test]
+    fn compress_output() {
+        let slice = [1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 1, 2, 6, 1, 2, 3, 1, 2, 3, 2, 3, 1, 2, 3];
+        let mut encoded = vec![];
+        let flags = create_comp_flags_from_zip_params(6, 0, 0);
+        let mut d = CompressorOxide::new(flags);
+        let (status, in_consumed) = compress_to_output(
+            &mut d,
+            &slice,
+            TDEFLFlush::Finish,
+            |out: &[u8]| { encoded.extend_from_slice(out); true },
+        );
+
+        assert_eq!(status, TDEFLStatus::Done);
+        assert_eq!(in_consumed, slice.len());
+
+        let decoded = decompress_to_vec(&encoded[..]).unwrap();
+        assert_eq!(&decoded[..], &slice[..]);
+    }
 }
diff --git a/rustc_deps/vendor/miniz_oxide/src/deflate/mod.rs b/rustc_deps/vendor/miniz_oxide/src/deflate/mod.rs
index b60c377..b71bb46 100644
--- a/rustc_deps/vendor/miniz_oxide/src/deflate/mod.rs
+++ b/rustc_deps/vendor/miniz_oxide/src/deflate/mod.rs
@@ -119,13 +119,8 @@
     // The comp flags function sets the zlib flag if the window_bits parameter is > 0.
     let flags = create_comp_flags_from_zip_params(level.into(), window_bits, strategy);
     let mut compressor = CompressorOxide::new(flags);
-    let mut output = Vec::with_capacity(input.len() / 2);
-    // # Unsafe
-    // We trust compress to not read the uninitialized bytes.
-    unsafe {
-        let cap = output.capacity();
-        output.set_len(cap);
-    }
+    let mut output = vec![0;input.len() / 2];
+
     let mut in_pos = 0;
     let mut out_pos = 0;
     loop {
@@ -149,14 +144,7 @@
                 // We need more space, so extend the vector.
                 if output.len().saturating_sub(out_pos) < 30 {
                     let current_len = output.len();
-                    output.reserve(current_len);
-
-                    // # Unsafe
-                    // We trust compress to not read the uninitialized bytes.
-                    unsafe {
-                        let cap = output.capacity();
-                        output.set_len(cap);
-                    }
+                    output.extend(&vec![0;current_len]);
                 }
             }
             // Not supposed to happen unless there is a bug.
diff --git a/rustc_deps/vendor/miniz_oxide/src/inflate/core.rs b/rustc_deps/vendor/miniz_oxide/src/inflate/core.rs
index 577cefb..93ba366 100644
--- a/rustc_deps/vendor/miniz_oxide/src/inflate/core.rs
+++ b/rustc_deps/vendor/miniz_oxide/src/inflate/core.rs
@@ -1182,7 +1182,7 @@
                     if !valid {
                         Action::Jump(BadRawLength)
                     } else if l.counter == 0 {
-                        // Empty raw block. Sometimes used for syncronization.
+                        // Empty raw block. Sometimes used for synchronization.
                         Action::Jump(BlockDone)
                     } else if l.num_bits != 0 {
                         // There is some data in the bit buffer, so we need to write that first.
@@ -1655,11 +1655,15 @@
             &out_buf.get_ref()[out_buf_start_pos..out_buf_pos],
         );
 
-        // Once we are done, check if the checksum matches with the one provided in the zlib header.
-        if status == TINFLStatus::Done && flags & TINFL_FLAG_PARSE_ZLIB_HEADER != 0 &&
-            r.check_adler32 != r.z_adler32
-        {
-            status = TINFLStatus::Adler32Mismatch;
+        // disabled so that random input from fuzzer would not be rejected early,
+        // before it has a chance to reach interesting parts of code
+        if !cfg!(fuzzing) {
+            // Once we are done, check if the checksum matches with the one provided in the zlib header.
+            if status == TINFLStatus::Done && flags & TINFL_FLAG_PARSE_ZLIB_HEADER != 0 &&
+                r.check_adler32 != r.z_adler32
+            {
+                status = TINFLStatus::Adler32Mismatch;
+            }
         }
     }
 
@@ -1780,7 +1784,7 @@
         assert_eq!(masked_lookup(dt, 20), (5, 5));
     }
 
-    fn check_result(input: &[u8], status: TINFLStatus, expected_state: State, zlib: bool) {
+    fn check_result(input: &[u8], expected_status: TINFLStatus, expected_state: State, zlib: bool) {
         let mut r = unsafe { DecompressorOxide::with_init_state_only() };
         let mut output_buf = vec![0; 1024 * 32];
         let mut out_cursor = Cursor::new(output_buf.as_mut_slice());
@@ -1788,42 +1792,82 @@
             inflate_flags::TINFL_FLAG_PARSE_ZLIB_HEADER
         } else {
             0
-        } | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF;
+        } | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF | TINFL_FLAG_HAS_MORE_INPUT;
         let (d_status, _in_bytes, _out_bytes) =
             decompress(&mut r, input, &mut out_cursor, flags);
-        assert_eq!(r.state, expected_state);
-        assert_eq!(status, d_status);
+        assert_eq!(expected_status, d_status);
+        assert_eq!(expected_state, r.state);
     }
 
     #[test]
     fn bogus_input() {
+        use self::check_result as cr;
         const F: TINFLStatus = TINFLStatus::Failed;
+        const OK: TINFLStatus = TINFLStatus::Done;
         // Bad CM.
-        check_result(&[0x77, 0x85][..], F, State::BadZlibHeader, true);
+        cr(&[0x77, 0x85], F, State::BadZlibHeader, true);
         // Bad window size (but check is correct).
-        check_result(&[0x88, 0x98][..], F, State::BadZlibHeader, true);
+        cr(&[0x88, 0x98], F, State::BadZlibHeader, true);
         // Bad check bits.
-        check_result(&[0x78, 0x98][..], F, State::BadZlibHeader, true);
+        cr(&[0x78, 0x98], F, State::BadZlibHeader, true);
 
         // Too many code lengths. (From inflate library issues)
-        check_result(
+        cr(
             b"M\xff\xffM*\xad\xad\xad\xad\xad\xad\xad\xcd\xcd\xcdM",
             F,
             State::BadTotalSymbols,
             false,
         );
         // Bad CLEN (also from inflate library issues)
-        check_result(
+        cr(
             b"\xdd\xff\xff*M\x94ffffffffff",
             F,
             State::BadTotalSymbols,
             false,
         );
+
+        // Port of inflate coverage tests from zlib-ng
+        // https://github.com/Dead2/zlib-ng/blob/develop/test/infcover.c
+        let c = |a, b, c| cr(a, b, c, false);
+
+        // Invalid uncompressed/raw block length.
+        c(&[0,0,0,0,0], F, State::BadRawLength);
+        // Ok empty uncompressed block.
+        c(&[3, 0], OK, State::DoneForever);
+        // Invalid block type.
+        c(&[6], F, State::BlockTypeUnexpected);
+        // Ok uncompressed block.
+        c(&[1, 1, 0, 0xfe, 0xff, 0], OK, State::DoneForever);
+        // Too many litlens, we handle this later than zlib, so this test won't
+        // give the same result.
+        //        c(&[0xfc, 0, 0], F, State::BadTotalSymbols);
+        // Invalid set of code lengths - TODO Check if this is the correct error for this.
+        c(&[4, 0, 0xfe, 0xff], F, State::BadTotalSymbols);
+        // Invalid repeat in list of code lengths.
+        // (Try to repeat a non-existant code.)
+        c(&[4, 0, 0x24, 0x49, 0], F, State::BadCodeSizeDistPrevLookup);
+        // Missing end of block code (should we have a separate error for this?) - fails on futher input
+        //    c(&[4, 0, 0x24, 0xe9, 0xff, 0x6d], F, State::BadTotalSymbols);
+        // Invalid set of literals/lengths
+        c(&[4, 0x80, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x71, 0xff, 0xff, 0x93, 0x11, 0], F, State::BadTotalSymbols);
+        // Invalid set of distances _ needsmoreinput
+        // c(&[4, 0x80, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x0f, 0xb4, 0xff, 0xff, 0xc3, 0x84], F, State::BadTotalSymbols);
+        // Invalid distance code
+        c(&[2, 0x7e, 0xff, 0xff], F, State::InvalidDist);
+
+        // Distance refers to position before the start
+        c(&[0x0c, 0xc0 ,0x81 ,0, 0, 0, 0, 0, 0x90, 0xff, 0x6b, 0x4, 0], F, State::DistanceOutOfBounds);
+
+        // Trailer
+        // Bad gzip trailer checksum GZip header not handled by miniz_oxide
+        //cr(&[0x1f, 0x8b, 0x08 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0x03, 0, 0, 0, 0, 0x01], F, State::BadCRC, false)
+        // Bad gzip trailer length
+        //cr(&[0x1f, 0x8b, 0x08 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0x03, 0, 0, 0, 0, 0, 0, 0, 0, 0x01], F, State::BadCRC, false)
     }
 
     #[test]
     fn empty_output_buffer_non_wrapping() {
-        let mut encoded = [
+        let encoded = [
             120, 156, 243, 72, 205, 201, 201, 215, 81, 168,
             202, 201,  76, 82,   4,   0,  27, 101,  4,  19,
         ];
@@ -1841,7 +1885,7 @@
 
     #[test]
     fn empty_output_buffer_wrapping() {
-        let mut encoded =  [
+        let encoded =  [
             0x73, 0x49, 0x4d, 0xcb,
             0x49, 0x2c, 0x49, 0x55,
             0x00, 0x11, 0x00
diff --git a/rustc_deps/vendor/miniz_oxide/src/inflate/mod.rs b/rustc_deps/vendor/miniz_oxide/src/inflate/mod.rs
index 0093afc..45f86e6 100644
--- a/rustc_deps/vendor/miniz_oxide/src/inflate/mod.rs
+++ b/rustc_deps/vendor/miniz_oxide/src/inflate/mod.rs
@@ -71,15 +71,8 @@
 
 fn decompress_to_vec_inner(input: &[u8], flags: u32) -> Result<Vec<u8>, TINFLStatus> {
     let flags = flags | inflate_flags::TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF;
-    let mut ret = Vec::with_capacity(input.len() * 2);
+    let mut ret : Vec<u8> = vec![0;input.len() * 2];
 
-    // # Unsafe
-    // We trust decompress to not read the unitialized bytes as it's wrapped
-    // in a cursor that's position is set to the end of the initialized data.
-    unsafe {
-        let cap = ret.capacity();
-        ret.set_len(cap);
-    };
     let mut decomp = unsafe { DecompressorOxide::with_init_state_only() };
 
     let mut in_pos = 0;
@@ -103,14 +96,7 @@
 
             TINFLStatus::HasMoreOutput => {
                 // We need more space so extend the buffer.
-                ret.reserve(out_pos);
-                // # Unsafe
-                // We trust decompress to not read the unitialized bytes as it's wrapped
-                // in a cursor that's position is set to the end of the initialized data.
-                unsafe {
-                    let cap = ret.capacity();
-                    ret.set_len(cap);
-                }
+                ret.extend(&vec![0;out_pos]);
             },
 
             _ => return Err(status),
diff --git a/rustc_deps/vendor/miniz_oxide/src/lib.rs b/rustc_deps/vendor/miniz_oxide/src/lib.rs
index 82fcd60..922cc65 100644
--- a/rustc_deps/vendor/miniz_oxide/src/lib.rs
+++ b/rustc_deps/vendor/miniz_oxide/src/lib.rs
@@ -22,7 +22,6 @@
 //! ```
 
 extern crate adler32;
-extern crate libc;
 
 pub mod inflate;
 pub mod deflate;
@@ -31,8 +30,6 @@
 pub use shared::update_adler32 as mz_adler32_oxide;
 pub use shared::MZ_ADLER32_INIT;
 
-use libc::{c_int, c_void};
-
 /// A list of flush types.
 #[repr(i32)]
 #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
@@ -49,7 +46,7 @@
     /// Create a Flush instance from an integer value.
     ///
     /// Returns `MZError::Param` on invalid values.
-    pub fn new(flush: c_int) -> Result<Self, MZError> {
+    pub fn new(flush: i32) -> Result<Self, MZError> {
         match flush {
             0 => Ok(MZFlush::None),
             1 | 2 => Ok(MZFlush::Sync),
diff --git a/rustc_deps/vendor/miniz_oxide/src/shared.rs b/rustc_deps/vendor/miniz_oxide/src/shared.rs
index 218f277..9f59c67 100644
--- a/rustc_deps/vendor/miniz_oxide/src/shared.rs
+++ b/rustc_deps/vendor/miniz_oxide/src/shared.rs
@@ -1,12 +1,11 @@
 use adler32::RollingAdler32;
-use libc::{c_uint, c_ulong};
 
-pub const MZ_ADLER32_INIT: c_ulong = 1;
+pub const MZ_ADLER32_INIT : u32 = 1;
 
 pub const HUFFMAN_LENGTH_ORDER: [u8; 19] =
     [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
 
-pub fn update_adler32(adler: c_uint, data: &[u8]) -> c_uint {
+pub fn update_adler32(adler: u32, data: &[u8]) -> u32 {
     let mut hash = RollingAdler32::from_value(adler);
     hash.update_buffer(data);
     hash.hash()
diff --git a/rustc_deps/vendor/miniz_oxide_c_api/.cargo-checksum.json b/rustc_deps/vendor/miniz_oxide_c_api/.cargo-checksum.json
index a1bcc57..2daf64f 100644
--- a/rustc_deps/vendor/miniz_oxide_c_api/.cargo-checksum.json
+++ b/rustc_deps/vendor/miniz_oxide_c_api/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{".travis.yml":"ec4b85041b27c401e7e6d56a02e2a740e3f043657794ec76f704d8607e12051e","Cargo.toml":"23f7cab272b5ab7b66e254b2d92f39b07d498f29d214f8c5836c225b876be198","LICENSE":"e190940e8ad3cdd4fca962a6508ed6865d589d314b1cb055f86000e124b88d8d","README.md":"96858c0e7fa911f76546fa22d62e50d46a1f0f6186917cd53240cf2ec1d8568d","benches/bench.rs":"ee8f4652ebff6f6dc0aaa4622a24ba7cdb6aa1583aeded5a23506087553970e5","build.sh":"b3220dd05f7b613393dd1b4116ae09eaee0e1a024de023072c05937765015ad6","build_orig_miniz.sh":"8f1a7490752c6d222c95885121ee1cd6ba3de0d6e056c0cd959d7cb5b34fd0eb","examples/example1.c":"599c928a7afff9098ef8a6bd9f064f220d4859a57684a0f75fb5d9f2af93a83a","examples/example2.c":"1fcd0152b48cc27633baa80790a5e62af3338ff0cf4befc386d0ba030c058008","examples/example3.c":"adc613e0ea7e1b958227f6366f2c5f11b5415ff31e853932da43391dfa520241","examples/example4.c":"3bc92b0c7472c50b5186701cbec6329c13cabb2ab9c539acf092f55662635809","examples/example5.c":"cba6d29ac45e27ce0a0adbfe6e0f6048966e2765de3eda44c450542862c76a14","examples/example6.c":"1869ec509b69280657f006968b8d7bf13ce191b36588d953dee4d0cee22219b2","miniz.h":"d9c62e6d1f14da400ba924acb90696df593e01384a587bc9306df949b02fdf8f","miniz/miniz.c":"9e9639d74e98ab110897dcb027a774e0e176699a75df3a5cd8ddd57fa42e4ae5","miniz/miniz_tdef.c":"2b21aef9640a51ab13cb0201d73a15ea4520030e319e34aa530e594f64b99296","miniz/miniz_tinfl.c":"5b8f8dda0448bf24ff1ef59a644a7bcaabbeb6816cd79d5a3f25e42cd525ce3d","miniz/miniz_zip.c":"59c072b1a613c59a23c3ec5c6c40172291f07c61b2ab7ff1dfbc10de08de8a33","miniz_common.h":"87fa7aef5c11a143033251d12bbd23fe14c996d7d20f49e927e096a86ecd0255","miniz_stub/miniz.c":"4c16c2bf6b76cd0303b4ea97c1d4d8e213c4e58db06ed34a4dc9ea81fd9dd5fd","miniz_stub/miniz_tdef.c":"f310f62360e0135944806f7296f81ab0e048b125d9f336de22f66e4f7b57aa32","miniz_stub/miniz_tinfl.c":"e56d711e23fdf2f0e6abefc9a5c0f12a3a6779c58022493cb255fbaac1250147","miniz_stub/miniz_zip.c":"e3d1cc22e92d540d6e2005c33e72779b38cc638f347b4f6785cd27ac1e1c746b","miniz_tdef.h":"7fd704f55c30bb36dfd5d81f9a8de1751061ad472c5fe3dd2b3a5374655e6121","miniz_tinfl.h":"21570b0688bb840106432f24a70d24eeedd7595e37965ccf3f0e0188ca2f604b","miniz_zip.h":"a6d19a9fb619cc647c6cc287210ae8d7a50c2018e65f2b259be1c8efd68885af","performance.sh":"05605fb3f74e3e46ede94b7810982b56e34225e9f2419c144f6248885df3de17","redefine.txt":"04ba694491b181e8d5125aa3175ef49a497fe89f2ef9c9faa7d6cfb132f31701","run_fuzz.sh":"94c91a2a900d6fd6696c285bff3829908bbd7f63cd4e8caa8ded8be85161e5a2","src/build.rs":"6cceadbf99e458e11a832328e42ad025ac2fa1acfe41f9fa98952c71728208d9","src/lib.rs":"d5033ccc6d952cb0513fe0638422bdac77c7a30bfc319d32a9ec529970cb666f","src/lib_oxide.rs":"6d46ce96ba8357323fc5b90aae9fa4c961483b764e79d251457c3d545b3fdb3a","src/tdef.rs":"1fad54ed45ae8fcd9bf0e2d05a7e92e81b70aa7850237087bb3fb8a645e88109","src/tinfl.rs":"2494dbb929139ba035e147442f979afc1ae382e7e4017e9c822a608fe9184149","src/unmangle.rs":"132c66c5b0e3b463d92ee1e026c62b0fee75cdbe92e290a5f0d9403d668c9982","test.sh":"c85a0a614de2f65d1ba7e31602b601e544ecb3c774971b48a4eeb739eaf1014b","tests/miniz_tester.cpp":"9d0443d575b6a398f217422041b9955597d96be7e3723a328c1c5b689b698674","tests/test.rs":"0d8536f89ac1f8008c34b215ea567a977bdae37b9b8fe9865edab53887efec41","tests/timer.cpp":"2a748c3d9ea374bd7fd224420b6611357245b8d8e5ce619821b773a390f2b348","tests/timer.h":"dd48b88a80d68410cdf6a8764cd2999989fb094ce6efb718db9c112af803749a","travis-after-success.sh":"32379ef1e9ab46c8ff57fb76d30448b08c13fd0e89a1333e4abcc0156f2b6803"},"package":"5a5b8234d6103ebfba71e29786da4608540f862de5ce980a1c94f86a40ca0d51"}
\ No newline at end of file
+{"files":{".cargo_vcs_info.json":"40a911cfa8e12628f59eae6aebb3ad22a9b2a7ea82affc211c935c2ff6a501c0",".travis.yml":"0c2a693c1250a8232c6d296a1f3fbd554f4c38db829eb1c584120023e4354e44","Cargo.toml":"ccd64cc84810bd375465898b416a81d0d3560395719cf04ba7fa2a3f4244fad0","LICENSE":"e190940e8ad3cdd4fca962a6508ed6865d589d314b1cb055f86000e124b88d8d","README.md":"96858c0e7fa911f76546fa22d62e50d46a1f0f6186917cd53240cf2ec1d8568d","benches/bench.rs":"ee8f4652ebff6f6dc0aaa4622a24ba7cdb6aa1583aeded5a23506087553970e5","build.sh":"b3220dd05f7b613393dd1b4116ae09eaee0e1a024de023072c05937765015ad6","build_orig_miniz.sh":"8f1a7490752c6d222c95885121ee1cd6ba3de0d6e056c0cd959d7cb5b34fd0eb","examples/example1.c":"599c928a7afff9098ef8a6bd9f064f220d4859a57684a0f75fb5d9f2af93a83a","examples/example2.c":"1fcd0152b48cc27633baa80790a5e62af3338ff0cf4befc386d0ba030c058008","examples/example3.c":"adc613e0ea7e1b958227f6366f2c5f11b5415ff31e853932da43391dfa520241","examples/example4.c":"3bc92b0c7472c50b5186701cbec6329c13cabb2ab9c539acf092f55662635809","examples/example5.c":"cba6d29ac45e27ce0a0adbfe6e0f6048966e2765de3eda44c450542862c76a14","examples/example6.c":"1869ec509b69280657f006968b8d7bf13ce191b36588d953dee4d0cee22219b2","miniz.h":"d9c62e6d1f14da400ba924acb90696df593e01384a587bc9306df949b02fdf8f","miniz/miniz.c":"9e9639d74e98ab110897dcb027a774e0e176699a75df3a5cd8ddd57fa42e4ae5","miniz/miniz_tdef.c":"2b21aef9640a51ab13cb0201d73a15ea4520030e319e34aa530e594f64b99296","miniz/miniz_tinfl.c":"5b8f8dda0448bf24ff1ef59a644a7bcaabbeb6816cd79d5a3f25e42cd525ce3d","miniz/miniz_zip.c":"59c072b1a613c59a23c3ec5c6c40172291f07c61b2ab7ff1dfbc10de08de8a33","miniz_common.h":"87fa7aef5c11a143033251d12bbd23fe14c996d7d20f49e927e096a86ecd0255","miniz_stub/miniz.c":"4c16c2bf6b76cd0303b4ea97c1d4d8e213c4e58db06ed34a4dc9ea81fd9dd5fd","miniz_stub/miniz_tdef.c":"f310f62360e0135944806f7296f81ab0e048b125d9f336de22f66e4f7b57aa32","miniz_stub/miniz_tinfl.c":"e56d711e23fdf2f0e6abefc9a5c0f12a3a6779c58022493cb255fbaac1250147","miniz_stub/miniz_zip.c":"e3d1cc22e92d540d6e2005c33e72779b38cc638f347b4f6785cd27ac1e1c746b","miniz_tdef.h":"7fd704f55c30bb36dfd5d81f9a8de1751061ad472c5fe3dd2b3a5374655e6121","miniz_tinfl.h":"21570b0688bb840106432f24a70d24eeedd7595e37965ccf3f0e0188ca2f604b","miniz_zip.h":"a6d19a9fb619cc647c6cc287210ae8d7a50c2018e65f2b259be1c8efd68885af","performance.sh":"05605fb3f74e3e46ede94b7810982b56e34225e9f2419c144f6248885df3de17","redefine.txt":"04ba694491b181e8d5125aa3175ef49a497fe89f2ef9c9faa7d6cfb132f31701","run_fuzz.sh":"94c91a2a900d6fd6696c285bff3829908bbd7f63cd4e8caa8ded8be85161e5a2","src/build.rs":"6cceadbf99e458e11a832328e42ad025ac2fa1acfe41f9fa98952c71728208d9","src/lib.rs":"c41776e274d2f07e055b37f51083b1bf27af6dced0e03c86c20f01adea5176fe","src/lib_oxide.rs":"0e215ad5cbfb8959078edd472c61f364dd05957e0d28c3d743f798847662fbbd","src/tdef.rs":"4da73f16802011aa6a3c427d2c074a86198a828a1a191f247fc9fc20df24339b","src/tinfl.rs":"2494dbb929139ba035e147442f979afc1ae382e7e4017e9c822a608fe9184149","src/unmangle.rs":"132c66c5b0e3b463d92ee1e026c62b0fee75cdbe92e290a5f0d9403d668c9982","test.sh":"187eb19a91cd56b5cba984f9b56e56d3278578afde2a779b1800b2b5d6c14d76","tests/miniz_tester.cpp":"9d0443d575b6a398f217422041b9955597d96be7e3723a328c1c5b689b698674","tests/test.rs":"0d8536f89ac1f8008c34b215ea567a977bdae37b9b8fe9865edab53887efec41","tests/timer.cpp":"2a748c3d9ea374bd7fd224420b6611357245b8d8e5ce619821b773a390f2b348","tests/timer.h":"dd48b88a80d68410cdf6a8764cd2999989fb094ce6efb718db9c112af803749a","travis-after-success.sh":"32379ef1e9ab46c8ff57fb76d30448b08c13fd0e89a1333e4abcc0156f2b6803"},"package":"28edaef377517fd9fe3e085c37d892ce7acd1fbeab9239c5a36eec352d8a8b7e"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/miniz_oxide_c_api/.cargo_vcs_info.json b/rustc_deps/vendor/miniz_oxide_c_api/.cargo_vcs_info.json
new file mode 100644
index 0000000..60f83e1
--- /dev/null
+++ b/rustc_deps/vendor/miniz_oxide_c_api/.cargo_vcs_info.json
@@ -0,0 +1,5 @@
+{
+  "git": {
+    "sha1": "e6c214efd253491ac072c2c9adba87ef5b4cd5cb"
+  }
+}
diff --git a/rustc_deps/vendor/miniz_oxide_c_api/.travis.yml b/rustc_deps/vendor/miniz_oxide_c_api/.travis.yml
index 5f78e88..ded4c98 100644
--- a/rustc_deps/vendor/miniz_oxide_c_api/.travis.yml
+++ b/rustc_deps/vendor/miniz_oxide_c_api/.travis.yml
@@ -4,10 +4,15 @@
   - cpp
 compiler:
   - gcc
-rust: nightly
+rust:
+  - stable
+  - nightly
+before_install:
+  - sudo apt-get update
+  - sudo apt-get install valgrind
 script:
   - cargo test
   - cargo test -p miniz_oxide
   - ./test.sh
 after_success:
-  - ./travis-after-success.sh
\ No newline at end of file
+  - ./travis-after-success.sh
diff --git a/rustc_deps/vendor/miniz_oxide_c_api/Cargo.toml b/rustc_deps/vendor/miniz_oxide_c_api/Cargo.toml
index 9f528cb..c8de9f3 100644
--- a/rustc_deps/vendor/miniz_oxide_c_api/Cargo.toml
+++ b/rustc_deps/vendor/miniz_oxide_c_api/Cargo.toml
@@ -12,7 +12,7 @@
 
 [package]
 name = "miniz_oxide_c_api"
-version = "0.1.3"
+version = "0.2.0"
 authors = ["Frommi <daniil.liferenko@gmail.com>"]
 build = "src/build.rs"
 exclude = ["benches/data/*"]
@@ -39,7 +39,7 @@
 version = "0.2.22"
 
 [dependencies.miniz_oxide]
-version = "0.1.3"
+version = "0.2.0"
 [build-dependencies.cc]
 version = "1.0"
 
@@ -49,6 +49,7 @@
 build_stub_miniz = []
 default = []
 fuzzing = ["build_orig_miniz", "no_c_export"]
+libc_stub = []
 miniz_zip = ["build_stub_miniz"]
 no_c_export = []
 [badges.travis-ci]
diff --git a/rustc_deps/vendor/miniz_oxide_c_api/src/lib.rs b/rustc_deps/vendor/miniz_oxide_c_api/src/lib.rs
index 6a71bcf..7af5d06 100644
--- a/rustc_deps/vendor/miniz_oxide_c_api/src/lib.rs
+++ b/rustc_deps/vendor/miniz_oxide_c_api/src/lib.rs
@@ -1,5 +1,58 @@
+#![cfg_attr(any(feature = "libc_stub", all(target_arch = "wasm32", not(target_os = "emscripten"))), feature(allocator_api))]
+
 extern crate crc;
+#[cfg(not(any(feature = "libc_stub", all(target_arch = "wasm32", not(target_os = "emscripten")))))]
 extern crate libc;
+#[cfg(any(feature = "libc_stub", all(target_arch = "wasm32", not(target_os = "emscripten"))))]
+mod libc {
+    #![allow(non_camel_case_types)]
+
+    use std::alloc::{Alloc, Global, Layout};
+    use std::mem;
+    use std::ptr::NonNull;
+
+    pub type c_void = u8;
+    pub type c_int = i32;
+    pub type c_uint = u32;
+    pub type c_ulong = u64;
+    pub type c_char = i8;
+    pub type size_t = usize;
+
+    pub unsafe fn malloc(a: size_t) -> *mut c_void {
+        let size = a + mem::size_of::<size_t>();
+        let layout = match Layout::from_size_align(size, mem::align_of::<size_t>()) {
+            Ok(n) => n,
+            Err(_) => return 0 as *mut c_void,
+        };
+        let ptr = match Global.alloc(layout) {
+            Ok(addr) => addr.as_ptr() as *mut size_t,
+            Err(_) => return 0 as *mut c_void,
+        };
+        *ptr.offset(0) = size;
+        ptr.offset(1) as *mut c_void
+    }
+
+    pub unsafe fn realloc(ptr: *mut c_void, a: size_t) -> *mut c_void {
+        let new_size = a + mem::size_of::<size_t>();
+        let ptr = (ptr as *mut size_t).offset(-1);
+        let old_size = *ptr.offset(0);
+        let layout = Layout::from_size_align_unchecked(old_size, mem::size_of::<size_t>());
+        let ptr = match Global.realloc(NonNull::new_unchecked(ptr as *mut _), layout, new_size) {
+            Ok(addr) => addr.as_ptr() as *mut size_t,
+            Err(_) => return 0 as *mut c_void,
+        };
+        *ptr.offset(0) = new_size;
+        ptr.offset(1) as *mut c_void
+    }
+
+    pub unsafe fn free(ptr: *mut c_void) {
+        let ptr = (ptr as *mut size_t).offset(-1);
+        let size = *ptr.offset(0);
+        let align = mem::size_of::<size_t>();
+        let layout = Layout::from_size_align_unchecked(size, align);
+        Global.dealloc(NonNull::new_unchecked(ptr as *mut _), layout);
+    }
+}
 extern crate miniz_oxide;
 
 use std::{cmp, ptr, slice};
diff --git a/rustc_deps/vendor/miniz_oxide_c_api/src/lib_oxide.rs b/rustc_deps/vendor/miniz_oxide_c_api/src/lib_oxide.rs
index 465be70..18d4741 100644
--- a/rustc_deps/vendor/miniz_oxide_c_api/src/lib_oxide.rs
+++ b/rustc_deps/vendor/miniz_oxide_c_api/src/lib_oxide.rs
@@ -89,7 +89,7 @@
     // TODO: Not sure
     pub data_type: c_int,
     /// Adler32 checksum of the data that has been compressed or uncompressed.
-    pub adler: c_ulong,
+    pub adler: c_uint,
     /// Reserved
     pub reserved: c_ulong,
 }
@@ -216,7 +216,7 @@
 
     state: BoxedState<ST>,
 
-    pub adler: c_ulong,
+    pub adler: c_uint,
 }
 
 
@@ -408,7 +408,7 @@
         *next_out = &mut mem::replace(next_out, &mut [])[out_bytes..];
         stream_oxide.total_in += in_bytes as c_ulong;
         stream_oxide.total_out += out_bytes as c_ulong;
-        stream_oxide.adler = compressor.adler32() as c_ulong;
+        stream_oxide.adler = compressor.adler32() as c_uint;
 
         if defl_status == TDEFLStatus::BadParam || defl_status == TDEFLStatus::PutBufFailed {
             return Err(MZError::Stream);
diff --git a/rustc_deps/vendor/miniz_oxide_c_api/src/tdef.rs b/rustc_deps/vendor/miniz_oxide_c_api/src/tdef.rs
index ad55386..33aec49 100644
--- a/rustc_deps/vendor/miniz_oxide_c_api/src/tdef.rs
+++ b/rustc_deps/vendor/miniz_oxide_c_api/src/tdef.rs
@@ -3,7 +3,18 @@
 use std::panic::{catch_unwind, AssertUnwindSafe};
 
 use miniz_oxide::deflate::core::{compress, compress_to_output, create_comp_flags_from_zip_params,
-                           CallbackFunc, CompressorOxide, PutBufFuncPtr, TDEFLFlush, TDEFLStatus};
+                                 CompressorOxide, TDEFLFlush, TDEFLStatus};
+
+/// Compression callback function type.
+pub type PutBufFuncPtrNotNull = unsafe extern "C" fn(
+    *const c_void, c_int, *mut c_void) -> bool;
+/// `Option` alias for compression callback function type.
+pub type PutBufFuncPtr = Option<PutBufFuncPtrNotNull>;
+
+pub struct CallbackFunc {
+    pub put_buf_func: PutBufFuncPtrNotNull,
+    pub put_buf_user: *mut c_void,
+}
 
 /// Deflate flush modes.
 pub mod flush_modes {
@@ -119,13 +130,24 @@
                         }
                     }
                 },
-                Some(func) => {
+                Some(ref func) => {
                     if out_buf_size > 0 || !out_buf.is_null() {
                         in_size.map(|size| *size = 0);
                         out_size.map(|size| *size = 0);
                         return TDEFLStatus::BadParam;
                     }
-                    let res = compress_to_output(compressor, in_slice, func, flush);
+                    let res = compress_to_output(
+                        compressor,
+                        in_slice,
+                        flush,
+                        |out: &[u8]| {
+                            (func.put_buf_func)(
+                                &(out[0]) as *const u8 as *const c_void,
+                                out.len() as i32,
+                                func.put_buf_user
+                            )
+                        },
+                    );
                     (res.0, res.1, 0)
                 },
             };
diff --git a/rustc_deps/vendor/miniz_oxide_c_api/test.sh b/rustc_deps/vendor/miniz_oxide_c_api/test.sh
index de9f428..39105ec 100755
--- a/rustc_deps/vendor/miniz_oxide_c_api/test.sh
+++ b/rustc_deps/vendor/miniz_oxide_c_api/test.sh
@@ -11,7 +11,7 @@
 
 for i in 1 2 3 4 5 6
 do
-    gcc examples/example$i.c -o bin/example$i -lm -I. -ggdb -L. -lminiz_oxide_c_api -lutil -ldl -lrt -lpthread -lgcc_s -lc -lm -lrt -lpthread -lutil
+    gcc examples/example$i.c -o bin/example${i} -lm -I. -ggdb -L. -lminiz_oxide_c_api -lutil -ldl -lrt -lpthread -lgcc_s -lc -lm -lrt -lpthread -lutil
 done
 
 mkdir -p test_scratch
@@ -24,6 +24,16 @@
 fi
 
 cd test_scratch
+
+echo "valgrind -v a"
+valgrind --error-exitcode=1 --leak-check=full ../bin/miniz_tester -v a linux-4.8.11/mm > /dev/null
+echo "valgrind -v -r a"
+valgrind --error-exitcode=1 --leak-check=full ../bin/miniz_tester -v -r a linux-4.8.11/mm > /dev/null
+echo "valgrind -v -b a"
+valgrind --error-exitcode=1 --leak-check=full ../bin/miniz_tester -v -b a linux-4.8.11/mm > /dev/null
+echo "valgrind -v -a a"
+valgrind --error-exitcode=1 --leak-check=full ../bin/miniz_tester -v -a a linux-4.8.11/mm/kasan > /dev/null
+
 echo "-v a"
 ../bin/miniz_tester -v a linux-4.8.11 > /dev/null
 echo "-v -r a"
@@ -32,6 +42,7 @@
 ../bin/miniz_tester -v -b -r a linux-4.8.11 > /dev/null
 echo "-v -a a"
 ../bin/miniz_tester -v -a a linux-4.8.11/mm > /dev/null
+
 echo "Large file"
 mkdir -p large_file
 truncate -s 5G large_file/lf
diff --git a/rustc_deps/vendor/serde/.cargo-checksum.json b/rustc_deps/vendor/serde/.cargo-checksum.json
index 1b8cd95..2f9480b 100644
--- a/rustc_deps/vendor/serde/.cargo-checksum.json
+++ b/rustc_deps/vendor/serde/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{".cargo_vcs_info.json":"8ef3903ca2a36df17c21973cceccf817fb7d9005fd34551ffb2ae049613acd36","Cargo.toml":"559216ffee2f6dab82bfc929f64368d95804c4c526d2dc3a6cd6cb4ec56ead82","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"0be0a197438242714e673041323d61813b01fdd4a80cbb6d55ffbd902f9e0937","build.rs":"f3fdadb2b0f8c9f1568903f47cfc48a8e5ec3f81dd54a067fda5e4fa084d0d30","crates-io.md":"e38ab4df5ec64cff532b80f8d3b650b590a2adf563802638a47aa2eb0d73a200","src/de/from_primitive.rs":"3cf03cb47d884ff32555673831d79de8f6bf0c58a22783d73077d1f694c1494d","src/de/ignored_any.rs":"90b6b3c79472fd6c8997f4456dae9f28d4dbaa87efdbbc5fb304d6a83c560d00","src/de/impls.rs":"1d4887c581f95297eff19552f10ee2c3dc3f6bde7f7e46dc1a734fca8afdb0c0","src/de/mod.rs":"5def657ab51bf031c7706b98a19d369abef80a8c1c5b46267dc8223c904ba52b","src/de/utf8.rs":"956b124b7ce98353cb781b56e43a6fed2e67f1389d35b7a468d5be75b1485853","src/de/value.rs":"5883ea09fb61c30fcb7422a000688481f4fae4c0980ca4618f8b5747b573d545","src/export.rs":"4e3ed8aa2b0e5d9c18f462183dff7fa4772a30e88e6b3cc0fb9712282ecbe0c5","src/integer128.rs":"1bf9e18047a4a3f95a43b8d253e4f844b6be62e71684e47d980582462bce4223","src/lib.rs":"3d1eddcdbf0711b93a4b734e69a72434b83de59e6e4c0b675e159aba7507736f","src/macros.rs":"953b42721810eb26239231849af2f9f461721497695317e7672001c27d2cb25c","src/private/de.rs":"29a62d208e9439f8ce6dff4bca746a9e85b36b88da13f187a320be84a66cebc0","src/private/macros.rs":"0bebda4a3c1b794280d21581fc0d5e3cf130647f53b6a8ac157164c74e14df51","src/private/mod.rs":"0c774d86042cefdb447857070a1d4d2c0b9f519a7f5db588a1e7fcc16ca5a511","src/private/ser.rs":"56b61986a7c57d37d65d763cb69119889a3dc06eb27a9e95cd5e758acf0e4535","src/ser/impls.rs":"d3bb23bc5860e7ed4b7cdf01c66d22e1ac6e2ec2efb52ba831298fd63a27baed","src/ser/impossible.rs":"91da408362284ec567b2316050900251ff66a1134413963720154fb70f3919c0","src/ser/mod.rs":"feba74b5c928ce00c2fcc5d8602e7255a0731428fefd2de45353170334cdbea4"},"package":"84257ccd054dc351472528c8587b4de2dbf0dc0fe2e634030c1a90bfdacebaa9"}
\ No newline at end of file
+{"files":{".cargo_vcs_info.json":"cfa5ab2afddbb64fef2413266283d55652b4e9ddf3092ec94bf612b81c5c8cc2","Cargo.toml":"d370184a37692fbf66fc20feef381e5ce9a1a7c6e95fd855c03c796b15f28f0e","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"c4218d07d775c036cd50495b0354c5b59435472b12e159042cacb30b6ef1a7c1","build.rs":"f3fdadb2b0f8c9f1568903f47cfc48a8e5ec3f81dd54a067fda5e4fa084d0d30","crates-io.md":"8dce715dfbd2e9bbdd87e401d1f7974a60089f0673f7a84f4c5d840411075d14","src/de/from_primitive.rs":"3cf03cb47d884ff32555673831d79de8f6bf0c58a22783d73077d1f694c1494d","src/de/ignored_any.rs":"90b6b3c79472fd6c8997f4456dae9f28d4dbaa87efdbbc5fb304d6a83c560d00","src/de/impls.rs":"76b2b181e9cd9e748fae1bdb1e30a256f9ea3d5398be191a23fe56164c6792dd","src/de/mod.rs":"5def657ab51bf031c7706b98a19d369abef80a8c1c5b46267dc8223c904ba52b","src/de/utf8.rs":"956b124b7ce98353cb781b56e43a6fed2e67f1389d35b7a468d5be75b1485853","src/de/value.rs":"5883ea09fb61c30fcb7422a000688481f4fae4c0980ca4618f8b5747b573d545","src/export.rs":"4e3ed8aa2b0e5d9c18f462183dff7fa4772a30e88e6b3cc0fb9712282ecbe0c5","src/integer128.rs":"1bf9e18047a4a3f95a43b8d253e4f844b6be62e71684e47d980582462bce4223","src/lib.rs":"d6d7291950ff051c9958a31eb39f34edfbb5fd1692185bf99e0f55b3aa6f802f","src/macros.rs":"953b42721810eb26239231849af2f9f461721497695317e7672001c27d2cb25c","src/private/de.rs":"29a62d208e9439f8ce6dff4bca746a9e85b36b88da13f187a320be84a66cebc0","src/private/macros.rs":"0bebda4a3c1b794280d21581fc0d5e3cf130647f53b6a8ac157164c74e14df51","src/private/mod.rs":"0c774d86042cefdb447857070a1d4d2c0b9f519a7f5db588a1e7fcc16ca5a511","src/private/ser.rs":"56b61986a7c57d37d65d763cb69119889a3dc06eb27a9e95cd5e758acf0e4535","src/ser/impls.rs":"d3bb23bc5860e7ed4b7cdf01c66d22e1ac6e2ec2efb52ba831298fd63a27baed","src/ser/impossible.rs":"91da408362284ec567b2316050900251ff66a1134413963720154fb70f3919c0","src/ser/mod.rs":"feba74b5c928ce00c2fcc5d8602e7255a0731428fefd2de45353170334cdbea4"},"package":"15c141fc7027dd265a47c090bf864cf62b42c4d228bbcf4e51a0c9e2b0d3f7ef"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/serde/.cargo_vcs_info.json b/rustc_deps/vendor/serde/.cargo_vcs_info.json
index d57ad86..6e13098 100644
--- a/rustc_deps/vendor/serde/.cargo_vcs_info.json
+++ b/rustc_deps/vendor/serde/.cargo_vcs_info.json
@@ -1,5 +1,5 @@
 {
   "git": {
-    "sha1": "9956589ed5e9d9930405d8840a3660f21b8f15b0"
+    "sha1": "1b45e5766a30db85010112ea6d2d2638eddd9b12"
   }
 }
diff --git a/rustc_deps/vendor/serde/Cargo.toml b/rustc_deps/vendor/serde/Cargo.toml
index 86d1b66..b92176f 100644
--- a/rustc_deps/vendor/serde/Cargo.toml
+++ b/rustc_deps/vendor/serde/Cargo.toml
@@ -12,7 +12,7 @@
 
 [package]
 name = "serde"
-version = "1.0.79"
+version = "1.0.80"
 authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>", "David Tolnay <dtolnay@gmail.com>"]
 build = "build.rs"
 include = ["Cargo.toml", "build.rs", "src/**/*.rs", "crates-io.md", "README.md", "LICENSE-APACHE", "LICENSE-MIT"]
diff --git a/rustc_deps/vendor/serde/README.md b/rustc_deps/vendor/serde/README.md
index 82aa504..77de3a4 100644
--- a/rustc_deps/vendor/serde/README.md
+++ b/rustc_deps/vendor/serde/README.md
@@ -15,7 +15,7 @@
 
 - [An overview of Serde](https://serde.rs/)
 - [Data formats supported by Serde](https://serde.rs/#data-formats)
-- [Setting up `#[derive(Serialize, Deserialize)]`](https://serde.rs/codegen.html)
+- [Setting up `#[derive(Serialize, Deserialize)]`](https://serde.rs/derive.html)
 - [Examples](https://serde.rs/examples.html)
 - [API documentation](https://docs.serde.rs/serde/)
 - [Release notes](https://github.com/serde-rs/serde/releases)
diff --git a/rustc_deps/vendor/serde/crates-io.md b/rustc_deps/vendor/serde/crates-io.md
index 9facdbe..d63c4ba 100644
--- a/rustc_deps/vendor/serde/crates-io.md
+++ b/rustc_deps/vendor/serde/crates-io.md
@@ -8,7 +8,7 @@
 
 - [An overview of Serde](https://serde.rs/)
 - [Data formats supported by Serde](https://serde.rs/#data-formats)
-- [Setting up `#[derive(Serialize, Deserialize)]`](https://serde.rs/codegen.html)
+- [Setting up `#[derive(Serialize, Deserialize)]`](https://serde.rs/derive.html)
 - [Examples](https://serde.rs/examples.html)
 - [API documentation](https://docs.serde.rs/serde/)
 - [Release notes](https://github.com/serde-rs/serde/releases)
diff --git a/rustc_deps/vendor/serde/src/de/impls.rs b/rustc_deps/vendor/serde/src/de/impls.rs
index 5e0eba3..ad36b60 100644
--- a/rustc_deps/vendor/serde/src/de/impls.rs
+++ b/rustc_deps/vendor/serde/src/de/impls.rs
@@ -696,7 +696,6 @@
     (
         $ty:ident < T $(: $tbound1:ident $(+ $tbound2:ident)*)* $(, $typaram:ident : $bound1:ident $(+ $bound2:ident)*)* >,
         $access:ident,
-        $ctor:expr,
         $clear:expr,
         $with_capacity:expr,
         $reserve:expr,
@@ -793,7 +792,6 @@
 seq_impl!(
     BinaryHeap<T: Ord>,
     seq,
-    BinaryHeap::new(),
     BinaryHeap::clear,
     BinaryHeap::with_capacity(size_hint::cautious(seq.size_hint())),
     BinaryHeap::reserve,
@@ -803,7 +801,6 @@
 seq_impl!(
     BTreeSet<T: Eq + Ord>,
     seq,
-    BTreeSet::new(),
     BTreeSet::clear,
     BTreeSet::new(),
     nop_reserve,
@@ -813,7 +810,6 @@
 seq_impl!(
     LinkedList<T>,
     seq,
-    LinkedList::new(),
     LinkedList::clear,
     LinkedList::new(),
     nop_reserve,
@@ -824,7 +820,6 @@
 seq_impl!(
     HashSet<T: Eq + Hash, S: BuildHasher + Default>,
     seq,
-    HashSet::with_hasher(S::default()),
     HashSet::clear,
     HashSet::with_capacity_and_hasher(size_hint::cautious(seq.size_hint()), S::default()),
     HashSet::reserve,
@@ -832,20 +827,8 @@
 
 #[cfg(any(feature = "std", feature = "alloc"))]
 seq_impl!(
-    Vec<T>,
-    seq,
-    Vec::new(),
-    Vec::clear,
-    Vec::with_capacity(size_hint::cautious(seq.size_hint())),
-    Vec::reserve,
-    Vec::push
-);
-
-#[cfg(any(feature = "std", feature = "alloc"))]
-seq_impl!(
     VecDeque<T>,
     seq,
-    VecDeque::new(),
     VecDeque::clear,
     VecDeque::with_capacity(size_hint::cautious(seq.size_hint())),
     VecDeque::reserve,
@@ -854,6 +837,97 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 
+#[cfg(any(feature = "std", feature = "alloc"))]
+impl<'de, T> Deserialize<'de> for Vec<T>
+where
+    T: Deserialize<'de>,
+{
+    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
+    where
+        D: Deserializer<'de>,
+    {
+        struct VecVisitor<T> {
+            marker: PhantomData<T>,
+        }
+
+        impl<'de, T> Visitor<'de> for VecVisitor<T>
+        where
+            T: Deserialize<'de>,
+        {
+            type Value = Vec<T>;
+
+            fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+                formatter.write_str("a sequence")
+            }
+
+            fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
+            where
+                A: SeqAccess<'de>,
+            {
+                let mut values = Vec::with_capacity(size_hint::cautious(seq.size_hint()));
+
+                while let Some(value) = try!(seq.next_element()) {
+                    values.push(value);
+                }
+
+                Ok(values)
+            }
+        }
+
+        let visitor = VecVisitor { marker: PhantomData };
+        deserializer.deserialize_seq(visitor)
+    }
+
+    fn deserialize_in_place<D>(deserializer: D, place: &mut Self) -> Result<(), D::Error>
+    where
+        D: Deserializer<'de>,
+    {
+        struct VecInPlaceVisitor<'a, T: 'a>(&'a mut Vec<T>);
+
+        impl<'a, 'de, T> Visitor<'de> for VecInPlaceVisitor<'a, T>
+        where
+            T: Deserialize<'de>,
+        {
+            type Value = ();
+
+            fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+                formatter.write_str("a sequence")
+            }
+
+            fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
+            where
+                A: SeqAccess<'de>,
+            {
+                let hint = size_hint::cautious(seq.size_hint());
+                if let Some(additional) = hint.checked_sub(self.0.len()) {
+                    self.0.reserve(additional);
+                }
+
+                for i in 0..self.0.len() {
+                    let next = {
+                        let next_place = InPlaceSeed(&mut self.0[i]);
+                        try!(seq.next_element_seed(next_place))
+                    };
+                    if next.is_none() {
+                        self.0.truncate(i);
+                        return Ok(());
+                    }
+                }
+
+                while let Some(value) = try!(seq.next_element()) {
+                    self.0.push(value);
+                }
+
+                Ok(())
+            }
+        }
+
+        deserializer.deserialize_seq(VecInPlaceVisitor(place))
+    }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
 struct ArrayVisitor<A> {
     marker: PhantomData<A>,
 }
@@ -1113,7 +1187,6 @@
     (
         $ty:ident < K $(: $kbound1:ident $(+ $kbound2:ident)*)*, V $(, $typaram:ident : $bound1:ident $(+ $bound2:ident)*)* >,
         $access:ident,
-        $ctor:expr,
         $with_capacity:expr
     ) => {
         impl<'de, K, V $(, $typaram)*> Deserialize<'de> for $ty<K, V $(, $typaram)*>
@@ -1168,14 +1241,12 @@
 map_impl!(
     BTreeMap<K: Ord, V>,
     map,
-    BTreeMap::new(),
     BTreeMap::new());
 
 #[cfg(feature = "std")]
 map_impl!(
     HashMap<K: Eq + Hash, V, S: BuildHasher + Default>,
     map,
-    HashMap::with_hasher(S::default()),
     HashMap::with_capacity_and_hasher(size_hint::cautious(map.size_hint()), S::default()));
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/rustc_deps/vendor/serde/src/lib.rs b/rustc_deps/vendor/serde/src/lib.rs
index 6f5fd16..99f585e 100644
--- a/rustc_deps/vendor/serde/src/lib.rs
+++ b/rustc_deps/vendor/serde/src/lib.rs
@@ -82,7 +82,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 // Serde types in rustdoc of other crates get linked to here.
-#![doc(html_root_url = "https://docs.rs/serde/1.0.79")]
+#![doc(html_root_url = "https://docs.rs/serde/1.0.80")]
 // Support using Serde without the standard library!
 #![cfg_attr(not(feature = "std"), no_std)]
 // Unstable functionality only if the user asks for it. For tracking and
diff --git a/rustc_deps/vendor/serde_derive/.cargo-checksum.json b/rustc_deps/vendor/serde_derive/.cargo-checksum.json
index 034a67f..ca84ab4 100644
--- a/rustc_deps/vendor/serde_derive/.cargo-checksum.json
+++ b/rustc_deps/vendor/serde_derive/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{".cargo_vcs_info.json":"8ef3903ca2a36df17c21973cceccf817fb7d9005fd34551ffb2ae049613acd36","Cargo.toml":"de6dee8d5f5938bc85f7c8309167b1f69278d137158f04ef5717d07d250ff48b","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"0be0a197438242714e673041323d61813b01fdd4a80cbb6d55ffbd902f9e0937","crates-io.md":"e38ab4df5ec64cff532b80f8d3b650b590a2adf563802638a47aa2eb0d73a200","src/bound.rs":"f2a55265c6d3b97b6658c9b7c4136afa4682708aa355bd4c33f6883b0b088659","src/de.rs":"def0cbb163adf2582ad804d973096e1b514db95564b4ae6eff16ec7a2f1f2f15","src/fragment.rs":"9a8539d2bda80c62e4fdaf42816f371a2add62f9cf27b4646d90b636de40f56f","src/internals/ast.rs":"caaab71b32b795196a659defc2a2199a6cd5414c052a3850f2ce63b193e45381","src/internals/attr.rs":"0c23df890de7ee4be9266b5457be691d08ab7f93261e2faa16b29a336ff96c5c","src/internals/case.rs":"3b7bc2f09ed9c0b35f422b0c024b77d3ba03d7c0008117278255b71d6b7870d9","src/internals/check.rs":"22a9d9ac411da2b3c92b37af3648d69a54525bb60d09b7252a47779126d5b2e4","src/internals/ctxt.rs":"f541083477396a13cf7abd3dab448907112f900a6395ddd42ed0a6717ada1016","src/internals/mod.rs":"414477f6fb187268ec87f917c0db9d328f4e6d188dfde93ab7479763e93e2aca","src/lib.rs":"120266da2f92513a55fbe337e5bb9f142d29235b53f7e2364d42d2aa0414687e","src/pretend.rs":"92f5974983a79bc4ceaccb0fe7c125f818733cfc64e3e7ba0c3e70b9ddb48fb3","src/ser.rs":"baf59dedda9c726b0ba375ae7a5fb2fad08a7c73e0c8d61af60bbda76d6d80c7","src/try.rs":"b9a10c8690d442a57fc7097d42c9a4f13034c7b4a30b7eb02d538fdbf8ae0a8d"},"package":"31569d901045afbff7a9479f793177fe9259819aff10ab4f89ef69bbc5f567fe"}
\ No newline at end of file
+{"files":{".cargo_vcs_info.json":"cfa5ab2afddbb64fef2413266283d55652b4e9ddf3092ec94bf612b81c5c8cc2","Cargo.toml":"d678282c5591277b90425c32cf4a4d0bcdc8fcd2ba6497b9c6beb2aaf63bd9fc","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"c4218d07d775c036cd50495b0354c5b59435472b12e159042cacb30b6ef1a7c1","crates-io.md":"8dce715dfbd2e9bbdd87e401d1f7974a60089f0673f7a84f4c5d840411075d14","src/bound.rs":"f2a55265c6d3b97b6658c9b7c4136afa4682708aa355bd4c33f6883b0b088659","src/de.rs":"def0cbb163adf2582ad804d973096e1b514db95564b4ae6eff16ec7a2f1f2f15","src/fragment.rs":"9a8539d2bda80c62e4fdaf42816f371a2add62f9cf27b4646d90b636de40f56f","src/internals/ast.rs":"ecab60e2a3fa00248328449fa8fbe7a931379e51eec159070632893cf8ab8389","src/internals/attr.rs":"70a87942eee113eadbec9c04cc9a0b7860afe1d25c839a4245ad48322ad11975","src/internals/case.rs":"868d8ddc4adfcd0d55ece44ae7d4de8445cb65ddfd8b0e6b90dd5ab3d23c1e57","src/internals/check.rs":"22a9d9ac411da2b3c92b37af3648d69a54525bb60d09b7252a47779126d5b2e4","src/internals/ctxt.rs":"1f9d7e385ab188c7716c4d3f1e4c943f45dcb29bab8c42812b9e537deeee0889","src/internals/mod.rs":"414477f6fb187268ec87f917c0db9d328f4e6d188dfde93ab7479763e93e2aca","src/lib.rs":"f1a606372aa7dfaf40791f98e357fa4d4911d6d5b735605dd27db4f481787aed","src/pretend.rs":"92f5974983a79bc4ceaccb0fe7c125f818733cfc64e3e7ba0c3e70b9ddb48fb3","src/ser.rs":"baf59dedda9c726b0ba375ae7a5fb2fad08a7c73e0c8d61af60bbda76d6d80c7","src/try.rs":"b9a10c8690d442a57fc7097d42c9a4f13034c7b4a30b7eb02d538fdbf8ae0a8d"},"package":"225de307c6302bec3898c51ca302fc94a7a1697ef0845fcee6448f33c032249c"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/serde_derive/.cargo_vcs_info.json b/rustc_deps/vendor/serde_derive/.cargo_vcs_info.json
index d57ad86..6e13098 100644
--- a/rustc_deps/vendor/serde_derive/.cargo_vcs_info.json
+++ b/rustc_deps/vendor/serde_derive/.cargo_vcs_info.json
@@ -1,5 +1,5 @@
 {
   "git": {
-    "sha1": "9956589ed5e9d9930405d8840a3660f21b8f15b0"
+    "sha1": "1b45e5766a30db85010112ea6d2d2638eddd9b12"
   }
 }
diff --git a/rustc_deps/vendor/serde_derive/Cargo.toml b/rustc_deps/vendor/serde_derive/Cargo.toml
index 94fd0bd..aacb747 100644
--- a/rustc_deps/vendor/serde_derive/Cargo.toml
+++ b/rustc_deps/vendor/serde_derive/Cargo.toml
@@ -12,12 +12,12 @@
 
 [package]
 name = "serde_derive"
-version = "1.0.79"
+version = "1.0.80"
 authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>", "David Tolnay <dtolnay@gmail.com>"]
 include = ["Cargo.toml", "src/**/*.rs", "crates-io.md", "README.md", "LICENSE-APACHE", "LICENSE-MIT"]
 description = "Macros 1.1 implementation of #[derive(Serialize, Deserialize)]"
 homepage = "https://serde.rs"
-documentation = "https://serde.rs/codegen.html"
+documentation = "https://serde.rs/derive.html"
 readme = "crates-io.md"
 keywords = ["serde", "serialization", "no_std"]
 license = "MIT/Apache-2.0"
diff --git a/rustc_deps/vendor/serde_derive/README.md b/rustc_deps/vendor/serde_derive/README.md
index 82aa504..77de3a4 100644
--- a/rustc_deps/vendor/serde_derive/README.md
+++ b/rustc_deps/vendor/serde_derive/README.md
@@ -15,7 +15,7 @@
 
 - [An overview of Serde](https://serde.rs/)
 - [Data formats supported by Serde](https://serde.rs/#data-formats)
-- [Setting up `#[derive(Serialize, Deserialize)]`](https://serde.rs/codegen.html)
+- [Setting up `#[derive(Serialize, Deserialize)]`](https://serde.rs/derive.html)
 - [Examples](https://serde.rs/examples.html)
 - [API documentation](https://docs.serde.rs/serde/)
 - [Release notes](https://github.com/serde-rs/serde/releases)
diff --git a/rustc_deps/vendor/serde_derive/crates-io.md b/rustc_deps/vendor/serde_derive/crates-io.md
index 9facdbe..d63c4ba 100644
--- a/rustc_deps/vendor/serde_derive/crates-io.md
+++ b/rustc_deps/vendor/serde_derive/crates-io.md
@@ -8,7 +8,7 @@
 
 - [An overview of Serde](https://serde.rs/)
 - [Data formats supported by Serde](https://serde.rs/#data-formats)
-- [Setting up `#[derive(Serialize, Deserialize)]`](https://serde.rs/codegen.html)
+- [Setting up `#[derive(Serialize, Deserialize)]`](https://serde.rs/derive.html)
 - [Examples](https://serde.rs/examples.html)
 - [API documentation](https://docs.serde.rs/serde/)
 - [Release notes](https://github.com/serde-rs/serde/releases)
diff --git a/rustc_deps/vendor/serde_derive/src/internals/ast.rs b/rustc_deps/vendor/serde_derive/src/internals/ast.rs
index f780db2..c81e9cf 100644
--- a/rustc_deps/vendor/serde_derive/src/internals/ast.rs
+++ b/rustc_deps/vendor/serde_derive/src/internals/ast.rs
@@ -6,24 +6,36 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+//! A Serde ast, parsed from the Syn ast and ready to generate Rust code.
+
 use internals::attr;
 use internals::check;
 use internals::{Ctxt, Derive};
 use syn;
 use syn::punctuated::Punctuated;
 
+/// A source data structure annotated with `#[derive(Serialize)]` and/or `#[derive(Deserialize)]`,
+/// parsed into an internal representation.
 pub struct Container<'a> {
+    /// The struct or enum name (without generics).
     pub ident: syn::Ident,
+    /// Attributes on the structure, parsed for Serde.
     pub attrs: attr::Container,
+    /// The contents of the struct or enum.
     pub data: Data<'a>,
+    /// Any generics on the struct or enum.
     pub generics: &'a syn::Generics,
 }
 
+/// The fields of a struct or enum.
+///
+/// Analagous to `syn::Data`.
 pub enum Data<'a> {
     Enum(Vec<Variant<'a>>),
     Struct(Style, Vec<Field<'a>>),
 }
 
+/// A variant of an enum.
 pub struct Variant<'a> {
     pub ident: syn::Ident,
     pub attrs: attr::Variant,
@@ -31,6 +43,7 @@
     pub fields: Vec<Field<'a>>,
 }
 
+/// A field of a struct.
 pub struct Field<'a> {
     pub member: syn::Member,
     pub attrs: attr::Field,
@@ -40,13 +53,18 @@
 
 #[derive(Copy, Clone)]
 pub enum Style {
+    /// Named fields.
     Struct,
+    /// Many unnamed fields.
     Tuple,
+    /// One unnamed field.
     Newtype,
+    /// No fields.
     Unit,
 }
 
 impl<'a> Container<'a> {
+    /// Convert the raw Syn ast into a parsed container object, collecting errors in `cx`.
     pub fn from_ast(cx: &Ctxt, item: &'a syn::DeriveInput, derive: Derive) -> Container<'a> {
         let mut attrs = attr::Container::from_ast(cx, item);
 
diff --git a/rustc_deps/vendor/serde_derive/src/internals/attr.rs b/rustc_deps/vendor/serde_derive/src/internals/attr.rs
index 711339b..ca159b2 100644
--- a/rustc_deps/vendor/serde_derive/src/internals/attr.rs
+++ b/rustc_deps/vendor/serde_derive/src/internals/attr.rs
@@ -106,7 +106,7 @@
     }
 }
 
-/// Represents container (e.g. struct) attribute information
+/// Represents struct or enum attribute information.
 pub struct Container {
     name: Name,
     transparent: bool,
diff --git a/rustc_deps/vendor/serde_derive/src/internals/case.rs b/rustc_deps/vendor/serde_derive/src/internals/case.rs
index a84b7d0..43f879f 100644
--- a/rustc_deps/vendor/serde_derive/src/internals/case.rs
+++ b/rustc_deps/vendor/serde_derive/src/internals/case.rs
@@ -6,6 +6,9 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+//! Code to convert the Rust-styled field/variant (e.g. `my_field`, `MyType`) to the
+//! case of the source (e.g. `my-field`, `MY_FIELD`).
+
 // See https://users.rust-lang.org/t/psa-dealing-with-warning-unused-import-std-ascii-asciiext-in-today-s-nightly/13726
 #[allow(deprecated, unused_imports)]
 use std::ascii::AsciiExt;
@@ -14,6 +17,7 @@
 
 use self::RenameRule::*;
 
+/// The different possible ways to change case of fields in a struct, or variants in an enum.
 #[derive(PartialEq)]
 pub enum RenameRule {
     /// Don't apply a default rename rule.
@@ -40,6 +44,7 @@
 }
 
 impl RenameRule {
+    /// Apply a renaming rule to an enum variant, returning the version expected in the source.
     pub fn apply_to_variant(&self, variant: &str) -> String {
         match *self {
             None | PascalCase => variant.to_owned(),
@@ -64,6 +69,7 @@
         }
     }
 
+    /// Apply a renaming rule to a struct field, returning the version expected in the source.
     pub fn apply_to_field(&self, field: &str) -> String {
         match *self {
             None | LowerCase | SnakeCase => field.to_owned(),
diff --git a/rustc_deps/vendor/serde_derive/src/internals/ctxt.rs b/rustc_deps/vendor/serde_derive/src/internals/ctxt.rs
index 60bf876..51c72f7 100644
--- a/rustc_deps/vendor/serde_derive/src/internals/ctxt.rs
+++ b/rustc_deps/vendor/serde_derive/src/internals/ctxt.rs
@@ -10,18 +10,29 @@
 use std::fmt::Display;
 use std::thread;
 
+/// A type to collect errors together and format them.
+///
+/// Dropping this object will cause a panic. It must be consumed using `check`.
+///
+/// References can be shared since this type uses run-time exclusive mut checking.
 #[derive(Default)]
 pub struct Ctxt {
+    // The contents will be set to `None` during checking. This is so that checking can be
+    // enforced.
     errors: RefCell<Option<Vec<String>>>,
 }
 
 impl Ctxt {
+    /// Create a new context object.
+    ///
+    /// This object contains no errors, but will still trigger a panic if it is not `check`ed.
     pub fn new() -> Self {
         Ctxt {
             errors: RefCell::new(Some(Vec::new())),
         }
     }
 
+    /// Add an error to the context object.
     pub fn error<T: Display>(&self, msg: T) {
         self.errors
             .borrow_mut()
@@ -30,6 +41,7 @@
             .push(msg.to_string());
     }
 
+    /// Consume this object, producing a formatted error string if there are errors.
     pub fn check(self) -> Result<(), String> {
         let mut errors = self.errors.borrow_mut().take().unwrap();
         match errors.len() {
diff --git a/rustc_deps/vendor/serde_derive/src/lib.rs b/rustc_deps/vendor/serde_derive/src/lib.rs
index 786885b..35ca6b7 100644
--- a/rustc_deps/vendor/serde_derive/src/lib.rs
+++ b/rustc_deps/vendor/serde_derive/src/lib.rs
@@ -22,7 +22,7 @@
 //!
 //! [https://serde.rs/derive.html]: https://serde.rs/derive.html
 
-#![doc(html_root_url = "https://docs.rs/serde_derive/1.0.79")]
+#![doc(html_root_url = "https://docs.rs/serde_derive/1.0.80")]
 #![cfg_attr(feature = "cargo-clippy", allow(renamed_and_removed_lints))]
 #![cfg_attr(feature = "cargo-clippy", deny(clippy, clippy_pedantic))]
 // Whitelisted clippy lints
diff --git a/rustc_deps/vendor/syn-0.14.9/.cargo-checksum.json b/rustc_deps/vendor/syn-0.14.9/.cargo-checksum.json
deleted file mode 100644
index 63c7195..0000000
--- a/rustc_deps/vendor/syn-0.14.9/.cargo-checksum.json
+++ /dev/null
@@ -1 +0,0 @@
-{"files":{"Cargo.toml":"dbbc708f123c27e504bb4d7a2511cc46f8c7d64ffab74eae60acdc13f728c979","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"f033c371492a4769d377a8bf1a139adc7bf94ea00595b867a3e234eeab994c8c","README.md":"43062927a3e318771d5c2218e5066147b10cdd51cdeb240b06352506cfb7a72c","src/attr.rs":"4796108202ed2c89a2144039a145f20037465dd3cb9a8f8c712709082b889a5a","src/buffer.rs":"f600f012eaa26d412a3389032e2a78d319f7f1bbfe33ebf2b9d762274aad796b","src/data.rs":"5fbed19b7984502c9451cf446fd86b6489b9f6c52015421bb78c07e4ba294f03","src/derive.rs":"42a52cd1dea50473f3160c6515139bcaaf57c99962517eb2ac57abb04cd03688","src/error.rs":"aa215e0a8a98d85b970a9003565746be9fcdeb24a594b322e591d0ce74ed310b","src/expr.rs":"d0be324be2e4a4ba0e44173c8c4e0188c9ffff474f8cea5fab76e957e4b1e6cf","src/file.rs":"b1ae5b48a1937c475d57de8630d0a99326021e22b107a428342cf8b824330fbc","src/gen/fold.rs":"18795bc0a9a766dd16e78b725bc48c6cef901d12dc3452a8fde0d4f89ce227a3","src/gen/visit.rs":"eb9ff30320305576d0dd9a29c917f8d80e498e9da5f0f6b9f9067c3d0940752f","src/gen/visit_mut.rs":"e9d5ccebfd8eb9f29df68fec8beb694435a91106e48e0256c44a09787b58377d","src/gen_helper.rs":"d128fbd24fadfc5634976bdb9188c649f9905718c9c987a2839c3e6134b155a2","src/generics.rs":"0daf222a841f1965a25703855bbe17401b3edb0eb512ee96840f32940801551b","src/item.rs":"25e471c7c95ae6f6671f0a3413b526906e61fb8d345c7b2413b4edb0528fea24","src/lib.rs":"c733f5ea29df3abaeffc6762650feaaa9fc7060ab01277cb9f226d0970e1407d","src/lifetime.rs":"383cd564a452540f043858c636f19ed5b316a8c2752d83e53aacb5730307a754","src/lit.rs":"7ccdd679878c324ad47b0c29e76eb8d9e5d9b00e53cd3767060563bf7048eee9","src/mac.rs":"07c5aab9af440087315d58edeea733dda80bef0240463bf4d324c1ba1e2a272c","src/macros.rs":"c0bb8312f7ec422cb2c86ad2c20a609eb150fdcc38c74712e68214a4d6161994","src/op.rs":"7f20c79ac0ccc8cb129b550a305d8c57e58fdc2dd241f5fc1d1634450c26c32b","src/parse_quote.rs":"a3fbe5ad2cbeb967fbb8677f925431baa5303445a128c5284254b453284f21ab","src/parsers.rs":"ce324ac0882771b7ba24b110e55fbc2874be19cb7eb93fef7abcfb848d9c3a74","src/path.rs":"102ca22184ecfbfb21f9d82b49d0bc2d0d06fb792895a025dee1a435f9efee6e","src/punctuated.rs":"047cd8095cce72ed0ddae097a556c567ed0ca3294b5eac29a661669fd32a6748","src/spanned.rs":"70e8c7d953e76b1ce5330c73d7c0103c02a9b56e8dd8299c621fe0c91c615e23","src/synom.rs":"98b7fc3899099c5a0a6e659090c56a278237f9471f69f746404474eb5222e41a","src/token.rs":"20b25a6d572225f7e718a13b6e753b138ab9b8d840d31b6bfce5ed764eaaff8c","src/tt.rs":"e0541709fc8038a58156ef590f4449969a752aa96d7722beb41c097a83db5d21","src/ty.rs":"6888b6001c6f5908571684e90c73f43302d9e3a4186971caa8bbd72220d6c611","src/verbatim.rs":"40476ed104ae4cd16517c220becfc008b8ff0a0727d3be6001374d993b3f4b25"},"package":"261ae9ecaa397c42b960649561949d69311f08eeaea86a65696e6e46517cf741"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/syn-0.14.9/Cargo.toml b/rustc_deps/vendor/syn-0.14.9/Cargo.toml
deleted file mode 100644
index a63b481..0000000
--- a/rustc_deps/vendor/syn-0.14.9/Cargo.toml
+++ /dev/null
@@ -1,64 +0,0 @@
-# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
-#
-# When uploading crates to the registry Cargo will automatically
-# "normalize" Cargo.toml files for maximal compatibility
-# with all versions of Cargo and also rewrite `path` dependencies
-# to registry (e.g. crates.io) dependencies
-#
-# 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 = "syn"
-version = "0.14.9"
-authors = ["David Tolnay <dtolnay@gmail.com>"]
-include = ["/Cargo.toml", "/src/**/*.rs", "/README.md", "/LICENSE-APACHE", "/LICENSE-MIT"]
-description = "Nom parser for Rust source code"
-documentation = "https://docs.rs/syn"
-readme = "README.md"
-categories = ["development-tools::procedural-macro-helpers"]
-license = "MIT/Apache-2.0"
-repository = "https://github.com/dtolnay/syn"
-[package.metadata.docs.rs]
-all-features = true
-
-[package.metadata.playground]
-all-features = true
-
-[[example]]
-name = "dump-syntax"
-path = "examples/dump-syntax/main.rs"
-required-features = ["full", "parsing", "extra-traits"]
-[dependencies.proc-macro2]
-version = "0.4.4"
-default-features = false
-
-[dependencies.quote]
-version = "0.6"
-optional = true
-default-features = false
-
-[dependencies.unicode-xid]
-version = "0.1"
-[dev-dependencies.rayon]
-version = "1.0"
-
-[dev-dependencies.walkdir]
-version = "2.1"
-
-[features]
-clone-impls = []
-default = ["derive", "parsing", "printing", "clone-impls", "proc-macro"]
-derive = []
-extra-traits = []
-fold = []
-full = []
-parsing = []
-printing = ["quote"]
-proc-macro = ["proc-macro2/proc-macro", "quote/proc-macro"]
-visit = []
-visit-mut = []
-[badges.travis-ci]
-repository = "dtolnay/syn"
diff --git a/rustc_deps/vendor/syn-0.14.9/LICENSE-APACHE b/rustc_deps/vendor/syn-0.14.9/LICENSE-APACHE
deleted file mode 100644
index 16fe87b..0000000
--- a/rustc_deps/vendor/syn-0.14.9/LICENSE-APACHE
+++ /dev/null
@@ -1,201 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/rustc_deps/vendor/syn-0.14.9/LICENSE-MIT b/rustc_deps/vendor/syn-0.14.9/LICENSE-MIT
deleted file mode 100644
index 5767dea..0000000
--- a/rustc_deps/vendor/syn-0.14.9/LICENSE-MIT
+++ /dev/null
@@ -1,25 +0,0 @@
-Copyright (c) 2018 Syn Developers
-
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/rustc_deps/vendor/syn-0.14.9/README.md b/rustc_deps/vendor/syn-0.14.9/README.md
deleted file mode 100644
index e7a51ab..0000000
--- a/rustc_deps/vendor/syn-0.14.9/README.md
+++ /dev/null
@@ -1,282 +0,0 @@
-Nom parser for Rust source code
-===============================
-
-[![Build Status](https://api.travis-ci.org/dtolnay/syn.svg?branch=master)](https://travis-ci.org/dtolnay/syn)
-[![Latest Version](https://img.shields.io/crates/v/syn.svg)](https://crates.io/crates/syn)
-[![Rust Documentation](https://img.shields.io/badge/api-rustdoc-blue.svg)](https://docs.rs/syn/0.14/syn/)
-[![Rustc Version 1.15+](https://img.shields.io/badge/rustc-1.15+-lightgray.svg)](https://blog.rust-lang.org/2017/02/02/Rust-1.15.html)
-
-Syn is a parsing library for parsing a stream of Rust tokens into a syntax tree
-of Rust source code.
-
-Currently this library is geared toward the [custom derive] use case but
-contains some APIs that may be useful for Rust procedural macros more generally.
-
-[custom derive]: https://github.com/rust-lang/rfcs/blob/master/text/1681-macros-1.1.md
-
-- **Data structures** — Syn provides a complete syntax tree that can represent
-  any valid Rust source code. The syntax tree is rooted at [`syn::File`] which
-  represents a full source file, but there are other entry points that may be
-  useful to procedural macros including [`syn::Item`], [`syn::Expr`] and
-  [`syn::Type`].
-
-- **Custom derives** — Of particular interest to custom derives is
-  [`syn::DeriveInput`] which is any of the three legal input items to a derive
-  macro. An example below shows using this type in a library that can derive
-  implementations of a trait of your own.
-
-- **Parser combinators** — Parsing in Syn is built on a suite of public parser
-  combinator macros that you can use for parsing any token-based syntax you
-  dream up within a `functionlike!(...)` procedural macro. Every syntax tree
-  node defined by Syn is individually parsable and may be used as a building
-  block for custom syntaxes, or you may do it all yourself working from the most
-  primitive tokens.
-
-- **Location information** — Every token parsed by Syn is associated with a
-  `Span` that tracks line and column information back to the source of that
-  token. These spans allow a procedural macro to display detailed error messages
-  pointing to all the right places in the user's code. There is an example of
-  this below.
-
-- **Feature flags** — Functionality is aggressively feature gated so your
-  procedural macros enable only what they need, and do not pay in compile time
-  for all the rest.
-
-[`syn::File`]: https://docs.rs/syn/0.14/syn/struct.File.html
-[`syn::Item`]: https://docs.rs/syn/0.14/syn/enum.Item.html
-[`syn::Expr`]: https://docs.rs/syn/0.14/syn/enum.Expr.html
-[`syn::Type`]: https://docs.rs/syn/0.14/syn/enum.Type.html
-[`syn::DeriveInput`]: https://docs.rs/syn/0.14/syn/struct.DeriveInput.html
-
-If you get stuck with anything involving procedural macros in Rust I am happy to
-provide help even if the issue is not related to Syn. Please file a ticket in
-this repo.
-
-*Version requirement: Syn supports any compiler version back to Rust's very
-first support for procedural macros in Rust 1.15.0. Some features especially
-around error reporting are only available in newer compilers or on the nightly
-channel.*
-
-[*Release notes*](https://github.com/dtolnay/syn/releases)
-
-## Example of a custom derive
-
-The canonical custom derive using Syn looks like this. We write an ordinary Rust
-function tagged with a `proc_macro_derive` attribute and the name of the trait
-we are deriving. Any time that derive appears in the user's code, the Rust
-compiler passes their data structure as tokens into our macro. We get to execute
-arbitrary Rust code to figure out what to do with those tokens, then hand some
-tokens back to the compiler to compile into the user's crate.
-
-[`TokenStream`]: https://doc.rust-lang.org/proc_macro/struct.TokenStream.html
-
-```toml
-[dependencies]
-syn = "0.14"
-quote = "0.6"
-
-[lib]
-proc-macro = true
-```
-
-```rust
-extern crate proc_macro;
-extern crate syn;
-
-#[macro_use]
-extern crate quote;
-
-use proc_macro::TokenStream;
-use syn::DeriveInput;
-
-#[proc_macro_derive(MyMacro)]
-pub fn my_macro(input: TokenStream) -> TokenStream {
-    // Parse the input tokens into a syntax tree
-    let input: DeriveInput = syn::parse(input).unwrap();
-
-    // Build the output, possibly using quasi-quotation
-    let expanded = quote! {
-        // ...
-    };
-
-    // Hand the output tokens back to the compiler
-    expanded.into()
-}
-```
-
-The [`heapsize`] example directory shows a complete working Macros 1.1
-implementation of a custom derive. It works on any Rust compiler \>=1.15.0. The
-example derives a `HeapSize` trait which computes an estimate of the amount of
-heap memory owned by a value.
-
-[`heapsize`]: examples/heapsize
-
-```rust
-pub trait HeapSize {
-    /// Total number of bytes of heap memory owned by `self`.
-    fn heap_size_of_children(&self) -> usize;
-}
-```
-
-The custom derive allows users to write `#[derive(HeapSize)]` on data structures
-in their program.
-
-```rust
-#[derive(HeapSize)]
-struct Demo<'a, T: ?Sized> {
-    a: Box<T>,
-    b: u8,
-    c: &'a str,
-    d: String,
-}
-```
-
-## Spans and error reporting
-
-The [`heapsize2`] example directory is an extension of the `heapsize` example
-that demonstrates some of the hygiene and error reporting properties of Macros
-2.0. This example currently requires a nightly Rust compiler \>=1.24.0-nightly
-but we are working to stabilize all of the APIs involved.
-
-[`heapsize2`]: examples/heapsize2
-
-The token-based procedural macro API provides great control over where the
-compiler's error messages are displayed in user code. Consider the error the
-user sees if one of their field types does not implement `HeapSize`.
-
-```rust
-#[derive(HeapSize)]
-struct Broken {
-    ok: String,
-    bad: std::thread::Thread,
-}
-```
-
-In the Macros 1.1 string-based procedural macro world, the resulting error would
-point unhelpfully to the invocation of the derive macro and not to the actual
-problematic field.
-
-```
-error[E0599]: no method named `heap_size_of_children` found for type `std::thread::Thread` in the current scope
- --> src/main.rs:4:10
-  |
-4 | #[derive(HeapSize)]
-  |          ^^^^^^^^
-```
-
-By tracking span information all the way through the expansion of a procedural
-macro as shown in the `heapsize2` example, token-based macros in Syn are able to
-trigger errors that directly pinpoint the source of the problem.
-
-```
-error[E0277]: the trait bound `std::thread::Thread: HeapSize` is not satisfied
- --> src/main.rs:7:5
-  |
-7 |     bad: std::thread::Thread,
-  |     ^^^^^^^^^^^^^^^^^^^^^^^^ the trait `HeapSize` is not implemented for `std::thread::Thread`
-```
-
-## Parsing a custom syntax using combinators
-
-The [`lazy-static`] example directory shows the implementation of a
-`functionlike!(...)` procedural macro in which the input tokens are parsed using
-[`nom`]-style parser combinators.
-
-[`lazy-static`]: examples/lazy-static
-[`nom`]: https://github.com/Geal/nom
-
-The example reimplements the popular `lazy_static` crate from crates.io as a
-procedural macro.
-
-```
-lazy_static! {
-    static ref USERNAME: Regex = Regex::new("^[a-z0-9_-]{3,16}$").unwrap();
-}
-```
-
-The implementation shows how to trigger custom warnings and error messages on
-the macro input.
-
-```
-warning: come on, pick a more creative name
-  --> src/main.rs:10:16
-   |
-10 |     static ref FOO: String = "lazy_static".to_owned();
-   |                ^^^
-```
-
-## Debugging
-
-When developing a procedural macro it can be helpful to look at what the
-generated code looks like. Use `cargo rustc -- -Zunstable-options
---pretty=expanded` or the [`cargo expand`] subcommand.
-
-[`cargo expand`]: https://github.com/dtolnay/cargo-expand
-
-To show the expanded code for some crate that uses your procedural macro, run
-`cargo expand` from that crate. To show the expanded code for one of your own
-test cases, run `cargo expand --test the_test_case` where the last argument is
-the name of the test file without the `.rs` extension.
-
-This write-up by Brandon W Maister discusses debugging in more detail:
-[Debugging Rust's new Custom Derive system][debugging].
-
-[debugging]: https://quodlibetor.github.io/posts/debugging-rusts-new-custom-derive-system/
-
-## Optional features
-
-Syn puts a lot of functionality behind optional features in order to optimize
-compile time for the most common use cases. The following features are
-available.
-
-- **`derive`** *(enabled by default)* — Data structures for representing the
-  possible input to a custom derive, including structs and enums and types.
-- **`full`** — Data structures for representing the syntax tree of all valid
-  Rust source code, including items and expressions.
-- **`parsing`** *(enabled by default)* — Ability to parse input tokens into a
-  syntax tree node of a chosen type.
-- **`printing`** *(enabled by default)* — Ability to print a syntax tree node as
-  tokens of Rust source code.
-- **`visit`** — Trait for traversing a syntax tree.
-- **`visit-mut`** — Trait for traversing and mutating in place a syntax tree.
-- **`fold`** — Trait for transforming an owned syntax tree.
-- **`clone-impls`** *(enabled by default)* — Clone impls for all syntax tree
-  types.
-- **`extra-traits`** — Debug, Eq, PartialEq, Hash impls for all syntax tree
-  types.
-- **`proc-macro`** *(enabled by default)* — Runtime dependency on the dynamic
-  library libproc_macro from rustc toolchain.
-
-## Nightly features
-
-By default Syn uses the [`proc-macro2`] crate to emulate the nightly compiler's
-procedural macro API in a stable way that works all the way back to Rust 1.15.0.
-This shim makes it possible to write code without regard for whether the current
-compiler version supports the features we use.
-
-[`proc-macro2`]: https://github.com/alexcrichton/proc-macro2
-
-On a nightly compiler, to eliminate the stable shim and use the compiler's
-`proc-macro` directly, add `proc-macro2` to your Cargo.toml and set its
-`"nightly"` feature which bypasses the stable shim.
-
-```toml
-[dependencies]
-syn = "0.14"
-proc-macro2 = { version = "0.4", features = ["nightly"] }
-```
-
-## License
-
-Licensed under either of
-
- * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
- * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
-
-at your option.
-
-### Contribution
-
-Unless you explicitly state otherwise, any contribution intentionally submitted
-for inclusion in this crate by you, as defined in the Apache-2.0 license, shall
-be dual licensed as above, without any additional terms or conditions.
diff --git a/rustc_deps/vendor/syn-0.14.9/src/attr.rs b/rustc_deps/vendor/syn-0.14.9/src/attr.rs
deleted file mode 100644
index d818b4f..0000000
--- a/rustc_deps/vendor/syn-0.14.9/src/attr.rs
+++ /dev/null
@@ -1,554 +0,0 @@
-// Copyright 2018 Syn Developers
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-use super::*;
-use punctuated::Punctuated;
-
-use std::iter;
-
-use proc_macro2::{Delimiter, Spacing, TokenStream, TokenTree};
-
-#[cfg(feature = "extra-traits")]
-use std::hash::{Hash, Hasher};
-#[cfg(feature = "extra-traits")]
-use tt::TokenStreamHelper;
-
-ast_struct! {
-    /// An attribute like `#[repr(transparent)]`.
-    ///
-    /// *This type is available if Syn is built with the `"derive"` or `"full"`
-    /// feature.*
-    ///
-    /// # Syntax
-    ///
-    /// Rust has six types of attributes.
-    ///
-    /// - Outer attributes like `#[repr(transparent)]`. These appear outside or
-    ///   in front of the item they describe.
-    /// - Inner attributes like `#![feature(proc_macro)]`. These appear inside
-    ///   of the item they describe, usually a module.
-    /// - Outer doc comments like `/// # Example`.
-    /// - Inner doc comments like `//! Please file an issue`.
-    /// - Outer block comments `/** # Example */`.
-    /// - Inner block comments `/*! Please file an issue */`.
-    ///
-    /// The `style` field of type `AttrStyle` distinguishes whether an attribute
-    /// is outer or inner. Doc comments and block comments are promoted to
-    /// attributes that have `is_sugared_doc` set to true, as this is how they
-    /// are processed by the compiler and by `macro_rules!` macros.
-    ///
-    /// The `path` field gives the possibly colon-delimited path against which
-    /// the attribute is resolved. It is equal to `"doc"` for desugared doc
-    /// comments. The `tts` field contains the rest of the attribute body as
-    /// tokens.
-    ///
-    /// ```text
-    /// #[derive(Copy)]      #[crate::precondition x < 5]
-    ///   ^^^^^^~~~~~~         ^^^^^^^^^^^^^^^^^^^ ~~~~~
-    ///    path  tts                   path         tts
-    /// ```
-    ///
-    /// Use the [`interpret_meta`] method to try parsing the tokens of an
-    /// attribute into the structured representation that is used by convention
-    /// across most Rust libraries.
-    ///
-    /// [`interpret_meta`]: #method.interpret_meta
-    pub struct Attribute #manual_extra_traits {
-        pub pound_token: Token![#],
-        pub style: AttrStyle,
-        pub bracket_token: token::Bracket,
-        pub path: Path,
-        pub tts: TokenStream,
-        pub is_sugared_doc: bool,
-    }
-}
-
-#[cfg(feature = "extra-traits")]
-impl Eq for Attribute {}
-
-#[cfg(feature = "extra-traits")]
-impl PartialEq for Attribute {
-    fn eq(&self, other: &Self) -> bool {
-        self.style == other.style
-            && self.pound_token == other.pound_token
-            && self.bracket_token == other.bracket_token
-            && self.path == other.path
-            && TokenStreamHelper(&self.tts) == TokenStreamHelper(&other.tts)
-            && self.is_sugared_doc == other.is_sugared_doc
-    }
-}
-
-#[cfg(feature = "extra-traits")]
-impl Hash for Attribute {
-    fn hash<H>(&self, state: &mut H)
-    where
-        H: Hasher,
-    {
-        self.style.hash(state);
-        self.pound_token.hash(state);
-        self.bracket_token.hash(state);
-        self.path.hash(state);
-        TokenStreamHelper(&self.tts).hash(state);
-        self.is_sugared_doc.hash(state);
-    }
-}
-
-impl Attribute {
-    /// Parses the tokens after the path as a [`Meta`](enum.Meta.html) if
-    /// possible.
-    pub fn interpret_meta(&self) -> Option<Meta> {
-        let name = if self.path.segments.len() == 1 {
-            &self.path.segments.first().unwrap().value().ident
-        } else {
-            return None;
-        };
-
-        if self.tts.is_empty() {
-            return Some(Meta::Word(name.clone()));
-        }
-
-        let tts = self.tts.clone().into_iter().collect::<Vec<_>>();
-
-        if tts.len() == 1 {
-            if let Some(meta) = Attribute::extract_meta_list(name.clone(), &tts[0]) {
-                return Some(meta);
-            }
-        }
-
-        if tts.len() == 2 {
-            if let Some(meta) = Attribute::extract_name_value(name.clone(), &tts[0], &tts[1]) {
-                return Some(meta);
-            }
-        }
-
-        None
-    }
-
-    fn extract_meta_list(ident: Ident, tt: &TokenTree) -> Option<Meta> {
-        let g = match *tt {
-            TokenTree::Group(ref g) => g,
-            _ => return None,
-        };
-        if g.delimiter() != Delimiter::Parenthesis {
-            return None;
-        }
-        let tokens = g.stream().clone().into_iter().collect::<Vec<_>>();
-        let nested = match list_of_nested_meta_items_from_tokens(&tokens) {
-            Some(n) => n,
-            None => return None,
-        };
-        Some(Meta::List(MetaList {
-            paren_token: token::Paren(g.span()),
-            ident: ident,
-            nested: nested,
-        }))
-    }
-
-    fn extract_name_value(ident: Ident, a: &TokenTree, b: &TokenTree) -> Option<Meta> {
-        let a = match *a {
-            TokenTree::Punct(ref o) => o,
-            _ => return None,
-        };
-        if a.spacing() != Spacing::Alone {
-            return None;
-        }
-        if a.as_char() != '=' {
-            return None;
-        }
-
-        match *b {
-            TokenTree::Literal(ref l) if !l.to_string().starts_with('/') => {
-                Some(Meta::NameValue(MetaNameValue {
-                    ident: ident,
-                    eq_token: Token![=]([a.span()]),
-                    lit: Lit::new(l.clone()),
-                }))
-            }
-            TokenTree::Ident(ref v) => match &v.to_string()[..] {
-                v @ "true" | v @ "false" => Some(Meta::NameValue(MetaNameValue {
-                    ident: ident,
-                    eq_token: Token![=]([a.span()]),
-                    lit: Lit::Bool(LitBool {
-                        value: v == "true",
-                        span: b.span(),
-                    }),
-                })),
-                _ => None,
-            },
-            _ => None,
-        }
-    }
-}
-
-fn nested_meta_item_from_tokens(tts: &[TokenTree]) -> Option<(NestedMeta, &[TokenTree])> {
-    assert!(!tts.is_empty());
-
-    match tts[0] {
-        TokenTree::Literal(ref lit) => {
-            if lit.to_string().starts_with('/') {
-                None
-            } else {
-                let lit = Lit::new(lit.clone());
-                Some((NestedMeta::Literal(lit), &tts[1..]))
-            }
-        }
-
-        TokenTree::Ident(ref ident) => {
-            if tts.len() >= 3 {
-                if let Some(meta) = Attribute::extract_name_value(ident.clone(), &tts[1], &tts[2]) {
-                    return Some((NestedMeta::Meta(meta), &tts[3..]));
-                }
-            }
-
-            if tts.len() >= 2 {
-                if let Some(meta) = Attribute::extract_meta_list(ident.clone(), &tts[1]) {
-                    return Some((NestedMeta::Meta(meta), &tts[2..]));
-                }
-            }
-
-            Some((Meta::Word(ident.clone()).into(), &tts[1..]))
-        }
-
-        _ => None,
-    }
-}
-
-fn list_of_nested_meta_items_from_tokens(
-    mut tts: &[TokenTree],
-) -> Option<Punctuated<NestedMeta, Token![,]>> {
-    let mut nested_meta_items = Punctuated::new();
-    let mut first = true;
-
-    while !tts.is_empty() {
-        let prev_comma = if first {
-            first = false;
-            None
-        } else if let TokenTree::Punct(ref op) = tts[0] {
-            if op.spacing() != Spacing::Alone {
-                return None;
-            }
-            if op.as_char() != ',' {
-                return None;
-            }
-            let tok = Token![,]([op.span()]);
-            tts = &tts[1..];
-            if tts.is_empty() {
-                break;
-            }
-            Some(tok)
-        } else {
-            return None;
-        };
-        let (nested, rest) = match nested_meta_item_from_tokens(tts) {
-            Some(pair) => pair,
-            None => return None,
-        };
-        if let Some(comma) = prev_comma {
-            nested_meta_items.push_punct(comma);
-        }
-        nested_meta_items.push_value(nested);
-        tts = rest;
-    }
-
-    Some(nested_meta_items)
-}
-
-ast_enum! {
-    /// Distinguishes between attributes that decorate an item and attributes
-    /// that are contained within an item.
-    ///
-    /// *This type is available if Syn is built with the `"derive"` or `"full"`
-    /// feature.*
-    ///
-    /// # Outer attributes
-    ///
-    /// - `#[repr(transparent)]`
-    /// - `/// # Example`
-    /// - `/** Please file an issue */`
-    ///
-    /// # Inner attributes
-    ///
-    /// - `#![feature(proc_macro)]`
-    /// - `//! # Example`
-    /// - `/*! Please file an issue */`
-    #[cfg_attr(feature = "clone-impls", derive(Copy))]
-    pub enum AttrStyle {
-        Outer,
-        Inner(Token![!]),
-    }
-}
-
-ast_enum_of_structs! {
-    /// Content of a compile-time structured attribute.
-    ///
-    /// *This type is available if Syn is built with the `"derive"` or `"full"`
-    /// feature.*
-    ///
-    /// ## Word
-    ///
-    /// A meta word is like the `test` in `#[test]`.
-    ///
-    /// ## List
-    ///
-    /// A meta list is like the `derive(Copy)` in `#[derive(Copy)]`.
-    ///
-    /// ## NameValue
-    ///
-    /// A name-value meta is like the `path = "..."` in `#[path =
-    /// "sys/windows.rs"]`.
-    ///
-    /// # Syntax tree enum
-    ///
-    /// This type is a [syntax tree enum].
-    ///
-    /// [syntax tree enum]: enum.Expr.html#syntax-tree-enums
-    pub enum Meta {
-        pub Word(Ident),
-        /// A structured list within an attribute, like `derive(Copy, Clone)`.
-        ///
-        /// *This type is available if Syn is built with the `"derive"` or
-        /// `"full"` feature.*
-        pub List(MetaList {
-            pub ident: Ident,
-            pub paren_token: token::Paren,
-            pub nested: Punctuated<NestedMeta, Token![,]>,
-        }),
-        /// A name-value pair within an attribute, like `feature = "nightly"`.
-        ///
-        /// *This type is available if Syn is built with the `"derive"` or
-        /// `"full"` feature.*
-        pub NameValue(MetaNameValue {
-            pub ident: Ident,
-            pub eq_token: Token![=],
-            pub lit: Lit,
-        }),
-    }
-}
-
-impl Meta {
-    /// Returns the identifier that begins this structured meta item.
-    ///
-    /// For example this would return the `test` in `#[test]`, the `derive` in
-    /// `#[derive(Copy)]`, and the `path` in `#[path = "sys/windows.rs"]`.
-    pub fn name(&self) -> Ident {
-        match *self {
-            Meta::Word(ref meta) => meta.clone(),
-            Meta::List(ref meta) => meta.ident.clone(),
-            Meta::NameValue(ref meta) => meta.ident.clone(),
-        }
-    }
-}
-
-ast_enum_of_structs! {
-    /// Element of a compile-time attribute list.
-    ///
-    /// *This type is available if Syn is built with the `"derive"` or `"full"`
-    /// feature.*
-    pub enum NestedMeta {
-        /// A structured meta item, like the `Copy` in `#[derive(Copy)]` which
-        /// would be a nested `Meta::Word`.
-        pub Meta(Meta),
-
-        /// A Rust literal, like the `"new_name"` in `#[rename("new_name")]`.
-        pub Literal(Lit),
-    }
-}
-
-pub trait FilterAttrs<'a> {
-    type Ret: Iterator<Item = &'a Attribute>;
-
-    fn outer(self) -> Self::Ret;
-    fn inner(self) -> Self::Ret;
-}
-
-impl<'a, T> FilterAttrs<'a> for T
-where
-    T: IntoIterator<Item = &'a Attribute>,
-{
-    type Ret = iter::Filter<T::IntoIter, fn(&&Attribute) -> bool>;
-
-    fn outer(self) -> Self::Ret {
-        fn is_outer(attr: &&Attribute) -> bool {
-            match attr.style {
-                AttrStyle::Outer => true,
-                _ => false,
-            }
-        }
-        self.into_iter().filter(is_outer)
-    }
-
-    fn inner(self) -> Self::Ret {
-        fn is_inner(attr: &&Attribute) -> bool {
-            match attr.style {
-                AttrStyle::Inner(_) => true,
-                _ => false,
-            }
-        }
-        self.into_iter().filter(is_inner)
-    }
-}
-
-#[cfg(feature = "parsing")]
-pub mod parsing {
-    use super::*;
-    use buffer::Cursor;
-    use parse_error;
-    use proc_macro2::{Literal, Punct, Spacing, Span, TokenTree};
-    use synom::PResult;
-
-    fn eq(span: Span) -> TokenTree {
-        let mut op = Punct::new('=', Spacing::Alone);
-        op.set_span(span);
-        op.into()
-    }
-
-    impl Attribute {
-        named!(pub parse_inner -> Self, alt!(
-            do_parse!(
-                pound: punct!(#) >>
-                bang: punct!(!) >>
-                path_and_tts: brackets!(tuple!(
-                    call!(Path::parse_mod_style),
-                    syn!(TokenStream),
-                )) >>
-                ({
-                    let (bracket, (path, tts)) = path_and_tts;
-
-                    Attribute {
-                        style: AttrStyle::Inner(bang),
-                        path: path,
-                        tts: tts,
-                        is_sugared_doc: false,
-                        pound_token: pound,
-                        bracket_token: bracket,
-                    }
-                })
-            )
-            |
-            map!(
-                call!(lit_doc_comment, Comment::Inner),
-                |lit| {
-                    let span = lit.span();
-                    Attribute {
-                        style: AttrStyle::Inner(<Token![!]>::new(span)),
-                        path: Ident::new("doc", span).into(),
-                        tts: vec![
-                            eq(span),
-                            lit,
-                        ].into_iter().collect(),
-                        is_sugared_doc: true,
-                        pound_token: <Token![#]>::new(span),
-                        bracket_token: token::Bracket(span),
-                    }
-                }
-            )
-        ));
-
-        named!(pub parse_outer -> Self, alt!(
-            do_parse!(
-                pound: punct!(#) >>
-                path_and_tts: brackets!(tuple!(
-                    call!(Path::parse_mod_style),
-                    syn!(TokenStream),
-                )) >>
-                ({
-                    let (bracket, (path, tts)) = path_and_tts;
-
-                    Attribute {
-                        style: AttrStyle::Outer,
-                        path: path,
-                        tts: tts,
-                        is_sugared_doc: false,
-                        pound_token: pound,
-                        bracket_token: bracket,
-                    }
-                })
-            )
-            |
-            map!(
-                call!(lit_doc_comment, Comment::Outer),
-                |lit| {
-                    let span = lit.span();
-                    Attribute {
-                        style: AttrStyle::Outer,
-                        path: Ident::new("doc", span).into(),
-                        tts: vec![
-                            eq(span),
-                            lit,
-                        ].into_iter().collect(),
-                        is_sugared_doc: true,
-                        pound_token: <Token![#]>::new(span),
-                        bracket_token: token::Bracket(span),
-                    }
-                }
-            )
-        ));
-    }
-
-    enum Comment {
-        Inner,
-        Outer,
-    }
-
-    fn lit_doc_comment(input: Cursor, style: Comment) -> PResult<TokenTree> {
-        match input.literal() {
-            Some((lit, rest)) => {
-                let string = lit.to_string();
-                let ok = match style {
-                    Comment::Inner => string.starts_with("//!") || string.starts_with("/*!"),
-                    Comment::Outer => string.starts_with("///") || string.starts_with("/**"),
-                };
-                if ok {
-                    let mut new = Literal::string(&string);
-                    new.set_span(lit.span());
-                    Ok((new.into(), rest))
-                } else {
-                    parse_error()
-                }
-            }
-            _ => parse_error(),
-        }
-    }
-}
-
-#[cfg(feature = "printing")]
-mod printing {
-    use super::*;
-    use proc_macro2::TokenStream;
-    use quote::ToTokens;
-
-    impl ToTokens for Attribute {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.pound_token.to_tokens(tokens);
-            if let AttrStyle::Inner(ref b) = self.style {
-                b.to_tokens(tokens);
-            }
-            self.bracket_token.surround(tokens, |tokens| {
-                self.path.to_tokens(tokens);
-                self.tts.to_tokens(tokens);
-            });
-        }
-    }
-
-    impl ToTokens for MetaList {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.ident.to_tokens(tokens);
-            self.paren_token.surround(tokens, |tokens| {
-                self.nested.to_tokens(tokens);
-            })
-        }
-    }
-
-    impl ToTokens for MetaNameValue {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.ident.to_tokens(tokens);
-            self.eq_token.to_tokens(tokens);
-            self.lit.to_tokens(tokens);
-        }
-    }
-}
diff --git a/rustc_deps/vendor/syn-0.14.9/src/buffer.rs b/rustc_deps/vendor/syn-0.14.9/src/buffer.rs
deleted file mode 100644
index 499c4f1..0000000
--- a/rustc_deps/vendor/syn-0.14.9/src/buffer.rs
+++ /dev/null
@@ -1,469 +0,0 @@
-// Copyright 2018 Syn Developers
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-//! A stably addressed token buffer supporting efficient traversal based on a
-//! cheaply copyable cursor.
-//!
-//! The [`Synom`] trait is implemented for syntax tree types that can be parsed
-//! from one of these token cursors.
-//!
-//! [`Synom`]: ../synom/trait.Synom.html
-//!
-//! *This module is available if Syn is built with the `"parsing"` feature.*
-//!
-//! # Example
-//!
-//! This example shows a basic token parser for parsing a token stream without
-//! using Syn's parser combinator macros.
-//!
-//! ```
-//! #![feature(proc_macro_diagnostic)]
-//!
-//! extern crate syn;
-//! extern crate proc_macro;
-//!
-//! #[macro_use]
-//! extern crate quote;
-//!
-//! use syn::{token, ExprTuple};
-//! use syn::buffer::{Cursor, TokenBuffer};
-//! use syn::spanned::Spanned;
-//! use syn::synom::Synom;
-//! use proc_macro::{Diagnostic, Span, TokenStream};
-//!
-//! /// A basic token parser for parsing a token stream without using Syn's
-//! /// parser combinator macros.
-//! pub struct Parser<'a> {
-//!     cursor: Cursor<'a>,
-//! }
-//!
-//! impl<'a> Parser<'a> {
-//!     pub fn new(cursor: Cursor<'a>) -> Self {
-//!         Parser { cursor }
-//!     }
-//!
-//!     pub fn current_span(&self) -> Span {
-//!         self.cursor.span().unstable()
-//!     }
-//!
-//!     pub fn parse<T: Synom>(&mut self) -> Result<T, Diagnostic> {
-//!         let (val, rest) = T::parse(self.cursor)
-//!             .map_err(|e| match T::description() {
-//!                 Some(desc) => {
-//!                     self.current_span().error(format!("{}: expected {}", e, desc))
-//!                 }
-//!                 None => {
-//!                     self.current_span().error(e.to_string())
-//!                 }
-//!             })?;
-//!
-//!         self.cursor = rest;
-//!         Ok(val)
-//!     }
-//!
-//!     pub fn expect_eof(&mut self) -> Result<(), Diagnostic> {
-//!         if !self.cursor.eof() {
-//!             return Err(self.current_span().error("trailing characters; expected eof"));
-//!         }
-//!
-//!         Ok(())
-//!     }
-//! }
-//!
-//! fn eval(input: TokenStream) -> Result<TokenStream, Diagnostic> {
-//!     let buffer = TokenBuffer::new(input);
-//!     let mut parser = Parser::new(buffer.begin());
-//!
-//!     // Parse some syntax tree types out of the input tokens. In this case we
-//!     // expect something like:
-//!     //
-//!     //     (a, b, c) = (1, 2, 3)
-//!     let a = parser.parse::<ExprTuple>()?;
-//!     parser.parse::<token::Eq>()?;
-//!     let b = parser.parse::<ExprTuple>()?;
-//!     parser.expect_eof()?;
-//!
-//!     // Perform some validation and report errors.
-//!     let (a_len, b_len) = (a.elems.len(), b.elems.len());
-//!     if a_len != b_len {
-//!         let diag = b.span().unstable()
-//!             .error(format!("expected {} element(s), got {}", a_len, b_len))
-//!             .span_note(a.span().unstable(), "because of this");
-//!
-//!         return Err(diag);
-//!     }
-//!
-//!     // Build the output tokens.
-//!     let out = quote! {
-//!         println!("All good! Received two tuples of size {}", #a_len);
-//!     };
-//!
-//!     Ok(out.into())
-//! }
-//! #
-//! # extern crate proc_macro2;
-//! #
-//! # // This method exists on proc_macro2::Span but is behind the "nightly"
-//! # // feature.
-//! # trait ToUnstableSpan {
-//! #     fn unstable(&self) -> Span;
-//! # }
-//! #
-//! # impl ToUnstableSpan for proc_macro2::Span {
-//! #     fn unstable(&self) -> Span {
-//! #         unimplemented!()
-//! #     }
-//! # }
-//! #
-//! # fn main() {}
-//! ```
-
-// This module is heavily commented as it contains the only unsafe code in Syn,
-// and caution should be used when editing it. The public-facing interface is
-// 100% safe but the implementation is fragile internally.
-
-#[cfg(all(
-    not(all(target_arch = "wasm32", target_os = "unknown")),
-    feature = "proc-macro"
-))]
-use proc_macro as pm;
-use proc_macro2::{Delimiter, Ident, Literal, Span, TokenStream};
-use proc_macro2::{Group, Punct, TokenTree};
-
-use std::marker::PhantomData;
-use std::ptr;
-
-#[cfg(synom_verbose_trace)]
-use std::fmt::{self, Debug};
-
-/// Internal type which is used instead of `TokenTree` to represent a token tree
-/// within a `TokenBuffer`.
-enum Entry {
-    // Mimicking types from proc-macro.
-    Group(Span, Delimiter, TokenBuffer),
-    Ident(Ident),
-    Punct(Punct),
-    Literal(Literal),
-    // End entries contain a raw pointer to the entry from the containing
-    // token tree, or null if this is the outermost level.
-    End(*const Entry),
-}
-
-/// A buffer that can be efficiently traversed multiple times, unlike
-/// `TokenStream` which requires a deep copy in order to traverse more than
-/// once.
-///
-/// See the [module documentation] for an example of `TokenBuffer` in action.
-///
-/// [module documentation]: index.html
-///
-/// *This type is available if Syn is built with the `"parsing"` feature.*
-pub struct TokenBuffer {
-    // NOTE: Do not derive clone on this - there are raw pointers inside which
-    // will be messed up. Moving the `TokenBuffer` itself is safe as the actual
-    // backing slices won't be moved.
-    data: Box<[Entry]>,
-}
-
-impl TokenBuffer {
-    // NOTE: DO NOT MUTATE THE `Vec` RETURNED FROM THIS FUNCTION ONCE IT
-    // RETURNS, THE ADDRESS OF ITS BACKING MEMORY MUST REMAIN STABLE.
-    fn inner_new(stream: TokenStream, up: *const Entry) -> TokenBuffer {
-        // Build up the entries list, recording the locations of any Groups
-        // in the list to be processed later.
-        let mut entries = Vec::new();
-        let mut seqs = Vec::new();
-        for tt in stream {
-            match tt {
-                TokenTree::Ident(sym) => {
-                    entries.push(Entry::Ident(sym));
-                }
-                TokenTree::Punct(op) => {
-                    entries.push(Entry::Punct(op));
-                }
-                TokenTree::Literal(l) => {
-                    entries.push(Entry::Literal(l));
-                }
-                TokenTree::Group(g) => {
-                    // Record the index of the interesting entry, and store an
-                    // `End(null)` there temporarially.
-                    seqs.push((entries.len(), g.span(), g.delimiter(), g.stream().clone()));
-                    entries.push(Entry::End(ptr::null()));
-                }
-            }
-        }
-        // Add an `End` entry to the end with a reference to the enclosing token
-        // stream which was passed in.
-        entries.push(Entry::End(up));
-
-        // NOTE: This is done to ensure that we don't accidentally modify the
-        // length of the backing buffer. The backing buffer must remain at a
-        // constant address after this point, as we are going to store a raw
-        // pointer into it.
-        let mut entries = entries.into_boxed_slice();
-        for (idx, span, delim, seq_stream) in seqs {
-            // We know that this index refers to one of the temporary
-            // `End(null)` entries, and we know that the last entry is
-            // `End(up)`, so the next index is also valid.
-            let seq_up = &entries[idx + 1] as *const Entry;
-
-            // The end entry stored at the end of this Entry::Group should
-            // point to the Entry which follows the Group in the list.
-            let inner = Self::inner_new(seq_stream, seq_up);
-            entries[idx] = Entry::Group(span, delim, inner);
-        }
-
-        TokenBuffer { data: entries }
-    }
-
-    /// Creates a `TokenBuffer` containing all the tokens from the input
-    /// `TokenStream`.
-    ///
-    /// *This method is available if Syn is built with both the `"parsing"` and
-    /// `"proc-macro"` features.*
-    #[cfg(all(
-        not(all(target_arch = "wasm32", target_os = "unknown")),
-        feature = "proc-macro"
-    ))]
-    pub fn new(stream: pm::TokenStream) -> TokenBuffer {
-        Self::new2(stream.into())
-    }
-
-    /// Creates a `TokenBuffer` containing all the tokens from the input
-    /// `TokenStream`.
-    pub fn new2(stream: TokenStream) -> TokenBuffer {
-        Self::inner_new(stream, ptr::null())
-    }
-
-    /// Creates a cursor referencing the first token in the buffer and able to
-    /// traverse until the end of the buffer.
-    pub fn begin(&self) -> Cursor {
-        unsafe { Cursor::create(&self.data[0], &self.data[self.data.len() - 1]) }
-    }
-}
-
-/// A cheaply copyable cursor into a `TokenBuffer`.
-///
-/// This cursor holds a shared reference into the immutable data which is used
-/// internally to represent a `TokenStream`, and can be efficiently manipulated
-/// and copied around.
-///
-/// An empty `Cursor` can be created directly, or one may create a `TokenBuffer`
-/// object and get a cursor to its first token with `begin()`.
-///
-/// Two cursors are equal if they have the same location in the same input
-/// stream, and have the same scope.
-///
-/// See the [module documentation] for an example of a `Cursor` in action.
-///
-/// [module documentation]: index.html
-///
-/// *This type is available if Syn is built with the `"parsing"` feature.*
-#[derive(Copy, Clone, Eq, PartialEq)]
-pub struct Cursor<'a> {
-    /// The current entry which the `Cursor` is pointing at.
-    ptr: *const Entry,
-    /// This is the only `Entry::End(..)` object which this cursor is allowed to
-    /// point at. All other `End` objects are skipped over in `Cursor::create`.
-    scope: *const Entry,
-    /// This uses the &'a reference which guarantees that these pointers are
-    /// still valid.
-    marker: PhantomData<&'a Entry>,
-}
-
-impl<'a> Cursor<'a> {
-    /// Creates a cursor referencing a static empty TokenStream.
-    pub fn empty() -> Self {
-        // It's safe in this situation for us to put an `Entry` object in global
-        // storage, despite it not actually being safe to send across threads
-        // (`Ident` is a reference into a thread-local table). This is because
-        // this entry never includes a `Ident` object.
-        //
-        // This wrapper struct allows us to break the rules and put a `Sync`
-        // object in global storage.
-        struct UnsafeSyncEntry(Entry);
-        unsafe impl Sync for UnsafeSyncEntry {}
-        static EMPTY_ENTRY: UnsafeSyncEntry = UnsafeSyncEntry(Entry::End(0 as *const Entry));
-
-        Cursor {
-            ptr: &EMPTY_ENTRY.0,
-            scope: &EMPTY_ENTRY.0,
-            marker: PhantomData,
-        }
-    }
-
-    /// This create method intelligently exits non-explicitly-entered
-    /// `None`-delimited scopes when the cursor reaches the end of them,
-    /// allowing for them to be treated transparently.
-    unsafe fn create(mut ptr: *const Entry, scope: *const Entry) -> Self {
-        // NOTE: If we're looking at a `End(..)`, we want to advance the cursor
-        // past it, unless `ptr == scope`, which means that we're at the edge of
-        // our cursor's scope. We should only have `ptr != scope` at the exit
-        // from None-delimited groups entered with `ignore_none`.
-        while let Entry::End(exit) = *ptr {
-            if ptr == scope {
-                break;
-            }
-            ptr = exit;
-        }
-
-        Cursor {
-            ptr: ptr,
-            scope: scope,
-            marker: PhantomData,
-        }
-    }
-
-    /// Get the current entry.
-    fn entry(self) -> &'a Entry {
-        unsafe { &*self.ptr }
-    }
-
-    /// Bump the cursor to point at the next token after the current one. This
-    /// is undefined behavior if the cursor is currently looking at an
-    /// `Entry::End`.
-    unsafe fn bump(self) -> Cursor<'a> {
-        Cursor::create(self.ptr.offset(1), self.scope)
-    }
-
-    /// If the cursor is looking at a `None`-delimited group, move it to look at
-    /// the first token inside instead. If the group is empty, this will move
-    /// the cursor past the `None`-delimited group.
-    ///
-    /// WARNING: This mutates its argument.
-    fn ignore_none(&mut self) {
-        if let Entry::Group(_, Delimiter::None, ref buf) = *self.entry() {
-            // NOTE: We call `Cursor::create` here to make sure that situations
-            // where we should immediately exit the span after entering it are
-            // handled correctly.
-            unsafe {
-                *self = Cursor::create(&buf.data[0], self.scope);
-            }
-        }
-    }
-
-    /// Checks whether the cursor is currently pointing at the end of its valid
-    /// scope.
-    #[inline]
-    pub fn eof(self) -> bool {
-        // We're at eof if we're at the end of our scope.
-        self.ptr == self.scope
-    }
-
-    /// If the cursor is pointing at a `Group` with the given delimiter, returns
-    /// a cursor into that group and one pointing to the next `TokenTree`.
-    pub fn group(mut self, delim: Delimiter) -> Option<(Cursor<'a>, Span, Cursor<'a>)> {
-        // If we're not trying to enter a none-delimited group, we want to
-        // ignore them. We have to make sure to _not_ ignore them when we want
-        // to enter them, of course. For obvious reasons.
-        if delim != Delimiter::None {
-            self.ignore_none();
-        }
-
-        if let Entry::Group(span, group_delim, ref buf) = *self.entry() {
-            if group_delim == delim {
-                return Some((buf.begin(), span, unsafe { self.bump() }));
-            }
-        }
-
-        None
-    }
-
-    /// If the cursor is pointing at a `Ident`, returns it along with a cursor
-    /// pointing at the next `TokenTree`.
-    pub fn ident(mut self) -> Option<(Ident, Cursor<'a>)> {
-        self.ignore_none();
-        match *self.entry() {
-            Entry::Ident(ref ident) => Some((ident.clone(), unsafe { self.bump() })),
-            _ => None,
-        }
-    }
-
-    /// If the cursor is pointing at an `Punct`, returns it along with a cursor
-    /// pointing at the next `TokenTree`.
-    pub fn punct(mut self) -> Option<(Punct, Cursor<'a>)> {
-        self.ignore_none();
-        match *self.entry() {
-            Entry::Punct(ref op) => Some((op.clone(), unsafe { self.bump() })),
-            _ => None,
-        }
-    }
-
-    /// If the cursor is pointing at a `Literal`, return it along with a cursor
-    /// pointing at the next `TokenTree`.
-    pub fn literal(mut self) -> Option<(Literal, Cursor<'a>)> {
-        self.ignore_none();
-        match *self.entry() {
-            Entry::Literal(ref lit) => Some((lit.clone(), unsafe { self.bump() })),
-            _ => None,
-        }
-    }
-
-    /// Copies all remaining tokens visible from this cursor into a
-    /// `TokenStream`.
-    pub fn token_stream(self) -> TokenStream {
-        let mut tts = Vec::new();
-        let mut cursor = self;
-        while let Some((tt, rest)) = cursor.token_tree() {
-            tts.push(tt);
-            cursor = rest;
-        }
-        tts.into_iter().collect()
-    }
-
-    /// If the cursor is pointing at a `TokenTree`, returns it along with a
-    /// cursor pointing at the next `TokenTree`.
-    ///
-    /// Returns `None` if the cursor has reached the end of its stream.
-    ///
-    /// This method does not treat `None`-delimited groups as transparent, and
-    /// will return a `Group(None, ..)` if the cursor is looking at one.
-    pub fn token_tree(self) -> Option<(TokenTree, Cursor<'a>)> {
-        let tree = match *self.entry() {
-            Entry::Group(span, delim, ref buf) => {
-                let stream = buf.begin().token_stream();
-                let mut g = Group::new(delim, stream);
-                g.set_span(span);
-                TokenTree::from(g)
-            }
-            Entry::Literal(ref lit) => lit.clone().into(),
-            Entry::Ident(ref ident) => ident.clone().into(),
-            Entry::Punct(ref op) => op.clone().into(),
-            Entry::End(..) => {
-                return None;
-            }
-        };
-
-        Some((tree, unsafe { self.bump() }))
-    }
-
-    /// Returns the `Span` of the current token, or `Span::call_site()` if this
-    /// cursor points to eof.
-    pub fn span(self) -> Span {
-        match *self.entry() {
-            Entry::Group(span, ..) => span,
-            Entry::Literal(ref l) => l.span(),
-            Entry::Ident(ref t) => t.span(),
-            Entry::Punct(ref o) => o.span(),
-            Entry::End(..) => Span::call_site(),
-        }
-    }
-}
-
-// We do a custom implementation for `Debug` as the default implementation is
-// pretty useless.
-#[cfg(synom_verbose_trace)]
-impl<'a> Debug for Cursor<'a> {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        // Print what the cursor is currently looking at.
-        // This will look like Cursor("some remaining tokens here")
-        f.debug_tuple("Cursor")
-            .field(&self.token_stream().to_string())
-            .finish()
-    }
-}
diff --git a/rustc_deps/vendor/syn-0.14.9/src/data.rs b/rustc_deps/vendor/syn-0.14.9/src/data.rs
deleted file mode 100644
index 8ffc8a4..0000000
--- a/rustc_deps/vendor/syn-0.14.9/src/data.rs
+++ /dev/null
@@ -1,415 +0,0 @@
-// Copyright 2018 Syn Developers
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-use super::*;
-use punctuated::Punctuated;
-
-ast_struct! {
-    /// An enum variant.
-    ///
-    /// *This type is available if Syn is built with the `"derive"` or `"full"`
-    /// feature.*
-    pub struct Variant {
-        /// Attributes tagged on the variant.
-        pub attrs: Vec<Attribute>,
-
-        /// Name of the variant.
-        pub ident: Ident,
-
-        /// Content stored in the variant.
-        pub fields: Fields,
-
-        /// Explicit discriminant: `Variant = 1`
-        pub discriminant: Option<(Token![=], Expr)>,
-    }
-}
-
-ast_enum_of_structs! {
-    /// Data stored within an enum variant or struct.
-    ///
-    /// *This type is available if Syn is built with the `"derive"` or `"full"`
-    /// feature.*
-    ///
-    /// # Syntax tree enum
-    ///
-    /// This type is a [syntax tree enum].
-    ///
-    /// [syntax tree enum]: enum.Expr.html#syntax-tree-enums
-    pub enum Fields {
-        /// Named fields of a struct or struct variant such as `Point { x: f64,
-        /// y: f64 }`.
-        ///
-        /// *This type is available if Syn is built with the `"derive"` or
-        /// `"full"` feature.*
-        pub Named(FieldsNamed {
-            pub brace_token: token::Brace,
-            pub named: Punctuated<Field, Token![,]>,
-        }),
-
-        /// Unnamed fields of a tuple struct or tuple variant such as `Some(T)`.
-        ///
-        /// *This type is available if Syn is built with the `"derive"` or
-        /// `"full"` feature.*
-        pub Unnamed(FieldsUnnamed {
-            pub paren_token: token::Paren,
-            pub unnamed: Punctuated<Field, Token![,]>,
-        }),
-
-        /// Unit struct or unit variant such as `None`.
-        pub Unit,
-    }
-}
-
-impl Fields {
-    /// Get an iterator over the borrowed [`Field`] items in this object. This
-    /// iterator can be used to iterate over a named or unnamed struct or
-    /// variant's fields uniformly.
-    ///
-    /// [`Field`]: struct.Field.html
-    pub fn iter(&self) -> punctuated::Iter<Field> {
-        match *self {
-            Fields::Unit => punctuated::Iter::private_empty(),
-            Fields::Named(ref f) => f.named.iter(),
-            Fields::Unnamed(ref f) => f.unnamed.iter(),
-        }
-    }
-
-    /// Get an iterator over the mutably borrowed [`Field`] items in this
-    /// object. This iterator can be used to iterate over a named or unnamed
-    /// struct or variant's fields uniformly.
-    ///
-    /// [`Field`]: struct.Field.html
-    pub fn iter_mut(&mut self) -> punctuated::IterMut<Field> {
-        match *self {
-            Fields::Unit => punctuated::IterMut::private_empty(),
-            Fields::Named(ref mut f) => f.named.iter_mut(),
-            Fields::Unnamed(ref mut f) => f.unnamed.iter_mut(),
-        }
-    }
-}
-
-impl<'a> IntoIterator for &'a Fields {
-    type Item = &'a Field;
-    type IntoIter = punctuated::Iter<'a, Field>;
-
-    fn into_iter(self) -> Self::IntoIter {
-        self.iter()
-    }
-}
-
-impl<'a> IntoIterator for &'a mut Fields {
-    type Item = &'a mut Field;
-    type IntoIter = punctuated::IterMut<'a, Field>;
-
-    fn into_iter(self) -> Self::IntoIter {
-        self.iter_mut()
-    }
-}
-
-ast_struct! {
-    /// A field of a struct or enum variant.
-    ///
-    /// *This type is available if Syn is built with the `"derive"` or `"full"`
-    /// feature.*
-    pub struct Field {
-        /// Attributes tagged on the field.
-        pub attrs: Vec<Attribute>,
-
-        /// Visibility of the field.
-        pub vis: Visibility,
-
-        /// Name of the field, if any.
-        ///
-        /// Fields of tuple structs have no names.
-        pub ident: Option<Ident>,
-
-        pub colon_token: Option<Token![:]>,
-
-        /// Type of the field.
-        pub ty: Type,
-    }
-}
-
-ast_enum_of_structs! {
-    /// The visibility level of an item: inherited or `pub` or
-    /// `pub(restricted)`.
-    ///
-    /// *This type is available if Syn is built with the `"derive"` or `"full"`
-    /// feature.*
-    ///
-    /// # Syntax tree enum
-    ///
-    /// This type is a [syntax tree enum].
-    ///
-    /// [syntax tree enum]: enum.Expr.html#syntax-tree-enums
-    pub enum Visibility {
-        /// A public visibility level: `pub`.
-        ///
-        /// *This type is available if Syn is built with the `"derive"` or
-        /// `"full"` feature.*
-        pub Public(VisPublic {
-            pub pub_token: Token![pub],
-        }),
-
-        /// A crate-level visibility: `crate`.
-        ///
-        /// *This type is available if Syn is built with the `"derive"` or
-        /// `"full"` feature.*
-        pub Crate(VisCrate {
-            pub crate_token: Token![crate],
-        }),
-
-        /// A visibility level restricted to some path: `pub(self)` or
-        /// `pub(super)` or `pub(crate)` or `pub(in some::module)`.
-        ///
-        /// *This type is available if Syn is built with the `"derive"` or
-        /// `"full"` feature.*
-        pub Restricted(VisRestricted {
-            pub pub_token: Token![pub],
-            pub paren_token: token::Paren,
-            pub in_token: Option<Token![in]>,
-            pub path: Box<Path>,
-        }),
-
-        /// An inherited visibility, which usually means private.
-        pub Inherited,
-    }
-}
-
-#[cfg(feature = "parsing")]
-pub mod parsing {
-    use super::*;
-
-    use synom::Synom;
-
-    impl Synom for Variant {
-        named!(parse -> Self, do_parse!(
-            attrs: many0!(Attribute::parse_outer) >>
-            id: syn!(Ident) >>
-            fields: alt!(
-                syn!(FieldsNamed) => { Fields::Named }
-                |
-                syn!(FieldsUnnamed) => { Fields::Unnamed }
-                |
-                epsilon!() => { |_| Fields::Unit }
-            ) >>
-            disr: option!(tuple!(punct!(=), syn!(Expr))) >>
-            (Variant {
-                ident: id,
-                attrs: attrs,
-                fields: fields,
-                discriminant: disr,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("enum variant")
-        }
-    }
-
-    impl Synom for FieldsNamed {
-        named!(parse -> Self, map!(
-            braces!(call!(Punctuated::parse_terminated_with, Field::parse_named)),
-            |(brace, fields)| FieldsNamed {
-                brace_token: brace,
-                named: fields,
-            }
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("named fields in a struct or struct variant")
-        }
-    }
-
-    impl Synom for FieldsUnnamed {
-        named!(parse -> Self, map!(
-            parens!(call!(Punctuated::parse_terminated_with, Field::parse_unnamed)),
-            |(paren, fields)| FieldsUnnamed {
-                paren_token: paren,
-                unnamed: fields,
-            }
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("unnamed fields in a tuple struct or tuple variant")
-        }
-    }
-
-    impl Field {
-        named!(pub parse_named -> Self, do_parse!(
-            attrs: many0!(Attribute::parse_outer) >>
-            vis: syn!(Visibility) >>
-            id: syn!(Ident) >>
-            colon: punct!(:) >>
-            ty: syn!(Type) >>
-            (Field {
-                ident: Some(id),
-                vis: vis,
-                attrs: attrs,
-                ty: ty,
-                colon_token: Some(colon),
-            })
-        ));
-
-        named!(pub parse_unnamed -> Self, do_parse!(
-            attrs: many0!(Attribute::parse_outer) >>
-            vis: syn!(Visibility) >>
-            ty: syn!(Type) >>
-            (Field {
-                ident: None,
-                colon_token: None,
-                vis: vis,
-                attrs: attrs,
-                ty: ty,
-            })
-        ));
-    }
-
-    impl Synom for Visibility {
-        named!(parse -> Self, alt!(
-            do_parse!(
-                pub_token: keyword!(pub) >>
-                other: parens!(keyword!(crate)) >>
-                (Visibility::Restricted(VisRestricted {
-                    pub_token: pub_token,
-                    paren_token: other.0,
-                    in_token: None,
-                    path: Box::new(other.1.into()),
-                }))
-            )
-            |
-            do_parse!(
-                crate_token: keyword!(crate) >>
-                not!(punct!(::)) >>
-                (Visibility::Crate(VisCrate {
-                    crate_token: crate_token,
-                }))
-            )
-            |
-            do_parse!(
-                pub_token: keyword!(pub) >>
-                other: parens!(keyword!(self)) >>
-                (Visibility::Restricted(VisRestricted {
-                    pub_token: pub_token,
-                    paren_token: other.0,
-                    in_token: None,
-                    path: Box::new(other.1.into()),
-                }))
-            )
-            |
-            do_parse!(
-                pub_token: keyword!(pub) >>
-                other: parens!(keyword!(super)) >>
-                (Visibility::Restricted(VisRestricted {
-                    pub_token: pub_token,
-                    paren_token: other.0,
-                    in_token: None,
-                    path: Box::new(other.1.into()),
-                }))
-            )
-            |
-            do_parse!(
-                pub_token: keyword!(pub) >>
-                other: parens!(do_parse!(
-                    in_tok: keyword!(in) >>
-                    restricted: call!(Path::parse_mod_style) >>
-                    (in_tok, restricted)
-                )) >>
-                (Visibility::Restricted(VisRestricted {
-                    pub_token: pub_token,
-                    paren_token: other.0,
-                    in_token: Some((other.1).0),
-                    path: Box::new((other.1).1),
-                }))
-            )
-            |
-            keyword!(pub) => { |tok| {
-                Visibility::Public(VisPublic {
-                    pub_token: tok,
-                })
-            } }
-            |
-            epsilon!() => { |_| Visibility::Inherited }
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("visibility qualifier such as `pub`")
-        }
-    }
-}
-
-#[cfg(feature = "printing")]
-mod printing {
-    use super::*;
-    use proc_macro2::TokenStream;
-    use quote::{ToTokens, TokenStreamExt};
-
-    impl ToTokens for Variant {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            tokens.append_all(&self.attrs);
-            self.ident.to_tokens(tokens);
-            self.fields.to_tokens(tokens);
-            if let Some((ref eq_token, ref disc)) = self.discriminant {
-                eq_token.to_tokens(tokens);
-                disc.to_tokens(tokens);
-            }
-        }
-    }
-
-    impl ToTokens for FieldsNamed {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.brace_token.surround(tokens, |tokens| {
-                self.named.to_tokens(tokens);
-            });
-        }
-    }
-
-    impl ToTokens for FieldsUnnamed {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.paren_token.surround(tokens, |tokens| {
-                self.unnamed.to_tokens(tokens);
-            });
-        }
-    }
-
-    impl ToTokens for Field {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            tokens.append_all(&self.attrs);
-            self.vis.to_tokens(tokens);
-            if let Some(ref ident) = self.ident {
-                ident.to_tokens(tokens);
-                TokensOrDefault(&self.colon_token).to_tokens(tokens);
-            }
-            self.ty.to_tokens(tokens);
-        }
-    }
-
-    impl ToTokens for VisPublic {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.pub_token.to_tokens(tokens)
-        }
-    }
-
-    impl ToTokens for VisCrate {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.crate_token.to_tokens(tokens);
-        }
-    }
-
-    impl ToTokens for VisRestricted {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.pub_token.to_tokens(tokens);
-            self.paren_token.surround(tokens, |tokens| {
-                // XXX: If we have a path which is not "self" or "super" or
-                // "crate", automatically add the "in" token.
-                self.in_token.to_tokens(tokens);
-                self.path.to_tokens(tokens);
-            });
-        }
-    }
-}
diff --git a/rustc_deps/vendor/syn-0.14.9/src/derive.rs b/rustc_deps/vendor/syn-0.14.9/src/derive.rs
deleted file mode 100644
index ecef776..0000000
--- a/rustc_deps/vendor/syn-0.14.9/src/derive.rs
+++ /dev/null
@@ -1,242 +0,0 @@
-// Copyright 2018 Syn Developers
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-use super::*;
-use punctuated::Punctuated;
-
-ast_struct! {
-    /// Data structure sent to a `proc_macro_derive` macro.
-    ///
-    /// *This type is available if Syn is built with the `"derive"` feature.*
-    pub struct DeriveInput {
-        /// Attributes tagged on the whole struct or enum.
-        pub attrs: Vec<Attribute>,
-
-        /// Visibility of the struct or enum.
-        pub vis: Visibility,
-
-        /// Name of the struct or enum.
-        pub ident: Ident,
-
-        /// Generics required to complete the definition.
-        pub generics: Generics,
-
-        /// Data within the struct or enum.
-        pub data: Data,
-    }
-}
-
-ast_enum_of_structs! {
-    /// The storage of a struct, enum or union data structure.
-    ///
-    /// *This type is available if Syn is built with the `"derive"` feature.*
-    ///
-    /// # Syntax tree enum
-    ///
-    /// This type is a [syntax tree enum].
-    ///
-    /// [syntax tree enum]: enum.Expr.html#syntax-tree-enums
-    pub enum Data {
-        /// A struct input to a `proc_macro_derive` macro.
-        ///
-        /// *This type is available if Syn is built with the `"derive"`
-        /// feature.*
-        pub Struct(DataStruct {
-            pub struct_token: Token![struct],
-            pub fields: Fields,
-            pub semi_token: Option<Token![;]>,
-        }),
-
-        /// An enum input to a `proc_macro_derive` macro.
-        ///
-        /// *This type is available if Syn is built with the `"derive"`
-        /// feature.*
-        pub Enum(DataEnum {
-            pub enum_token: Token![enum],
-            pub brace_token: token::Brace,
-            pub variants: Punctuated<Variant, Token![,]>,
-        }),
-
-        /// A tagged union input to a `proc_macro_derive` macro.
-        ///
-        /// *This type is available if Syn is built with the `"derive"`
-        /// feature.*
-        pub Union(DataUnion {
-            pub union_token: Token![union],
-            pub fields: FieldsNamed,
-        }),
-    }
-
-    do_not_generate_to_tokens
-}
-
-#[cfg(feature = "parsing")]
-pub mod parsing {
-    use super::*;
-
-    use synom::Synom;
-
-    enum DeriveInputKind {
-        Struct(Token![struct]),
-        Enum(Token![enum]),
-        Union(Token![union]),
-    }
-
-    impl Synom for DeriveInputKind {
-        named!(parse -> Self, alt!(
-            keyword!(struct) => { DeriveInputKind::Struct }
-            |
-            keyword!(enum) => { DeriveInputKind::Enum }
-            |
-            keyword!(union) => { DeriveInputKind::Union }
-        ));
-    }
-
-    impl Synom for DeriveInput {
-        named!(parse -> Self, do_parse!(
-            attrs: many0!(Attribute::parse_outer) >>
-            vis: syn!(Visibility) >>
-            which: syn!(DeriveInputKind) >>
-            id: syn!(Ident) >>
-            generics: syn!(Generics) >>
-            item: switch!(value!(which),
-                DeriveInputKind::Struct(s) => map!(data_struct, move |(wh, fields, semi)| DeriveInput {
-                    ident: id,
-                    vis: vis,
-                    attrs: attrs,
-                    generics: Generics {
-                        where_clause: wh,
-                        ..generics
-                    },
-                    data: Data::Struct(DataStruct {
-                        struct_token: s,
-                        fields: fields,
-                        semi_token: semi,
-                    }),
-                })
-                |
-                DeriveInputKind::Enum(e) => map!(data_enum, move |(wh, brace, variants)| DeriveInput {
-                    ident: id,
-                    vis: vis,
-                    attrs: attrs,
-                    generics: Generics {
-                        where_clause: wh,
-                        ..generics
-                    },
-                    data: Data::Enum(DataEnum {
-                        variants: variants,
-                        brace_token: brace,
-                        enum_token: e,
-                    }),
-                })
-                |
-                DeriveInputKind::Union(u) => map!(data_union, move |(wh, fields)| DeriveInput {
-                    ident: id,
-                    vis: vis,
-                    attrs: attrs,
-                    generics: Generics {
-                        where_clause: wh,
-                        ..generics
-                    },
-                    data: Data::Union(DataUnion {
-                        union_token: u,
-                        fields: fields,
-                    }),
-                })
-            ) >>
-            (item)
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("derive input")
-        }
-    }
-
-    named!(data_struct -> (Option<WhereClause>, Fields, Option<Token![;]>), alt!(
-        do_parse!(
-            wh: option!(syn!(WhereClause)) >>
-            fields: syn!(FieldsNamed) >>
-            (wh, Fields::Named(fields), None)
-        )
-        |
-        do_parse!(
-            fields: syn!(FieldsUnnamed) >>
-            wh: option!(syn!(WhereClause)) >>
-            semi: punct!(;) >>
-            (wh, Fields::Unnamed(fields), Some(semi))
-        )
-        |
-        do_parse!(
-            wh: option!(syn!(WhereClause)) >>
-            semi: punct!(;) >>
-            (wh, Fields::Unit, Some(semi))
-        )
-    ));
-
-    named!(data_enum -> (Option<WhereClause>, token::Brace, Punctuated<Variant, Token![,]>), do_parse!(
-        wh: option!(syn!(WhereClause)) >>
-        data: braces!(Punctuated::parse_terminated) >>
-        (wh, data.0, data.1)
-    ));
-
-    named!(data_union -> (Option<WhereClause>, FieldsNamed), tuple!(
-        option!(syn!(WhereClause)),
-        syn!(FieldsNamed),
-    ));
-}
-
-#[cfg(feature = "printing")]
-mod printing {
-    use super::*;
-    use attr::FilterAttrs;
-    use proc_macro2::TokenStream;
-    use quote::ToTokens;
-
-    impl ToTokens for DeriveInput {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            for attr in self.attrs.outer() {
-                attr.to_tokens(tokens);
-            }
-            self.vis.to_tokens(tokens);
-            match self.data {
-                Data::Struct(ref d) => d.struct_token.to_tokens(tokens),
-                Data::Enum(ref d) => d.enum_token.to_tokens(tokens),
-                Data::Union(ref d) => d.union_token.to_tokens(tokens),
-            }
-            self.ident.to_tokens(tokens);
-            self.generics.to_tokens(tokens);
-            match self.data {
-                Data::Struct(ref data) => match data.fields {
-                    Fields::Named(ref fields) => {
-                        self.generics.where_clause.to_tokens(tokens);
-                        fields.to_tokens(tokens);
-                    }
-                    Fields::Unnamed(ref fields) => {
-                        fields.to_tokens(tokens);
-                        self.generics.where_clause.to_tokens(tokens);
-                        TokensOrDefault(&data.semi_token).to_tokens(tokens);
-                    }
-                    Fields::Unit => {
-                        self.generics.where_clause.to_tokens(tokens);
-                        TokensOrDefault(&data.semi_token).to_tokens(tokens);
-                    }
-                },
-                Data::Enum(ref data) => {
-                    self.generics.where_clause.to_tokens(tokens);
-                    data.brace_token.surround(tokens, |tokens| {
-                        data.variants.to_tokens(tokens);
-                    });
-                }
-                Data::Union(ref data) => {
-                    self.generics.where_clause.to_tokens(tokens);
-                    data.fields.to_tokens(tokens);
-                }
-            }
-        }
-    }
-}
diff --git a/rustc_deps/vendor/syn-0.14.9/src/error.rs b/rustc_deps/vendor/syn-0.14.9/src/error.rs
deleted file mode 100644
index 6673aa3..0000000
--- a/rustc_deps/vendor/syn-0.14.9/src/error.rs
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2018 Syn Developers
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-use buffer::Cursor;
-use std::error::Error;
-use std::fmt::{self, Display};
-
-/// The result of a `Synom` parser.
-///
-/// Refer to the [module documentation] for details about parsing in Syn.
-///
-/// [module documentation]: index.html
-///
-/// *This type is available if Syn is built with the `"parsing"` feature.*
-pub type PResult<'a, O> = Result<(O, Cursor<'a>), ParseError>;
-
-/// An error with a default error message.
-///
-/// NOTE: We should provide better error messages in the future.
-pub fn parse_error<'a, O>() -> PResult<'a, O> {
-    Err(ParseError(None))
-}
-
-/// Error returned when a `Synom` parser cannot parse the input tokens.
-///
-/// Refer to the [module documentation] for details about parsing in Syn.
-///
-/// [module documentation]: index.html
-///
-/// *This type is available if Syn is built with the `"parsing"` feature.*
-#[derive(Debug)]
-pub struct ParseError(Option<String>);
-
-impl Error for ParseError {
-    fn description(&self) -> &str {
-        match self.0 {
-            Some(ref desc) => desc,
-            None => "failed to parse",
-        }
-    }
-}
-
-impl Display for ParseError {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        Display::fmt(self.description(), f)
-    }
-}
-
-impl ParseError {
-    // For syn use only. Not public API.
-    #[doc(hidden)]
-    pub fn new<T: Into<String>>(msg: T) -> Self {
-        ParseError(Some(msg.into()))
-    }
-}
diff --git a/rustc_deps/vendor/syn-0.14.9/src/expr.rs b/rustc_deps/vendor/syn-0.14.9/src/expr.rs
deleted file mode 100644
index 979de71..0000000
--- a/rustc_deps/vendor/syn-0.14.9/src/expr.rs
+++ /dev/null
@@ -1,3836 +0,0 @@
-// Copyright 2018 Syn Developers
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-use super::*;
-use proc_macro2::{Span, TokenStream};
-use punctuated::Punctuated;
-#[cfg(feature = "extra-traits")]
-use std::hash::{Hash, Hasher};
-#[cfg(feature = "full")]
-use std::mem;
-#[cfg(feature = "extra-traits")]
-use tt::TokenStreamHelper;
-
-ast_enum_of_structs! {
-    /// A Rust expression.
-    ///
-    /// *This type is available if Syn is built with the `"derive"` or `"full"`
-    /// feature.*
-    ///
-    /// # Syntax tree enums
-    ///
-    /// This type is a syntax tree enum. In Syn this and other syntax tree enums
-    /// are designed to be traversed using the following rebinding idiom.
-    ///
-    /// ```
-    /// # use syn::Expr;
-    /// #
-    /// # fn example(expr: Expr) {
-    /// # const IGNORE: &str = stringify! {
-    /// let expr: Expr = /* ... */;
-    /// # };
-    /// match expr {
-    ///     Expr::MethodCall(expr) => {
-    ///         /* ... */
-    ///     }
-    ///     Expr::Cast(expr) => {
-    ///         /* ... */
-    ///     }
-    ///     Expr::IfLet(expr) => {
-    ///         /* ... */
-    ///     }
-    ///     /* ... */
-    ///     # _ => {}
-    /// }
-    /// # }
-    /// ```
-    ///
-    /// We begin with a variable `expr` of type `Expr` that has no fields
-    /// (because it is an enum), and by matching on it and rebinding a variable
-    /// with the same name `expr` we effectively imbue our variable with all of
-    /// the data fields provided by the variant that it turned out to be. So for
-    /// example above if we ended up in the `MethodCall` case then we get to use
-    /// `expr.receiver`, `expr.args` etc; if we ended up in the `IfLet` case we
-    /// get to use `expr.pat`, `expr.then_branch`, `expr.else_branch`.
-    ///
-    /// The pattern is similar if the input expression is borrowed:
-    ///
-    /// ```
-    /// # use syn::Expr;
-    /// #
-    /// # fn example(expr: &Expr) {
-    /// match *expr {
-    ///     Expr::MethodCall(ref expr) => {
-    /// #   }
-    /// #   _ => {}
-    /// # }
-    /// # }
-    /// ```
-    ///
-    /// This approach avoids repeating the variant names twice on every line.
-    ///
-    /// ```
-    /// # use syn::{Expr, ExprMethodCall};
-    /// #
-    /// # fn example(expr: Expr) {
-    /// # match expr {
-    /// Expr::MethodCall(ExprMethodCall { method, args, .. }) => { // repetitive
-    /// # }
-    /// # _ => {}
-    /// # }
-    /// # }
-    /// ```
-    ///
-    /// In general, the name to which a syntax tree enum variant is bound should
-    /// be a suitable name for the complete syntax tree enum type.
-    ///
-    /// ```
-    /// # use syn::{Expr, ExprField};
-    /// #
-    /// # fn example(discriminant: &ExprField) {
-    /// // Binding is called `base` which is the name I would use if I were
-    /// // assigning `*discriminant.base` without an `if let`.
-    /// if let Expr::Tuple(ref base) = *discriminant.base {
-    /// # }
-    /// # }
-    /// ```
-    ///
-    /// A sign that you may not be choosing the right variable names is if you
-    /// see names getting repeated in your code, like accessing
-    /// `receiver.receiver` or `pat.pat` or `cond.cond`.
-    pub enum Expr {
-        /// A box expression: `box f`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Box(ExprBox #full {
-            pub attrs: Vec<Attribute>,
-            pub box_token: Token![box],
-            pub expr: Box<Expr>,
-        }),
-
-        /// A placement expression: `place <- value`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub InPlace(ExprInPlace #full {
-            pub attrs: Vec<Attribute>,
-            pub place: Box<Expr>,
-            pub arrow_token: Token![<-],
-            pub value: Box<Expr>,
-        }),
-
-        /// A slice literal expression: `[a, b, c, d]`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Array(ExprArray #full {
-            pub attrs: Vec<Attribute>,
-            pub bracket_token: token::Bracket,
-            pub elems: Punctuated<Expr, Token![,]>,
-        }),
-
-        /// A function call expression: `invoke(a, b)`.
-        ///
-        /// *This type is available if Syn is built with the `"derive"` or
-        /// `"full"` feature.*
-        pub Call(ExprCall {
-            pub attrs: Vec<Attribute>,
-            pub func: Box<Expr>,
-            pub paren_token: token::Paren,
-            pub args: Punctuated<Expr, Token![,]>,
-        }),
-
-        /// A method call expression: `x.foo::<T>(a, b)`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub MethodCall(ExprMethodCall #full {
-            pub attrs: Vec<Attribute>,
-            pub receiver: Box<Expr>,
-            pub dot_token: Token![.],
-            pub method: Ident,
-            pub turbofish: Option<MethodTurbofish>,
-            pub paren_token: token::Paren,
-            pub args: Punctuated<Expr, Token![,]>,
-        }),
-
-        /// A tuple expression: `(a, b, c, d)`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Tuple(ExprTuple #full {
-            pub attrs: Vec<Attribute>,
-            pub paren_token: token::Paren,
-            pub elems: Punctuated<Expr, Token![,]>,
-        }),
-
-        /// A binary operation: `a + b`, `a * b`.
-        ///
-        /// *This type is available if Syn is built with the `"derive"` or
-        /// `"full"` feature.*
-        pub Binary(ExprBinary {
-            pub attrs: Vec<Attribute>,
-            pub left: Box<Expr>,
-            pub op: BinOp,
-            pub right: Box<Expr>,
-        }),
-
-        /// A unary operation: `!x`, `*x`.
-        ///
-        /// *This type is available if Syn is built with the `"derive"` or
-        /// `"full"` feature.*
-        pub Unary(ExprUnary {
-            pub attrs: Vec<Attribute>,
-            pub op: UnOp,
-            pub expr: Box<Expr>,
-        }),
-
-        /// A literal in place of an expression: `1`, `"foo"`.
-        ///
-        /// *This type is available if Syn is built with the `"derive"` or
-        /// `"full"` feature.*
-        pub Lit(ExprLit {
-            pub attrs: Vec<Attribute>,
-            pub lit: Lit,
-        }),
-
-        /// A cast expression: `foo as f64`.
-        ///
-        /// *This type is available if Syn is built with the `"derive"` or
-        /// `"full"` feature.*
-        pub Cast(ExprCast {
-            pub attrs: Vec<Attribute>,
-            pub expr: Box<Expr>,
-            pub as_token: Token![as],
-            pub ty: Box<Type>,
-        }),
-
-        /// A type ascription expression: `foo: f64`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Type(ExprType #full {
-            pub attrs: Vec<Attribute>,
-            pub expr: Box<Expr>,
-            pub colon_token: Token![:],
-            pub ty: Box<Type>,
-        }),
-
-        /// An `if` expression with an optional `else` block: `if expr { ... }
-        /// else { ... }`.
-        ///
-        /// The `else` branch expression may only be an `If`, `IfLet`, or
-        /// `Block` expression, not any of the other types of expression.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub If(ExprIf #full {
-            pub attrs: Vec<Attribute>,
-            pub if_token: Token![if],
-            pub cond: Box<Expr>,
-            pub then_branch: Block,
-            pub else_branch: Option<(Token![else], Box<Expr>)>,
-        }),
-
-        /// An `if let` expression with an optional `else` block: `if let pat =
-        /// expr { ... } else { ... }`.
-        ///
-        /// The `else` branch expression may only be an `If`, `IfLet`, or
-        /// `Block` expression, not any of the other types of expression.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub IfLet(ExprIfLet #full {
-            pub attrs: Vec<Attribute>,
-            pub if_token: Token![if],
-            pub let_token: Token![let],
-            pub pats: Punctuated<Pat, Token![|]>,
-            pub eq_token: Token![=],
-            pub expr: Box<Expr>,
-            pub then_branch: Block,
-            pub else_branch: Option<(Token![else], Box<Expr>)>,
-        }),
-
-        /// A while loop: `while expr { ... }`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub While(ExprWhile #full {
-            pub attrs: Vec<Attribute>,
-            pub label: Option<Label>,
-            pub while_token: Token![while],
-            pub cond: Box<Expr>,
-            pub body: Block,
-        }),
-
-        /// A while-let loop: `while let pat = expr { ... }`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub WhileLet(ExprWhileLet #full {
-            pub attrs: Vec<Attribute>,
-            pub label: Option<Label>,
-            pub while_token: Token![while],
-            pub let_token: Token![let],
-            pub pats: Punctuated<Pat, Token![|]>,
-            pub eq_token: Token![=],
-            pub expr: Box<Expr>,
-            pub body: Block,
-        }),
-
-        /// A for loop: `for pat in expr { ... }`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub ForLoop(ExprForLoop #full {
-            pub attrs: Vec<Attribute>,
-            pub label: Option<Label>,
-            pub for_token: Token![for],
-            pub pat: Box<Pat>,
-            pub in_token: Token![in],
-            pub expr: Box<Expr>,
-            pub body: Block,
-        }),
-
-        /// Conditionless loop: `loop { ... }`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Loop(ExprLoop #full {
-            pub attrs: Vec<Attribute>,
-            pub label: Option<Label>,
-            pub loop_token: Token![loop],
-            pub body: Block,
-        }),
-
-        /// A `match` expression: `match n { Some(n) => {}, None => {} }`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Match(ExprMatch #full {
-            pub attrs: Vec<Attribute>,
-            pub match_token: Token![match],
-            pub expr: Box<Expr>,
-            pub brace_token: token::Brace,
-            pub arms: Vec<Arm>,
-        }),
-
-        /// A closure expression: `|a, b| a + b`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Closure(ExprClosure #full {
-            pub attrs: Vec<Attribute>,
-            pub movability: Option<Token![static]>,
-            pub capture: Option<Token![move]>,
-            pub or1_token: Token![|],
-            pub inputs: Punctuated<FnArg, Token![,]>,
-            pub or2_token: Token![|],
-            pub output: ReturnType,
-            pub body: Box<Expr>,
-        }),
-
-        /// An unsafe block: `unsafe { ... }`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Unsafe(ExprUnsafe #full {
-            pub attrs: Vec<Attribute>,
-            pub unsafe_token: Token![unsafe],
-            pub block: Block,
-        }),
-
-        /// A blocked scope: `{ ... }`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Block(ExprBlock #full {
-            pub attrs: Vec<Attribute>,
-            pub block: Block,
-        }),
-
-        /// An assignment expression: `a = compute()`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Assign(ExprAssign #full {
-            pub attrs: Vec<Attribute>,
-            pub left: Box<Expr>,
-            pub eq_token: Token![=],
-            pub right: Box<Expr>,
-        }),
-
-        /// A compound assignment expression: `counter += 1`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub AssignOp(ExprAssignOp #full {
-            pub attrs: Vec<Attribute>,
-            pub left: Box<Expr>,
-            pub op: BinOp,
-            pub right: Box<Expr>,
-        }),
-
-        /// Access of a named struct field (`obj.k`) or unnamed tuple struct
-        /// field (`obj.0`).
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Field(ExprField {
-            pub attrs: Vec<Attribute>,
-            pub base: Box<Expr>,
-            pub dot_token: Token![.],
-            pub member: Member,
-        }),
-
-        /// A square bracketed indexing expression: `vector[2]`.
-        ///
-        /// *This type is available if Syn is built with the `"derive"` or
-        /// `"full"` feature.*
-        pub Index(ExprIndex {
-            pub attrs: Vec<Attribute>,
-            pub expr: Box<Expr>,
-            pub bracket_token: token::Bracket,
-            pub index: Box<Expr>,
-        }),
-
-        /// A range expression: `1..2`, `1..`, `..2`, `1..=2`, `..=2`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Range(ExprRange #full {
-            pub attrs: Vec<Attribute>,
-            pub from: Option<Box<Expr>>,
-            pub limits: RangeLimits,
-            pub to: Option<Box<Expr>>,
-        }),
-
-        /// A path like `std::mem::replace` possibly containing generic
-        /// parameters and a qualified self-type.
-        ///
-        /// A plain identifier like `x` is a path of length 1.
-        ///
-        /// *This type is available if Syn is built with the `"derive"` or
-        /// `"full"` feature.*
-        pub Path(ExprPath {
-            pub attrs: Vec<Attribute>,
-            pub qself: Option<QSelf>,
-            pub path: Path,
-        }),
-
-        /// A referencing operation: `&a` or `&mut a`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Reference(ExprReference #full {
-            pub attrs: Vec<Attribute>,
-            pub and_token: Token![&],
-            pub mutability: Option<Token![mut]>,
-            pub expr: Box<Expr>,
-        }),
-
-        /// A `break`, with an optional label to break and an optional
-        /// expression.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Break(ExprBreak #full {
-            pub attrs: Vec<Attribute>,
-            pub break_token: Token![break],
-            pub label: Option<Lifetime>,
-            pub expr: Option<Box<Expr>>,
-        }),
-
-        /// A `continue`, with an optional label.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Continue(ExprContinue #full {
-            pub attrs: Vec<Attribute>,
-            pub continue_token: Token![continue],
-            pub label: Option<Lifetime>,
-        }),
-
-        /// A `return`, with an optional value to be returned.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Return(ExprReturn #full {
-            pub attrs: Vec<Attribute>,
-            pub return_token: Token![return],
-            pub expr: Option<Box<Expr>>,
-        }),
-
-        /// A macro invocation expression: `format!("{}", q)`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Macro(ExprMacro #full {
-            pub attrs: Vec<Attribute>,
-            pub mac: Macro,
-        }),
-
-        /// A struct literal expression: `Point { x: 1, y: 1 }`.
-        ///
-        /// The `rest` provides the value of the remaining fields as in `S { a:
-        /// 1, b: 1, ..rest }`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Struct(ExprStruct #full {
-            pub attrs: Vec<Attribute>,
-            pub path: Path,
-            pub brace_token: token::Brace,
-            pub fields: Punctuated<FieldValue, Token![,]>,
-            pub dot2_token: Option<Token![..]>,
-            pub rest: Option<Box<Expr>>,
-        }),
-
-        /// An array literal constructed from one repeated element: `[0u8; N]`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Repeat(ExprRepeat #full {
-            pub attrs: Vec<Attribute>,
-            pub bracket_token: token::Bracket,
-            pub expr: Box<Expr>,
-            pub semi_token: Token![;],
-            pub len: Box<Expr>,
-        }),
-
-        /// A parenthesized expression: `(a + b)`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Paren(ExprParen {
-            pub attrs: Vec<Attribute>,
-            pub paren_token: token::Paren,
-            pub expr: Box<Expr>,
-        }),
-
-        /// An expression contained within invisible delimiters.
-        ///
-        /// This variant is important for faithfully representing the precedence
-        /// of expressions and is related to `None`-delimited spans in a
-        /// `TokenStream`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Group(ExprGroup #full {
-            pub attrs: Vec<Attribute>,
-            pub group_token: token::Group,
-            pub expr: Box<Expr>,
-        }),
-
-        /// A try-expression: `expr?`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Try(ExprTry #full {
-            pub attrs: Vec<Attribute>,
-            pub expr: Box<Expr>,
-            pub question_token: Token![?],
-        }),
-
-        /// A catch expression: `do catch { ... }`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Catch(ExprCatch #full {
-            pub attrs: Vec<Attribute>,
-            pub do_token: Token![do],
-            pub catch_token: Token![catch],
-            pub block: Block,
-        }),
-
-        /// A yield expression: `yield expr`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Yield(ExprYield #full {
-            pub attrs: Vec<Attribute>,
-            pub yield_token: Token![yield],
-            pub expr: Option<Box<Expr>>,
-        }),
-
-        /// Tokens in expression position not interpreted by Syn.
-        ///
-        /// *This type is available if Syn is built with the `"derive"` or
-        /// `"full"` feature.*
-        pub Verbatim(ExprVerbatim #manual_extra_traits {
-            pub tts: TokenStream,
-        }),
-    }
-}
-
-#[cfg(feature = "extra-traits")]
-impl Eq for ExprVerbatim {}
-
-#[cfg(feature = "extra-traits")]
-impl PartialEq for ExprVerbatim {
-    fn eq(&self, other: &Self) -> bool {
-        TokenStreamHelper(&self.tts) == TokenStreamHelper(&other.tts)
-    }
-}
-
-#[cfg(feature = "extra-traits")]
-impl Hash for ExprVerbatim {
-    fn hash<H>(&self, state: &mut H)
-    where
-        H: Hasher,
-    {
-        TokenStreamHelper(&self.tts).hash(state);
-    }
-}
-
-impl Expr {
-    // Not public API.
-    #[doc(hidden)]
-    #[cfg(feature = "full")]
-    pub fn replace_attrs(&mut self, new: Vec<Attribute>) -> Vec<Attribute> {
-        match *self {
-            Expr::Box(ExprBox { ref mut attrs, .. })
-            | Expr::InPlace(ExprInPlace { ref mut attrs, .. })
-            | Expr::Array(ExprArray { ref mut attrs, .. })
-            | Expr::Call(ExprCall { ref mut attrs, .. })
-            | Expr::MethodCall(ExprMethodCall { ref mut attrs, .. })
-            | Expr::Tuple(ExprTuple { ref mut attrs, .. })
-            | Expr::Binary(ExprBinary { ref mut attrs, .. })
-            | Expr::Unary(ExprUnary { ref mut attrs, .. })
-            | Expr::Lit(ExprLit { ref mut attrs, .. })
-            | Expr::Cast(ExprCast { ref mut attrs, .. })
-            | Expr::Type(ExprType { ref mut attrs, .. })
-            | Expr::If(ExprIf { ref mut attrs, .. })
-            | Expr::IfLet(ExprIfLet { ref mut attrs, .. })
-            | Expr::While(ExprWhile { ref mut attrs, .. })
-            | Expr::WhileLet(ExprWhileLet { ref mut attrs, .. })
-            | Expr::ForLoop(ExprForLoop { ref mut attrs, .. })
-            | Expr::Loop(ExprLoop { ref mut attrs, .. })
-            | Expr::Match(ExprMatch { ref mut attrs, .. })
-            | Expr::Closure(ExprClosure { ref mut attrs, .. })
-            | Expr::Unsafe(ExprUnsafe { ref mut attrs, .. })
-            | Expr::Block(ExprBlock { ref mut attrs, .. })
-            | Expr::Assign(ExprAssign { ref mut attrs, .. })
-            | Expr::AssignOp(ExprAssignOp { ref mut attrs, .. })
-            | Expr::Field(ExprField { ref mut attrs, .. })
-            | Expr::Index(ExprIndex { ref mut attrs, .. })
-            | Expr::Range(ExprRange { ref mut attrs, .. })
-            | Expr::Path(ExprPath { ref mut attrs, .. })
-            | Expr::Reference(ExprReference { ref mut attrs, .. })
-            | Expr::Break(ExprBreak { ref mut attrs, .. })
-            | Expr::Continue(ExprContinue { ref mut attrs, .. })
-            | Expr::Return(ExprReturn { ref mut attrs, .. })
-            | Expr::Macro(ExprMacro { ref mut attrs, .. })
-            | Expr::Struct(ExprStruct { ref mut attrs, .. })
-            | Expr::Repeat(ExprRepeat { ref mut attrs, .. })
-            | Expr::Paren(ExprParen { ref mut attrs, .. })
-            | Expr::Group(ExprGroup { ref mut attrs, .. })
-            | Expr::Try(ExprTry { ref mut attrs, .. })
-            | Expr::Catch(ExprCatch { ref mut attrs, .. })
-            | Expr::Yield(ExprYield { ref mut attrs, .. }) => mem::replace(attrs, new),
-            Expr::Verbatim(_) => {
-                // TODO
-                Vec::new()
-            }
-        }
-    }
-}
-
-ast_enum! {
-    /// A struct or tuple struct field accessed in a struct literal or field
-    /// expression.
-    ///
-    /// *This type is available if Syn is built with the `"derive"` or `"full"`
-    /// feature.*
-    pub enum Member {
-        /// A named field like `self.x`.
-        Named(Ident),
-        /// An unnamed field like `self.0`.
-        Unnamed(Index),
-    }
-}
-
-ast_struct! {
-    /// The index of an unnamed tuple struct field.
-    ///
-    /// *This type is available if Syn is built with the `"derive"` or `"full"`
-    /// feature.*
-    pub struct Index #manual_extra_traits {
-        pub index: u32,
-        pub span: Span,
-    }
-}
-
-impl From<usize> for Index {
-    fn from(index: usize) -> Index {
-        assert!(index < u32::max_value() as usize);
-        Index {
-            index: index as u32,
-            span: Span::call_site(),
-        }
-    }
-}
-
-#[cfg(feature = "extra-traits")]
-impl Eq for Index {}
-
-#[cfg(feature = "extra-traits")]
-impl PartialEq for Index {
-    fn eq(&self, other: &Self) -> bool {
-        self.index == other.index
-    }
-}
-
-#[cfg(feature = "extra-traits")]
-impl Hash for Index {
-    fn hash<H: Hasher>(&self, state: &mut H) {
-        self.index.hash(state);
-    }
-}
-
-#[cfg(feature = "full")]
-ast_struct! {
-    /// The `::<>` explicit type parameters passed to a method call:
-    /// `parse::<u64>()`.
-    ///
-    /// *This type is available if Syn is built with the `"full"` feature.*
-    pub struct MethodTurbofish {
-        pub colon2_token: Token![::],
-        pub lt_token: Token![<],
-        pub args: Punctuated<GenericMethodArgument, Token![,]>,
-        pub gt_token: Token![>],
-    }
-}
-
-#[cfg(feature = "full")]
-ast_enum! {
-    /// An individual generic argument to a method, like `T`.
-    ///
-    /// *This type is available if Syn is built with the `"full"` feature.*
-    pub enum GenericMethodArgument {
-        /// A type argument.
-        Type(Type),
-        /// A const expression. Must be inside of a block.
-        ///
-        /// NOTE: Identity expressions are represented as Type arguments, as
-        /// they are indistinguishable syntactically.
-        Const(Expr),
-    }
-}
-
-#[cfg(feature = "full")]
-ast_struct! {
-    /// A field-value pair in a struct literal.
-    ///
-    /// *This type is available if Syn is built with the `"full"` feature.*
-    pub struct FieldValue {
-        /// Attributes tagged on the field.
-        pub attrs: Vec<Attribute>,
-
-        /// Name or index of the field.
-        pub member: Member,
-
-        /// The colon in `Struct { x: x }`. If written in shorthand like
-        /// `Struct { x }`, there is no colon.
-        pub colon_token: Option<Token![:]>,
-
-        /// Value of the field.
-        pub expr: Expr,
-    }
-}
-
-#[cfg(feature = "full")]
-ast_struct! {
-    /// A lifetime labeling a `for`, `while`, or `loop`.
-    ///
-    /// *This type is available if Syn is built with the `"full"` feature.*
-    pub struct Label {
-        pub name: Lifetime,
-        pub colon_token: Token![:],
-    }
-}
-
-#[cfg(feature = "full")]
-ast_struct! {
-    /// A braced block containing Rust statements.
-    ///
-    /// *This type is available if Syn is built with the `"full"` feature.*
-    pub struct Block {
-        pub brace_token: token::Brace,
-        /// Statements in a block
-        pub stmts: Vec<Stmt>,
-    }
-}
-
-#[cfg(feature = "full")]
-ast_enum! {
-    /// A statement, usually ending in a semicolon.
-    ///
-    /// *This type is available if Syn is built with the `"full"` feature.*
-    pub enum Stmt {
-        /// A local (let) binding.
-        Local(Local),
-
-        /// An item definition.
-        Item(Item),
-
-        /// Expr without trailing semicolon.
-        Expr(Expr),
-
-        /// Expression with trailing semicolon.
-        Semi(Expr, Token![;]),
-    }
-}
-
-#[cfg(feature = "full")]
-ast_struct! {
-    /// A local `let` binding: `let x: u64 = s.parse()?`.
-    ///
-    /// *This type is available if Syn is built with the `"full"` feature.*
-    pub struct Local {
-        pub attrs: Vec<Attribute>,
-        pub let_token: Token![let],
-        pub pats: Punctuated<Pat, Token![|]>,
-        pub ty: Option<(Token![:], Box<Type>)>,
-        pub init: Option<(Token![=], Box<Expr>)>,
-        pub semi_token: Token![;],
-    }
-}
-
-#[cfg(feature = "full")]
-ast_enum_of_structs! {
-    /// A pattern in a local binding, function signature, match expression, or
-    /// various other places.
-    ///
-    /// *This type is available if Syn is built with the `"full"` feature.*
-    ///
-    /// # Syntax tree enum
-    ///
-    /// This type is a [syntax tree enum].
-    ///
-    /// [syntax tree enum]: enum.Expr.html#syntax-tree-enums
-    // Clippy false positive
-    // https://github.com/Manishearth/rust-clippy/issues/1241
-    #[cfg_attr(feature = "cargo-clippy", allow(enum_variant_names))]
-    pub enum Pat {
-        /// A pattern that matches any value: `_`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Wild(PatWild {
-            pub underscore_token: Token![_],
-        }),
-
-        /// A pattern that binds a new variable: `ref mut binding @ SUBPATTERN`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Ident(PatIdent {
-            pub by_ref: Option<Token![ref]>,
-            pub mutability: Option<Token![mut]>,
-            pub ident: Ident,
-            pub subpat: Option<(Token![@], Box<Pat>)>,
-        }),
-
-        /// A struct or struct variant pattern: `Variant { x, y, .. }`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Struct(PatStruct {
-            pub path: Path,
-            pub brace_token: token::Brace,
-            pub fields: Punctuated<FieldPat, Token![,]>,
-            pub dot2_token: Option<Token![..]>,
-        }),
-
-        /// A tuple struct or tuple variant pattern: `Variant(x, y, .., z)`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub TupleStruct(PatTupleStruct {
-            pub path: Path,
-            pub pat: PatTuple,
-        }),
-
-        /// A path pattern like `Color::Red`, optionally qualified with a
-        /// self-type.
-        ///
-        /// Unquailfied path patterns can legally refer to variants, structs,
-        /// constants or associated constants. Quailfied path patterns like
-        /// `<A>::B::C` and `<A as Trait>::B::C` can only legally refer to
-        /// associated constants.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Path(PatPath {
-            pub qself: Option<QSelf>,
-            pub path: Path,
-        }),
-
-        /// A tuple pattern: `(a, b)`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Tuple(PatTuple {
-            pub paren_token: token::Paren,
-            pub front: Punctuated<Pat, Token![,]>,
-            pub dot2_token: Option<Token![..]>,
-            pub comma_token: Option<Token![,]>,
-            pub back: Punctuated<Pat, Token![,]>,
-        }),
-
-        /// A box pattern: `box v`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Box(PatBox {
-            pub box_token: Token![box],
-            pub pat: Box<Pat>,
-        }),
-
-        /// A reference pattern: `&mut (first, second)`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Ref(PatRef {
-            pub and_token: Token![&],
-            pub mutability: Option<Token![mut]>,
-            pub pat: Box<Pat>,
-        }),
-
-        /// A literal pattern: `0`.
-        ///
-        /// This holds an `Expr` rather than a `Lit` because negative numbers
-        /// are represented as an `Expr::Unary`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Lit(PatLit {
-            pub expr: Box<Expr>,
-        }),
-
-        /// A range pattern: `1..=2`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Range(PatRange {
-            pub lo: Box<Expr>,
-            pub limits: RangeLimits,
-            pub hi: Box<Expr>,
-        }),
-
-        /// A dynamically sized slice pattern: `[a, b, i.., y, z]`.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Slice(PatSlice {
-            pub bracket_token: token::Bracket,
-            pub front: Punctuated<Pat, Token![,]>,
-            pub middle: Option<Box<Pat>>,
-            pub dot2_token: Option<Token![..]>,
-            pub comma_token: Option<Token![,]>,
-            pub back: Punctuated<Pat, Token![,]>,
-        }),
-
-        /// A macro in expression position.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Macro(PatMacro {
-            pub mac: Macro,
-        }),
-
-        /// Tokens in pattern position not interpreted by Syn.
-        ///
-        /// *This type is available if Syn is built with the `"full"` feature.*
-        pub Verbatim(PatVerbatim #manual_extra_traits {
-            pub tts: TokenStream,
-        }),
-    }
-}
-
-#[cfg(all(feature = "full", feature = "extra-traits"))]
-impl Eq for PatVerbatim {}
-
-#[cfg(all(feature = "full", feature = "extra-traits"))]
-impl PartialEq for PatVerbatim {
-    fn eq(&self, other: &Self) -> bool {
-        TokenStreamHelper(&self.tts) == TokenStreamHelper(&other.tts)
-    }
-}
-
-#[cfg(all(feature = "full", feature = "extra-traits"))]
-impl Hash for PatVerbatim {
-    fn hash<H>(&self, state: &mut H)
-    where
-        H: Hasher,
-    {
-        TokenStreamHelper(&self.tts).hash(state);
-    }
-}
-
-#[cfg(feature = "full")]
-ast_struct! {
-    /// One arm of a `match` expression: `0...10 => { return true; }`.
-    ///
-    /// As in:
-    ///
-    /// ```rust
-    /// # fn f() -> bool {
-    /// #     let n = 0;
-    /// match n {
-    ///     0...10 => {
-    ///         return true;
-    ///     }
-    ///     // ...
-    ///     # _ => {}
-    /// }
-    /// #   false
-    /// # }
-    /// ```
-    ///
-    /// *This type is available if Syn is built with the `"full"` feature.*
-    pub struct Arm {
-        pub attrs: Vec<Attribute>,
-        pub leading_vert: Option<Token![|]>,
-        pub pats: Punctuated<Pat, Token![|]>,
-        pub guard: Option<(Token![if], Box<Expr>)>,
-        pub fat_arrow_token: Token![=>],
-        pub body: Box<Expr>,
-        pub comma: Option<Token![,]>,
-    }
-}
-
-#[cfg(feature = "full")]
-ast_enum! {
-    /// Limit types of a range, inclusive or exclusive.
-    ///
-    /// *This type is available if Syn is built with the `"full"` feature.*
-    #[cfg_attr(feature = "clone-impls", derive(Copy))]
-    pub enum RangeLimits {
-        /// Inclusive at the beginning, exclusive at the end.
-        HalfOpen(Token![..]),
-        /// Inclusive at the beginning and end.
-        Closed(Token![..=]),
-    }
-}
-
-#[cfg(feature = "full")]
-ast_struct! {
-    /// A single field in a struct pattern.
-    ///
-    /// Patterns like the fields of Foo `{ x, ref y, ref mut z }` are treated
-    /// the same as `x: x, y: ref y, z: ref mut z` but there is no colon token.
-    ///
-    /// *This type is available if Syn is built with the `"full"` feature.*
-    pub struct FieldPat {
-        pub attrs: Vec<Attribute>,
-        pub member: Member,
-        pub colon_token: Option<Token![:]>,
-        pub pat: Box<Pat>,
-    }
-}
-
-#[cfg(any(feature = "parsing", feature = "printing"))]
-#[cfg(feature = "full")]
-fn arm_expr_requires_comma(expr: &Expr) -> bool {
-    // see https://github.com/rust-lang/rust/blob/eb8f2586e
-    //                       /src/libsyntax/parse/classify.rs#L17-L37
-    match *expr {
-        Expr::Unsafe(..)
-        | Expr::Block(..)
-        | Expr::If(..)
-        | Expr::IfLet(..)
-        | Expr::Match(..)
-        | Expr::While(..)
-        | Expr::WhileLet(..)
-        | Expr::Loop(..)
-        | Expr::ForLoop(..)
-        | Expr::Catch(..) => false,
-        _ => true,
-    }
-}
-
-#[cfg(feature = "parsing")]
-pub mod parsing {
-    use super::*;
-    use path::parsing::qpath;
-    #[cfg(feature = "full")]
-    use path::parsing::ty_no_eq_after;
-
-    use buffer::Cursor;
-    #[cfg(feature = "full")]
-    use parse_error;
-    #[cfg(feature = "full")]
-    use proc_macro2::TokenStream;
-    use synom::PResult;
-    use synom::Synom;
-
-    // When we're parsing expressions which occur before blocks, like in an if
-    // statement's condition, we cannot parse a struct literal.
-    //
-    // Struct literals are ambiguous in certain positions
-    // https://github.com/rust-lang/rfcs/pull/92
-    macro_rules! ambiguous_expr {
-        ($i:expr, $allow_struct:ident) => {
-            ambiguous_expr($i, $allow_struct, true)
-        };
-    }
-
-    // When we are parsing an optional suffix expression, we cannot allow blocks
-    // if structs are not allowed.
-    //
-    // Example:
-    //
-    //     if break {} {}
-    //
-    // is ambiguous between:
-    //
-    //     if (break {}) {}
-    //     if (break) {} {}
-    #[cfg(feature = "full")]
-    macro_rules! opt_ambiguous_expr {
-        ($i:expr, $allow_struct:ident) => {
-            option!($i, call!(ambiguous_expr, $allow_struct, $allow_struct))
-        };
-    }
-
-    impl Synom for Expr {
-        named!(parse -> Self, ambiguous_expr!(true));
-
-        fn description() -> Option<&'static str> {
-            Some("expression")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    named!(expr_no_struct -> Expr, ambiguous_expr!(false));
-
-    // Parse an arbitrary expression.
-    #[cfg(feature = "full")]
-    fn ambiguous_expr(i: Cursor, allow_struct: bool, allow_block: bool) -> PResult<Expr> {
-        call!(i, assign_expr, allow_struct, allow_block)
-    }
-
-    #[cfg(not(feature = "full"))]
-    fn ambiguous_expr(i: Cursor, allow_struct: bool, allow_block: bool) -> PResult<Expr> {
-        // NOTE: We intentionally skip assign_expr, placement_expr, and
-        // range_expr, as they are not parsed in non-full mode.
-        call!(i, or_expr, allow_struct, allow_block)
-    }
-
-    // Parse a left-associative binary operator.
-    macro_rules! binop {
-        (
-            $name: ident,
-            $next: ident,
-            $submac: ident!( $($args:tt)* )
-        ) => {
-            named!($name(allow_struct: bool, allow_block: bool) -> Expr, do_parse!(
-                mut e: call!($next, allow_struct, allow_block) >>
-                many0!(do_parse!(
-                    op: $submac!($($args)*) >>
-                    rhs: call!($next, allow_struct, true) >>
-                    ({
-                        e = ExprBinary {
-                            attrs: Vec::new(),
-                            left: Box::new(e.into()),
-                            op: op,
-                            right: Box::new(rhs.into()),
-                        }.into();
-                    })
-                )) >>
-                (e)
-            ));
-        }
-    }
-
-    // <placement> = <placement> ..
-    // <placement> += <placement> ..
-    // <placement> -= <placement> ..
-    // <placement> *= <placement> ..
-    // <placement> /= <placement> ..
-    // <placement> %= <placement> ..
-    // <placement> ^= <placement> ..
-    // <placement> &= <placement> ..
-    // <placement> |= <placement> ..
-    // <placement> <<= <placement> ..
-    // <placement> >>= <placement> ..
-    //
-    // NOTE: This operator is right-associative.
-    #[cfg(feature = "full")]
-    named!(assign_expr(allow_struct: bool, allow_block: bool) -> Expr, do_parse!(
-        mut e: call!(placement_expr, allow_struct, allow_block) >>
-        alt!(
-            do_parse!(
-                eq: punct!(=) >>
-                // Recurse into self to parse right-associative operator.
-                rhs: call!(assign_expr, allow_struct, true) >>
-                ({
-                    e = ExprAssign {
-                        attrs: Vec::new(),
-                        left: Box::new(e),
-                        eq_token: eq,
-                        right: Box::new(rhs),
-                    }.into();
-                })
-            )
-            |
-            do_parse!(
-                op: call!(BinOp::parse_assign_op) >>
-                // Recurse into self to parse right-associative operator.
-                rhs: call!(assign_expr, allow_struct, true) >>
-                ({
-                    e = ExprAssignOp {
-                        attrs: Vec::new(),
-                        left: Box::new(e),
-                        op: op,
-                        right: Box::new(rhs),
-                    }.into();
-                })
-            )
-            |
-            epsilon!()
-        ) >>
-        (e)
-    ));
-
-    // <range> <- <range> ..
-    //
-    // NOTE: The `in place { expr }` version of this syntax is parsed in
-    // `atom_expr`, not here.
-    //
-    // NOTE: This operator is right-associative.
-    #[cfg(feature = "full")]
-    named!(placement_expr(allow_struct: bool, allow_block: bool) -> Expr, do_parse!(
-        mut e: call!(range_expr, allow_struct, allow_block) >>
-        alt!(
-            do_parse!(
-                arrow: punct!(<-) >>
-                // Recurse into self to parse right-associative operator.
-                rhs: call!(placement_expr, allow_struct, true) >>
-                ({
-                    e = ExprInPlace {
-                        attrs: Vec::new(),
-                        // op: BinOp::Place(larrow),
-                        place: Box::new(e),
-                        arrow_token: arrow,
-                        value: Box::new(rhs),
-                    }.into();
-                })
-            )
-            |
-            epsilon!()
-        ) >>
-        (e)
-    ));
-
-    // <or> ... <or> ..
-    // <or> .. <or> ..
-    // <or> ..
-    //
-    // NOTE: This is currently parsed oddly - I'm not sure of what the exact
-    // rules are for parsing these expressions are, but this is not correct.
-    // For example, `a .. b .. c` is not a legal expression. It should not
-    // be parsed as either `(a .. b) .. c` or `a .. (b .. c)` apparently.
-    //
-    // NOTE: The form of ranges which don't include a preceding expression are
-    // parsed by `atom_expr`, rather than by this function.
-    #[cfg(feature = "full")]
-    named!(range_expr(allow_struct: bool, allow_block: bool) -> Expr, do_parse!(
-        mut e: call!(or_expr, allow_struct, allow_block) >>
-        many0!(do_parse!(
-            limits: syn!(RangeLimits) >>
-            // We don't want to allow blocks here if we don't allow structs. See
-            // the reasoning for `opt_ambiguous_expr!` above.
-            hi: option!(call!(or_expr, allow_struct, allow_struct)) >>
-            ({
-                e = ExprRange {
-                    attrs: Vec::new(),
-                    from: Some(Box::new(e)),
-                    limits: limits,
-                    to: hi.map(|e| Box::new(e)),
-                }.into();
-            })
-        )) >>
-        (e)
-    ));
-
-    // <and> || <and> ...
-    binop!(or_expr, and_expr, map!(punct!(||), BinOp::Or));
-
-    // <compare> && <compare> ...
-    binop!(and_expr, compare_expr, map!(punct!(&&), BinOp::And));
-
-    // <bitor> == <bitor> ...
-    // <bitor> != <bitor> ...
-    // <bitor> >= <bitor> ...
-    // <bitor> <= <bitor> ...
-    // <bitor> > <bitor> ...
-    // <bitor> < <bitor> ...
-    //
-    // NOTE: This operator appears to be parsed as left-associative, but errors
-    // if it is used in a non-associative manner.
-    binop!(
-        compare_expr,
-        bitor_expr,
-        alt!(
-        punct!(==) => { BinOp::Eq }
-        |
-        punct!(!=) => { BinOp::Ne }
-        |
-        // must be above Lt
-        punct!(<=) => { BinOp::Le }
-        |
-        // must be above Gt
-        punct!(>=) => { BinOp::Ge }
-        |
-        do_parse!(
-            // Make sure that we don't eat the < part of a <- operator
-            not!(punct!(<-)) >>
-            t: punct!(<) >>
-            (BinOp::Lt(t))
-        )
-        |
-        punct!(>) => { BinOp::Gt }
-    )
-    );
-
-    // <bitxor> | <bitxor> ...
-    binop!(
-        bitor_expr,
-        bitxor_expr,
-        do_parse!(not!(punct!(||)) >> not!(punct!(|=)) >> t: punct!(|) >> (BinOp::BitOr(t)))
-    );
-
-    // <bitand> ^ <bitand> ...
-    binop!(
-        bitxor_expr,
-        bitand_expr,
-        do_parse!(
-            // NOTE: Make sure we aren't looking at ^=.
-            not!(punct!(^=)) >> t: punct!(^) >> (BinOp::BitXor(t))
-        )
-    );
-
-    // <shift> & <shift> ...
-    binop!(
-        bitand_expr,
-        shift_expr,
-        do_parse!(
-            // NOTE: Make sure we aren't looking at && or &=.
-            not!(punct!(&&)) >> not!(punct!(&=)) >> t: punct!(&) >> (BinOp::BitAnd(t))
-        )
-    );
-
-    // <arith> << <arith> ...
-    // <arith> >> <arith> ...
-    binop!(
-        shift_expr,
-        arith_expr,
-        alt!(
-        punct!(<<) => { BinOp::Shl }
-        |
-        punct!(>>) => { BinOp::Shr }
-    )
-    );
-
-    // <term> + <term> ...
-    // <term> - <term> ...
-    binop!(
-        arith_expr,
-        term_expr,
-        alt!(
-        punct!(+) => { BinOp::Add }
-        |
-        punct!(-) => { BinOp::Sub }
-    )
-    );
-
-    // <cast> * <cast> ...
-    // <cast> / <cast> ...
-    // <cast> % <cast> ...
-    binop!(
-        term_expr,
-        cast_expr,
-        alt!(
-        punct!(*) => { BinOp::Mul }
-        |
-        punct!(/) => { BinOp::Div }
-        |
-        punct!(%) => { BinOp::Rem }
-    )
-    );
-
-    // <unary> as <ty>
-    // <unary> : <ty>
-    #[cfg(feature = "full")]
-    named!(cast_expr(allow_struct: bool, allow_block: bool) -> Expr, do_parse!(
-        mut e: call!(unary_expr, allow_struct, allow_block) >>
-        many0!(alt!(
-            do_parse!(
-                as_: keyword!(as) >>
-                // We can't accept `A + B` in cast expressions, as it's
-                // ambiguous with the + expression.
-                ty: call!(Type::without_plus) >>
-                ({
-                    e = ExprCast {
-                        attrs: Vec::new(),
-                        expr: Box::new(e),
-                        as_token: as_,
-                        ty: Box::new(ty),
-                    }.into();
-                })
-            )
-            |
-            do_parse!(
-                colon: punct!(:) >>
-                // We can't accept `A + B` in cast expressions, as it's
-                // ambiguous with the + expression.
-                ty: call!(Type::without_plus) >>
-                ({
-                    e = ExprType {
-                        attrs: Vec::new(),
-                        expr: Box::new(e),
-                        colon_token: colon,
-                        ty: Box::new(ty),
-                    }.into();
-                })
-            )
-        )) >>
-        (e)
-    ));
-
-    // <unary> as <ty>
-    #[cfg(not(feature = "full"))]
-    named!(cast_expr(allow_struct: bool, allow_block: bool) -> Expr, do_parse!(
-        mut e: call!(unary_expr, allow_struct, allow_block) >>
-        many0!(do_parse!(
-            as_: keyword!(as) >>
-            // We can't accept `A + B` in cast expressions, as it's
-            // ambiguous with the + expression.
-            ty: call!(Type::without_plus) >>
-            ({
-                e = ExprCast {
-                    attrs: Vec::new(),
-                    expr: Box::new(e),
-                    as_token: as_,
-                    ty: Box::new(ty),
-                }.into();
-            })
-        )) >>
-        (e)
-    ));
-
-    // <UnOp> <trailer>
-    // & <trailer>
-    // &mut <trailer>
-    // box <trailer>
-    #[cfg(feature = "full")]
-    named!(unary_expr(allow_struct: bool, allow_block: bool) -> Expr, alt!(
-        do_parse!(
-            attrs: many0!(Attribute::parse_outer) >>
-            op: syn!(UnOp) >>
-            expr: call!(unary_expr, allow_struct, true) >>
-            (ExprUnary {
-                attrs: attrs,
-                op: op,
-                expr: Box::new(expr),
-            }.into())
-        )
-        |
-        do_parse!(
-            attrs: many0!(Attribute::parse_outer) >>
-            and: punct!(&) >>
-            mutability: option!(keyword!(mut)) >>
-            expr: call!(unary_expr, allow_struct, true) >>
-            (ExprReference {
-                attrs: attrs,
-                and_token: and,
-                mutability: mutability,
-                expr: Box::new(expr),
-            }.into())
-        )
-        |
-        do_parse!(
-            attrs: many0!(Attribute::parse_outer) >>
-            box_: keyword!(box) >>
-            expr: call!(unary_expr, allow_struct, true) >>
-            (ExprBox {
-                attrs: attrs,
-                box_token: box_,
-                expr: Box::new(expr),
-            }.into())
-        )
-        |
-        call!(trailer_expr, allow_struct, allow_block)
-    ));
-
-    // XXX: This duplication is ugly
-    #[cfg(not(feature = "full"))]
-    named!(unary_expr(allow_struct: bool, allow_block: bool) -> Expr, alt!(
-        do_parse!(
-            op: syn!(UnOp) >>
-            expr: call!(unary_expr, allow_struct, true) >>
-            (ExprUnary {
-                attrs: Vec::new(),
-                op: op,
-                expr: Box::new(expr),
-            }.into())
-        )
-        |
-        call!(trailer_expr, allow_struct, allow_block)
-    ));
-
-    #[cfg(feature = "full")]
-    fn take_outer(attrs: &mut Vec<Attribute>) -> Vec<Attribute> {
-        let mut outer = Vec::new();
-        let mut inner = Vec::new();
-        for attr in mem::replace(attrs, Vec::new()) {
-            match attr.style {
-                AttrStyle::Outer => outer.push(attr),
-                AttrStyle::Inner(_) => inner.push(attr),
-            }
-        }
-        *attrs = inner;
-        outer
-    }
-
-    // <atom> (..<args>) ...
-    // <atom> . <ident> (..<args>) ...
-    // <atom> . <ident> ...
-    // <atom> . <lit> ...
-    // <atom> [ <expr> ] ...
-    // <atom> ? ...
-    #[cfg(feature = "full")]
-    named!(trailer_expr(allow_struct: bool, allow_block: bool) -> Expr, do_parse!(
-        mut e: call!(atom_expr, allow_struct, allow_block) >>
-        outer_attrs: value!({
-            let mut attrs = e.replace_attrs(Vec::new());
-            let outer_attrs = take_outer(&mut attrs);
-            e.replace_attrs(attrs);
-            outer_attrs
-        }) >>
-        many0!(alt!(
-            tap!(args: and_call => {
-                let (paren, args) = args;
-                e = ExprCall {
-                    attrs: Vec::new(),
-                    func: Box::new(e),
-                    args: args,
-                    paren_token: paren,
-                }.into();
-            })
-            |
-            tap!(more: and_method_call => {
-                let mut call = more;
-                call.receiver = Box::new(e);
-                e = call.into();
-            })
-            |
-            tap!(field: and_field => {
-                let (token, member) = field;
-                e = ExprField {
-                    attrs: Vec::new(),
-                    base: Box::new(e),
-                    dot_token: token,
-                    member: member,
-                }.into();
-            })
-            |
-            tap!(i: and_index => {
-                let (bracket, i) = i;
-                e = ExprIndex {
-                    attrs: Vec::new(),
-                    expr: Box::new(e),
-                    bracket_token: bracket,
-                    index: Box::new(i),
-                }.into();
-            })
-            |
-            tap!(question: punct!(?) => {
-                e = ExprTry {
-                    attrs: Vec::new(),
-                    expr: Box::new(e),
-                    question_token: question,
-                }.into();
-            })
-        )) >>
-        ({
-            let mut attrs = outer_attrs;
-            attrs.extend(e.replace_attrs(Vec::new()));
-            e.replace_attrs(attrs);
-            e
-        })
-    ));
-
-    // XXX: Duplication == ugly
-    #[cfg(not(feature = "full"))]
-    named!(trailer_expr(allow_struct: bool, allow_block: bool) -> Expr, do_parse!(
-        mut e: call!(atom_expr, allow_struct, allow_block) >>
-        many0!(alt!(
-            tap!(args: and_call => {
-                e = ExprCall {
-                    attrs: Vec::new(),
-                    func: Box::new(e),
-                    paren_token: args.0,
-                    args: args.1,
-                }.into();
-            })
-            |
-            tap!(field: and_field => {
-                let (token, member) = field;
-                e = ExprField {
-                    attrs: Vec::new(),
-                    base: Box::new(e),
-                    dot_token: token,
-                    member: member,
-                }.into();
-            })
-            |
-            tap!(i: and_index => {
-                e = ExprIndex {
-                    attrs: Vec::new(),
-                    expr: Box::new(e),
-                    bracket_token: i.0,
-                    index: Box::new(i.1),
-                }.into();
-            })
-        )) >>
-        (e)
-    ));
-
-    // Parse all atomic expressions which don't have to worry about precedence
-    // interactions, as they are fully contained.
-    #[cfg(feature = "full")]
-    named!(atom_expr(allow_struct: bool, allow_block: bool) -> Expr, alt!(
-        syn!(ExprGroup) => { Expr::Group } // must be placed first
-        |
-        syn!(ExprLit) => { Expr::Lit } // must be before expr_struct
-        |
-        // must be before ExprStruct
-        call!(unstable_async_block) => { Expr::Verbatim }
-        |
-        // must be before expr_path
-        cond_reduce!(allow_struct, syn!(ExprStruct)) => { Expr::Struct }
-        |
-        syn!(ExprParen) => { Expr::Paren } // must be before expr_tup
-        |
-        syn!(ExprMacro) => { Expr::Macro } // must be before expr_path
-        |
-        call!(expr_break, allow_struct) // must be before expr_path
-        |
-        syn!(ExprContinue) => { Expr::Continue } // must be before expr_path
-        |
-        call!(expr_ret, allow_struct) // must be before expr_path
-        |
-        syn!(ExprArray) => { Expr::Array }
-        |
-        syn!(ExprTuple) => { Expr::Tuple }
-        |
-        syn!(ExprIf) => { Expr::If }
-        |
-        syn!(ExprIfLet) => { Expr::IfLet }
-        |
-        syn!(ExprWhile) => { Expr::While }
-        |
-        syn!(ExprWhileLet) => { Expr::WhileLet }
-        |
-        syn!(ExprForLoop) => { Expr::ForLoop }
-        |
-        syn!(ExprLoop) => { Expr::Loop }
-        |
-        syn!(ExprMatch) => { Expr::Match }
-        |
-        syn!(ExprCatch) => { Expr::Catch }
-        |
-        syn!(ExprYield) => { Expr::Yield }
-        |
-        syn!(ExprUnsafe) => { Expr::Unsafe }
-        |
-        call!(expr_closure, allow_struct)
-        |
-        cond_reduce!(allow_block, syn!(ExprBlock)) => { Expr::Block }
-        |
-        call!(unstable_labeled_block) => { Expr::Verbatim }
-        |
-        // NOTE: This is the prefix-form of range
-        call!(expr_range, allow_struct)
-        |
-        syn!(ExprPath) => { Expr::Path }
-        |
-        syn!(ExprRepeat) => { Expr::Repeat }
-    ));
-
-    #[cfg(not(feature = "full"))]
-    named!(atom_expr(_allow_struct: bool, _allow_block: bool) -> Expr, alt!(
-        syn!(ExprLit) => { Expr::Lit }
-        |
-        syn!(ExprParen) => { Expr::Paren }
-        |
-        syn!(ExprPath) => { Expr::Path }
-    ));
-
-    #[cfg(feature = "full")]
-    named!(expr_nosemi -> Expr, do_parse!(
-        nosemi: alt!(
-            syn!(ExprIf) => { Expr::If }
-            |
-            syn!(ExprIfLet) => { Expr::IfLet }
-            |
-            syn!(ExprWhile) => { Expr::While }
-            |
-            syn!(ExprWhileLet) => { Expr::WhileLet }
-            |
-            syn!(ExprForLoop) => { Expr::ForLoop }
-            |
-            syn!(ExprLoop) => { Expr::Loop }
-            |
-            syn!(ExprMatch) => { Expr::Match }
-            |
-            syn!(ExprCatch) => { Expr::Catch }
-            |
-            syn!(ExprYield) => { Expr::Yield }
-            |
-            syn!(ExprUnsafe) => { Expr::Unsafe }
-            |
-            syn!(ExprBlock) => { Expr::Block }
-            |
-            call!(unstable_labeled_block) => { Expr::Verbatim }
-        ) >>
-        // If the next token is a `.` or a `?` it is special-cased to parse
-        // as an expression instead of a blockexpression.
-        not!(punct!(.)) >>
-        not!(punct!(?)) >>
-        (nosemi)
-    ));
-
-    impl Synom for ExprLit {
-        #[cfg(not(feature = "full"))]
-        named!(parse -> Self, do_parse!(
-            lit: syn!(Lit) >>
-            (ExprLit {
-                attrs: Vec::new(),
-                lit: lit,
-            })
-        ));
-
-        #[cfg(feature = "full")]
-        named!(parse -> Self, do_parse!(
-            attrs: many0!(Attribute::parse_outer) >>
-            lit: syn!(Lit) >>
-            (ExprLit {
-                attrs: attrs,
-                lit: lit,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("literal")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for ExprMacro {
-        named!(parse -> Self, do_parse!(
-            attrs: many0!(Attribute::parse_outer) >>
-            mac: syn!(Macro) >>
-            (ExprMacro {
-                attrs: attrs,
-                mac: mac,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("macro invocation expression")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for ExprGroup {
-        named!(parse -> Self, do_parse!(
-            e: grouped!(syn!(Expr)) >>
-            (ExprGroup {
-                attrs: Vec::new(),
-                expr: Box::new(e.1),
-                group_token: e.0,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("expression surrounded by invisible delimiters")
-        }
-    }
-
-    impl Synom for ExprParen {
-        #[cfg(not(feature = "full"))]
-        named!(parse -> Self, do_parse!(
-            e: parens!(syn!(Expr)) >>
-            (ExprParen {
-                attrs: Vec::new(),
-                paren_token: e.0,
-                expr: Box::new(e.1),
-            })
-        ));
-
-        #[cfg(feature = "full")]
-        named!(parse -> Self, do_parse!(
-            outer_attrs: many0!(Attribute::parse_outer) >>
-            e: parens!(tuple!(
-                many0!(Attribute::parse_inner),
-                syn!(Expr),
-            )) >>
-            (ExprParen {
-                attrs: {
-                    let mut attrs = outer_attrs;
-                    attrs.extend((e.1).0);
-                    attrs
-                },
-                paren_token: e.0,
-                expr: Box::new((e.1).1),
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("parenthesized expression")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for ExprArray {
-        named!(parse -> Self, do_parse!(
-            outer_attrs: many0!(Attribute::parse_outer) >>
-            elems: brackets!(tuple!(
-                many0!(Attribute::parse_inner),
-                call!(Punctuated::parse_terminated),
-            )) >>
-            (ExprArray {
-                attrs: {
-                    let mut attrs = outer_attrs;
-                    attrs.extend((elems.1).0);
-                    attrs
-                },
-                bracket_token: elems.0,
-                elems: (elems.1).1,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("array expression")
-        }
-    }
-
-    named!(and_call -> (token::Paren, Punctuated<Expr, Token![,]>),
-        parens!(Punctuated::parse_terminated)
-    );
-
-    #[cfg(feature = "full")]
-    named!(and_method_call -> ExprMethodCall, do_parse!(
-        dot: punct!(.) >>
-        method: syn!(Ident) >>
-        turbofish: option!(tuple!(
-            punct!(::),
-            punct!(<),
-            call!(Punctuated::parse_terminated),
-            punct!(>),
-        )) >>
-        args: parens!(Punctuated::parse_terminated) >>
-        ({
-            ExprMethodCall {
-                attrs: Vec::new(),
-                // this expr will get overwritten after being returned
-                receiver: Box::new(Expr::Verbatim(ExprVerbatim {
-                    tts: TokenStream::new(),
-                })),
-
-                method: method,
-                turbofish: turbofish.map(|fish| MethodTurbofish {
-                    colon2_token: fish.0,
-                    lt_token: fish.1,
-                    args: fish.2,
-                    gt_token: fish.3,
-                }),
-                args: args.1,
-                paren_token: args.0,
-                dot_token: dot,
-            }
-        })
-    ));
-
-    #[cfg(feature = "full")]
-    impl Synom for GenericMethodArgument {
-        // TODO parse const generics as well
-        named!(parse -> Self, map!(ty_no_eq_after, GenericMethodArgument::Type));
-
-        fn description() -> Option<&'static str> {
-            Some("generic method argument")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for ExprTuple {
-        named!(parse -> Self, do_parse!(
-            outer_attrs: many0!(Attribute::parse_outer) >>
-            elems: parens!(tuple!(
-                many0!(Attribute::parse_inner),
-                call!(Punctuated::parse_terminated),
-            )) >>
-            (ExprTuple {
-                attrs: {
-                    let mut attrs = outer_attrs;
-                    attrs.extend((elems.1).0);
-                    attrs
-                },
-                elems: (elems.1).1,
-                paren_token: elems.0,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("tuple")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for ExprIfLet {
-        named!(parse -> Self, do_parse!(
-            if_: keyword!(if) >>
-            let_: keyword!(let) >>
-            pats: call!(Punctuated::parse_separated_nonempty) >>
-            eq: punct!(=) >>
-            cond: expr_no_struct >>
-            then_block: braces!(Block::parse_within) >>
-            else_block: option!(else_block) >>
-            (ExprIfLet {
-                attrs: Vec::new(),
-                pats: pats,
-                let_token: let_,
-                eq_token: eq,
-                expr: Box::new(cond),
-                then_branch: Block {
-                    brace_token: then_block.0,
-                    stmts: then_block.1,
-                },
-                if_token: if_,
-                else_branch: else_block,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("`if let` expression")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for ExprIf {
-        named!(parse -> Self, do_parse!(
-            if_: keyword!(if) >>
-            cond: expr_no_struct >>
-            then_block: braces!(Block::parse_within) >>
-            else_block: option!(else_block) >>
-            (ExprIf {
-                attrs: Vec::new(),
-                cond: Box::new(cond),
-                then_branch: Block {
-                    brace_token: then_block.0,
-                    stmts: then_block.1,
-                },
-                if_token: if_,
-                else_branch: else_block,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("`if` expression")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    named!(else_block -> (Token![else], Box<Expr>), do_parse!(
-        else_: keyword!(else) >>
-        expr: alt!(
-            syn!(ExprIf) => { Expr::If }
-            |
-            syn!(ExprIfLet) => { Expr::IfLet }
-            |
-            do_parse!(
-                else_block: braces!(Block::parse_within) >>
-                (Expr::Block(ExprBlock {
-                    attrs: Vec::new(),
-                    block: Block {
-                        brace_token: else_block.0,
-                        stmts: else_block.1,
-                    },
-                }))
-            )
-        ) >>
-        (else_, Box::new(expr))
-    ));
-
-    #[cfg(feature = "full")]
-    impl Synom for ExprForLoop {
-        named!(parse -> Self, do_parse!(
-            outer_attrs: many0!(Attribute::parse_outer) >>
-            label: option!(syn!(Label)) >>
-            for_: keyword!(for) >>
-            pat: syn!(Pat) >>
-            in_: keyword!(in) >>
-            expr: expr_no_struct >>
-            block: braces!(tuple!(
-                many0!(Attribute::parse_inner),
-                call!(Block::parse_within),
-            )) >>
-            (ExprForLoop {
-                attrs: {
-                    let mut attrs = outer_attrs;
-                    attrs.extend((block.1).0);
-                    attrs
-                },
-                label: label,
-                for_token: for_,
-                pat: Box::new(pat),
-                in_token: in_,
-                expr: Box::new(expr),
-                body: Block {
-                    brace_token: block.0,
-                    stmts: (block.1).1,
-                },
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("`for` loop")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for ExprLoop {
-        named!(parse -> Self, do_parse!(
-            outer_attrs: many0!(Attribute::parse_outer) >>
-            label: option!(syn!(Label)) >>
-            loop_: keyword!(loop) >>
-            block: braces!(tuple!(
-                many0!(Attribute::parse_inner),
-                call!(Block::parse_within),
-            )) >>
-            (ExprLoop {
-                attrs: {
-                    let mut attrs = outer_attrs;
-                    attrs.extend((block.1).0);
-                    attrs
-                },
-                label: label,
-                loop_token: loop_,
-                body: Block {
-                    brace_token: block.0,
-                    stmts: (block.1).1,
-                },
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("`loop`")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for ExprMatch {
-        named!(parse -> Self, do_parse!(
-            outer_attrs: many0!(Attribute::parse_outer) >>
-            match_: keyword!(match) >>
-            obj: expr_no_struct >>
-            braced_content: braces!(tuple!(
-                many0!(Attribute::parse_inner),
-                many0!(syn!(Arm)),
-            )) >>
-            (ExprMatch {
-                attrs: {
-                    let mut attrs = outer_attrs;
-                    attrs.extend((braced_content.1).0);
-                    attrs
-                },
-                expr: Box::new(obj),
-                match_token: match_,
-                brace_token: braced_content.0,
-                arms: (braced_content.1).1,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("`match` expression")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for ExprCatch {
-        named!(parse -> Self, do_parse!(
-            do_: keyword!(do) >>
-            catch_: keyword!(catch) >>
-            catch_block: syn!(Block) >>
-            (ExprCatch {
-                attrs: Vec::new(),
-                block: catch_block,
-                do_token: do_,
-                catch_token: catch_,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("`catch` expression")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for ExprYield {
-        named!(parse -> Self, do_parse!(
-            yield_: keyword!(yield) >>
-            expr: option!(syn!(Expr)) >>
-            (ExprYield {
-                attrs: Vec::new(),
-                yield_token: yield_,
-                expr: expr.map(Box::new),
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("`yield` expression")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for Arm {
-        named!(parse -> Self, do_parse!(
-            attrs: many0!(Attribute::parse_outer) >>
-            leading_vert: option!(punct!(|)) >>
-            pats: call!(Punctuated::parse_separated_nonempty) >>
-            guard: option!(tuple!(keyword!(if), syn!(Expr))) >>
-            fat_arrow: punct!(=>) >>
-            body: do_parse!(
-                expr: alt!(expr_nosemi | syn!(Expr)) >>
-                comma: switch!(value!(arm_expr_requires_comma(&expr)),
-                    true => alt!(
-                        input_end!() => { |_| None }
-                        |
-                        punct!(,) => { Some }
-                    )
-                    |
-                    false => option!(punct!(,))
-                ) >>
-                (expr, comma)
-            ) >>
-            (Arm {
-                fat_arrow_token: fat_arrow,
-                attrs: attrs,
-                leading_vert: leading_vert,
-                pats: pats,
-                guard: guard.map(|(if_, guard)| (if_, Box::new(guard))),
-                body: Box::new(body.0),
-                comma: body.1,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("`match` arm")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    named!(expr_closure(allow_struct: bool) -> Expr, do_parse!(
-        begin: call!(verbatim::grab_cursor) >>
-        attrs: many0!(Attribute::parse_outer) >>
-        asyncness: option!(keyword!(async)) >>
-        movability: option!(cond_reduce!(asyncness.is_none(), keyword!(static))) >>
-        capture: option!(keyword!(move)) >>
-        or1: punct!(|) >>
-        inputs: call!(Punctuated::parse_terminated_with, fn_arg) >>
-        or2: punct!(|) >>
-        ret_and_body: alt!(
-            do_parse!(
-                arrow: punct!(->) >>
-                ty: syn!(Type) >>
-                body: syn!(Block) >>
-                (
-                    ReturnType::Type(arrow, Box::new(ty)),
-                    Expr::Block(ExprBlock {
-                        attrs: Vec::new(),
-                        block: body,
-                    },
-                ))
-            )
-            |
-            map!(ambiguous_expr!(allow_struct), |e| (ReturnType::Default, e))
-        ) >>
-        end: call!(verbatim::grab_cursor) >>
-        ({
-            if asyncness.is_some() {
-                // TODO: include asyncness in ExprClosure
-                // https://github.com/dtolnay/syn/issues/396
-                Expr::Verbatim(ExprVerbatim {
-                    tts: verbatim::token_range(begin..end),
-                })
-            } else {
-                Expr::Closure(ExprClosure {
-                    attrs: attrs,
-                    movability: movability,
-                    capture: capture,
-                    or1_token: or1,
-                    inputs: inputs,
-                    or2_token: or2,
-                    output: ret_and_body.0,
-                    body: Box::new(ret_and_body.1),
-                })
-            }
-        })
-    ));
-
-    #[cfg(feature = "full")]
-    named!(unstable_async_block -> ExprVerbatim, do_parse!(
-        begin: call!(verbatim::grab_cursor) >>
-        many0!(Attribute::parse_outer) >>
-        keyword!(async) >>
-        option!(keyword!(move)) >>
-        syn!(Block) >>
-        end: call!(verbatim::grab_cursor) >>
-        (ExprVerbatim {
-            tts: verbatim::token_range(begin..end),
-        })
-    ));
-
-    #[cfg(feature = "full")]
-    named!(fn_arg -> FnArg, do_parse!(
-        pat: syn!(Pat) >>
-        ty: option!(tuple!(punct!(:), syn!(Type))) >>
-        ({
-            if let Some((colon, ty)) = ty {
-                FnArg::Captured(ArgCaptured {
-                    pat: pat,
-                    colon_token: colon,
-                    ty: ty,
-                })
-            } else {
-                FnArg::Inferred(pat)
-            }
-        })
-    ));
-
-    #[cfg(feature = "full")]
-    impl Synom for ExprWhile {
-        named!(parse -> Self, do_parse!(
-            outer_attrs: many0!(Attribute::parse_outer) >>
-            label: option!(syn!(Label)) >>
-            while_: keyword!(while) >>
-            cond: expr_no_struct >>
-            block: braces!(tuple!(
-                many0!(Attribute::parse_inner),
-                call!(Block::parse_within),
-            )) >>
-            (ExprWhile {
-                attrs: {
-                    let mut attrs = outer_attrs;
-                    attrs.extend((block.1).0);
-                    attrs
-                },
-                label: label,
-                while_token: while_,
-                cond: Box::new(cond),
-                body: Block {
-                    brace_token: block.0,
-                    stmts: (block.1).1,
-                },
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("`while` expression")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for ExprWhileLet {
-        named!(parse -> Self, do_parse!(
-            outer_attrs: many0!(Attribute::parse_outer) >>
-            label: option!(syn!(Label)) >>
-            while_: keyword!(while) >>
-            let_: keyword!(let) >>
-            pats: call!(Punctuated::parse_separated_nonempty) >>
-            eq: punct!(=) >>
-            value: expr_no_struct >>
-            block: braces!(tuple!(
-                many0!(Attribute::parse_inner),
-                call!(Block::parse_within),
-            )) >>
-            (ExprWhileLet {
-                attrs: {
-                    let mut attrs = outer_attrs;
-                    attrs.extend((block.1).0);
-                    attrs
-                },
-                label: label,
-                while_token: while_,
-                let_token: let_,
-                pats: pats,
-                eq_token: eq,
-                expr: Box::new(value),
-                body: Block {
-                    brace_token: block.0,
-                    stmts: (block.1).1,
-                },
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("`while let` expression")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for Label {
-        named!(parse -> Self, do_parse!(
-            name: syn!(Lifetime) >>
-            colon: punct!(:) >>
-            (Label {
-                name: name,
-                colon_token: colon,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("`while let` expression")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for ExprContinue {
-        named!(parse -> Self, do_parse!(
-            attrs: many0!(Attribute::parse_outer) >>
-            cont: keyword!(continue) >>
-            label: option!(syn!(Lifetime)) >>
-            (ExprContinue {
-                attrs: attrs,
-                continue_token: cont,
-                label: label,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("`continue`")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    named!(expr_break(allow_struct: bool) -> Expr, do_parse!(
-        attrs: many0!(Attribute::parse_outer) >>
-        break_: keyword!(break) >>
-        label: option!(syn!(Lifetime)) >>
-        // We can't allow blocks after a `break` expression when we wouldn't
-        // allow structs, as this expression is ambiguous.
-        val: opt_ambiguous_expr!(allow_struct) >>
-        (ExprBreak {
-            attrs: attrs,
-            label: label,
-            expr: val.map(Box::new),
-            break_token: break_,
-        }.into())
-    ));
-
-    #[cfg(feature = "full")]
-    named!(expr_ret(allow_struct: bool) -> Expr, do_parse!(
-        attrs: many0!(Attribute::parse_outer) >>
-        return_: keyword!(return) >>
-        // NOTE: return is greedy and eats blocks after it even when in a
-        // position where structs are not allowed, such as in if statement
-        // conditions. For example:
-        //
-        // if return { println!("A") } {} // Prints "A"
-        ret_value: option!(ambiguous_expr!(allow_struct)) >>
-        (ExprReturn {
-            attrs: attrs,
-            expr: ret_value.map(Box::new),
-            return_token: return_,
-        }.into())
-    ));
-
-    #[cfg(feature = "full")]
-    impl Synom for ExprStruct {
-        named!(parse -> Self, do_parse!(
-            outer_attrs: many0!(Attribute::parse_outer) >>
-            path: syn!(Path) >>
-            data: braces!(do_parse!(
-                inner_attrs: many0!(Attribute::parse_inner) >>
-                fields: call!(Punctuated::parse_terminated) >>
-                base: option!(cond!(fields.empty_or_trailing(), do_parse!(
-                    dots: punct!(..) >>
-                    base: syn!(Expr) >>
-                    (dots, base)
-                ))) >>
-                (inner_attrs, fields, base)
-            )) >>
-            ({
-                let (brace, (inner_attrs, fields, base)) = data;
-                let (dots, rest) = match base.and_then(|b| b) {
-                    Some((dots, base)) => (Some(dots), Some(base)),
-                    None => (None, None),
-                };
-                ExprStruct {
-                    attrs: {
-                        let mut attrs = outer_attrs;
-                        attrs.extend(inner_attrs);
-                        attrs
-                    },
-                    brace_token: brace,
-                    path: path,
-                    fields: fields,
-                    dot2_token: dots,
-                    rest: rest.map(Box::new),
-                }
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("struct literal expression")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for FieldValue {
-        named!(parse -> Self, do_parse!(
-            attrs: many0!(Attribute::parse_outer) >>
-            field_value: alt!(
-                tuple!(syn!(Member), map!(punct!(:), Some), syn!(Expr))
-                |
-                map!(syn!(Ident), |name| (
-                    Member::Named(name.clone()),
-                    None,
-                    Expr::Path(ExprPath {
-                        attrs: Vec::new(),
-                        qself: None,
-                        path: name.into(),
-                    }),
-                ))
-            ) >>
-            (FieldValue {
-                attrs: attrs,
-                member: field_value.0,
-                colon_token: field_value.1,
-                expr: field_value.2,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("field-value pair: `field: value`")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for ExprRepeat {
-        named!(parse -> Self, do_parse!(
-            outer_attrs: many0!(Attribute::parse_outer) >>
-            data: brackets!(tuple!(
-                many0!(Attribute::parse_inner),
-                syn!(Expr),
-                punct!(;),
-                syn!(Expr),
-            )) >>
-            (ExprRepeat {
-                attrs: {
-                    let mut attrs = outer_attrs;
-                    attrs.extend((data.1).0);
-                    attrs
-                },
-                expr: Box::new((data.1).1),
-                len: Box::new((data.1).3),
-                bracket_token: data.0,
-                semi_token: (data.1).2,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("repeated array literal: `[val; N]`")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for ExprUnsafe {
-        named!(parse -> Self, do_parse!(
-            unsafe_: keyword!(unsafe) >>
-            b: syn!(Block) >>
-            (ExprUnsafe {
-                attrs: Vec::new(),
-                unsafe_token: unsafe_,
-                block: b,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("unsafe block: `unsafe { .. }`")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for ExprBlock {
-        named!(parse -> Self, do_parse!(
-            outer_attrs: many0!(Attribute::parse_outer) >>
-            block: braces!(tuple!(
-                many0!(Attribute::parse_inner),
-                call!(Block::parse_within),
-            )) >>
-            (ExprBlock {
-                attrs: {
-                    let mut attrs = outer_attrs;
-                    attrs.extend((block.1).0);
-                    attrs
-                },
-                block: Block {
-                    brace_token: block.0,
-                    stmts: (block.1).1,
-                },
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("block: `{ .. }`")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    named!(unstable_labeled_block -> ExprVerbatim, do_parse!(
-        begin: call!(verbatim::grab_cursor) >>
-        many0!(Attribute::parse_outer) >>
-        syn!(Label) >>
-        braces!(tuple!(
-            many0!(Attribute::parse_inner),
-            call!(Block::parse_within),
-        )) >>
-        end: call!(verbatim::grab_cursor) >>
-        (ExprVerbatim {
-            tts: verbatim::token_range(begin..end),
-        })
-    ));
-
-    #[cfg(feature = "full")]
-    named!(expr_range(allow_struct: bool) -> Expr, do_parse!(
-        limits: syn!(RangeLimits) >>
-        hi: opt_ambiguous_expr!(allow_struct) >>
-        (ExprRange {
-            attrs: Vec::new(),
-            from: None,
-            to: hi.map(Box::new),
-            limits: limits,
-        }.into())
-    ));
-
-    #[cfg(feature = "full")]
-    impl Synom for RangeLimits {
-        named!(parse -> Self, alt!(
-            // Must come before Dot2
-            punct!(..=) => { RangeLimits::Closed }
-            |
-            // Must come before Dot2
-            punct!(...) => { |dot3| RangeLimits::Closed(Token![..=](dot3.0)) }
-            |
-            punct!(..) => { RangeLimits::HalfOpen }
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("range limit: `..`, `...` or `..=`")
-        }
-    }
-
-    impl Synom for ExprPath {
-        #[cfg(not(feature = "full"))]
-        named!(parse -> Self, do_parse!(
-            pair: qpath >>
-            (ExprPath {
-                attrs: Vec::new(),
-                qself: pair.0,
-                path: pair.1,
-            })
-        ));
-
-        #[cfg(feature = "full")]
-        named!(parse -> Self, do_parse!(
-            attrs: many0!(Attribute::parse_outer) >>
-            pair: qpath >>
-            (ExprPath {
-                attrs: attrs,
-                qself: pair.0,
-                path: pair.1,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("path: `a::b::c`")
-        }
-    }
-
-    named!(and_field -> (Token![.], Member), tuple!(punct!(.), syn!(Member)));
-
-    named!(and_index -> (token::Bracket, Expr), brackets!(syn!(Expr)));
-
-    #[cfg(feature = "full")]
-    impl Synom for Block {
-        named!(parse -> Self, do_parse!(
-            stmts: braces!(Block::parse_within) >>
-            (Block {
-                brace_token: stmts.0,
-                stmts: stmts.1,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("block: `{ .. }`")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Block {
-        named!(pub parse_within -> Vec<Stmt>, do_parse!(
-            many0!(punct!(;)) >>
-            mut standalone: many0!(do_parse!(
-                stmt: syn!(Stmt) >>
-                many0!(punct!(;)) >>
-                (stmt)
-            )) >>
-            last: option!(do_parse!(
-                attrs: many0!(Attribute::parse_outer) >>
-                mut e: syn!(Expr) >>
-                ({
-                    e.replace_attrs(attrs);
-                    Stmt::Expr(e)
-                })
-            )) >>
-            (match last {
-                None => standalone,
-                Some(last) => {
-                    standalone.push(last);
-                    standalone
-                }
-            })
-        ));
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for Stmt {
-        named!(parse -> Self, alt!(
-            stmt_mac
-            |
-            stmt_local
-            |
-            stmt_item
-            |
-            stmt_blockexpr
-            |
-            stmt_expr
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("statement")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    named!(stmt_mac -> Stmt, do_parse!(
-        attrs: many0!(Attribute::parse_outer) >>
-        what: call!(Path::parse_mod_style) >>
-        bang: punct!(!) >>
-    // Only parse braces here; paren and bracket will get parsed as
-    // expression statements
-        data: braces!(syn!(TokenStream)) >>
-        semi: option!(punct!(;)) >>
-        (Stmt::Item(Item::Macro(ItemMacro {
-            attrs: attrs,
-            ident: None,
-            mac: Macro {
-                path: what,
-                bang_token: bang,
-                delimiter: MacroDelimiter::Brace(data.0),
-                tts: data.1,
-            },
-            semi_token: semi,
-        })))
-    ));
-
-    #[cfg(feature = "full")]
-    named!(stmt_local -> Stmt, do_parse!(
-        attrs: many0!(Attribute::parse_outer) >>
-        let_: keyword!(let) >>
-        pats: call!(Punctuated::parse_separated_nonempty) >>
-        ty: option!(tuple!(punct!(:), syn!(Type))) >>
-        init: option!(tuple!(punct!(=), syn!(Expr))) >>
-        semi: punct!(;) >>
-        (Stmt::Local(Local {
-            attrs: attrs,
-            let_token: let_,
-            pats: pats,
-            ty: ty.map(|(colon, ty)| (colon, Box::new(ty))),
-            init: init.map(|(eq, expr)| (eq, Box::new(expr))),
-            semi_token: semi,
-        }))
-    ));
-
-    #[cfg(feature = "full")]
-    named!(stmt_item -> Stmt, map!(syn!(Item), |i| Stmt::Item(i)));
-
-    #[cfg(feature = "full")]
-    named!(stmt_blockexpr -> Stmt, do_parse!(
-        mut attrs: many0!(Attribute::parse_outer) >>
-        mut e: expr_nosemi >>
-        semi: option!(punct!(;)) >>
-        ({
-            attrs.extend(e.replace_attrs(Vec::new()));
-            e.replace_attrs(attrs);
-            if let Some(semi) = semi {
-                Stmt::Semi(e, semi)
-            } else {
-                Stmt::Expr(e)
-            }
-        })
-    ));
-
-    #[cfg(feature = "full")]
-    named!(stmt_expr -> Stmt, do_parse!(
-        mut attrs: many0!(Attribute::parse_outer) >>
-        mut e: syn!(Expr) >>
-        semi: punct!(;) >>
-        ({
-            attrs.extend(e.replace_attrs(Vec::new()));
-            e.replace_attrs(attrs);
-            Stmt::Semi(e, semi)
-        })
-    ));
-
-    #[cfg(feature = "full")]
-    impl Synom for Pat {
-        named!(parse -> Self, alt!(
-            syn!(PatWild) => { Pat::Wild } // must be before pat_ident
-            |
-            syn!(PatBox) => { Pat::Box }  // must be before pat_ident
-            |
-            syn!(PatRange) => { Pat::Range } // must be before pat_lit
-            |
-            syn!(PatTupleStruct) => { Pat::TupleStruct }  // must be before pat_ident
-            |
-            syn!(PatStruct) => { Pat::Struct } // must be before pat_ident
-            |
-            syn!(PatMacro) => { Pat::Macro } // must be before pat_ident
-            |
-            syn!(PatLit) => { Pat::Lit } // must be before pat_ident
-            |
-            syn!(PatIdent) => { Pat::Ident } // must be before pat_path
-            |
-            syn!(PatPath) => { Pat::Path }
-            |
-            syn!(PatTuple) => { Pat::Tuple }
-            |
-            syn!(PatRef) => { Pat::Ref }
-            |
-            syn!(PatSlice) => { Pat::Slice }
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("pattern")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for PatWild {
-        named!(parse -> Self, map!(
-            punct!(_),
-            |u| PatWild { underscore_token: u }
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("wild pattern: `_`")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for PatBox {
-        named!(parse -> Self, do_parse!(
-            boxed: keyword!(box) >>
-            pat: syn!(Pat) >>
-            (PatBox {
-                pat: Box::new(pat),
-                box_token: boxed,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("box pattern")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for PatIdent {
-        named!(parse -> Self, do_parse!(
-            by_ref: option!(keyword!(ref)) >>
-            mutability: option!(keyword!(mut)) >>
-            name: alt!(
-                syn!(Ident)
-                |
-                keyword!(self) => { Into::into }
-            ) >>
-            not!(punct!(<)) >>
-            not!(punct!(::)) >>
-            subpat: option!(tuple!(punct!(@), syn!(Pat))) >>
-            (PatIdent {
-                by_ref: by_ref,
-                mutability: mutability,
-                ident: name,
-                subpat: subpat.map(|(at, pat)| (at, Box::new(pat))),
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("pattern identifier binding")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for PatTupleStruct {
-        named!(parse -> Self, do_parse!(
-            path: syn!(Path) >>
-            tuple: syn!(PatTuple) >>
-            (PatTupleStruct {
-                path: path,
-                pat: tuple,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("tuple struct pattern")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for PatStruct {
-        named!(parse -> Self, do_parse!(
-            path: syn!(Path) >>
-            data: braces!(do_parse!(
-                fields: call!(Punctuated::parse_terminated) >>
-                base: option!(cond!(fields.empty_or_trailing(), punct!(..))) >>
-                (fields, base)
-            )) >>
-            (PatStruct {
-                path: path,
-                fields: (data.1).0,
-                brace_token: data.0,
-                dot2_token: (data.1).1.and_then(|m| m),
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("struct pattern")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for FieldPat {
-        named!(parse -> Self, alt!(
-            do_parse!(
-                member: syn!(Member) >>
-                colon: punct!(:) >>
-                pat: syn!(Pat) >>
-                (FieldPat {
-                    member: member,
-                    pat: Box::new(pat),
-                    attrs: Vec::new(),
-                    colon_token: Some(colon),
-                })
-            )
-            |
-            do_parse!(
-                boxed: option!(keyword!(box)) >>
-                by_ref: option!(keyword!(ref)) >>
-                mutability: option!(keyword!(mut)) >>
-                ident: syn!(Ident) >>
-                ({
-                    let mut pat: Pat = PatIdent {
-                        by_ref: by_ref,
-                        mutability: mutability,
-                        ident: ident.clone(),
-                        subpat: None,
-                    }.into();
-                    if let Some(boxed) = boxed {
-                        pat = PatBox {
-                            pat: Box::new(pat),
-                            box_token: boxed,
-                        }.into();
-                    }
-                    FieldPat {
-                        member: Member::Named(ident),
-                        pat: Box::new(pat),
-                        attrs: Vec::new(),
-                        colon_token: None,
-                    }
-                })
-            )
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("field pattern")
-        }
-    }
-
-    impl Synom for Member {
-        named!(parse -> Self, alt!(
-            syn!(Ident) => { Member::Named }
-            |
-            syn!(Index) => { Member::Unnamed }
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("field member")
-        }
-    }
-
-    impl Synom for Index {
-        named!(parse -> Self, do_parse!(
-            lit: syn!(LitInt) >>
-            ({
-                if let IntSuffix::None = lit.suffix() {
-                    Index { index: lit.value() as u32, span: lit.span() }
-                } else {
-                    return parse_error();
-                }
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("field index")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for PatPath {
-        named!(parse -> Self, map!(
-            syn!(ExprPath),
-            |p| PatPath { qself: p.qself, path: p.path }
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("path pattern")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for PatTuple {
-        named!(parse -> Self, do_parse!(
-            data: parens!(do_parse!(
-                front: call!(Punctuated::parse_terminated) >>
-                dotdot: option!(cond_reduce!(front.empty_or_trailing(),
-                    tuple!(punct!(..), option!(punct!(,)))
-                )) >>
-                back: cond!(match dotdot {
-                                Some((_, Some(_))) => true,
-                                _ => false,
-                            },
-                            Punctuated::parse_terminated) >>
-                (front, dotdot, back)
-            )) >>
-            ({
-                let (parens, (front, dotdot, back)) = data;
-                let (dotdot, trailing) = match dotdot {
-                    Some((a, b)) => (Some(a), Some(b)),
-                    None => (None, None),
-                };
-                PatTuple {
-                    paren_token: parens,
-                    front: front,
-                    dot2_token: dotdot,
-                    comma_token: trailing.unwrap_or_default(),
-                    back: back.unwrap_or_default(),
-                }
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("tuple pattern")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for PatRef {
-        named!(parse -> Self, do_parse!(
-            and: punct!(&) >>
-            mutability: option!(keyword!(mut)) >>
-            pat: syn!(Pat) >>
-            (PatRef {
-                pat: Box::new(pat),
-                mutability: mutability,
-                and_token: and,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("reference pattern")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for PatLit {
-        named!(parse -> Self, do_parse!(
-            lit: pat_lit_expr >>
-            (if let Expr::Path(_) = lit {
-                return parse_error(); // these need to be parsed by pat_path
-            } else {
-                PatLit {
-                    expr: Box::new(lit),
-                }
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("literal pattern")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for PatRange {
-        named!(parse -> Self, do_parse!(
-            lo: pat_lit_expr >>
-            limits: syn!(RangeLimits) >>
-            hi: pat_lit_expr >>
-            (PatRange {
-                lo: Box::new(lo),
-                hi: Box::new(hi),
-                limits: limits,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("range pattern")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    named!(pat_lit_expr -> Expr, do_parse!(
-        neg: option!(punct!(-)) >>
-        v: alt!(
-            syn!(ExprLit) => { Expr::Lit }
-            |
-            syn!(ExprPath) => { Expr::Path }
-        ) >>
-        (if let Some(neg) = neg {
-            Expr::Unary(ExprUnary {
-                attrs: Vec::new(),
-                op: UnOp::Neg(neg),
-                expr: Box::new(v)
-            })
-        } else {
-            v
-        })
-    ));
-
-    #[cfg(feature = "full")]
-    impl Synom for PatSlice {
-        named!(parse -> Self, map!(
-            brackets!(do_parse!(
-                before: call!(Punctuated::parse_terminated) >>
-                middle: option!(do_parse!(
-                    dots: punct!(..) >>
-                    trailing: option!(punct!(,)) >>
-                    (dots, trailing)
-                )) >>
-                after: cond!(
-                    match middle {
-                        Some((_, ref trailing)) => trailing.is_some(),
-                        _ => false,
-                    },
-                    Punctuated::parse_terminated
-                ) >>
-                (before, middle, after)
-            )),
-            |(brackets, (before, middle, after))| {
-                let mut before: Punctuated<Pat, Token![,]> = before;
-                let after: Option<Punctuated<Pat, Token![,]>> = after;
-                let middle: Option<(Token![..], Option<Token![,]>)> = middle;
-                PatSlice {
-                    dot2_token: middle.as_ref().map(|m| Token![..]((m.0).0)),
-                    comma_token: middle.as_ref().and_then(|m| {
-                        m.1.as_ref().map(|m| Token![,](m.0))
-                    }),
-                    bracket_token: brackets,
-                    middle: middle.and_then(|_| {
-                        if before.empty_or_trailing() {
-                            None
-                        } else {
-                            Some(Box::new(before.pop().unwrap().into_value()))
-                        }
-                    }),
-                    front: before,
-                    back: after.unwrap_or_default(),
-                }
-            }
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("slice pattern")
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl Synom for PatMacro {
-        named!(parse -> Self, map!(syn!(Macro), |mac| PatMacro { mac: mac }));
-
-        fn description() -> Option<&'static str> {
-            Some("macro pattern")
-        }
-    }
-}
-
-#[cfg(feature = "printing")]
-mod printing {
-    use super::*;
-    #[cfg(feature = "full")]
-    use attr::FilterAttrs;
-    use proc_macro2::{Literal, TokenStream};
-    use quote::{ToTokens, TokenStreamExt};
-
-    // If the given expression is a bare `ExprStruct`, wraps it in parenthesis
-    // before appending it to `TokenStream`.
-    #[cfg(feature = "full")]
-    fn wrap_bare_struct(tokens: &mut TokenStream, e: &Expr) {
-        if let Expr::Struct(_) = *e {
-            token::Paren::default().surround(tokens, |tokens| {
-                e.to_tokens(tokens);
-            });
-        } else {
-            e.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    fn outer_attrs_to_tokens(attrs: &[Attribute], tokens: &mut TokenStream) {
-        tokens.append_all(attrs.outer());
-    }
-
-    #[cfg(feature = "full")]
-    fn inner_attrs_to_tokens(attrs: &[Attribute], tokens: &mut TokenStream) {
-        tokens.append_all(attrs.inner());
-    }
-
-    #[cfg(not(feature = "full"))]
-    fn outer_attrs_to_tokens(_attrs: &[Attribute], _tokens: &mut TokenStream) {}
-
-    #[cfg(not(feature = "full"))]
-    fn inner_attrs_to_tokens(_attrs: &[Attribute], _tokens: &mut TokenStream) {}
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprBox {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.box_token.to_tokens(tokens);
-            self.expr.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprInPlace {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.place.to_tokens(tokens);
-            self.arrow_token.to_tokens(tokens);
-            self.value.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprArray {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.bracket_token.surround(tokens, |tokens| {
-                inner_attrs_to_tokens(&self.attrs, tokens);
-                self.elems.to_tokens(tokens);
-            })
-        }
-    }
-
-    impl ToTokens for ExprCall {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.func.to_tokens(tokens);
-            self.paren_token.surround(tokens, |tokens| {
-                self.args.to_tokens(tokens);
-            })
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprMethodCall {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.receiver.to_tokens(tokens);
-            self.dot_token.to_tokens(tokens);
-            self.method.to_tokens(tokens);
-            self.turbofish.to_tokens(tokens);
-            self.paren_token.surround(tokens, |tokens| {
-                self.args.to_tokens(tokens);
-            });
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for MethodTurbofish {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.colon2_token.to_tokens(tokens);
-            self.lt_token.to_tokens(tokens);
-            self.args.to_tokens(tokens);
-            self.gt_token.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for GenericMethodArgument {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            match *self {
-                GenericMethodArgument::Type(ref t) => t.to_tokens(tokens),
-                GenericMethodArgument::Const(ref c) => c.to_tokens(tokens),
-            }
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprTuple {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.paren_token.surround(tokens, |tokens| {
-                inner_attrs_to_tokens(&self.attrs, tokens);
-                self.elems.to_tokens(tokens);
-                // If we only have one argument, we need a trailing comma to
-                // distinguish ExprTuple from ExprParen.
-                if self.elems.len() == 1 && !self.elems.trailing_punct() {
-                    <Token![,]>::default().to_tokens(tokens);
-                }
-            })
-        }
-    }
-
-    impl ToTokens for ExprBinary {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.left.to_tokens(tokens);
-            self.op.to_tokens(tokens);
-            self.right.to_tokens(tokens);
-        }
-    }
-
-    impl ToTokens for ExprUnary {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.op.to_tokens(tokens);
-            self.expr.to_tokens(tokens);
-        }
-    }
-
-    impl ToTokens for ExprLit {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.lit.to_tokens(tokens);
-        }
-    }
-
-    impl ToTokens for ExprCast {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.expr.to_tokens(tokens);
-            self.as_token.to_tokens(tokens);
-            self.ty.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprType {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.expr.to_tokens(tokens);
-            self.colon_token.to_tokens(tokens);
-            self.ty.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    fn maybe_wrap_else(tokens: &mut TokenStream, else_: &Option<(Token![else], Box<Expr>)>) {
-        if let Some((ref else_token, ref else_)) = *else_ {
-            else_token.to_tokens(tokens);
-
-            // If we are not one of the valid expressions to exist in an else
-            // clause, wrap ourselves in a block.
-            match **else_ {
-                Expr::If(_) | Expr::IfLet(_) | Expr::Block(_) => {
-                    else_.to_tokens(tokens);
-                }
-                _ => {
-                    token::Brace::default().surround(tokens, |tokens| {
-                        else_.to_tokens(tokens);
-                    });
-                }
-            }
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprIf {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.if_token.to_tokens(tokens);
-            wrap_bare_struct(tokens, &self.cond);
-            self.then_branch.to_tokens(tokens);
-            maybe_wrap_else(tokens, &self.else_branch);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprIfLet {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.if_token.to_tokens(tokens);
-            self.let_token.to_tokens(tokens);
-            self.pats.to_tokens(tokens);
-            self.eq_token.to_tokens(tokens);
-            wrap_bare_struct(tokens, &self.expr);
-            self.then_branch.to_tokens(tokens);
-            maybe_wrap_else(tokens, &self.else_branch);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprWhile {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.label.to_tokens(tokens);
-            self.while_token.to_tokens(tokens);
-            wrap_bare_struct(tokens, &self.cond);
-            self.body.brace_token.surround(tokens, |tokens| {
-                inner_attrs_to_tokens(&self.attrs, tokens);
-                tokens.append_all(&self.body.stmts);
-            });
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprWhileLet {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.label.to_tokens(tokens);
-            self.while_token.to_tokens(tokens);
-            self.let_token.to_tokens(tokens);
-            self.pats.to_tokens(tokens);
-            self.eq_token.to_tokens(tokens);
-            wrap_bare_struct(tokens, &self.expr);
-            self.body.brace_token.surround(tokens, |tokens| {
-                inner_attrs_to_tokens(&self.attrs, tokens);
-                tokens.append_all(&self.body.stmts);
-            });
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprForLoop {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.label.to_tokens(tokens);
-            self.for_token.to_tokens(tokens);
-            self.pat.to_tokens(tokens);
-            self.in_token.to_tokens(tokens);
-            wrap_bare_struct(tokens, &self.expr);
-            self.body.brace_token.surround(tokens, |tokens| {
-                inner_attrs_to_tokens(&self.attrs, tokens);
-                tokens.append_all(&self.body.stmts);
-            });
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprLoop {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.label.to_tokens(tokens);
-            self.loop_token.to_tokens(tokens);
-            self.body.brace_token.surround(tokens, |tokens| {
-                inner_attrs_to_tokens(&self.attrs, tokens);
-                tokens.append_all(&self.body.stmts);
-            });
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprMatch {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.match_token.to_tokens(tokens);
-            wrap_bare_struct(tokens, &self.expr);
-            self.brace_token.surround(tokens, |tokens| {
-                inner_attrs_to_tokens(&self.attrs, tokens);
-                for (i, arm) in self.arms.iter().enumerate() {
-                    arm.to_tokens(tokens);
-                    // Ensure that we have a comma after a non-block arm, except
-                    // for the last one.
-                    let is_last = i == self.arms.len() - 1;
-                    if !is_last && arm_expr_requires_comma(&arm.body) && arm.comma.is_none() {
-                        <Token![,]>::default().to_tokens(tokens);
-                    }
-                }
-            });
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprCatch {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.do_token.to_tokens(tokens);
-            self.catch_token.to_tokens(tokens);
-            self.block.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprYield {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.yield_token.to_tokens(tokens);
-            self.expr.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprClosure {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.movability.to_tokens(tokens);
-            self.capture.to_tokens(tokens);
-            self.or1_token.to_tokens(tokens);
-            for input in self.inputs.pairs() {
-                match **input.value() {
-                    FnArg::Captured(ArgCaptured {
-                        ref pat,
-                        ty: Type::Infer(_),
-                        ..
-                    }) => {
-                        pat.to_tokens(tokens);
-                    }
-                    _ => input.value().to_tokens(tokens),
-                }
-                input.punct().to_tokens(tokens);
-            }
-            self.or2_token.to_tokens(tokens);
-            self.output.to_tokens(tokens);
-            self.body.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprUnsafe {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.unsafe_token.to_tokens(tokens);
-            self.block.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprBlock {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.block.brace_token.surround(tokens, |tokens| {
-                inner_attrs_to_tokens(&self.attrs, tokens);
-                tokens.append_all(&self.block.stmts);
-            });
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprAssign {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.left.to_tokens(tokens);
-            self.eq_token.to_tokens(tokens);
-            self.right.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprAssignOp {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.left.to_tokens(tokens);
-            self.op.to_tokens(tokens);
-            self.right.to_tokens(tokens);
-        }
-    }
-
-    impl ToTokens for ExprField {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.base.to_tokens(tokens);
-            self.dot_token.to_tokens(tokens);
-            self.member.to_tokens(tokens);
-        }
-    }
-
-    impl ToTokens for Member {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            match *self {
-                Member::Named(ref ident) => ident.to_tokens(tokens),
-                Member::Unnamed(ref index) => index.to_tokens(tokens),
-            }
-        }
-    }
-
-    impl ToTokens for Index {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            let mut lit = Literal::i64_unsuffixed(i64::from(self.index));
-            lit.set_span(self.span);
-            tokens.append(lit);
-        }
-    }
-
-    impl ToTokens for ExprIndex {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.expr.to_tokens(tokens);
-            self.bracket_token.surround(tokens, |tokens| {
-                self.index.to_tokens(tokens);
-            });
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprRange {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.from.to_tokens(tokens);
-            match self.limits {
-                RangeLimits::HalfOpen(ref t) => t.to_tokens(tokens),
-                RangeLimits::Closed(ref t) => t.to_tokens(tokens),
-            }
-            self.to.to_tokens(tokens);
-        }
-    }
-
-    impl ToTokens for ExprPath {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            ::PathTokens(&self.qself, &self.path).to_tokens(tokens)
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprReference {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.and_token.to_tokens(tokens);
-            self.mutability.to_tokens(tokens);
-            self.expr.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprBreak {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.break_token.to_tokens(tokens);
-            self.label.to_tokens(tokens);
-            self.expr.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprContinue {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.continue_token.to_tokens(tokens);
-            self.label.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprReturn {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.return_token.to_tokens(tokens);
-            self.expr.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprMacro {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.mac.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprStruct {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.path.to_tokens(tokens);
-            self.brace_token.surround(tokens, |tokens| {
-                inner_attrs_to_tokens(&self.attrs, tokens);
-                self.fields.to_tokens(tokens);
-                if self.rest.is_some() {
-                    TokensOrDefault(&self.dot2_token).to_tokens(tokens);
-                    self.rest.to_tokens(tokens);
-                }
-            })
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprRepeat {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.bracket_token.surround(tokens, |tokens| {
-                inner_attrs_to_tokens(&self.attrs, tokens);
-                self.expr.to_tokens(tokens);
-                self.semi_token.to_tokens(tokens);
-                self.len.to_tokens(tokens);
-            })
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprGroup {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.group_token.surround(tokens, |tokens| {
-                self.expr.to_tokens(tokens);
-            });
-        }
-    }
-
-    impl ToTokens for ExprParen {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.paren_token.surround(tokens, |tokens| {
-                inner_attrs_to_tokens(&self.attrs, tokens);
-                self.expr.to_tokens(tokens);
-            });
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for ExprTry {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.expr.to_tokens(tokens);
-            self.question_token.to_tokens(tokens);
-        }
-    }
-
-    impl ToTokens for ExprVerbatim {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.tts.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for Label {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.name.to_tokens(tokens);
-            self.colon_token.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for FieldValue {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.member.to_tokens(tokens);
-            if let Some(ref colon_token) = self.colon_token {
-                colon_token.to_tokens(tokens);
-                self.expr.to_tokens(tokens);
-            }
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for Arm {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            tokens.append_all(&self.attrs);
-            self.leading_vert.to_tokens(tokens);
-            self.pats.to_tokens(tokens);
-            if let Some((ref if_token, ref guard)) = self.guard {
-                if_token.to_tokens(tokens);
-                guard.to_tokens(tokens);
-            }
-            self.fat_arrow_token.to_tokens(tokens);
-            self.body.to_tokens(tokens);
-            self.comma.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for PatWild {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.underscore_token.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for PatIdent {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.by_ref.to_tokens(tokens);
-            self.mutability.to_tokens(tokens);
-            self.ident.to_tokens(tokens);
-            if let Some((ref at_token, ref subpat)) = self.subpat {
-                at_token.to_tokens(tokens);
-                subpat.to_tokens(tokens);
-            }
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for PatStruct {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.path.to_tokens(tokens);
-            self.brace_token.surround(tokens, |tokens| {
-                self.fields.to_tokens(tokens);
-                // NOTE: We need a comma before the dot2 token if it is present.
-                if !self.fields.empty_or_trailing() && self.dot2_token.is_some() {
-                    <Token![,]>::default().to_tokens(tokens);
-                }
-                self.dot2_token.to_tokens(tokens);
-            });
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for PatTupleStruct {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.path.to_tokens(tokens);
-            self.pat.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for PatPath {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            ::PathTokens(&self.qself, &self.path).to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for PatTuple {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.paren_token.surround(tokens, |tokens| {
-                self.front.to_tokens(tokens);
-                if let Some(ref dot2_token) = self.dot2_token {
-                    if !self.front.empty_or_trailing() {
-                        // Ensure there is a comma before the .. token.
-                        <Token![,]>::default().to_tokens(tokens);
-                    }
-                    dot2_token.to_tokens(tokens);
-                    self.comma_token.to_tokens(tokens);
-                    if self.comma_token.is_none() && !self.back.is_empty() {
-                        // Ensure there is a comma after the .. token.
-                        <Token![,]>::default().to_tokens(tokens);
-                    }
-                }
-                self.back.to_tokens(tokens);
-            });
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for PatBox {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.box_token.to_tokens(tokens);
-            self.pat.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for PatRef {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.and_token.to_tokens(tokens);
-            self.mutability.to_tokens(tokens);
-            self.pat.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for PatLit {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.expr.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for PatRange {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.lo.to_tokens(tokens);
-            match self.limits {
-                RangeLimits::HalfOpen(ref t) => t.to_tokens(tokens),
-                RangeLimits::Closed(ref t) => Token![...](t.0).to_tokens(tokens),
-            }
-            self.hi.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for PatSlice {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            // XXX: This is a mess, and it will be so easy to screw it up. How
-            // do we make this correct itself better?
-            self.bracket_token.surround(tokens, |tokens| {
-                self.front.to_tokens(tokens);
-
-                // If we need a comma before the middle or standalone .. token,
-                // then make sure it's present.
-                if !self.front.empty_or_trailing()
-                    && (self.middle.is_some() || self.dot2_token.is_some())
-                {
-                    <Token![,]>::default().to_tokens(tokens);
-                }
-
-                // If we have an identifier, we always need a .. token.
-                if self.middle.is_some() {
-                    self.middle.to_tokens(tokens);
-                    TokensOrDefault(&self.dot2_token).to_tokens(tokens);
-                } else if self.dot2_token.is_some() {
-                    self.dot2_token.to_tokens(tokens);
-                }
-
-                // Make sure we have a comma before the back half.
-                if !self.back.is_empty() {
-                    TokensOrDefault(&self.comma_token).to_tokens(tokens);
-                    self.back.to_tokens(tokens);
-                } else {
-                    self.comma_token.to_tokens(tokens);
-                }
-            })
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for PatMacro {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.mac.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for PatVerbatim {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.tts.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for FieldPat {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            if let Some(ref colon_token) = self.colon_token {
-                self.member.to_tokens(tokens);
-                colon_token.to_tokens(tokens);
-            }
-            self.pat.to_tokens(tokens);
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for Block {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.brace_token.surround(tokens, |tokens| {
-                tokens.append_all(&self.stmts);
-            });
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for Stmt {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            match *self {
-                Stmt::Local(ref local) => local.to_tokens(tokens),
-                Stmt::Item(ref item) => item.to_tokens(tokens),
-                Stmt::Expr(ref expr) => expr.to_tokens(tokens),
-                Stmt::Semi(ref expr, ref semi) => {
-                    expr.to_tokens(tokens);
-                    semi.to_tokens(tokens);
-                }
-            }
-        }
-    }
-
-    #[cfg(feature = "full")]
-    impl ToTokens for Local {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            outer_attrs_to_tokens(&self.attrs, tokens);
-            self.let_token.to_tokens(tokens);
-            self.pats.to_tokens(tokens);
-            if let Some((ref colon_token, ref ty)) = self.ty {
-                colon_token.to_tokens(tokens);
-                ty.to_tokens(tokens);
-            }
-            if let Some((ref eq_token, ref init)) = self.init {
-                eq_token.to_tokens(tokens);
-                init.to_tokens(tokens);
-            }
-            self.semi_token.to_tokens(tokens);
-        }
-    }
-}
diff --git a/rustc_deps/vendor/syn-0.14.9/src/file.rs b/rustc_deps/vendor/syn-0.14.9/src/file.rs
deleted file mode 100644
index 9b5b11f..0000000
--- a/rustc_deps/vendor/syn-0.14.9/src/file.rs
+++ /dev/null
@@ -1,123 +0,0 @@
-// Copyright 2018 Syn Developers
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-use super::*;
-
-ast_struct! {
-    /// A complete file of Rust source code.
-    ///
-    /// *This type is available if Syn is built with the `"full"` feature.*
-    ///
-    /// # Example
-    ///
-    /// Parse a Rust source file into a `syn::File` and print out a debug
-    /// representation of the syntax tree.
-    ///
-    /// ```
-    /// extern crate syn;
-    ///
-    /// use std::env;
-    /// use std::fs::File;
-    /// use std::io::Read;
-    /// use std::process;
-    ///
-    /// fn main() {
-    /// # }
-    /// #
-    /// # fn fake_main() {
-    ///     let mut args = env::args();
-    ///     let _ = args.next(); // executable name
-    ///
-    ///     let filename = match (args.next(), args.next()) {
-    ///         (Some(filename), None) => filename,
-    ///         _ => {
-    ///             eprintln!("Usage: dump-syntax path/to/filename.rs");
-    ///             process::exit(1);
-    ///         }
-    ///     };
-    ///
-    ///     let mut file = File::open(&filename).expect("Unable to open file");
-    ///
-    ///     let mut src = String::new();
-    ///     file.read_to_string(&mut src).expect("Unable to read file");
-    ///
-    ///     let syntax = syn::parse_file(&src).expect("Unable to parse file");
-    ///     println!("{:#?}", syntax);
-    /// }
-    /// ```
-    ///
-    /// Running with its own source code as input, this program prints output
-    /// that begins with:
-    ///
-    /// ```text
-    /// File {
-    ///     shebang: None,
-    ///     attrs: [],
-    ///     items: [
-    ///         ExternCrate(
-    ///             ItemExternCrate {
-    ///                 attrs: [],
-    ///                 vis: Inherited,
-    ///                 extern_token: Extern,
-    ///                 crate_token: Crate,
-    ///                 ident: Ident {
-    ///                     term: Term(
-    ///                         "syn"
-    ///                     ),
-    ///                     span: Span
-    ///                 },
-    ///                 rename: None,
-    ///                 semi_token: Semi
-    ///             }
-    ///         ),
-    /// ...
-    /// ```
-    pub struct File {
-        pub shebang: Option<String>,
-        pub attrs: Vec<Attribute>,
-        pub items: Vec<Item>,
-    }
-}
-
-#[cfg(feature = "parsing")]
-pub mod parsing {
-    use super::*;
-
-    use synom::Synom;
-
-    impl Synom for File {
-        named!(parse -> Self, do_parse!(
-            attrs: many0!(Attribute::parse_inner) >>
-            items: many0!(Item::parse) >>
-            (File {
-                shebang: None,
-                attrs: attrs,
-                items: items,
-            })
-        ));
-
-        fn description() -> Option<&'static str> {
-            Some("crate")
-        }
-    }
-}
-
-#[cfg(feature = "printing")]
-mod printing {
-    use super::*;
-    use attr::FilterAttrs;
-    use proc_macro2::TokenStream;
-    use quote::{ToTokens, TokenStreamExt};
-
-    impl ToTokens for File {
-        fn to_tokens(&self, tokens: &mut TokenStream) {
-            tokens.append_all(self.attrs.inner());
-            tokens.append_all(&self.items);
-        }
-    }
-}
diff --git a/rustc_deps/vendor/syn-0.14.9/src/gen/fold.rs b/rustc_deps/vendor/syn-0.14.9/src/gen/fold.rs
deleted file mode 100644
index 54eb51a..0000000
--- a/rustc_deps/vendor/syn-0.14.9/src/gen/fold.rs
+++ /dev/null
@@ -1,2948 +0,0 @@
-// THIS FILE IS AUTOMATICALLY GENERATED; DO NOT EDIT
-
-#![allow(unreachable_code)]
-#![cfg_attr(feature = "cargo-clippy", allow(needless_pass_by_value))]
-#[cfg(any(feature = "full", feature = "derive"))]
-use gen::helper::fold::*;
-use proc_macro2::Span;
-#[cfg(any(feature = "full", feature = "derive"))]
-use token::{Brace, Bracket, Group, Paren};
-use *;
-#[cfg(feature = "full")]
-macro_rules! full {
-    ($e:expr) => {
-        $e
-    };
-}
-#[cfg(all(feature = "derive", not(feature = "full")))]
-macro_rules! full {
-    ($e:expr) => {
-        unreachable!()
-    };
-}
-#[doc = r" Syntax tree traversal to transform the nodes of an owned syntax tree."]
-#[doc = r""]
-#[doc = r" See the [module documentation] for details."]
-#[doc = r""]
-#[doc = r" [module documentation]: index.html"]
-#[doc = r""]
-#[doc = r#" *This trait is available if Syn is built with the `"fold"` feature.*"#]
-pub trait Fold {
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_abi(&mut self, i: Abi) -> Abi {
-        fold_abi(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_angle_bracketed_generic_arguments(
-        &mut self,
-        i: AngleBracketedGenericArguments,
-    ) -> AngleBracketedGenericArguments {
-        fold_angle_bracketed_generic_arguments(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_arg_captured(&mut self, i: ArgCaptured) -> ArgCaptured {
-        fold_arg_captured(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_arg_self(&mut self, i: ArgSelf) -> ArgSelf {
-        fold_arg_self(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_arg_self_ref(&mut self, i: ArgSelfRef) -> ArgSelfRef {
-        fold_arg_self_ref(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_arm(&mut self, i: Arm) -> Arm {
-        fold_arm(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_attr_style(&mut self, i: AttrStyle) -> AttrStyle {
-        fold_attr_style(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_attribute(&mut self, i: Attribute) -> Attribute {
-        fold_attribute(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_bare_fn_arg(&mut self, i: BareFnArg) -> BareFnArg {
-        fold_bare_fn_arg(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_bare_fn_arg_name(&mut self, i: BareFnArgName) -> BareFnArgName {
-        fold_bare_fn_arg_name(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_bin_op(&mut self, i: BinOp) -> BinOp {
-        fold_bin_op(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_binding(&mut self, i: Binding) -> Binding {
-        fold_binding(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_block(&mut self, i: Block) -> Block {
-        fold_block(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_bound_lifetimes(&mut self, i: BoundLifetimes) -> BoundLifetimes {
-        fold_bound_lifetimes(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_const_param(&mut self, i: ConstParam) -> ConstParam {
-        fold_const_param(self, i)
-    }
-    #[cfg(feature = "derive")]
-    fn fold_data(&mut self, i: Data) -> Data {
-        fold_data(self, i)
-    }
-    #[cfg(feature = "derive")]
-    fn fold_data_enum(&mut self, i: DataEnum) -> DataEnum {
-        fold_data_enum(self, i)
-    }
-    #[cfg(feature = "derive")]
-    fn fold_data_struct(&mut self, i: DataStruct) -> DataStruct {
-        fold_data_struct(self, i)
-    }
-    #[cfg(feature = "derive")]
-    fn fold_data_union(&mut self, i: DataUnion) -> DataUnion {
-        fold_data_union(self, i)
-    }
-    #[cfg(feature = "derive")]
-    fn fold_derive_input(&mut self, i: DeriveInput) -> DeriveInput {
-        fold_derive_input(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr(&mut self, i: Expr) -> Expr {
-        fold_expr(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_array(&mut self, i: ExprArray) -> ExprArray {
-        fold_expr_array(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_assign(&mut self, i: ExprAssign) -> ExprAssign {
-        fold_expr_assign(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_assign_op(&mut self, i: ExprAssignOp) -> ExprAssignOp {
-        fold_expr_assign_op(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_binary(&mut self, i: ExprBinary) -> ExprBinary {
-        fold_expr_binary(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_block(&mut self, i: ExprBlock) -> ExprBlock {
-        fold_expr_block(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_box(&mut self, i: ExprBox) -> ExprBox {
-        fold_expr_box(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_break(&mut self, i: ExprBreak) -> ExprBreak {
-        fold_expr_break(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_call(&mut self, i: ExprCall) -> ExprCall {
-        fold_expr_call(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_cast(&mut self, i: ExprCast) -> ExprCast {
-        fold_expr_cast(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_catch(&mut self, i: ExprCatch) -> ExprCatch {
-        fold_expr_catch(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_closure(&mut self, i: ExprClosure) -> ExprClosure {
-        fold_expr_closure(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_continue(&mut self, i: ExprContinue) -> ExprContinue {
-        fold_expr_continue(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_field(&mut self, i: ExprField) -> ExprField {
-        fold_expr_field(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_for_loop(&mut self, i: ExprForLoop) -> ExprForLoop {
-        fold_expr_for_loop(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_group(&mut self, i: ExprGroup) -> ExprGroup {
-        fold_expr_group(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_if(&mut self, i: ExprIf) -> ExprIf {
-        fold_expr_if(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_if_let(&mut self, i: ExprIfLet) -> ExprIfLet {
-        fold_expr_if_let(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_in_place(&mut self, i: ExprInPlace) -> ExprInPlace {
-        fold_expr_in_place(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_index(&mut self, i: ExprIndex) -> ExprIndex {
-        fold_expr_index(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_lit(&mut self, i: ExprLit) -> ExprLit {
-        fold_expr_lit(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_loop(&mut self, i: ExprLoop) -> ExprLoop {
-        fold_expr_loop(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_macro(&mut self, i: ExprMacro) -> ExprMacro {
-        fold_expr_macro(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_match(&mut self, i: ExprMatch) -> ExprMatch {
-        fold_expr_match(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_method_call(&mut self, i: ExprMethodCall) -> ExprMethodCall {
-        fold_expr_method_call(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_paren(&mut self, i: ExprParen) -> ExprParen {
-        fold_expr_paren(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_path(&mut self, i: ExprPath) -> ExprPath {
-        fold_expr_path(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_range(&mut self, i: ExprRange) -> ExprRange {
-        fold_expr_range(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_reference(&mut self, i: ExprReference) -> ExprReference {
-        fold_expr_reference(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_repeat(&mut self, i: ExprRepeat) -> ExprRepeat {
-        fold_expr_repeat(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_return(&mut self, i: ExprReturn) -> ExprReturn {
-        fold_expr_return(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_struct(&mut self, i: ExprStruct) -> ExprStruct {
-        fold_expr_struct(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_try(&mut self, i: ExprTry) -> ExprTry {
-        fold_expr_try(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_tuple(&mut self, i: ExprTuple) -> ExprTuple {
-        fold_expr_tuple(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_type(&mut self, i: ExprType) -> ExprType {
-        fold_expr_type(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_unary(&mut self, i: ExprUnary) -> ExprUnary {
-        fold_expr_unary(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_unsafe(&mut self, i: ExprUnsafe) -> ExprUnsafe {
-        fold_expr_unsafe(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_verbatim(&mut self, i: ExprVerbatim) -> ExprVerbatim {
-        fold_expr_verbatim(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_while(&mut self, i: ExprWhile) -> ExprWhile {
-        fold_expr_while(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_while_let(&mut self, i: ExprWhileLet) -> ExprWhileLet {
-        fold_expr_while_let(self, i)
-    }
-    #[cfg(feature = "full")]
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_expr_yield(&mut self, i: ExprYield) -> ExprYield {
-        fold_expr_yield(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_field(&mut self, i: Field) -> Field {
-        fold_field(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_field_pat(&mut self, i: FieldPat) -> FieldPat {
-        fold_field_pat(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_field_value(&mut self, i: FieldValue) -> FieldValue {
-        fold_field_value(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_fields(&mut self, i: Fields) -> Fields {
-        fold_fields(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_fields_named(&mut self, i: FieldsNamed) -> FieldsNamed {
-        fold_fields_named(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_fields_unnamed(&mut self, i: FieldsUnnamed) -> FieldsUnnamed {
-        fold_fields_unnamed(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_file(&mut self, i: File) -> File {
-        fold_file(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_fn_arg(&mut self, i: FnArg) -> FnArg {
-        fold_fn_arg(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_fn_decl(&mut self, i: FnDecl) -> FnDecl {
-        fold_fn_decl(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_foreign_item(&mut self, i: ForeignItem) -> ForeignItem {
-        fold_foreign_item(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_foreign_item_fn(&mut self, i: ForeignItemFn) -> ForeignItemFn {
-        fold_foreign_item_fn(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_foreign_item_static(&mut self, i: ForeignItemStatic) -> ForeignItemStatic {
-        fold_foreign_item_static(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_foreign_item_type(&mut self, i: ForeignItemType) -> ForeignItemType {
-        fold_foreign_item_type(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_foreign_item_verbatim(&mut self, i: ForeignItemVerbatim) -> ForeignItemVerbatim {
-        fold_foreign_item_verbatim(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_generic_argument(&mut self, i: GenericArgument) -> GenericArgument {
-        fold_generic_argument(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_generic_method_argument(&mut self, i: GenericMethodArgument) -> GenericMethodArgument {
-        fold_generic_method_argument(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_generic_param(&mut self, i: GenericParam) -> GenericParam {
-        fold_generic_param(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_generics(&mut self, i: Generics) -> Generics {
-        fold_generics(self, i)
-    }
-    fn fold_ident(&mut self, i: Ident) -> Ident {
-        fold_ident(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_impl_item(&mut self, i: ImplItem) -> ImplItem {
-        fold_impl_item(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_impl_item_const(&mut self, i: ImplItemConst) -> ImplItemConst {
-        fold_impl_item_const(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_impl_item_macro(&mut self, i: ImplItemMacro) -> ImplItemMacro {
-        fold_impl_item_macro(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_impl_item_method(&mut self, i: ImplItemMethod) -> ImplItemMethod {
-        fold_impl_item_method(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_impl_item_type(&mut self, i: ImplItemType) -> ImplItemType {
-        fold_impl_item_type(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_impl_item_verbatim(&mut self, i: ImplItemVerbatim) -> ImplItemVerbatim {
-        fold_impl_item_verbatim(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_index(&mut self, i: Index) -> Index {
-        fold_index(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_item(&mut self, i: Item) -> Item {
-        fold_item(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_item_const(&mut self, i: ItemConst) -> ItemConst {
-        fold_item_const(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_item_enum(&mut self, i: ItemEnum) -> ItemEnum {
-        fold_item_enum(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_item_extern_crate(&mut self, i: ItemExternCrate) -> ItemExternCrate {
-        fold_item_extern_crate(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_item_fn(&mut self, i: ItemFn) -> ItemFn {
-        fold_item_fn(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_item_foreign_mod(&mut self, i: ItemForeignMod) -> ItemForeignMod {
-        fold_item_foreign_mod(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_item_impl(&mut self, i: ItemImpl) -> ItemImpl {
-        fold_item_impl(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_item_macro(&mut self, i: ItemMacro) -> ItemMacro {
-        fold_item_macro(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_item_macro2(&mut self, i: ItemMacro2) -> ItemMacro2 {
-        fold_item_macro2(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_item_mod(&mut self, i: ItemMod) -> ItemMod {
-        fold_item_mod(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_item_static(&mut self, i: ItemStatic) -> ItemStatic {
-        fold_item_static(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_item_struct(&mut self, i: ItemStruct) -> ItemStruct {
-        fold_item_struct(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_item_trait(&mut self, i: ItemTrait) -> ItemTrait {
-        fold_item_trait(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_item_type(&mut self, i: ItemType) -> ItemType {
-        fold_item_type(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_item_union(&mut self, i: ItemUnion) -> ItemUnion {
-        fold_item_union(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_item_use(&mut self, i: ItemUse) -> ItemUse {
-        fold_item_use(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_item_verbatim(&mut self, i: ItemVerbatim) -> ItemVerbatim {
-        fold_item_verbatim(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_label(&mut self, i: Label) -> Label {
-        fold_label(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_lifetime(&mut self, i: Lifetime) -> Lifetime {
-        fold_lifetime(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_lifetime_def(&mut self, i: LifetimeDef) -> LifetimeDef {
-        fold_lifetime_def(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_lit(&mut self, i: Lit) -> Lit {
-        fold_lit(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_lit_bool(&mut self, i: LitBool) -> LitBool {
-        fold_lit_bool(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_lit_byte(&mut self, i: LitByte) -> LitByte {
-        fold_lit_byte(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_lit_byte_str(&mut self, i: LitByteStr) -> LitByteStr {
-        fold_lit_byte_str(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_lit_char(&mut self, i: LitChar) -> LitChar {
-        fold_lit_char(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_lit_float(&mut self, i: LitFloat) -> LitFloat {
-        fold_lit_float(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_lit_int(&mut self, i: LitInt) -> LitInt {
-        fold_lit_int(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_lit_str(&mut self, i: LitStr) -> LitStr {
-        fold_lit_str(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_lit_verbatim(&mut self, i: LitVerbatim) -> LitVerbatim {
-        fold_lit_verbatim(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_local(&mut self, i: Local) -> Local {
-        fold_local(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_macro(&mut self, i: Macro) -> Macro {
-        fold_macro(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_macro_delimiter(&mut self, i: MacroDelimiter) -> MacroDelimiter {
-        fold_macro_delimiter(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_member(&mut self, i: Member) -> Member {
-        fold_member(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_meta(&mut self, i: Meta) -> Meta {
-        fold_meta(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_meta_list(&mut self, i: MetaList) -> MetaList {
-        fold_meta_list(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_meta_name_value(&mut self, i: MetaNameValue) -> MetaNameValue {
-        fold_meta_name_value(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_method_sig(&mut self, i: MethodSig) -> MethodSig {
-        fold_method_sig(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_method_turbofish(&mut self, i: MethodTurbofish) -> MethodTurbofish {
-        fold_method_turbofish(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_nested_meta(&mut self, i: NestedMeta) -> NestedMeta {
-        fold_nested_meta(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_parenthesized_generic_arguments(
-        &mut self,
-        i: ParenthesizedGenericArguments,
-    ) -> ParenthesizedGenericArguments {
-        fold_parenthesized_generic_arguments(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_pat(&mut self, i: Pat) -> Pat {
-        fold_pat(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_pat_box(&mut self, i: PatBox) -> PatBox {
-        fold_pat_box(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_pat_ident(&mut self, i: PatIdent) -> PatIdent {
-        fold_pat_ident(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_pat_lit(&mut self, i: PatLit) -> PatLit {
-        fold_pat_lit(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_pat_macro(&mut self, i: PatMacro) -> PatMacro {
-        fold_pat_macro(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_pat_path(&mut self, i: PatPath) -> PatPath {
-        fold_pat_path(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_pat_range(&mut self, i: PatRange) -> PatRange {
-        fold_pat_range(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_pat_ref(&mut self, i: PatRef) -> PatRef {
-        fold_pat_ref(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_pat_slice(&mut self, i: PatSlice) -> PatSlice {
-        fold_pat_slice(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_pat_struct(&mut self, i: PatStruct) -> PatStruct {
-        fold_pat_struct(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_pat_tuple(&mut self, i: PatTuple) -> PatTuple {
-        fold_pat_tuple(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_pat_tuple_struct(&mut self, i: PatTupleStruct) -> PatTupleStruct {
-        fold_pat_tuple_struct(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_pat_verbatim(&mut self, i: PatVerbatim) -> PatVerbatim {
-        fold_pat_verbatim(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_pat_wild(&mut self, i: PatWild) -> PatWild {
-        fold_pat_wild(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_path(&mut self, i: Path) -> Path {
-        fold_path(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_path_arguments(&mut self, i: PathArguments) -> PathArguments {
-        fold_path_arguments(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_path_segment(&mut self, i: PathSegment) -> PathSegment {
-        fold_path_segment(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_predicate_eq(&mut self, i: PredicateEq) -> PredicateEq {
-        fold_predicate_eq(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_predicate_lifetime(&mut self, i: PredicateLifetime) -> PredicateLifetime {
-        fold_predicate_lifetime(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_predicate_type(&mut self, i: PredicateType) -> PredicateType {
-        fold_predicate_type(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_qself(&mut self, i: QSelf) -> QSelf {
-        fold_qself(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_range_limits(&mut self, i: RangeLimits) -> RangeLimits {
-        fold_range_limits(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_return_type(&mut self, i: ReturnType) -> ReturnType {
-        fold_return_type(self, i)
-    }
-    fn fold_span(&mut self, i: Span) -> Span {
-        fold_span(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    #[cfg(feature = "full")]
-    fn fold_stmt(&mut self, i: Stmt) -> Stmt {
-        fold_stmt(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_trait_bound(&mut self, i: TraitBound) -> TraitBound {
-        fold_trait_bound(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_trait_bound_modifier(&mut self, i: TraitBoundModifier) -> TraitBoundModifier {
-        fold_trait_bound_modifier(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_trait_item(&mut self, i: TraitItem) -> TraitItem {
-        fold_trait_item(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_trait_item_const(&mut self, i: TraitItemConst) -> TraitItemConst {
-        fold_trait_item_const(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_trait_item_macro(&mut self, i: TraitItemMacro) -> TraitItemMacro {
-        fold_trait_item_macro(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_trait_item_method(&mut self, i: TraitItemMethod) -> TraitItemMethod {
-        fold_trait_item_method(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_trait_item_type(&mut self, i: TraitItemType) -> TraitItemType {
-        fold_trait_item_type(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_trait_item_verbatim(&mut self, i: TraitItemVerbatim) -> TraitItemVerbatim {
-        fold_trait_item_verbatim(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_type(&mut self, i: Type) -> Type {
-        fold_type(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_type_array(&mut self, i: TypeArray) -> TypeArray {
-        fold_type_array(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_type_bare_fn(&mut self, i: TypeBareFn) -> TypeBareFn {
-        fold_type_bare_fn(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_type_group(&mut self, i: TypeGroup) -> TypeGroup {
-        fold_type_group(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_type_impl_trait(&mut self, i: TypeImplTrait) -> TypeImplTrait {
-        fold_type_impl_trait(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_type_infer(&mut self, i: TypeInfer) -> TypeInfer {
-        fold_type_infer(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_type_macro(&mut self, i: TypeMacro) -> TypeMacro {
-        fold_type_macro(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_type_never(&mut self, i: TypeNever) -> TypeNever {
-        fold_type_never(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_type_param(&mut self, i: TypeParam) -> TypeParam {
-        fold_type_param(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_type_param_bound(&mut self, i: TypeParamBound) -> TypeParamBound {
-        fold_type_param_bound(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_type_paren(&mut self, i: TypeParen) -> TypeParen {
-        fold_type_paren(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_type_path(&mut self, i: TypePath) -> TypePath {
-        fold_type_path(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_type_ptr(&mut self, i: TypePtr) -> TypePtr {
-        fold_type_ptr(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_type_reference(&mut self, i: TypeReference) -> TypeReference {
-        fold_type_reference(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_type_slice(&mut self, i: TypeSlice) -> TypeSlice {
-        fold_type_slice(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_type_trait_object(&mut self, i: TypeTraitObject) -> TypeTraitObject {
-        fold_type_trait_object(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_type_tuple(&mut self, i: TypeTuple) -> TypeTuple {
-        fold_type_tuple(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_type_verbatim(&mut self, i: TypeVerbatim) -> TypeVerbatim {
-        fold_type_verbatim(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_un_op(&mut self, i: UnOp) -> UnOp {
-        fold_un_op(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_use_glob(&mut self, i: UseGlob) -> UseGlob {
-        fold_use_glob(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_use_group(&mut self, i: UseGroup) -> UseGroup {
-        fold_use_group(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_use_name(&mut self, i: UseName) -> UseName {
-        fold_use_name(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_use_path(&mut self, i: UsePath) -> UsePath {
-        fold_use_path(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_use_rename(&mut self, i: UseRename) -> UseRename {
-        fold_use_rename(self, i)
-    }
-    #[cfg(feature = "full")]
-    fn fold_use_tree(&mut self, i: UseTree) -> UseTree {
-        fold_use_tree(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_variant(&mut self, i: Variant) -> Variant {
-        fold_variant(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_vis_crate(&mut self, i: VisCrate) -> VisCrate {
-        fold_vis_crate(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_vis_public(&mut self, i: VisPublic) -> VisPublic {
-        fold_vis_public(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_vis_restricted(&mut self, i: VisRestricted) -> VisRestricted {
-        fold_vis_restricted(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_visibility(&mut self, i: Visibility) -> Visibility {
-        fold_visibility(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_where_clause(&mut self, i: WhereClause) -> WhereClause {
-        fold_where_clause(self, i)
-    }
-    #[cfg(any(feature = "full", feature = "derive"))]
-    fn fold_where_predicate(&mut self, i: WherePredicate) -> WherePredicate {
-        fold_where_predicate(self, i)
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-macro_rules! fold_span_only {
-    ($f:ident : $t:ident) => {
-        pub fn $f<V: Fold + ?Sized>(_visitor: &mut V, mut _i: $t) -> $t {
-            let span = _visitor.fold_span(_i.span());
-            _i.set_span(span);
-            _i
-        }
-    };
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-fold_span_only!(fold_lit_byte: LitByte);
-#[cfg(any(feature = "full", feature = "derive"))]
-fold_span_only!(fold_lit_byte_str: LitByteStr);
-#[cfg(any(feature = "full", feature = "derive"))]
-fold_span_only!(fold_lit_char: LitChar);
-#[cfg(any(feature = "full", feature = "derive"))]
-fold_span_only!(fold_lit_float: LitFloat);
-#[cfg(any(feature = "full", feature = "derive"))]
-fold_span_only!(fold_lit_int: LitInt);
-#[cfg(any(feature = "full", feature = "derive"))]
-fold_span_only!(fold_lit_str: LitStr);
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_abi<V: Fold + ?Sized>(_visitor: &mut V, _i: Abi) -> Abi {
-    Abi {
-        extern_token: Token![extern](tokens_helper(_visitor, &(_i.extern_token).0)),
-        name: (_i.name).map(|it| _visitor.fold_lit_str(it)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_angle_bracketed_generic_arguments<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: AngleBracketedGenericArguments,
-) -> AngleBracketedGenericArguments {
-    AngleBracketedGenericArguments {
-        colon2_token: (_i.colon2_token).map(|it| Token ! [ :: ](tokens_helper(_visitor, &(it).0))),
-        lt_token: Token ! [ < ](tokens_helper(_visitor, &(_i.lt_token).0)),
-        args: FoldHelper::lift(_i.args, |it| _visitor.fold_generic_argument(it)),
-        gt_token: Token ! [ > ](tokens_helper(_visitor, &(_i.gt_token).0)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_arg_captured<V: Fold + ?Sized>(_visitor: &mut V, _i: ArgCaptured) -> ArgCaptured {
-    ArgCaptured {
-        pat: _visitor.fold_pat(_i.pat),
-        colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i.colon_token).0)),
-        ty: _visitor.fold_type(_i.ty),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_arg_self<V: Fold + ?Sized>(_visitor: &mut V, _i: ArgSelf) -> ArgSelf {
-    ArgSelf {
-        mutability: (_i.mutability).map(|it| Token ! [ mut ](tokens_helper(_visitor, &(it).0))),
-        self_token: Token![self](tokens_helper(_visitor, &(_i.self_token).0)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_arg_self_ref<V: Fold + ?Sized>(_visitor: &mut V, _i: ArgSelfRef) -> ArgSelfRef {
-    ArgSelfRef {
-        and_token: Token ! [ & ](tokens_helper(_visitor, &(_i.and_token).0)),
-        lifetime: (_i.lifetime).map(|it| _visitor.fold_lifetime(it)),
-        mutability: (_i.mutability).map(|it| Token ! [ mut ](tokens_helper(_visitor, &(it).0))),
-        self_token: Token![self](tokens_helper(_visitor, &(_i.self_token).0)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub fn fold_arm<V: Fold + ?Sized>(_visitor: &mut V, _i: Arm) -> Arm {
-    Arm {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        leading_vert: (_i.leading_vert).map(|it| Token ! [ | ](tokens_helper(_visitor, &(it).0))),
-        pats: FoldHelper::lift(_i.pats, |it| _visitor.fold_pat(it)),
-        guard: (_i.guard).map(|it| {
-            (
-                Token ! [ if ](tokens_helper(_visitor, &((it).0).0)),
-                Box::new(_visitor.fold_expr(*(it).1)),
-            )
-        }),
-        fat_arrow_token: Token ! [ => ](tokens_helper(_visitor, &(_i.fat_arrow_token).0)),
-        body: Box::new(_visitor.fold_expr(*_i.body)),
-        comma: (_i.comma).map(|it| Token ! [ , ](tokens_helper(_visitor, &(it).0))),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_attr_style<V: Fold + ?Sized>(_visitor: &mut V, _i: AttrStyle) -> AttrStyle {
-    match _i {
-        AttrStyle::Outer => AttrStyle::Outer,
-        AttrStyle::Inner(_binding_0) => {
-            AttrStyle::Inner(Token![!](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_attribute<V: Fold + ?Sized>(_visitor: &mut V, _i: Attribute) -> Attribute {
-    Attribute {
-        pound_token: Token ! [ # ](tokens_helper(_visitor, &(_i.pound_token).0)),
-        style: _visitor.fold_attr_style(_i.style),
-        bracket_token: Bracket(tokens_helper(_visitor, &(_i.bracket_token).0)),
-        path: _visitor.fold_path(_i.path),
-        tts: _i.tts,
-        is_sugared_doc: _i.is_sugared_doc,
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_bare_fn_arg<V: Fold + ?Sized>(_visitor: &mut V, _i: BareFnArg) -> BareFnArg {
-    BareFnArg {
-        name: (_i.name).map(|it| {
-            (
-                _visitor.fold_bare_fn_arg_name((it).0),
-                Token ! [ : ](tokens_helper(_visitor, &((it).1).0)),
-            )
-        }),
-        ty: _visitor.fold_type(_i.ty),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_bare_fn_arg_name<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: BareFnArgName,
-) -> BareFnArgName {
-    match _i {
-        BareFnArgName::Named(_binding_0) => BareFnArgName::Named(_visitor.fold_ident(_binding_0)),
-        BareFnArgName::Wild(_binding_0) => {
-            BareFnArgName::Wild(Token![_](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_bin_op<V: Fold + ?Sized>(_visitor: &mut V, _i: BinOp) -> BinOp {
-    match _i {
-        BinOp::Add(_binding_0) => {
-            BinOp::Add(Token ! [ + ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::Sub(_binding_0) => {
-            BinOp::Sub(Token ! [ - ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::Mul(_binding_0) => {
-            BinOp::Mul(Token ! [ * ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::Div(_binding_0) => {
-            BinOp::Div(Token ! [ / ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::Rem(_binding_0) => {
-            BinOp::Rem(Token ! [ % ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::And(_binding_0) => {
-            BinOp::And(Token ! [ && ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::Or(_binding_0) => {
-            BinOp::Or(Token ! [ || ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::BitXor(_binding_0) => {
-            BinOp::BitXor(Token ! [ ^ ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::BitAnd(_binding_0) => {
-            BinOp::BitAnd(Token ! [ & ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::BitOr(_binding_0) => {
-            BinOp::BitOr(Token ! [ | ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::Shl(_binding_0) => {
-            BinOp::Shl(Token ! [ << ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::Shr(_binding_0) => {
-            BinOp::Shr(Token ! [ >> ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::Eq(_binding_0) => {
-            BinOp::Eq(Token ! [ == ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::Lt(_binding_0) => BinOp::Lt(Token ! [ < ](tokens_helper(_visitor, &(_binding_0).0))),
-        BinOp::Le(_binding_0) => {
-            BinOp::Le(Token ! [ <= ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::Ne(_binding_0) => {
-            BinOp::Ne(Token ! [ != ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::Ge(_binding_0) => {
-            BinOp::Ge(Token ! [ >= ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::Gt(_binding_0) => BinOp::Gt(Token ! [ > ](tokens_helper(_visitor, &(_binding_0).0))),
-        BinOp::AddEq(_binding_0) => {
-            BinOp::AddEq(Token ! [ += ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::SubEq(_binding_0) => {
-            BinOp::SubEq(Token ! [ -= ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::MulEq(_binding_0) => {
-            BinOp::MulEq(Token ! [ *= ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::DivEq(_binding_0) => {
-            BinOp::DivEq(Token ! [ /= ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::RemEq(_binding_0) => {
-            BinOp::RemEq(Token ! [ %= ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::BitXorEq(_binding_0) => {
-            BinOp::BitXorEq(Token ! [ ^= ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::BitAndEq(_binding_0) => {
-            BinOp::BitAndEq(Token ! [ &= ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::BitOrEq(_binding_0) => {
-            BinOp::BitOrEq(Token ! [ |= ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::ShlEq(_binding_0) => {
-            BinOp::ShlEq(Token ! [ <<= ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        BinOp::ShrEq(_binding_0) => {
-            BinOp::ShrEq(Token ! [ >>= ](tokens_helper(_visitor, &(_binding_0).0)))
-        }
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_binding<V: Fold + ?Sized>(_visitor: &mut V, _i: Binding) -> Binding {
-    Binding {
-        ident: _visitor.fold_ident(_i.ident),
-        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i.eq_token).0)),
-        ty: _visitor.fold_type(_i.ty),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub fn fold_block<V: Fold + ?Sized>(_visitor: &mut V, _i: Block) -> Block {
-    Block {
-        brace_token: Brace(tokens_helper(_visitor, &(_i.brace_token).0)),
-        stmts: FoldHelper::lift(_i.stmts, |it| _visitor.fold_stmt(it)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_bound_lifetimes<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: BoundLifetimes,
-) -> BoundLifetimes {
-    BoundLifetimes {
-        for_token: Token ! [ for ](tokens_helper(_visitor, &(_i.for_token).0)),
-        lt_token: Token ! [ < ](tokens_helper(_visitor, &(_i.lt_token).0)),
-        lifetimes: FoldHelper::lift(_i.lifetimes, |it| _visitor.fold_lifetime_def(it)),
-        gt_token: Token ! [ > ](tokens_helper(_visitor, &(_i.gt_token).0)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_const_param<V: Fold + ?Sized>(_visitor: &mut V, _i: ConstParam) -> ConstParam {
-    ConstParam {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        const_token: Token ! [ const ](tokens_helper(_visitor, &(_i.const_token).0)),
-        ident: _visitor.fold_ident(_i.ident),
-        colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i.colon_token).0)),
-        ty: _visitor.fold_type(_i.ty),
-        eq_token: (_i.eq_token).map(|it| Token ! [ = ](tokens_helper(_visitor, &(it).0))),
-        default: (_i.default).map(|it| _visitor.fold_expr(it)),
-    }
-}
-#[cfg(feature = "derive")]
-pub fn fold_data<V: Fold + ?Sized>(_visitor: &mut V, _i: Data) -> Data {
-    match _i {
-        Data::Struct(_binding_0) => Data::Struct(_visitor.fold_data_struct(_binding_0)),
-        Data::Enum(_binding_0) => Data::Enum(_visitor.fold_data_enum(_binding_0)),
-        Data::Union(_binding_0) => Data::Union(_visitor.fold_data_union(_binding_0)),
-    }
-}
-#[cfg(feature = "derive")]
-pub fn fold_data_enum<V: Fold + ?Sized>(_visitor: &mut V, _i: DataEnum) -> DataEnum {
-    DataEnum {
-        enum_token: Token ! [ enum ](tokens_helper(_visitor, &(_i.enum_token).0)),
-        brace_token: Brace(tokens_helper(_visitor, &(_i.brace_token).0)),
-        variants: FoldHelper::lift(_i.variants, |it| _visitor.fold_variant(it)),
-    }
-}
-#[cfg(feature = "derive")]
-pub fn fold_data_struct<V: Fold + ?Sized>(_visitor: &mut V, _i: DataStruct) -> DataStruct {
-    DataStruct {
-        struct_token: Token ! [ struct ](tokens_helper(_visitor, &(_i.struct_token).0)),
-        fields: _visitor.fold_fields(_i.fields),
-        semi_token: (_i.semi_token).map(|it| Token ! [ ; ](tokens_helper(_visitor, &(it).0))),
-    }
-}
-#[cfg(feature = "derive")]
-pub fn fold_data_union<V: Fold + ?Sized>(_visitor: &mut V, _i: DataUnion) -> DataUnion {
-    DataUnion {
-        union_token: Token![union](tokens_helper(_visitor, &(_i.union_token).0)),
-        fields: _visitor.fold_fields_named(_i.fields),
-    }
-}
-#[cfg(feature = "derive")]
-pub fn fold_derive_input<V: Fold + ?Sized>(_visitor: &mut V, _i: DeriveInput) -> DeriveInput {
-    DeriveInput {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        vis: _visitor.fold_visibility(_i.vis),
-        ident: _visitor.fold_ident(_i.ident),
-        generics: _visitor.fold_generics(_i.generics),
-        data: _visitor.fold_data(_i.data),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr<V: Fold + ?Sized>(_visitor: &mut V, _i: Expr) -> Expr {
-    match _i {
-        Expr::Box(_binding_0) => Expr::Box(full!(_visitor.fold_expr_box(_binding_0))),
-        Expr::InPlace(_binding_0) => Expr::InPlace(full!(_visitor.fold_expr_in_place(_binding_0))),
-        Expr::Array(_binding_0) => Expr::Array(full!(_visitor.fold_expr_array(_binding_0))),
-        Expr::Call(_binding_0) => Expr::Call(_visitor.fold_expr_call(_binding_0)),
-        Expr::MethodCall(_binding_0) => {
-            Expr::MethodCall(full!(_visitor.fold_expr_method_call(_binding_0)))
-        }
-        Expr::Tuple(_binding_0) => Expr::Tuple(full!(_visitor.fold_expr_tuple(_binding_0))),
-        Expr::Binary(_binding_0) => Expr::Binary(_visitor.fold_expr_binary(_binding_0)),
-        Expr::Unary(_binding_0) => Expr::Unary(_visitor.fold_expr_unary(_binding_0)),
-        Expr::Lit(_binding_0) => Expr::Lit(_visitor.fold_expr_lit(_binding_0)),
-        Expr::Cast(_binding_0) => Expr::Cast(_visitor.fold_expr_cast(_binding_0)),
-        Expr::Type(_binding_0) => Expr::Type(full!(_visitor.fold_expr_type(_binding_0))),
-        Expr::If(_binding_0) => Expr::If(full!(_visitor.fold_expr_if(_binding_0))),
-        Expr::IfLet(_binding_0) => Expr::IfLet(full!(_visitor.fold_expr_if_let(_binding_0))),
-        Expr::While(_binding_0) => Expr::While(full!(_visitor.fold_expr_while(_binding_0))),
-        Expr::WhileLet(_binding_0) => {
-            Expr::WhileLet(full!(_visitor.fold_expr_while_let(_binding_0)))
-        }
-        Expr::ForLoop(_binding_0) => Expr::ForLoop(full!(_visitor.fold_expr_for_loop(_binding_0))),
-        Expr::Loop(_binding_0) => Expr::Loop(full!(_visitor.fold_expr_loop(_binding_0))),
-        Expr::Match(_binding_0) => Expr::Match(full!(_visitor.fold_expr_match(_binding_0))),
-        Expr::Closure(_binding_0) => Expr::Closure(full!(_visitor.fold_expr_closure(_binding_0))),
-        Expr::Unsafe(_binding_0) => Expr::Unsafe(full!(_visitor.fold_expr_unsafe(_binding_0))),
-        Expr::Block(_binding_0) => Expr::Block(full!(_visitor.fold_expr_block(_binding_0))),
-        Expr::Assign(_binding_0) => Expr::Assign(full!(_visitor.fold_expr_assign(_binding_0))),
-        Expr::AssignOp(_binding_0) => {
-            Expr::AssignOp(full!(_visitor.fold_expr_assign_op(_binding_0)))
-        }
-        Expr::Field(_binding_0) => Expr::Field(_visitor.fold_expr_field(_binding_0)),
-        Expr::Index(_binding_0) => Expr::Index(_visitor.fold_expr_index(_binding_0)),
-        Expr::Range(_binding_0) => Expr::Range(full!(_visitor.fold_expr_range(_binding_0))),
-        Expr::Path(_binding_0) => Expr::Path(_visitor.fold_expr_path(_binding_0)),
-        Expr::Reference(_binding_0) => {
-            Expr::Reference(full!(_visitor.fold_expr_reference(_binding_0)))
-        }
-        Expr::Break(_binding_0) => Expr::Break(full!(_visitor.fold_expr_break(_binding_0))),
-        Expr::Continue(_binding_0) => {
-            Expr::Continue(full!(_visitor.fold_expr_continue(_binding_0)))
-        }
-        Expr::Return(_binding_0) => Expr::Return(full!(_visitor.fold_expr_return(_binding_0))),
-        Expr::Macro(_binding_0) => Expr::Macro(full!(_visitor.fold_expr_macro(_binding_0))),
-        Expr::Struct(_binding_0) => Expr::Struct(full!(_visitor.fold_expr_struct(_binding_0))),
-        Expr::Repeat(_binding_0) => Expr::Repeat(full!(_visitor.fold_expr_repeat(_binding_0))),
-        Expr::Paren(_binding_0) => Expr::Paren(_visitor.fold_expr_paren(_binding_0)),
-        Expr::Group(_binding_0) => Expr::Group(full!(_visitor.fold_expr_group(_binding_0))),
-        Expr::Try(_binding_0) => Expr::Try(full!(_visitor.fold_expr_try(_binding_0))),
-        Expr::Catch(_binding_0) => Expr::Catch(full!(_visitor.fold_expr_catch(_binding_0))),
-        Expr::Yield(_binding_0) => Expr::Yield(full!(_visitor.fold_expr_yield(_binding_0))),
-        Expr::Verbatim(_binding_0) => Expr::Verbatim(_visitor.fold_expr_verbatim(_binding_0)),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_array<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprArray) -> ExprArray {
-    ExprArray {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        bracket_token: Bracket(tokens_helper(_visitor, &(_i.bracket_token).0)),
-        elems: FoldHelper::lift(_i.elems, |it| _visitor.fold_expr(it)),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_assign<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprAssign) -> ExprAssign {
-    ExprAssign {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        left: Box::new(_visitor.fold_expr(*_i.left)),
-        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i.eq_token).0)),
-        right: Box::new(_visitor.fold_expr(*_i.right)),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_assign_op<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprAssignOp) -> ExprAssignOp {
-    ExprAssignOp {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        left: Box::new(_visitor.fold_expr(*_i.left)),
-        op: _visitor.fold_bin_op(_i.op),
-        right: Box::new(_visitor.fold_expr(*_i.right)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_binary<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprBinary) -> ExprBinary {
-    ExprBinary {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        left: Box::new(_visitor.fold_expr(*_i.left)),
-        op: _visitor.fold_bin_op(_i.op),
-        right: Box::new(_visitor.fold_expr(*_i.right)),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_block<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprBlock) -> ExprBlock {
-    ExprBlock {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        block: _visitor.fold_block(_i.block),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_box<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprBox) -> ExprBox {
-    ExprBox {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        box_token: Token ! [ box ](tokens_helper(_visitor, &(_i.box_token).0)),
-        expr: Box::new(_visitor.fold_expr(*_i.expr)),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_break<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprBreak) -> ExprBreak {
-    ExprBreak {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        break_token: Token![break](tokens_helper(_visitor, &(_i.break_token).0)),
-        label: (_i.label).map(|it| _visitor.fold_lifetime(it)),
-        expr: (_i.expr).map(|it| Box::new(_visitor.fold_expr(*it))),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_call<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprCall) -> ExprCall {
-    ExprCall {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        func: Box::new(_visitor.fold_expr(*_i.func)),
-        paren_token: Paren(tokens_helper(_visitor, &(_i.paren_token).0)),
-        args: FoldHelper::lift(_i.args, |it| _visitor.fold_expr(it)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_cast<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprCast) -> ExprCast {
-    ExprCast {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        expr: Box::new(_visitor.fold_expr(*_i.expr)),
-        as_token: Token ! [ as ](tokens_helper(_visitor, &(_i.as_token).0)),
-        ty: Box::new(_visitor.fold_type(*_i.ty)),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_catch<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprCatch) -> ExprCatch {
-    ExprCatch {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        do_token: Token ! [ do ](tokens_helper(_visitor, &(_i.do_token).0)),
-        catch_token: Token![catch](tokens_helper(_visitor, &(_i.catch_token).0)),
-        block: _visitor.fold_block(_i.block),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_closure<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprClosure) -> ExprClosure {
-    ExprClosure {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        movability: (_i.movability).map(|it| Token ! [ static ](tokens_helper(_visitor, &(it).0))),
-        capture: (_i.capture).map(|it| Token ! [ move ](tokens_helper(_visitor, &(it).0))),
-        or1_token: Token ! [ | ](tokens_helper(_visitor, &(_i.or1_token).0)),
-        inputs: FoldHelper::lift(_i.inputs, |it| _visitor.fold_fn_arg(it)),
-        or2_token: Token ! [ | ](tokens_helper(_visitor, &(_i.or2_token).0)),
-        output: _visitor.fold_return_type(_i.output),
-        body: Box::new(_visitor.fold_expr(*_i.body)),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_continue<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprContinue) -> ExprContinue {
-    ExprContinue {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        continue_token: Token![continue](tokens_helper(_visitor, &(_i.continue_token).0)),
-        label: (_i.label).map(|it| _visitor.fold_lifetime(it)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_field<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprField) -> ExprField {
-    ExprField {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        base: Box::new(_visitor.fold_expr(*_i.base)),
-        dot_token: Token ! [ . ](tokens_helper(_visitor, &(_i.dot_token).0)),
-        member: _visitor.fold_member(_i.member),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_for_loop<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprForLoop) -> ExprForLoop {
-    ExprForLoop {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        label: (_i.label).map(|it| _visitor.fold_label(it)),
-        for_token: Token ! [ for ](tokens_helper(_visitor, &(_i.for_token).0)),
-        pat: Box::new(_visitor.fold_pat(*_i.pat)),
-        in_token: Token ! [ in ](tokens_helper(_visitor, &(_i.in_token).0)),
-        expr: Box::new(_visitor.fold_expr(*_i.expr)),
-        body: _visitor.fold_block(_i.body),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_group<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprGroup) -> ExprGroup {
-    ExprGroup {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        group_token: Group(tokens_helper(_visitor, &(_i.group_token).0)),
-        expr: Box::new(_visitor.fold_expr(*_i.expr)),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_if<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprIf) -> ExprIf {
-    ExprIf {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        if_token: Token ! [ if ](tokens_helper(_visitor, &(_i.if_token).0)),
-        cond: Box::new(_visitor.fold_expr(*_i.cond)),
-        then_branch: _visitor.fold_block(_i.then_branch),
-        else_branch: (_i.else_branch).map(|it| {
-            (
-                Token ! [ else ](tokens_helper(_visitor, &((it).0).0)),
-                Box::new(_visitor.fold_expr(*(it).1)),
-            )
-        }),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_if_let<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprIfLet) -> ExprIfLet {
-    ExprIfLet {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        if_token: Token ! [ if ](tokens_helper(_visitor, &(_i.if_token).0)),
-        let_token: Token ! [ let ](tokens_helper(_visitor, &(_i.let_token).0)),
-        pats: FoldHelper::lift(_i.pats, |it| _visitor.fold_pat(it)),
-        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i.eq_token).0)),
-        expr: Box::new(_visitor.fold_expr(*_i.expr)),
-        then_branch: _visitor.fold_block(_i.then_branch),
-        else_branch: (_i.else_branch).map(|it| {
-            (
-                Token ! [ else ](tokens_helper(_visitor, &((it).0).0)),
-                Box::new(_visitor.fold_expr(*(it).1)),
-            )
-        }),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_in_place<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprInPlace) -> ExprInPlace {
-    ExprInPlace {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        place: Box::new(_visitor.fold_expr(*_i.place)),
-        arrow_token: Token ! [ <- ](tokens_helper(_visitor, &(_i.arrow_token).0)),
-        value: Box::new(_visitor.fold_expr(*_i.value)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_index<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprIndex) -> ExprIndex {
-    ExprIndex {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        expr: Box::new(_visitor.fold_expr(*_i.expr)),
-        bracket_token: Bracket(tokens_helper(_visitor, &(_i.bracket_token).0)),
-        index: Box::new(_visitor.fold_expr(*_i.index)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_lit<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprLit) -> ExprLit {
-    ExprLit {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        lit: _visitor.fold_lit(_i.lit),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_loop<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprLoop) -> ExprLoop {
-    ExprLoop {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        label: (_i.label).map(|it| _visitor.fold_label(it)),
-        loop_token: Token ! [ loop ](tokens_helper(_visitor, &(_i.loop_token).0)),
-        body: _visitor.fold_block(_i.body),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_macro<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprMacro) -> ExprMacro {
-    ExprMacro {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        mac: _visitor.fold_macro(_i.mac),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_match<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprMatch) -> ExprMatch {
-    ExprMatch {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        match_token: Token ! [ match ](tokens_helper(_visitor, &(_i.match_token).0)),
-        expr: Box::new(_visitor.fold_expr(*_i.expr)),
-        brace_token: Brace(tokens_helper(_visitor, &(_i.brace_token).0)),
-        arms: FoldHelper::lift(_i.arms, |it| _visitor.fold_arm(it)),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_method_call<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: ExprMethodCall,
-) -> ExprMethodCall {
-    ExprMethodCall {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        receiver: Box::new(_visitor.fold_expr(*_i.receiver)),
-        dot_token: Token ! [ . ](tokens_helper(_visitor, &(_i.dot_token).0)),
-        method: _visitor.fold_ident(_i.method),
-        turbofish: (_i.turbofish).map(|it| _visitor.fold_method_turbofish(it)),
-        paren_token: Paren(tokens_helper(_visitor, &(_i.paren_token).0)),
-        args: FoldHelper::lift(_i.args, |it| _visitor.fold_expr(it)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_paren<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprParen) -> ExprParen {
-    ExprParen {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        paren_token: Paren(tokens_helper(_visitor, &(_i.paren_token).0)),
-        expr: Box::new(_visitor.fold_expr(*_i.expr)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_path<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprPath) -> ExprPath {
-    ExprPath {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        qself: (_i.qself).map(|it| _visitor.fold_qself(it)),
-        path: _visitor.fold_path(_i.path),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_range<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprRange) -> ExprRange {
-    ExprRange {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        from: (_i.from).map(|it| Box::new(_visitor.fold_expr(*it))),
-        limits: _visitor.fold_range_limits(_i.limits),
-        to: (_i.to).map(|it| Box::new(_visitor.fold_expr(*it))),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_reference<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprReference) -> ExprReference {
-    ExprReference {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        and_token: Token ! [ & ](tokens_helper(_visitor, &(_i.and_token).0)),
-        mutability: (_i.mutability).map(|it| Token ! [ mut ](tokens_helper(_visitor, &(it).0))),
-        expr: Box::new(_visitor.fold_expr(*_i.expr)),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_repeat<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprRepeat) -> ExprRepeat {
-    ExprRepeat {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        bracket_token: Bracket(tokens_helper(_visitor, &(_i.bracket_token).0)),
-        expr: Box::new(_visitor.fold_expr(*_i.expr)),
-        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i.semi_token).0)),
-        len: Box::new(_visitor.fold_expr(*_i.len)),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_return<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprReturn) -> ExprReturn {
-    ExprReturn {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        return_token: Token![return](tokens_helper(_visitor, &(_i.return_token).0)),
-        expr: (_i.expr).map(|it| Box::new(_visitor.fold_expr(*it))),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_struct<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprStruct) -> ExprStruct {
-    ExprStruct {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        path: _visitor.fold_path(_i.path),
-        brace_token: Brace(tokens_helper(_visitor, &(_i.brace_token).0)),
-        fields: FoldHelper::lift(_i.fields, |it| _visitor.fold_field_value(it)),
-        dot2_token: (_i.dot2_token).map(|it| Token![..](tokens_helper(_visitor, &(it).0))),
-        rest: (_i.rest).map(|it| Box::new(_visitor.fold_expr(*it))),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_try<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprTry) -> ExprTry {
-    ExprTry {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        expr: Box::new(_visitor.fold_expr(*_i.expr)),
-        question_token: Token ! [ ? ](tokens_helper(_visitor, &(_i.question_token).0)),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_tuple<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprTuple) -> ExprTuple {
-    ExprTuple {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        paren_token: Paren(tokens_helper(_visitor, &(_i.paren_token).0)),
-        elems: FoldHelper::lift(_i.elems, |it| _visitor.fold_expr(it)),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_type<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprType) -> ExprType {
-    ExprType {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        expr: Box::new(_visitor.fold_expr(*_i.expr)),
-        colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i.colon_token).0)),
-        ty: Box::new(_visitor.fold_type(*_i.ty)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_unary<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprUnary) -> ExprUnary {
-    ExprUnary {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        op: _visitor.fold_un_op(_i.op),
-        expr: Box::new(_visitor.fold_expr(*_i.expr)),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_unsafe<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprUnsafe) -> ExprUnsafe {
-    ExprUnsafe {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        unsafe_token: Token ! [ unsafe ](tokens_helper(_visitor, &(_i.unsafe_token).0)),
-        block: _visitor.fold_block(_i.block),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_verbatim<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprVerbatim) -> ExprVerbatim {
-    ExprVerbatim { tts: _i.tts }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_while<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprWhile) -> ExprWhile {
-    ExprWhile {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        label: (_i.label).map(|it| _visitor.fold_label(it)),
-        while_token: Token ! [ while ](tokens_helper(_visitor, &(_i.while_token).0)),
-        cond: Box::new(_visitor.fold_expr(*_i.cond)),
-        body: _visitor.fold_block(_i.body),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_while_let<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprWhileLet) -> ExprWhileLet {
-    ExprWhileLet {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        label: (_i.label).map(|it| _visitor.fold_label(it)),
-        while_token: Token ! [ while ](tokens_helper(_visitor, &(_i.while_token).0)),
-        let_token: Token ! [ let ](tokens_helper(_visitor, &(_i.let_token).0)),
-        pats: FoldHelper::lift(_i.pats, |it| _visitor.fold_pat(it)),
-        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i.eq_token).0)),
-        expr: Box::new(_visitor.fold_expr(*_i.expr)),
-        body: _visitor.fold_block(_i.body),
-    }
-}
-#[cfg(feature = "full")]
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_expr_yield<V: Fold + ?Sized>(_visitor: &mut V, _i: ExprYield) -> ExprYield {
-    ExprYield {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        yield_token: Token![yield](tokens_helper(_visitor, &(_i.yield_token).0)),
-        expr: (_i.expr).map(|it| Box::new(_visitor.fold_expr(*it))),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_field<V: Fold + ?Sized>(_visitor: &mut V, _i: Field) -> Field {
-    Field {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        vis: _visitor.fold_visibility(_i.vis),
-        ident: (_i.ident).map(|it| _visitor.fold_ident(it)),
-        colon_token: (_i.colon_token).map(|it| Token ! [ : ](tokens_helper(_visitor, &(it).0))),
-        ty: _visitor.fold_type(_i.ty),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub fn fold_field_pat<V: Fold + ?Sized>(_visitor: &mut V, _i: FieldPat) -> FieldPat {
-    FieldPat {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        member: _visitor.fold_member(_i.member),
-        colon_token: (_i.colon_token).map(|it| Token ! [ : ](tokens_helper(_visitor, &(it).0))),
-        pat: Box::new(_visitor.fold_pat(*_i.pat)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub fn fold_field_value<V: Fold + ?Sized>(_visitor: &mut V, _i: FieldValue) -> FieldValue {
-    FieldValue {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        member: _visitor.fold_member(_i.member),
-        colon_token: (_i.colon_token).map(|it| Token ! [ : ](tokens_helper(_visitor, &(it).0))),
-        expr: _visitor.fold_expr(_i.expr),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_fields<V: Fold + ?Sized>(_visitor: &mut V, _i: Fields) -> Fields {
-    match _i {
-        Fields::Named(_binding_0) => Fields::Named(_visitor.fold_fields_named(_binding_0)),
-        Fields::Unnamed(_binding_0) => Fields::Unnamed(_visitor.fold_fields_unnamed(_binding_0)),
-        Fields::Unit => Fields::Unit,
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_fields_named<V: Fold + ?Sized>(_visitor: &mut V, _i: FieldsNamed) -> FieldsNamed {
-    FieldsNamed {
-        brace_token: Brace(tokens_helper(_visitor, &(_i.brace_token).0)),
-        named: FoldHelper::lift(_i.named, |it| _visitor.fold_field(it)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_fields_unnamed<V: Fold + ?Sized>(_visitor: &mut V, _i: FieldsUnnamed) -> FieldsUnnamed {
-    FieldsUnnamed {
-        paren_token: Paren(tokens_helper(_visitor, &(_i.paren_token).0)),
-        unnamed: FoldHelper::lift(_i.unnamed, |it| _visitor.fold_field(it)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_file<V: Fold + ?Sized>(_visitor: &mut V, _i: File) -> File {
-    File {
-        shebang: _i.shebang,
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        items: FoldHelper::lift(_i.items, |it| _visitor.fold_item(it)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_fn_arg<V: Fold + ?Sized>(_visitor: &mut V, _i: FnArg) -> FnArg {
-    match _i {
-        FnArg::SelfRef(_binding_0) => FnArg::SelfRef(_visitor.fold_arg_self_ref(_binding_0)),
-        FnArg::SelfValue(_binding_0) => FnArg::SelfValue(_visitor.fold_arg_self(_binding_0)),
-        FnArg::Captured(_binding_0) => FnArg::Captured(_visitor.fold_arg_captured(_binding_0)),
-        FnArg::Inferred(_binding_0) => FnArg::Inferred(_visitor.fold_pat(_binding_0)),
-        FnArg::Ignored(_binding_0) => FnArg::Ignored(_visitor.fold_type(_binding_0)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_fn_decl<V: Fold + ?Sized>(_visitor: &mut V, _i: FnDecl) -> FnDecl {
-    FnDecl {
-        fn_token: Token ! [ fn ](tokens_helper(_visitor, &(_i.fn_token).0)),
-        generics: _visitor.fold_generics(_i.generics),
-        paren_token: Paren(tokens_helper(_visitor, &(_i.paren_token).0)),
-        inputs: FoldHelper::lift(_i.inputs, |it| _visitor.fold_fn_arg(it)),
-        variadic: (_i.variadic).map(|it| Token ! [ ... ](tokens_helper(_visitor, &(it).0))),
-        output: _visitor.fold_return_type(_i.output),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_foreign_item<V: Fold + ?Sized>(_visitor: &mut V, _i: ForeignItem) -> ForeignItem {
-    match _i {
-        ForeignItem::Fn(_binding_0) => ForeignItem::Fn(_visitor.fold_foreign_item_fn(_binding_0)),
-        ForeignItem::Static(_binding_0) => {
-            ForeignItem::Static(_visitor.fold_foreign_item_static(_binding_0))
-        }
-        ForeignItem::Type(_binding_0) => {
-            ForeignItem::Type(_visitor.fold_foreign_item_type(_binding_0))
-        }
-        ForeignItem::Verbatim(_binding_0) => {
-            ForeignItem::Verbatim(_visitor.fold_foreign_item_verbatim(_binding_0))
-        }
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_foreign_item_fn<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: ForeignItemFn,
-) -> ForeignItemFn {
-    ForeignItemFn {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        vis: _visitor.fold_visibility(_i.vis),
-        ident: _visitor.fold_ident(_i.ident),
-        decl: Box::new(_visitor.fold_fn_decl(*_i.decl)),
-        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i.semi_token).0)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_foreign_item_static<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: ForeignItemStatic,
-) -> ForeignItemStatic {
-    ForeignItemStatic {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        vis: _visitor.fold_visibility(_i.vis),
-        static_token: Token ! [ static ](tokens_helper(_visitor, &(_i.static_token).0)),
-        mutability: (_i.mutability).map(|it| Token ! [ mut ](tokens_helper(_visitor, &(it).0))),
-        ident: _visitor.fold_ident(_i.ident),
-        colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i.colon_token).0)),
-        ty: Box::new(_visitor.fold_type(*_i.ty)),
-        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i.semi_token).0)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_foreign_item_type<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: ForeignItemType,
-) -> ForeignItemType {
-    ForeignItemType {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        vis: _visitor.fold_visibility(_i.vis),
-        type_token: Token ! [ type ](tokens_helper(_visitor, &(_i.type_token).0)),
-        ident: _visitor.fold_ident(_i.ident),
-        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i.semi_token).0)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_foreign_item_verbatim<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: ForeignItemVerbatim,
-) -> ForeignItemVerbatim {
-    ForeignItemVerbatim { tts: _i.tts }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_generic_argument<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: GenericArgument,
-) -> GenericArgument {
-    match _i {
-        GenericArgument::Lifetime(_binding_0) => {
-            GenericArgument::Lifetime(_visitor.fold_lifetime(_binding_0))
-        }
-        GenericArgument::Type(_binding_0) => GenericArgument::Type(_visitor.fold_type(_binding_0)),
-        GenericArgument::Binding(_binding_0) => {
-            GenericArgument::Binding(_visitor.fold_binding(_binding_0))
-        }
-        GenericArgument::Const(_binding_0) => {
-            GenericArgument::Const(_visitor.fold_expr(_binding_0))
-        }
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub fn fold_generic_method_argument<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: GenericMethodArgument,
-) -> GenericMethodArgument {
-    match _i {
-        GenericMethodArgument::Type(_binding_0) => {
-            GenericMethodArgument::Type(_visitor.fold_type(_binding_0))
-        }
-        GenericMethodArgument::Const(_binding_0) => {
-            GenericMethodArgument::Const(_visitor.fold_expr(_binding_0))
-        }
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_generic_param<V: Fold + ?Sized>(_visitor: &mut V, _i: GenericParam) -> GenericParam {
-    match _i {
-        GenericParam::Type(_binding_0) => GenericParam::Type(_visitor.fold_type_param(_binding_0)),
-        GenericParam::Lifetime(_binding_0) => {
-            GenericParam::Lifetime(_visitor.fold_lifetime_def(_binding_0))
-        }
-        GenericParam::Const(_binding_0) => {
-            GenericParam::Const(_visitor.fold_const_param(_binding_0))
-        }
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_generics<V: Fold + ?Sized>(_visitor: &mut V, _i: Generics) -> Generics {
-    Generics {
-        lt_token: (_i.lt_token).map(|it| Token ! [ < ](tokens_helper(_visitor, &(it).0))),
-        params: FoldHelper::lift(_i.params, |it| _visitor.fold_generic_param(it)),
-        gt_token: (_i.gt_token).map(|it| Token ! [ > ](tokens_helper(_visitor, &(it).0))),
-        where_clause: (_i.where_clause).map(|it| _visitor.fold_where_clause(it)),
-    }
-}
-pub fn fold_ident<V: Fold + ?Sized>(_visitor: &mut V, _i: Ident) -> Ident {
-    let mut _i = _i;
-    let span = _visitor.fold_span(_i.span());
-    _i.set_span(span);
-    _i
-}
-#[cfg(feature = "full")]
-pub fn fold_impl_item<V: Fold + ?Sized>(_visitor: &mut V, _i: ImplItem) -> ImplItem {
-    match _i {
-        ImplItem::Const(_binding_0) => ImplItem::Const(_visitor.fold_impl_item_const(_binding_0)),
-        ImplItem::Method(_binding_0) => {
-            ImplItem::Method(_visitor.fold_impl_item_method(_binding_0))
-        }
-        ImplItem::Type(_binding_0) => ImplItem::Type(_visitor.fold_impl_item_type(_binding_0)),
-        ImplItem::Macro(_binding_0) => ImplItem::Macro(_visitor.fold_impl_item_macro(_binding_0)),
-        ImplItem::Verbatim(_binding_0) => {
-            ImplItem::Verbatim(_visitor.fold_impl_item_verbatim(_binding_0))
-        }
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_impl_item_const<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: ImplItemConst,
-) -> ImplItemConst {
-    ImplItemConst {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        vis: _visitor.fold_visibility(_i.vis),
-        defaultness: (_i.defaultness).map(|it| Token![default](tokens_helper(_visitor, &(it).0))),
-        const_token: Token ! [ const ](tokens_helper(_visitor, &(_i.const_token).0)),
-        ident: _visitor.fold_ident(_i.ident),
-        colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i.colon_token).0)),
-        ty: _visitor.fold_type(_i.ty),
-        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i.eq_token).0)),
-        expr: _visitor.fold_expr(_i.expr),
-        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i.semi_token).0)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_impl_item_macro<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: ImplItemMacro,
-) -> ImplItemMacro {
-    ImplItemMacro {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        mac: _visitor.fold_macro(_i.mac),
-        semi_token: (_i.semi_token).map(|it| Token ! [ ; ](tokens_helper(_visitor, &(it).0))),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_impl_item_method<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: ImplItemMethod,
-) -> ImplItemMethod {
-    ImplItemMethod {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        vis: _visitor.fold_visibility(_i.vis),
-        defaultness: (_i.defaultness).map(|it| Token![default](tokens_helper(_visitor, &(it).0))),
-        sig: _visitor.fold_method_sig(_i.sig),
-        block: _visitor.fold_block(_i.block),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_impl_item_type<V: Fold + ?Sized>(_visitor: &mut V, _i: ImplItemType) -> ImplItemType {
-    ImplItemType {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        vis: _visitor.fold_visibility(_i.vis),
-        defaultness: (_i.defaultness).map(|it| Token![default](tokens_helper(_visitor, &(it).0))),
-        type_token: Token ! [ type ](tokens_helper(_visitor, &(_i.type_token).0)),
-        ident: _visitor.fold_ident(_i.ident),
-        generics: _visitor.fold_generics(_i.generics),
-        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i.eq_token).0)),
-        ty: _visitor.fold_type(_i.ty),
-        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i.semi_token).0)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_impl_item_verbatim<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: ImplItemVerbatim,
-) -> ImplItemVerbatim {
-    ImplItemVerbatim { tts: _i.tts }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_index<V: Fold + ?Sized>(_visitor: &mut V, _i: Index) -> Index {
-    Index {
-        index: _i.index,
-        span: _visitor.fold_span(_i.span),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_item<V: Fold + ?Sized>(_visitor: &mut V, _i: Item) -> Item {
-    match _i {
-        Item::ExternCrate(_binding_0) => {
-            Item::ExternCrate(_visitor.fold_item_extern_crate(_binding_0))
-        }
-        Item::Use(_binding_0) => Item::Use(_visitor.fold_item_use(_binding_0)),
-        Item::Static(_binding_0) => Item::Static(_visitor.fold_item_static(_binding_0)),
-        Item::Const(_binding_0) => Item::Const(_visitor.fold_item_const(_binding_0)),
-        Item::Fn(_binding_0) => Item::Fn(_visitor.fold_item_fn(_binding_0)),
-        Item::Mod(_binding_0) => Item::Mod(_visitor.fold_item_mod(_binding_0)),
-        Item::ForeignMod(_binding_0) => {
-            Item::ForeignMod(_visitor.fold_item_foreign_mod(_binding_0))
-        }
-        Item::Type(_binding_0) => Item::Type(_visitor.fold_item_type(_binding_0)),
-        Item::Struct(_binding_0) => Item::Struct(_visitor.fold_item_struct(_binding_0)),
-        Item::Enum(_binding_0) => Item::Enum(_visitor.fold_item_enum(_binding_0)),
-        Item::Union(_binding_0) => Item::Union(_visitor.fold_item_union(_binding_0)),
-        Item::Trait(_binding_0) => Item::Trait(_visitor.fold_item_trait(_binding_0)),
-        Item::Impl(_binding_0) => Item::Impl(_visitor.fold_item_impl(_binding_0)),
-        Item::Macro(_binding_0) => Item::Macro(_visitor.fold_item_macro(_binding_0)),
-        Item::Macro2(_binding_0) => Item::Macro2(_visitor.fold_item_macro2(_binding_0)),
-        Item::Verbatim(_binding_0) => Item::Verbatim(_visitor.fold_item_verbatim(_binding_0)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_item_const<V: Fold + ?Sized>(_visitor: &mut V, _i: ItemConst) -> ItemConst {
-    ItemConst {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        vis: _visitor.fold_visibility(_i.vis),
-        const_token: Token ! [ const ](tokens_helper(_visitor, &(_i.const_token).0)),
-        ident: _visitor.fold_ident(_i.ident),
-        colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i.colon_token).0)),
-        ty: Box::new(_visitor.fold_type(*_i.ty)),
-        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i.eq_token).0)),
-        expr: Box::new(_visitor.fold_expr(*_i.expr)),
-        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i.semi_token).0)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_item_enum<V: Fold + ?Sized>(_visitor: &mut V, _i: ItemEnum) -> ItemEnum {
-    ItemEnum {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        vis: _visitor.fold_visibility(_i.vis),
-        enum_token: Token ! [ enum ](tokens_helper(_visitor, &(_i.enum_token).0)),
-        ident: _visitor.fold_ident(_i.ident),
-        generics: _visitor.fold_generics(_i.generics),
-        brace_token: Brace(tokens_helper(_visitor, &(_i.brace_token).0)),
-        variants: FoldHelper::lift(_i.variants, |it| _visitor.fold_variant(it)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_item_extern_crate<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: ItemExternCrate,
-) -> ItemExternCrate {
-    ItemExternCrate {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        vis: _visitor.fold_visibility(_i.vis),
-        extern_token: Token![extern](tokens_helper(_visitor, &(_i.extern_token).0)),
-        crate_token: Token![crate](tokens_helper(_visitor, &(_i.crate_token).0)),
-        ident: _visitor.fold_ident(_i.ident),
-        rename: (_i.rename).map(|it| {
-            (
-                Token ! [ as ](tokens_helper(_visitor, &((it).0).0)),
-                _visitor.fold_ident((it).1),
-            )
-        }),
-        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i.semi_token).0)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_item_fn<V: Fold + ?Sized>(_visitor: &mut V, _i: ItemFn) -> ItemFn {
-    ItemFn {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        vis: _visitor.fold_visibility(_i.vis),
-        constness: (_i.constness).map(|it| Token ! [ const ](tokens_helper(_visitor, &(it).0))),
-        unsafety: (_i.unsafety).map(|it| Token ! [ unsafe ](tokens_helper(_visitor, &(it).0))),
-        abi: (_i.abi).map(|it| _visitor.fold_abi(it)),
-        ident: _visitor.fold_ident(_i.ident),
-        decl: Box::new(_visitor.fold_fn_decl(*_i.decl)),
-        block: Box::new(_visitor.fold_block(*_i.block)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_item_foreign_mod<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: ItemForeignMod,
-) -> ItemForeignMod {
-    ItemForeignMod {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        abi: _visitor.fold_abi(_i.abi),
-        brace_token: Brace(tokens_helper(_visitor, &(_i.brace_token).0)),
-        items: FoldHelper::lift(_i.items, |it| _visitor.fold_foreign_item(it)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_item_impl<V: Fold + ?Sized>(_visitor: &mut V, _i: ItemImpl) -> ItemImpl {
-    ItemImpl {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        defaultness: (_i.defaultness).map(|it| Token![default](tokens_helper(_visitor, &(it).0))),
-        unsafety: (_i.unsafety).map(|it| Token ! [ unsafe ](tokens_helper(_visitor, &(it).0))),
-        impl_token: Token![impl ](tokens_helper(_visitor, &(_i.impl_token).0)),
-        generics: _visitor.fold_generics(_i.generics),
-        trait_: (_i.trait_).map(|it| {
-            (
-                ((it).0).map(|it| Token![!](tokens_helper(_visitor, &(it).0))),
-                _visitor.fold_path((it).1),
-                Token ! [ for ](tokens_helper(_visitor, &((it).2).0)),
-            )
-        }),
-        self_ty: Box::new(_visitor.fold_type(*_i.self_ty)),
-        brace_token: Brace(tokens_helper(_visitor, &(_i.brace_token).0)),
-        items: FoldHelper::lift(_i.items, |it| _visitor.fold_impl_item(it)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_item_macro<V: Fold + ?Sized>(_visitor: &mut V, _i: ItemMacro) -> ItemMacro {
-    ItemMacro {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        ident: (_i.ident).map(|it| _visitor.fold_ident(it)),
-        mac: _visitor.fold_macro(_i.mac),
-        semi_token: (_i.semi_token).map(|it| Token ! [ ; ](tokens_helper(_visitor, &(it).0))),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_item_macro2<V: Fold + ?Sized>(_visitor: &mut V, _i: ItemMacro2) -> ItemMacro2 {
-    ItemMacro2 {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        vis: _visitor.fold_visibility(_i.vis),
-        macro_token: Token ! [ macro ](tokens_helper(_visitor, &(_i.macro_token).0)),
-        ident: _visitor.fold_ident(_i.ident),
-        paren_token: Paren(tokens_helper(_visitor, &(_i.paren_token).0)),
-        args: _i.args,
-        brace_token: Brace(tokens_helper(_visitor, &(_i.brace_token).0)),
-        body: _i.body,
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_item_mod<V: Fold + ?Sized>(_visitor: &mut V, _i: ItemMod) -> ItemMod {
-    ItemMod {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        vis: _visitor.fold_visibility(_i.vis),
-        mod_token: Token ! [ mod ](tokens_helper(_visitor, &(_i.mod_token).0)),
-        ident: _visitor.fold_ident(_i.ident),
-        content: (_i.content).map(|it| {
-            (
-                Brace(tokens_helper(_visitor, &((it).0).0)),
-                FoldHelper::lift((it).1, |it| _visitor.fold_item(it)),
-            )
-        }),
-        semi: (_i.semi).map(|it| Token ! [ ; ](tokens_helper(_visitor, &(it).0))),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_item_static<V: Fold + ?Sized>(_visitor: &mut V, _i: ItemStatic) -> ItemStatic {
-    ItemStatic {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        vis: _visitor.fold_visibility(_i.vis),
-        static_token: Token ! [ static ](tokens_helper(_visitor, &(_i.static_token).0)),
-        mutability: (_i.mutability).map(|it| Token ! [ mut ](tokens_helper(_visitor, &(it).0))),
-        ident: _visitor.fold_ident(_i.ident),
-        colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i.colon_token).0)),
-        ty: Box::new(_visitor.fold_type(*_i.ty)),
-        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i.eq_token).0)),
-        expr: Box::new(_visitor.fold_expr(*_i.expr)),
-        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i.semi_token).0)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_item_struct<V: Fold + ?Sized>(_visitor: &mut V, _i: ItemStruct) -> ItemStruct {
-    ItemStruct {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        vis: _visitor.fold_visibility(_i.vis),
-        struct_token: Token ! [ struct ](tokens_helper(_visitor, &(_i.struct_token).0)),
-        ident: _visitor.fold_ident(_i.ident),
-        generics: _visitor.fold_generics(_i.generics),
-        fields: _visitor.fold_fields(_i.fields),
-        semi_token: (_i.semi_token).map(|it| Token ! [ ; ](tokens_helper(_visitor, &(it).0))),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_item_trait<V: Fold + ?Sized>(_visitor: &mut V, _i: ItemTrait) -> ItemTrait {
-    ItemTrait {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        vis: _visitor.fold_visibility(_i.vis),
-        unsafety: (_i.unsafety).map(|it| Token ! [ unsafe ](tokens_helper(_visitor, &(it).0))),
-        auto_token: (_i.auto_token).map(|it| Token![auto](tokens_helper(_visitor, &(it).0))),
-        trait_token: Token ! [ trait ](tokens_helper(_visitor, &(_i.trait_token).0)),
-        ident: _visitor.fold_ident(_i.ident),
-        generics: _visitor.fold_generics(_i.generics),
-        colon_token: (_i.colon_token).map(|it| Token ! [ : ](tokens_helper(_visitor, &(it).0))),
-        supertraits: FoldHelper::lift(_i.supertraits, |it| _visitor.fold_type_param_bound(it)),
-        brace_token: Brace(tokens_helper(_visitor, &(_i.brace_token).0)),
-        items: FoldHelper::lift(_i.items, |it| _visitor.fold_trait_item(it)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_item_type<V: Fold + ?Sized>(_visitor: &mut V, _i: ItemType) -> ItemType {
-    ItemType {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        vis: _visitor.fold_visibility(_i.vis),
-        type_token: Token ! [ type ](tokens_helper(_visitor, &(_i.type_token).0)),
-        ident: _visitor.fold_ident(_i.ident),
-        generics: _visitor.fold_generics(_i.generics),
-        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i.eq_token).0)),
-        ty: Box::new(_visitor.fold_type(*_i.ty)),
-        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i.semi_token).0)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_item_union<V: Fold + ?Sized>(_visitor: &mut V, _i: ItemUnion) -> ItemUnion {
-    ItemUnion {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        vis: _visitor.fold_visibility(_i.vis),
-        union_token: Token![union](tokens_helper(_visitor, &(_i.union_token).0)),
-        ident: _visitor.fold_ident(_i.ident),
-        generics: _visitor.fold_generics(_i.generics),
-        fields: _visitor.fold_fields_named(_i.fields),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_item_use<V: Fold + ?Sized>(_visitor: &mut V, _i: ItemUse) -> ItemUse {
-    ItemUse {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        vis: _visitor.fold_visibility(_i.vis),
-        use_token: Token ! [ use ](tokens_helper(_visitor, &(_i.use_token).0)),
-        leading_colon: (_i.leading_colon)
-            .map(|it| Token ! [ :: ](tokens_helper(_visitor, &(it).0))),
-        tree: _visitor.fold_use_tree(_i.tree),
-        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i.semi_token).0)),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_item_verbatim<V: Fold + ?Sized>(_visitor: &mut V, _i: ItemVerbatim) -> ItemVerbatim {
-    ItemVerbatim { tts: _i.tts }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub fn fold_label<V: Fold + ?Sized>(_visitor: &mut V, _i: Label) -> Label {
-    Label {
-        name: _visitor.fold_lifetime(_i.name),
-        colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i.colon_token).0)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_lifetime<V: Fold + ?Sized>(_visitor: &mut V, _i: Lifetime) -> Lifetime {
-    Lifetime {
-        apostrophe: _i.apostrophe,
-        ident: _visitor.fold_ident(_i.ident),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_lifetime_def<V: Fold + ?Sized>(_visitor: &mut V, _i: LifetimeDef) -> LifetimeDef {
-    LifetimeDef {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        lifetime: _visitor.fold_lifetime(_i.lifetime),
-        colon_token: (_i.colon_token).map(|it| Token ! [ : ](tokens_helper(_visitor, &(it).0))),
-        bounds: FoldHelper::lift(_i.bounds, |it| _visitor.fold_lifetime(it)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_lit<V: Fold + ?Sized>(_visitor: &mut V, _i: Lit) -> Lit {
-    match _i {
-        Lit::Str(_binding_0) => Lit::Str(_visitor.fold_lit_str(_binding_0)),
-        Lit::ByteStr(_binding_0) => Lit::ByteStr(_visitor.fold_lit_byte_str(_binding_0)),
-        Lit::Byte(_binding_0) => Lit::Byte(_visitor.fold_lit_byte(_binding_0)),
-        Lit::Char(_binding_0) => Lit::Char(_visitor.fold_lit_char(_binding_0)),
-        Lit::Int(_binding_0) => Lit::Int(_visitor.fold_lit_int(_binding_0)),
-        Lit::Float(_binding_0) => Lit::Float(_visitor.fold_lit_float(_binding_0)),
-        Lit::Bool(_binding_0) => Lit::Bool(_visitor.fold_lit_bool(_binding_0)),
-        Lit::Verbatim(_binding_0) => Lit::Verbatim(_visitor.fold_lit_verbatim(_binding_0)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_lit_bool<V: Fold + ?Sized>(_visitor: &mut V, _i: LitBool) -> LitBool {
-    LitBool {
-        value: _i.value,
-        span: _visitor.fold_span(_i.span),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_lit_verbatim<V: Fold + ?Sized>(_visitor: &mut V, _i: LitVerbatim) -> LitVerbatim {
-    LitVerbatim { token: _i.token }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub fn fold_local<V: Fold + ?Sized>(_visitor: &mut V, _i: Local) -> Local {
-    Local {
-        attrs: FoldHelper::lift(_i.attrs, |it| _visitor.fold_attribute(it)),
-        let_token: Token ! [ let ](tokens_helper(_visitor, &(_i.let_token).0)),
-        pats: FoldHelper::lift(_i.pats, |it| _visitor.fold_pat(it)),
-        ty: (_i.ty).map(|it| {
-            (
-                Token ! [ : ](tokens_helper(_visitor, &((it).0).0)),
-                Box::new(_visitor.fold_type(*(it).1)),
-            )
-        }),
-        init: (_i.init).map(|it| {
-            (
-                Token ! [ = ](tokens_helper(_visitor, &((it).0).0)),
-                Box::new(_visitor.fold_expr(*(it).1)),
-            )
-        }),
-        semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i.semi_token).0)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_macro<V: Fold + ?Sized>(_visitor: &mut V, _i: Macro) -> Macro {
-    Macro {
-        path: _visitor.fold_path(_i.path),
-        bang_token: Token![!](tokens_helper(_visitor, &(_i.bang_token).0)),
-        delimiter: _visitor.fold_macro_delimiter(_i.delimiter),
-        tts: _i.tts,
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_macro_delimiter<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: MacroDelimiter,
-) -> MacroDelimiter {
-    match _i {
-        MacroDelimiter::Paren(_binding_0) => {
-            MacroDelimiter::Paren(Paren(tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        MacroDelimiter::Brace(_binding_0) => {
-            MacroDelimiter::Brace(Brace(tokens_helper(_visitor, &(_binding_0).0)))
-        }
-        MacroDelimiter::Bracket(_binding_0) => {
-            MacroDelimiter::Bracket(Bracket(tokens_helper(_visitor, &(_binding_0).0)))
-        }
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_member<V: Fold + ?Sized>(_visitor: &mut V, _i: Member) -> Member {
-    match _i {
-        Member::Named(_binding_0) => Member::Named(_visitor.fold_ident(_binding_0)),
-        Member::Unnamed(_binding_0) => Member::Unnamed(_visitor.fold_index(_binding_0)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_meta<V: Fold + ?Sized>(_visitor: &mut V, _i: Meta) -> Meta {
-    match _i {
-        Meta::Word(_binding_0) => Meta::Word(_visitor.fold_ident(_binding_0)),
-        Meta::List(_binding_0) => Meta::List(_visitor.fold_meta_list(_binding_0)),
-        Meta::NameValue(_binding_0) => Meta::NameValue(_visitor.fold_meta_name_value(_binding_0)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_meta_list<V: Fold + ?Sized>(_visitor: &mut V, _i: MetaList) -> MetaList {
-    MetaList {
-        ident: _visitor.fold_ident(_i.ident),
-        paren_token: Paren(tokens_helper(_visitor, &(_i.paren_token).0)),
-        nested: FoldHelper::lift(_i.nested, |it| _visitor.fold_nested_meta(it)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_meta_name_value<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: MetaNameValue,
-) -> MetaNameValue {
-    MetaNameValue {
-        ident: _visitor.fold_ident(_i.ident),
-        eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i.eq_token).0)),
-        lit: _visitor.fold_lit(_i.lit),
-    }
-}
-#[cfg(feature = "full")]
-pub fn fold_method_sig<V: Fold + ?Sized>(_visitor: &mut V, _i: MethodSig) -> MethodSig {
-    MethodSig {
-        constness: (_i.constness).map(|it| Token ! [ const ](tokens_helper(_visitor, &(it).0))),
-        unsafety: (_i.unsafety).map(|it| Token ! [ unsafe ](tokens_helper(_visitor, &(it).0))),
-        abi: (_i.abi).map(|it| _visitor.fold_abi(it)),
-        ident: _visitor.fold_ident(_i.ident),
-        decl: _visitor.fold_fn_decl(_i.decl),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub fn fold_method_turbofish<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: MethodTurbofish,
-) -> MethodTurbofish {
-    MethodTurbofish {
-        colon2_token: Token ! [ :: ](tokens_helper(_visitor, &(_i.colon2_token).0)),
-        lt_token: Token ! [ < ](tokens_helper(_visitor, &(_i.lt_token).0)),
-        args: FoldHelper::lift(_i.args, |it| _visitor.fold_generic_method_argument(it)),
-        gt_token: Token ! [ > ](tokens_helper(_visitor, &(_i.gt_token).0)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_nested_meta<V: Fold + ?Sized>(_visitor: &mut V, _i: NestedMeta) -> NestedMeta {
-    match _i {
-        NestedMeta::Meta(_binding_0) => NestedMeta::Meta(_visitor.fold_meta(_binding_0)),
-        NestedMeta::Literal(_binding_0) => NestedMeta::Literal(_visitor.fold_lit(_binding_0)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-pub fn fold_parenthesized_generic_arguments<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: ParenthesizedGenericArguments,
-) -> ParenthesizedGenericArguments {
-    ParenthesizedGenericArguments {
-        paren_token: Paren(tokens_helper(_visitor, &(_i.paren_token).0)),
-        inputs: FoldHelper::lift(_i.inputs, |it| _visitor.fold_type(it)),
-        output: _visitor.fold_return_type(_i.output),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub fn fold_pat<V: Fold + ?Sized>(_visitor: &mut V, _i: Pat) -> Pat {
-    match _i {
-        Pat::Wild(_binding_0) => Pat::Wild(_visitor.fold_pat_wild(_binding_0)),
-        Pat::Ident(_binding_0) => Pat::Ident(_visitor.fold_pat_ident(_binding_0)),
-        Pat::Struct(_binding_0) => Pat::Struct(_visitor.fold_pat_struct(_binding_0)),
-        Pat::TupleStruct(_binding_0) => {
-            Pat::TupleStruct(_visitor.fold_pat_tuple_struct(_binding_0))
-        }
-        Pat::Path(_binding_0) => Pat::Path(_visitor.fold_pat_path(_binding_0)),
-        Pat::Tuple(_binding_0) => Pat::Tuple(_visitor.fold_pat_tuple(_binding_0)),
-        Pat::Box(_binding_0) => Pat::Box(_visitor.fold_pat_box(_binding_0)),
-        Pat::Ref(_binding_0) => Pat::Ref(_visitor.fold_pat_ref(_binding_0)),
-        Pat::Lit(_binding_0) => Pat::Lit(_visitor.fold_pat_lit(_binding_0)),
-        Pat::Range(_binding_0) => Pat::Range(_visitor.fold_pat_range(_binding_0)),
-        Pat::Slice(_binding_0) => Pat::Slice(_visitor.fold_pat_slice(_binding_0)),
-        Pat::Macro(_binding_0) => Pat::Macro(_visitor.fold_pat_macro(_binding_0)),
-        Pat::Verbatim(_binding_0) => Pat::Verbatim(_visitor.fold_pat_verbatim(_binding_0)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub fn fold_pat_box<V: Fold + ?Sized>(_visitor: &mut V, _i: PatBox) -> PatBox {
-    PatBox {
-        box_token: Token ! [ box ](tokens_helper(_visitor, &(_i.box_token).0)),
-        pat: Box::new(_visitor.fold_pat(*_i.pat)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub fn fold_pat_ident<V: Fold + ?Sized>(_visitor: &mut V, _i: PatIdent) -> PatIdent {
-    PatIdent {
-        by_ref: (_i.by_ref).map(|it| Token ! [ ref ](tokens_helper(_visitor, &(it).0))),
-        mutability: (_i.mutability).map(|it| Token ! [ mut ](tokens_helper(_visitor, &(it).0))),
-        ident: _visitor.fold_ident(_i.ident),
-        subpat: (_i.subpat).map(|it| {
-            (
-                Token ! [ @ ](tokens_helper(_visitor, &((it).0).0)),
-                Box::new(_visitor.fold_pat(*(it).1)),
-            )
-        }),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub fn fold_pat_lit<V: Fold + ?Sized>(_visitor: &mut V, _i: PatLit) -> PatLit {
-    PatLit {
-        expr: Box::new(_visitor.fold_expr(*_i.expr)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub fn fold_pat_macro<V: Fold + ?Sized>(_visitor: &mut V, _i: PatMacro) -> PatMacro {
-    PatMacro {
-        mac: _visitor.fold_macro(_i.mac),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub fn fold_pat_path<V: Fold + ?Sized>(_visitor: &mut V, _i: PatPath) -> PatPath {
-    PatPath {
-        qself: (_i.qself).map(|it| _visitor.fold_qself(it)),
-        path: _visitor.fold_path(_i.path),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub fn fold_pat_range<V: Fold + ?Sized>(_visitor: &mut V, _i: PatRange) -> PatRange {
-    PatRange {
-        lo: Box::new(_visitor.fold_expr(*_i.lo)),
-        limits: _visitor.fold_range_limits(_i.limits),
-        hi: Box::new(_visitor.fold_expr(*_i.hi)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub fn fold_pat_ref<V: Fold + ?Sized>(_visitor: &mut V, _i: PatRef) -> PatRef {
-    PatRef {
-        and_token: Token ! [ & ](tokens_helper(_visitor, &(_i.and_token).0)),
-        mutability: (_i.mutability).map(|it| Token ! [ mut ](tokens_helper(_visitor, &(it).0))),
-        pat: Box::new(_visitor.fold_pat(*_i.pat)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub fn fold_pat_slice<V: Fold + ?Sized>(_visitor: &mut V, _i: PatSlice) -> PatSlice {
-    PatSlice {
-        bracket_token: Bracket(tokens_helper(_visitor, &(_i.bracket_token).0)),
-        front: FoldHelper::lift(_i.front, |it| _visitor.fold_pat(it)),
-        middle: (_i.middle).map(|it| Box::new(_visitor.fold_pat(*it))),
-        dot2_token: (_i.dot2_token).map(|it| Token![..](tokens_helper(_visitor, &(it).0))),
-        comma_token: (_i.comma_token).map(|it| Token ! [ , ](tokens_helper(_visitor, &(it).0))),
-        back: FoldHelper::lift(_i.back, |it| _visitor.fold_pat(it)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub fn fold_pat_struct<V: Fold + ?Sized>(_visitor: &mut V, _i: PatStruct) -> PatStruct {
-    PatStruct {
-        path: _visitor.fold_path(_i.path),
-        brace_token: Brace(tokens_helper(_visitor, &(_i.brace_token).0)),
-        fields: FoldHelper::lift(_i.fields, |it| _visitor.fold_field_pat(it)),
-        dot2_token: (_i.dot2_token).map(|it| Token![..](tokens_helper(_visitor, &(it).0))),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub fn fold_pat_tuple<V: Fold + ?Sized>(_visitor: &mut V, _i: PatTuple) -> PatTuple {
-    PatTuple {
-        paren_token: Paren(tokens_helper(_visitor, &(_i.paren_token).0)),
-        front: FoldHelper::lift(_i.front, |it| _visitor.fold_pat(it)),
-        dot2_token: (_i.dot2_token).map(|it| Token![..](tokens_helper(_visitor, &(it).0))),
-        comma_token: (_i.comma_token).map(|it| Token ! [ , ](tokens_helper(_visitor, &(it).0))),
-        back: FoldHelper::lift(_i.back, |it| _visitor.fold_pat(it)),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub fn fold_pat_tuple_struct<V: Fold + ?Sized>(
-    _visitor: &mut V,
-    _i: PatTupleStruct,
-) -> PatTupleStruct {
-    PatTupleStruct {
-        path: _visitor.fold_path(_i.path),
-        pat: _visitor.fold_pat_tuple(_i.pat),
-    }
-}
-#[cfg(any(feature = "full", feature = "derive"))]
-#[cfg(feature = "full")]
-pub