diff --git a/CHANGELOG.md b/CHANGELOG.md index d3f542a60..658742c4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - [#1006](https://github.com/wasmerio/wasmer/pull/1006) Fix minor panic issue when `wasmer::compile_with` called with llvm backend - [#1009](https://github.com/wasmerio/wasmer/pull/1009) Enable LLVM verifier for all tests, add new llvm-backend-tests crate. - [#1022](https://github.com/wasmerio/wasmer/pull/1022) Add caching support for Singlepass backend. +- [#1004](https://github.com/wasmerio/wasmer/pull/1004) Add the Auto backend to enable to adapt backend usage depending on wasm file executed. ## 0.11.0 - 2019-11-22 diff --git a/Cargo.lock b/Cargo.lock index ca2a89404..4f5cd3399 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,5 +1,10 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +[[package]] +name = "adler32" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "aho-corasick" version = "0.7.6" @@ -40,6 +45,34 @@ name = "autocfg" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "backtrace" +version = "0.3.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "backtrace-sys" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "base64" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "bincode" version = "1.2.0" @@ -47,7 +80,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -73,7 +106,7 @@ dependencies = [ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "regex-automata 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -81,6 +114,16 @@ name = "byteorder" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "bytes" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "c2-chacha" version = "0.2.3" @@ -91,18 +134,21 @@ dependencies = [ [[package]] name = "cargo_toml" -version = "0.6.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", + "toml 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "cast" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "cbindgen" @@ -113,8 +159,8 @@ dependencies = [ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "toml 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -165,6 +211,46 @@ name = "constant_time_eq" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "cookie" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cookie_store" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "publicsuffix 1.5.4 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "try_from 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "core-foundation" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "core-foundation-sys" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "cranelift-bforest" version = "0.44.0" @@ -218,28 +304,36 @@ dependencies = [ "target-lexicon 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "crc32fast" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "criterion" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "cast 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cast 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "criterion-plot 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "csv 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "itertools 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "rand_xoshiro 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon-core 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon-core 1.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", "tinytemplate 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -250,8 +344,8 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "cast 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "itertools 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cast 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -284,6 +378,14 @@ dependencies = [ "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "crossbeam-queue" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "crossbeam-utils" version = "0.6.6" @@ -312,7 +414,7 @@ dependencies = [ "csv-core 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -340,9 +442,14 @@ dependencies = [ "generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "dtoa" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "dynasm" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -356,7 +463,7 @@ dependencies = [ [[package]] name = "dynasmrt" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -369,12 +476,11 @@ version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "enum-methods" -version = "0.0.8" +name = "encoding_rs" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -382,7 +488,7 @@ name = "erased-serde" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -404,11 +510,20 @@ dependencies = [ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "error-chain" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "failure" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ + "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)", "failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -420,14 +535,71 @@ dependencies = [ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", - "synstructure 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)", + "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "flate2" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "miniz_oxide 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fnv" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "fuchsia-cprng" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "fuchsia-zircon" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fuchsia-zircon-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "futures" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "futures-cpupool" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "gcc" version = "0.3.55" @@ -435,11 +607,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "generational-arena" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -490,6 +662,23 @@ dependencies = [ "scroll 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "h2" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)", + "indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "string 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "heck" version = "0.3.1" @@ -511,37 +700,125 @@ name = "hex" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "http" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "http-body" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "httparse" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "hyper" +version = "0.12.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "h2 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)", + "http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "want 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "hyper-tls" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)", + "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "idna" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-normalization 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "idna" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-normalization 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "indexmap" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "inkwell" version = "0.1.0" -source = "git+https://github.com/wasmerio/inkwell?branch=llvm8-0#bd0d09a8041dc2217f698cd3631b6d4d4c0e696b" +source = "git+https://github.com/TheDan64/inkwell?rev=781620e9fa30e51a6e03bd0d49b5f5bb7a782520#781620e9fa30e51a6e03bd0d49b5f5bb7a782520" dependencies = [ "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "enum-methods 0.0.8 (registry+https://github.com/rust-lang/crates.io-index)", - "inkwell_internal_macros 0.1.0 (git+https://github.com/wasmerio/inkwell?branch=llvm8-0)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "inkwell_internals 0.1.0 (git+https://github.com/TheDan64/inkwell?rev=781620e9fa30e51a6e03bd0d49b5f5bb7a782520)", "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", "llvm-sys 80.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "once_cell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "inkwell_internal_macros" +name = "inkwell_internals" version = "0.1.0" -source = "git+https://github.com/wasmerio/inkwell?branch=llvm8-0#bd0d09a8041dc2217f698cd3631b6d4d4c0e696b" +source = "git+https://github.com/TheDan64/inkwell?rev=781620e9fa30e51a6e03bd0d49b5f5bb7a782520#781620e9fa30e51a6e03bd0d49b5f5bb7a782520" dependencies = [ - "cargo_toml 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cargo_toml 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", + "reqwest 0.9.22 (registry+https://github.com/rust-lang/crates.io-index)", "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -565,9 +842,17 @@ dependencies = [ "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "iovec" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "itertools" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -615,7 +900,7 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -629,6 +914,11 @@ dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "matches" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "maybe-uninit" version = "2.0.0" @@ -664,6 +954,83 @@ dependencies = [ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "mime" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "mime_guess" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "mime 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", + "unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "miniz_oxide" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "mio" +version = "0.6.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "miow" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "native-tls" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl 0.10.26 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)", + "schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", + "security-framework 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "security-framework-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "net2" +version = "0.2.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "nix" version = "0.15.0" @@ -678,7 +1045,7 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -686,13 +1053,48 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "hermit-abi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "once_cell" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "openssl" +version = "0.10.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "openssl-probe" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "openssl-sys" +version = "0.9.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "owning_ref" version = "0.4.0" @@ -715,7 +1117,7 @@ dependencies = [ name = "parallel" version = "0.1.0" dependencies = [ - "rayon 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", "wasmer-runtime 0.11.0", "wasmer-runtime-core 0.11.0", @@ -734,7 +1136,7 @@ name = "parking_lot" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lock_api 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lock_api 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -753,6 +1155,21 @@ dependencies = [ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "percent-encoding" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "pkg-config" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "plain" version = "0.2.3" @@ -794,9 +1211,16 @@ dependencies = [ ] [[package]] -name = "quote" -version = "0.3.15" +name = "publicsuffix" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", + "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "quote" @@ -814,6 +1238,24 @@ dependencies = [ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "rand" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "rand" version = "0.7.2" @@ -826,6 +1268,15 @@ dependencies = [ "rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "rand_chacha" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "rand_chacha" version = "0.2.1" @@ -856,6 +1307,14 @@ dependencies = [ "getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "rand_hc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "rand_hc" version = "0.2.0" @@ -864,6 +1323,24 @@ dependencies = [ "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "rand_isaac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_jitter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "rand_os" version = "0.1.3" @@ -877,6 +1354,23 @@ dependencies = [ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "rand_pcg" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_xorshift" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "rand_xoshiro" version = "0.1.0" @@ -898,24 +1392,24 @@ dependencies = [ [[package]] name = "rayon" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon-core 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon-core 1.6.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rayon-core" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-queue 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -963,6 +1457,44 @@ dependencies = [ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "reqwest" +version = "0.9.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie_store 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding_rs 0.8.20 (registry+https://github.com/rust-lang/crates.io-index)", + "flate2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper-tls 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "mime 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", + "mime_guess 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_urlencoded 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winreg 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "rustc_version" version = "0.2.3" @@ -984,6 +1516,15 @@ dependencies = [ "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "schannel" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "scopeguard" version = "1.0.0" @@ -1008,6 +1549,25 @@ dependencies = [ "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "security-framework" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "security-framework-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "security-framework-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "semver" version = "0.9.0" @@ -1023,10 +1583,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde" -version = "1.0.102" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1035,7 +1595,7 @@ version = "0.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1043,12 +1603,12 @@ name = "serde_bytes" version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_derive" -version = "1.0.102" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1058,14 +1618,30 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.41" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "serde_urlencoded" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "slab" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "smallvec" version = "0.6.13" @@ -1074,11 +1650,24 @@ dependencies = [ "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "smallvec" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "stable_deref_trait" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "string" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "strsim" version = "0.8.0" @@ -1086,16 +1675,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "structopt" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", - "structopt-derive 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "structopt-derive 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "structopt-derive" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1105,16 +1694,6 @@ dependencies = [ "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "syn" -version = "0.11.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", - "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "syn" version = "0.15.44" @@ -1135,17 +1714,9 @@ dependencies = [ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "synom" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "synstructure" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1161,7 +1732,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1208,16 +1779,131 @@ name = "tinytemplate" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "toml" -version = "0.4.10" +name = "tokio" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-buf" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-current-thread" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-executor" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-io" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-reactor" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-sync 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-sync" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-tcp" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-threadpool" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tokio-timer" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1225,7 +1911,20 @@ name = "toml" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "try-lock" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "try_from" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1241,7 +1940,7 @@ dependencies = [ "erased-serde 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "inventory 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "typetag-impl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1255,6 +1954,30 @@ dependencies = [ "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicode-normalization" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "smallvec 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "unicode-segmentation" version = "1.6.0" @@ -1265,11 +1988,6 @@ name = "unicode-width" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "unicode-xid" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "unicode-xid" version = "0.1.0" @@ -1280,11 +1998,54 @@ name = "unicode-xid" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "url" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "url" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "uuid" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "vcpkg" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "vec_map" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "version_check" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "version_check" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "void" version = "1.0.2" @@ -1295,9 +2056,9 @@ name = "wabt" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", "wabt-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1321,6 +2082,16 @@ dependencies = [ "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "want" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "wasi" version = "0.7.0" @@ -1334,8 +2105,8 @@ dependencies = [ "errno 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "structopt 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", + "structopt 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "typetag 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "wabt 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", "wasmer-clif-backend 0.11.0", @@ -1363,17 +2134,17 @@ dependencies = [ "cranelift-native 0.44.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", "nix 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde-bench 0.0.7 (registry+https://github.com/rust-lang/crates.io-index)", "serde_bytes 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "target-lexicon 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", "wasmer-clif-fork-frontend 0.44.0 (registry+https://github.com/rust-lang/crates.io-index)", "wasmer-clif-fork-wasm 0.44.0 (registry+https://github.com/rust-lang/crates.io-index)", "wasmer-runtime-core 0.11.0", "wasmer-win-exception-handler 0.11.0", - "wasmparser 0.39.2 (registry+https://github.com/rust-lang/crates.io-index)", + "wasmparser 0.39.3 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1399,7 +2170,7 @@ dependencies = [ "failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "wasmer-clif-fork-frontend 0.44.0 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmparser 0.39.2 (registry+https://github.com/rust-lang/crates.io-index)", + "wasmparser 0.39.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1450,7 +2221,7 @@ dependencies = [ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", "goblin 0.0.24 (registry+https://github.com/rust-lang/crates.io-index)", - "inkwell 0.1.0 (git+https://github.com/wasmerio/inkwell?branch=llvm8-0)", + "inkwell 0.1.0 (git+https://github.com/TheDan64/inkwell?rev=781620e9fa30e51a6e03bd0d49b5f5bb7a782520)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", "nix 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1460,7 +2231,7 @@ dependencies = [ "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", "wabt 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", "wasmer-runtime-core 0.11.0", - "wasmparser 0.39.2 (registry+https://github.com/rust-lang/crates.io-index)", + "wasmparser 0.39.3 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1537,12 +2308,12 @@ dependencies = [ "page_size 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde-bench 0.0.7 (registry+https://github.com/rust-lang/crates.io-index)", "serde_bytes 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmparser 0.39.2 (registry+https://github.com/rust-lang/crates.io-index)", + "wasmparser 0.39.3 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1563,8 +2334,8 @@ version = "0.11.0" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "dynasm 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "dynasmrt 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "dynasm 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "dynasmrt 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", "nix 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1592,11 +2363,11 @@ version = "0.11.0" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "generational-arena 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "generational-arena 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", "typetag 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "wasmer-runtime-core 0.11.0", @@ -1628,7 +2399,7 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.39.2" +version = "0.39.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1668,21 +2439,43 @@ name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "winreg" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [metadata] +"checksum adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" "checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d" "checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" "checksum arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0d382e583f07208808f6b1249e60848879ba3543f57c32277bf52d69c2f0f0ee" "checksum arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8" "checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90" "checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" +"checksum backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)" = "924c76597f0d9ca25d762c25a4d369d51267536465dc5064bdf0eb073ed477ea" +"checksum backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491" +"checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" "checksum bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b8ab639324e3ee8774d296864fbc0dbbb256cf1a41c490b94cba90c082915f92" "checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" "checksum blake2b_simd 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b83b7baab1e671718d78204225800d6b170e648188ac7dc992e9d6bddf87d0c0" "checksum bstr 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8d6c2c5b58ab920a4f5aeaaca34b4488074e8cc7596af94e6f8c6ff247c60245" "checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" +"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" "checksum c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "214238caa1bf3a496ec3392968969cab8549f96ff30652c9e56885329315f6bb" -"checksum cargo_toml 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "097f5ce64ba566a83d9d914fd005de1e5937fdd57d8c5d99a7593040955d75a9" -"checksum cast 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "926013f2860c46252efceabb19f4a6b308197505082c609025aa6706c011d427" +"checksum cargo_toml 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e7877b00aaf997d7ed66a81281d3a8b9f9da5361df05b72785b985349979a0f3" +"checksum cast 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4b9434b9a5aa1450faa3f9cb14ea0e8c53bb5d2b3c1bfd1ab4fc03e9f33fbfb0" "checksum cbindgen 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9daec6140ab4dcd38c3dd57e580b59a621172a526ac79f1527af760a55afeafd" "checksum cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)" = "aa87058dce70a3ff5621797f1506cb837edd02ac4c0ae642b4542dce802908b8" "checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" @@ -1690,145 +2483,221 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" "checksum cmake 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "81fb25b677f8bf1eb325017cb6bb8452f87969db0fedb4f757b297bee78a7c62" "checksum constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "995a44c877f9212528ccc74b21a232f66ad69001e40ede5bcee2ac9ef2657120" +"checksum cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5" +"checksum cookie_store 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c" +"checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" +"checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" "checksum cranelift-bforest 0.44.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fff04f4ad82c9704a22e753c6268cc6a89add76f094b837cefbba1c665411451" "checksum cranelift-codegen 0.44.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6ff4a221ec1b95df4b1d20a99fec4fe92a28bebf3a815f2eca72b26f9a627485" "checksum cranelift-codegen-meta 0.44.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dd47f665e2ee8f177b97d1f5ce2bd70f54d3b793abb26d92942bfaa4a381fe9f" "checksum cranelift-codegen-shared 0.44.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05bb95945fd940bd5fc2616b063ce69e55de3d9449a32fa40f6bb99a927085bf" "checksum cranelift-entity 0.44.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e8753f15d9bde04988834705d437b6f6e4b4da0527968b8d40d7342262d43052" "checksum cranelift-native 0.44.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fd16b58e95af9ee837218cf41e70306becc1fc7d7dada55dac42df5130a4a4ba" +"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" "checksum criterion 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "0363053954f3e679645fc443321ca128b7b950a6fe288cf5f9335cc22ee58394" "checksum criterion-plot 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76f9212ddf2f4a9eb2d401635190600656a1f88a932ef53d06e7fa4c7e02fb8e" "checksum crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca" "checksum crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac" "checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" +"checksum crossbeam-queue 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dfd6515864a82d2f877b42813d4553292c6659498c9a2aa31bab5a15243c2700" "checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" "checksum crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4" "checksum csv 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "37519ccdfd73a75821cac9319d4fce15a81b9fcf75f951df5b9988aa3a0af87d" "checksum csv-core 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9b5cadb6b25c77aeff80ba701712494213f4a8418fcda2ee11b6560c3ad0bf4c" "checksum ctor 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "cd8ce37ad4184ab2ce004c33bf6379185d3b1c95801cab51026bd271bf68eedc" "checksum digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -"checksum dynasm 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8654f63488a94cd11feac2a609fdcdecd09e02fb582731f635783689fbb429f3" -"checksum dynasmrt 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b0046b083139885c38990f2fb9822d06f6c5902068d93a6ed9e56b63011b9932" +"checksum dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ea57b42383d091c85abcc2706240b94ab2a8fa1fc81c10ff23c4de06e2a90b5e" +"checksum dynasm 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "42a814e1edeb85dd2a3c6fc0d6bf76d02ca5695d438c70ecee3d90774f3259c5" +"checksum dynasmrt 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8a393aaeb4441a48bcf47b5b6155971f82cc1eb77e22855403ccc0415ac8328d" "checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" -"checksum enum-methods 0.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7798e7da2d4cb0d6d6fc467e8d6b5bf247e9e989f786dde1732d79899c32bb10" +"checksum encoding_rs 0.8.20 (registry+https://github.com/rust-lang/crates.io-index)" = "87240518927716f79692c2ed85bfe6e98196d18c6401ec75355760233a7e12e9" "checksum erased-serde 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "3beee4bc16478a1b26f2e80ad819a52d24745e292f521a63c16eea5f74b7eb60" "checksum errno 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "c2a071601ed01b988f896ab14b95e67335d1eeb50190932a1320f7fe3cadc84e" "checksum errno-dragonfly 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "14ca354e36190500e1e1fb267c647932382b54053c50b14970856c0b00a35067" +"checksum error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3ab49e9dcb602294bc42f9a7dfc9bc6e936fca4418ea300dbfb84fe16de0b7d9" "checksum failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9" "checksum failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0bc225b78e0391e4b8683440bf2e63c2deeeb2ce5189eab46e2b68c6d3725d08" +"checksum flate2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6bd6d6f4752952feb71363cffc9ebac9411b75b87c6ab6058c40c8900cf43c0f" +"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" +"checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +"checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" "checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" +"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" +"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" +"checksum futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)" = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef" +"checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" "checksum gcc 0.3.55 (registry+https://github.com/rust-lang/crates.io-index)" = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" -"checksum generational-arena 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "fd04ad33021a0409d3f1afbfb89d9f02c10caee73c28f5ac197474dd53e7cf7c" +"checksum generational-arena 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "675c9623fbcdb4b402176db720bf5d95883a36303703ed1bd3a03482382f735a" "checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" "checksum getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "e7db7ca94ed4cd01190ceee0d8a8052f08a247aa1b469a7f68c6a3b71afcf407" "checksum ghost 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2a36606a68532b5640dc86bb1f33c64b45c4682aad4c50f3937b317ea387f3d6" "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" "checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" "checksum goblin 0.0.24 (registry+https://github.com/rust-lang/crates.io-index)" = "e3fa261d919c1ae9d1e4533c4a2f99e10938603c4208d56c05bec7a872b661b0" +"checksum h2 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" "checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" "checksum hermit-abi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "307c3c9f937f38e3534b1d6447ecf090cafcc9744e4a6360e8b037b2cf5af120" "checksum hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" +"checksum http 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)" = "d7e06e336150b178206af098a055e3621e8336027e2b4d126bda0bc64824baaf" +"checksum http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" +"checksum httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" +"checksum hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)" = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6" +"checksum hyper-tls 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f" +"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" +"checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" "checksum indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712d7b3ea5827fcb9d4fda14bf4da5f136f0db2ae9c8f4bd4e2d1c6fde4e6db2" -"checksum inkwell 0.1.0 (git+https://github.com/wasmerio/inkwell?branch=llvm8-0)" = "" -"checksum inkwell_internal_macros 0.1.0 (git+https://github.com/wasmerio/inkwell?branch=llvm8-0)" = "" +"checksum inkwell 0.1.0 (git+https://github.com/TheDan64/inkwell?rev=781620e9fa30e51a6e03bd0d49b5f5bb7a782520)" = "" +"checksum inkwell_internals 0.1.0 (git+https://github.com/TheDan64/inkwell?rev=781620e9fa30e51a6e03bd0d49b5f5bb7a782520)" = "" "checksum inventory 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f4cece20baea71d9f3435e7bbe9adf4765f091c5fe404975f844006964a71299" "checksum inventory-impl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "c2869bf972e998977b1cb87e60df70341d48e48dca0823f534feb91ea44adaf9" -"checksum itertools 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "87fa75c9dea7b07be3138c49abbb83fd4bea199b5cdc76f9804458edc5da0d6e" +"checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" +"checksum itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" "checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" "checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" "checksum libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)" = "1a31a0627fdf1f6a39ec0dd577e101440b7db22672c0901fe00a9a6fbb5c24e8" "checksum llvm-sys 80.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2110cd4daf9cd8e39dd3b933b1a2a2ac7315e91f7c92b3a20beab526c63b5978" -"checksum lock_api 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f8912e782533a93a167888781b836336a6ca5da6175c05944c86cf28c31104dc" +"checksum lock_api 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e57b3997725d2b60dbec1297f6c2e2957cc383db1cebd6be812163f969c7d586" "checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" +"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" "checksum maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" "checksum md5 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e6bcd6433cff03a4bfc3d9834d504467db1f1cf6d0ea765d37d330249ed629d" "checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e" "checksum memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" "checksum memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9" +"checksum mime 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "dd1d63acd1b78403cc0c325605908475dd9b9a3acbf65ed8bcab97e27014afcf" +"checksum mime_guess 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1a0ed03949aef72dbdf3116a383d7b38b4768e6f960528cd6a6044aa9ed68599" +"checksum miniz_oxide 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6f3f74f726ae935c3f514300cc6773a0c9492abc5e972d42ba0c0ebb88757625" +"checksum mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "83f51996a3ed004ef184e16818edc51fadffe8e7ca68be67f9dee67d84d0ff23" +"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" +"checksum native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4b2df1a4c22fd44a62147fd8f13dd0f95c9d8ca7b2610299b2a2f9cf8964274e" +"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" "checksum nix 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3b2e0b4f3320ed72aaedb9a5ac838690a8047c7b275da22711fddff4f8a14229" -"checksum num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32" -"checksum num_cpus 1.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "155394f924cdddf08149da25bfb932d226b4a593ca7468b08191ff6335941af5" +"checksum num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c81ffc11c212fa327657cb19dd85eb7419e163b5b076bede2bdb5c974c07e4" +"checksum num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72" +"checksum once_cell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "891f486f630e5c5a4916c7e16c4b24a53e78c860b646e9f8e005e4f16847bfed" +"checksum openssl 0.10.26 (registry+https://github.com/rust-lang/crates.io-index)" = "3a3cc5799d98e1088141b8e01ff760112bbd9f19d850c124500566ca6901a585" +"checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" +"checksum openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)" = "465d16ae7fc0e313318f7de5cecf57b2fbe7511fd213978b457e1c96ff46736f" "checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" "checksum page_size 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f89ef58b3d32420dbd1a43d2f38ae92f6239ef12bb556ab09ca55445f5a67242" "checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" "checksum parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" +"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" +"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +"checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" "checksum plain 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" "checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" "checksum proc-macro-error 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aeccfe4d5d8ea175d5f0e4a2ad0637e0f4121d63bd99d356fb1f39ab2e7c6097" "checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" "checksum proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27" -"checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" +"checksum publicsuffix 1.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3bbaa49075179162b49acac1c6aa45fb4dafb5f13cf6794276d77bc7fd95757b" "checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" "checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" +"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" "checksum rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3ae1b169243eaf61759b8475a998f0a385e42042370f3a7dbaf35246eacc8412" +"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" "checksum rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853" "checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" "checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" "checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" "checksum rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" +"checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" "checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" +"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" "checksum rand_xoshiro 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "03b418169fb9c46533f326efd6eed2576699c44ca92d3052a066214a8d828929" "checksum raw-cpuid 6.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "30a9d219c32c9132f7be513c18be77c9881c7107d2ab5569d205a6a0f0e6dc7d" -"checksum rayon 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "83a27732a533a1be0a0035a111fe76db89ad312f6f0347004c220c57f209a123" -"checksum rayon-core 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "98dcf634205083b17d0861252431eb2acbfb698ab7478a2d20de07954f47ec7b" +"checksum rayon 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "43739f8831493b276363637423d3622d4bd6394ab6f0a9c4a552e208aeb7fddd" +"checksum rayon-core 1.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f8bf17de6f23b05473c437eb958b9c850bfc8af0961fe17b4cc92d5a627b4791" "checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" "checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" "checksum regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc220bd33bdce8f093101afe22a037b8eb0e5af33592e6a9caafff0d4cb81cbd" "checksum regex-automata 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "92b73c2a1770c255c240eaa4ee600df1704a38dc3feaa6e949e7fcd4f8dc09f9" "checksum regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "11a7e20d1cce64ef2fed88b66d347f88bd9babb82845b2b858f3edbf59a4f716" "checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" +"checksum reqwest 0.9.22 (registry+https://github.com/rust-lang/crates.io-index)" = "2c2064233e442ce85c77231ebd67d9eca395207dec2127fe0bbedde4bd29a650" +"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" "checksum ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8" "checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421" +"checksum schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "87f550b06b6cba9c8b8be3ee73f391990116bf527450d2556e9b9ce263b9a021" "checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" "checksum scroll 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2f84d114ef17fd144153d608fba7c446b0145d038985e7a8cc5d08bb0ce20383" "checksum scroll_derive 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)" = "8f1aa96c45e7f5a91cb7fabe7b279f02fea7126239fc40b732316e8b6a2d0fcb" +"checksum security-framework 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8ef2429d7cefe5fd28bd1d2ed41c944547d4ff84776f5935b456da44593a16df" +"checksum security-framework-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e31493fc37615debb8c5090a7aeb4a9730bc61e77ab10b9af59f1a202284f895" "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)" = "0c4b39bd9b0b087684013a792c59e3e07a46a01d2322518d8a1104641a0b1be0" +"checksum serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)" = "1217f97ab8e8904b57dd22eb61cde455fa7446a9c1cf43966066da047c1f3702" "checksum serde-bench 0.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "d733da87e79faaac25616e33d26299a41143fd4cd42746cbb0e91d8feea243fd" "checksum serde_bytes 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "45af0182ff64abaeea290235eb67da3825a576c5d53e642c4d5b652e12e6effc" -"checksum serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)" = "ca13fc1a832f793322228923fbb3aba9f3f44444898f835d31ad1b74fa0a2bf8" -"checksum serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)" = "2f72eb2a68a7dc3f9a691bfda9305a1c017a6215e5a4545c258500d2099a37c2" +"checksum serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)" = "a8c6faef9a2e64b0064f48570289b4bf8823b7581f1d6157c1b52152306651d0" +"checksum serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)" = "1a3351dcbc1f067e2c92ab7c3c1f288ad1a4cffc470b5aaddb4c2e0a3ae80043" +"checksum serde_urlencoded 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a" +"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" "checksum smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6" +"checksum smallvec 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4ecf3b85f68e8abaa7555aa5abdb1153079387e60b718283d732f03897fcfc86" "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" +"checksum string 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" "checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" -"checksum structopt 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "c167b61c7d4c126927f5346a4327ce20abf8a186b8041bbeb1ce49e5db49587b" -"checksum structopt-derive 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "519621841414165d2ad0d4c92be8f41844203f2b67e245f9345a5a12d40c69d7" -"checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" +"checksum structopt 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "30b3a3e93f5ad553c38b3301c8a0a0cec829a36783f6a0c467fc4bf553a5f5bf" +"checksum structopt-derive 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea692d40005b3ceba90a9fe7a78fa8d4b82b0ce627eebbffc329aab850f3410e" "checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" "checksum syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "661641ea2aa15845cddeb97dad000d22070bb5c1fb456b96c1cba883ec691e92" -"checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" -"checksum synstructure 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)" = "575be94ccb86e8da37efb894a87e2b660be299b41d8ef347f9d6d79fbe61b1ba" +"checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" "checksum target-lexicon 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7975cb2c6f37d77b190bc5004a2bb015971464756fde9514651a525ada2a741a" "checksum tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" "checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" "checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" "checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" "checksum tinytemplate 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4574b75faccaacddb9b284faecdf0b544b80b6b294f3d062d325c5726a209c20" -"checksum toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f" +"checksum tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)" = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" +"checksum tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" +"checksum tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443" +"checksum tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "0f27ee0e6db01c5f0b2973824547ce7e637b2ed79b891a9677b0de9bd532b6ac" +"checksum tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926" +"checksum tokio-reactor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "c56391be9805bc80163151c0b9e5164ee64f4b0200962c346fea12773158f22d" +"checksum tokio-sync 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "d06554cce1ae4a50f42fba8023918afa931413aded705b560e29600ccf7c6d76" +"checksum tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119" +"checksum tokio-threadpool 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "2bd2c6a3885302581f4401c82af70d792bb9df1700e7437b0aeb4ada94d5388c" +"checksum tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "f2106812d500ed25a4f38235b9cae8f78a09edf43203e16e59c3b769a342a60e" "checksum toml 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "01d1404644c8b12b16bfcffa4322403a91a451584daaaa7c28d3152e6cbc98cf" +"checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" +"checksum try_from 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "283d3b89e1368717881a9d51dad843cc435380d8109c9e47d38780a324698d8b" "checksum typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9" "checksum typetag 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6ebb2c484029d695fb68a06d80e1536c68d491b3e0cf874c66abed255e831cfe" "checksum typetag-impl 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b63fd4799e4d0ec5cf0b055ebb8e2c3a657bbf76a84f6edc77ca60780e000204" +"checksum unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" +"checksum unicode-normalization 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b561e267b2326bb4cebfc0ef9e68355c7abe6c6f522aeac2f5bf95d56c59bdcf" "checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" "checksum unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20" -"checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" "checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" +"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" +"checksum url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "75b414f6c464c879d7f9babf951f23bc3743fb7313c081b2e6ca719067ea9d61" +"checksum uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)" = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a" +"checksum vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "33dd455d0f96e90a75803cfeb7f948768c08d70a6de9a8d2362461935698bf95" "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" +"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" +"checksum version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" "checksum wabt 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3c5c5c1286c6e578416982609f47594265f9d489f9b836157d403ad605a46693" "checksum wabt-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "af5d153dc96aad7dc13ab90835b892c69867948112d95299e522d370c4e13a08" "checksum walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e" +"checksum want 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" "checksum wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d" "checksum wasmer-clif-fork-frontend 0.44.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0cf2f552a9c1fda0555087170424bd8fedc63a079a97bb5638a4ef9b0d9656aa" "checksum wasmer-clif-fork-wasm 0.44.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0073b512e1af5948d34be7944b74c747bbe735ccff2e2f28c26ed4c90725de8e" -"checksum wasmparser 0.39.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e5083b449454f7de0b15f131eee17de54b5a71dcb9adcf11df2b2f78fad0cd82" +"checksum wasmparser 0.39.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c702914acda5feeeffbc29e4d953e5b9ce79d8b98da4dbf18a77086e116c5470" "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" "checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" "checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +"checksum winreg 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" +"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" diff --git a/lib/llvm-backend/Cargo.toml b/lib/llvm-backend/Cargo.toml index 2f5db92de..b9fa7e6a7 100644 --- a/lib/llvm-backend/Cargo.toml +++ b/lib/llvm-backend/Cargo.toml @@ -18,8 +18,8 @@ libc = "0.2.60" byteorder = "1" [dependencies.inkwell] -git = "https://github.com/wasmerio/inkwell" -branch = "llvm8-0" +git = "https://github.com/TheDan64/inkwell" +rev = "781620e9fa30e51a6e03bd0d49b5f5bb7a782520" default-features = false features = ["llvm8-0", "target-x86"] diff --git a/lib/llvm-backend/src/code.rs b/lib/llvm-backend/src/code.rs index c3da185be..7f7e1e32f 100644 --- a/lib/llvm-backend/src/code.rs +++ b/lib/llvm-backend/src/code.rs @@ -23,6 +23,7 @@ use smallvec::SmallVec; use std::{ cell::RefCell, collections::HashMap, + mem::ManuallyDrop, rc::Rc, sync::{Arc, RwLock}, }; @@ -39,12 +40,12 @@ use wasmer_runtime_core::{ }; use wasmparser::{BinaryReaderError, MemoryImmediate, Operator, Type as WpType}; -fn func_sig_to_llvm( - context: &Context, - intrinsics: &Intrinsics, +fn func_sig_to_llvm<'ctx>( + context: &'ctx Context, + intrinsics: &Intrinsics<'ctx>, sig: &FuncSig, - type_to_llvm: fn(intrinsics: &Intrinsics, ty: Type) -> BasicTypeEnum, -) -> FunctionType { + type_to_llvm: fn(intrinsics: &Intrinsics<'ctx>, ty: Type) -> BasicTypeEnum<'ctx>, +) -> FunctionType<'ctx> { let user_param_types = sig.params().iter().map(|&ty| type_to_llvm(intrinsics, ty)); let param_types: Vec<_> = std::iter::once(intrinsics.ctx_ptr_ty.as_basic_type_enum()) @@ -67,7 +68,7 @@ fn func_sig_to_llvm( } } -fn type_to_llvm(intrinsics: &Intrinsics, ty: Type) -> BasicTypeEnum { +fn type_to_llvm<'ctx>(intrinsics: &Intrinsics<'ctx>, ty: Type) -> BasicTypeEnum<'ctx> { match ty { Type::I32 => intrinsics.i32_ty.as_basic_type_enum(), Type::I64 => intrinsics.i64_ty.as_basic_type_enum(), @@ -77,7 +78,7 @@ fn type_to_llvm(intrinsics: &Intrinsics, ty: Type) -> BasicTypeEnum { } } -fn type_to_llvm_int_only(intrinsics: &Intrinsics, ty: Type) -> BasicTypeEnum { +fn type_to_llvm_int_only<'ctx>(intrinsics: &Intrinsics<'ctx>, ty: Type) -> BasicTypeEnum<'ctx> { match ty { Type::I32 | Type::F32 => intrinsics.i32_ty.as_basic_type_enum(), Type::I64 | Type::F64 => intrinsics.i64_ty.as_basic_type_enum(), @@ -86,13 +87,13 @@ fn type_to_llvm_int_only(intrinsics: &Intrinsics, ty: Type) -> BasicTypeEnum { } // Create a vector where each lane contains the same value. -fn splat_vector( - builder: &Builder, - intrinsics: &Intrinsics, - value: BasicValueEnum, - vec_ty: VectorType, +fn splat_vector<'ctx>( + builder: &Builder<'ctx>, + intrinsics: &Intrinsics<'ctx>, + value: BasicValueEnum<'ctx>, + vec_ty: VectorType<'ctx>, name: &str, -) -> VectorValue { +) -> VectorValue<'ctx> { // Use insert_element to insert the element into an undef vector, then use // shuffle vector to copy that lane to all lanes. builder.build_shuffle_vector( @@ -106,18 +107,18 @@ fn splat_vector( // Convert floating point vector to integer and saturate when out of range. // TODO: generalize to non-vectors using FloatMathType, IntMathType, etc. for // https://github.com/WebAssembly/nontrapping-float-to-int-conversions/blob/master/proposals/nontrapping-float-to-int-conversion/Overview.md -fn trunc_sat( - builder: &Builder, - intrinsics: &Intrinsics, - fvec_ty: VectorType, - ivec_ty: VectorType, +fn trunc_sat<'ctx>( + builder: &Builder<'ctx>, + intrinsics: &Intrinsics<'ctx>, + fvec_ty: VectorType<'ctx>, + ivec_ty: VectorType<'ctx>, lower_bound: u64, // Exclusive (lowest representable value) upper_bound: u64, // Exclusive (greatest representable value) int_min_value: u64, int_max_value: u64, - value: IntValue, + value: IntValue<'ctx>, name: &str, -) -> IntValue { +) -> IntValue<'ctx> { // a) Compare vector with itself to identify NaN lanes. // b) Compare vector with splat of inttofp(upper_bound) to identify // lanes that need to saturate to max. @@ -225,11 +226,11 @@ fn trunc_sat( .into_int_value() } -fn trap_if_not_representable_as_int( - builder: &Builder, - intrinsics: &Intrinsics, - context: &Context, - function: &FunctionValue, +fn trap_if_not_representable_as_int<'ctx>( + builder: &Builder<'ctx>, + intrinsics: &Intrinsics<'ctx>, + context: &'ctx Context, + function: &FunctionValue<'ctx>, lower_bound: u64, // Inclusive (not a trapping value) upper_bound: u64, // Inclusive (not a trapping value) value: FloatValue, @@ -261,8 +262,8 @@ fn trap_if_not_representable_as_int( "out_of_bounds", ); - let failure_block = context.append_basic_block(function, "conversion_failure_block"); - let continue_block = context.append_basic_block(function, "conversion_success_block"); + let failure_block = context.append_basic_block(*function, "conversion_failure_block"); + let continue_block = context.append_basic_block(*function, "conversion_success_block"); builder.build_conditional_branch(out_of_bounds, &failure_block, &continue_block); builder.position_at_end(&failure_block); @@ -275,11 +276,11 @@ fn trap_if_not_representable_as_int( builder.position_at_end(&continue_block); } -fn trap_if_zero_or_overflow( - builder: &Builder, - intrinsics: &Intrinsics, - context: &Context, - function: &FunctionValue, +fn trap_if_zero_or_overflow<'ctx>( + builder: &Builder<'ctx>, + intrinsics: &Intrinsics<'ctx>, + context: &'ctx Context, + function: &FunctionValue<'ctx>, left: IntValue, right: IntValue, ) { @@ -326,8 +327,8 @@ fn trap_if_zero_or_overflow( .unwrap() .into_int_value(); - let shouldnt_trap_block = context.append_basic_block(function, "shouldnt_trap_block"); - let should_trap_block = context.append_basic_block(function, "should_trap_block"); + let shouldnt_trap_block = context.append_basic_block(*function, "shouldnt_trap_block"); + let should_trap_block = context.append_basic_block(*function, "should_trap_block"); builder.build_conditional_branch(should_trap, &should_trap_block, &shouldnt_trap_block); builder.position_at_end(&should_trap_block); builder.build_call( @@ -339,11 +340,11 @@ fn trap_if_zero_or_overflow( builder.position_at_end(&shouldnt_trap_block); } -fn trap_if_zero( - builder: &Builder, - intrinsics: &Intrinsics, - context: &Context, - function: &FunctionValue, +fn trap_if_zero<'ctx>( + builder: &Builder<'ctx>, + intrinsics: &Intrinsics<'ctx>, + context: &'ctx Context, + function: &FunctionValue<'ctx>, value: IntValue, ) { let int_type = value.get_type(); @@ -368,8 +369,8 @@ fn trap_if_zero( .unwrap() .into_int_value(); - let shouldnt_trap_block = context.append_basic_block(function, "shouldnt_trap_block"); - let should_trap_block = context.append_basic_block(function, "should_trap_block"); + let shouldnt_trap_block = context.append_basic_block(*function, "shouldnt_trap_block"); + let should_trap_block = context.append_basic_block(*function, "should_trap_block"); builder.build_conditional_branch(should_trap, &should_trap_block, &shouldnt_trap_block); builder.position_at_end(&should_trap_block); builder.build_call( @@ -381,13 +382,13 @@ fn trap_if_zero( builder.position_at_end(&shouldnt_trap_block); } -fn v128_into_int_vec( - builder: &Builder, - intrinsics: &Intrinsics, - value: BasicValueEnum, +fn v128_into_int_vec<'ctx>( + builder: &Builder<'ctx>, + intrinsics: &Intrinsics<'ctx>, + value: BasicValueEnum<'ctx>, info: ExtraInfo, - int_vec_ty: VectorType, -) -> (VectorValue, ExtraInfo) { + int_vec_ty: VectorType<'ctx>, +) -> (VectorValue<'ctx>, ExtraInfo) { let (value, info) = if info.has_pending_f32_nan() { let value = builder.build_bitcast(value, intrinsics.f32x4_ty, ""); ( @@ -411,50 +412,50 @@ fn v128_into_int_vec( ) } -fn v128_into_i8x16( - builder: &Builder, - intrinsics: &Intrinsics, - value: BasicValueEnum, +fn v128_into_i8x16<'ctx>( + builder: &Builder<'ctx>, + intrinsics: &Intrinsics<'ctx>, + value: BasicValueEnum<'ctx>, info: ExtraInfo, -) -> (VectorValue, ExtraInfo) { +) -> (VectorValue<'ctx>, ExtraInfo) { v128_into_int_vec(builder, intrinsics, value, info, intrinsics.i8x16_ty) } -fn v128_into_i16x8( - builder: &Builder, - intrinsics: &Intrinsics, - value: BasicValueEnum, +fn v128_into_i16x8<'ctx>( + builder: &Builder<'ctx>, + intrinsics: &Intrinsics<'ctx>, + value: BasicValueEnum<'ctx>, info: ExtraInfo, -) -> (VectorValue, ExtraInfo) { +) -> (VectorValue<'ctx>, ExtraInfo) { v128_into_int_vec(builder, intrinsics, value, info, intrinsics.i16x8_ty) } -fn v128_into_i32x4( - builder: &Builder, - intrinsics: &Intrinsics, - value: BasicValueEnum, +fn v128_into_i32x4<'ctx>( + builder: &Builder<'ctx>, + intrinsics: &Intrinsics<'ctx>, + value: BasicValueEnum<'ctx>, info: ExtraInfo, -) -> (VectorValue, ExtraInfo) { +) -> (VectorValue<'ctx>, ExtraInfo) { v128_into_int_vec(builder, intrinsics, value, info, intrinsics.i32x4_ty) } -fn v128_into_i64x2( - builder: &Builder, - intrinsics: &Intrinsics, - value: BasicValueEnum, +fn v128_into_i64x2<'ctx>( + builder: &Builder<'ctx>, + intrinsics: &Intrinsics<'ctx>, + value: BasicValueEnum<'ctx>, info: ExtraInfo, -) -> (VectorValue, ExtraInfo) { +) -> (VectorValue<'ctx>, ExtraInfo) { v128_into_int_vec(builder, intrinsics, value, info, intrinsics.i64x2_ty) } // If the value is pending a 64-bit canonicalization, do it now. // Return a f32x4 vector. -fn v128_into_f32x4( - builder: &Builder, - intrinsics: &Intrinsics, - value: BasicValueEnum, +fn v128_into_f32x4<'ctx>( + builder: &Builder<'ctx>, + intrinsics: &Intrinsics<'ctx>, + value: BasicValueEnum<'ctx>, info: ExtraInfo, -) -> (VectorValue, ExtraInfo) { +) -> (VectorValue<'ctx>, ExtraInfo) { let (value, info) = if info.has_pending_f64_nan() { let value = builder.build_bitcast(value, intrinsics.f64x2_ty, ""); ( @@ -474,12 +475,12 @@ fn v128_into_f32x4( // If the value is pending a 32-bit canonicalization, do it now. // Return a f64x2 vector. -fn v128_into_f64x2( - builder: &Builder, - intrinsics: &Intrinsics, - value: BasicValueEnum, +fn v128_into_f64x2<'ctx>( + builder: &Builder<'ctx>, + intrinsics: &Intrinsics<'ctx>, + value: BasicValueEnum<'ctx>, info: ExtraInfo, -) -> (VectorValue, ExtraInfo) { +) -> (VectorValue<'ctx>, ExtraInfo) { let (value, info) = if info.has_pending_f32_nan() { let value = builder.build_bitcast(value, intrinsics.f32x4_ty, ""); ( @@ -497,12 +498,12 @@ fn v128_into_f64x2( ) } -fn apply_pending_canonicalization( - builder: &Builder, - intrinsics: &Intrinsics, - value: BasicValueEnum, +fn apply_pending_canonicalization<'ctx>( + builder: &Builder<'ctx>, + intrinsics: &Intrinsics<'ctx>, + value: BasicValueEnum<'ctx>, info: ExtraInfo, -) -> BasicValueEnum { +) -> BasicValueEnum<'ctx> { if info.has_pending_f32_nan() { if value.get_type().is_vector_type() || value.get_type() == intrinsics.i128_ty.as_basic_type_enum() @@ -531,11 +532,11 @@ fn apply_pending_canonicalization( } // Replaces any NaN with the canonical QNaN, otherwise leaves the value alone. -fn canonicalize_nans( - builder: &Builder, - intrinsics: &Intrinsics, - value: BasicValueEnum, -) -> BasicValueEnum { +fn canonicalize_nans<'ctx>( + builder: &Builder<'ctx>, + intrinsics: &Intrinsics<'ctx>, + value: BasicValueEnum<'ctx>, +) -> BasicValueEnum<'ctx> { let f_ty = value.get_type(); let canonicalized = if f_ty.is_vector_type() { let value = value.into_vector_value(); @@ -569,18 +570,18 @@ fn canonicalize_nans( canonicalized } -fn resolve_memory_ptr( - builder: &Builder, - intrinsics: &Intrinsics, - context: &Context, - module: Rc>, - function: &FunctionValue, - state: &mut State, - ctx: &mut CtxType, +fn resolve_memory_ptr<'ctx>( + builder: &Builder<'ctx>, + intrinsics: &Intrinsics<'ctx>, + context: &'ctx Context, + module: Rc>>, + function: &FunctionValue<'ctx>, + state: &mut State<'ctx>, + ctx: &mut CtxType<'static, 'ctx>, memarg: &MemoryImmediate, - ptr_ty: PointerType, + ptr_ty: PointerType<'ctx>, value_size: usize, -) -> Result { +) -> Result, BinaryReaderError> { // Look up the memory base (as pointer) and bounds (as unsigned integer). let memory_cache = ctx.memory(MemoryIndex::new(0), intrinsics, module.clone()); let (mem_base, mem_bound, minimum, _maximum) = match memory_cache { @@ -595,14 +596,14 @@ fn resolve_memory_ptr( .into_pointer_value(); let bounds = builder.build_load(ptr_to_bounds, "bounds").into_int_value(); tbaa_label( - module.clone(), + &module, intrinsics, "dynamic_memory_base", base.as_instruction_value().unwrap(), Some(0), ); tbaa_label( - module.clone(), + &module, intrinsics, "dynamic_memory_bounds", bounds.as_instruction_value().unwrap(), @@ -680,8 +681,8 @@ fn resolve_memory_ptr( .into_int_value(); let in_bounds_continue_block = - context.append_basic_block(function, "in_bounds_continue_block"); - let not_in_bounds_block = context.append_basic_block(function, "not_in_bounds_block"); + context.append_basic_block(*function, "in_bounds_continue_block"); + let not_in_bounds_block = context.append_basic_block(*function, "not_in_bounds_block"); builder.build_conditional_branch( ptr_in_bounds, &in_bounds_continue_block, @@ -704,16 +705,16 @@ fn resolve_memory_ptr( .into_pointer_value()) } -fn emit_stack_map( +fn emit_stack_map<'ctx>( _module_info: &ModuleInfo, - intrinsics: &Intrinsics, - builder: &Builder, + intrinsics: &Intrinsics<'ctx>, + builder: &Builder<'ctx>, local_function_id: usize, target: &mut StackmapRegistry, kind: StackmapEntryKind, locals: &[PointerValue], - state: &State, - _ctx: &mut CtxType, + state: &State<'ctx>, + _ctx: &mut CtxType<'_, 'ctx>, opcode_offset: usize, ) { let stackmap_id = target.entries.len(); @@ -757,9 +758,9 @@ fn emit_stack_map( }); } -fn finalize_opcode_stack_map( - intrinsics: &Intrinsics, - builder: &Builder, +fn finalize_opcode_stack_map<'ctx>( + intrinsics: &Intrinsics<'ctx>, + builder: &Builder<'ctx>, local_function_id: usize, target: &mut StackmapRegistry, kind: StackmapEntryKind, @@ -788,13 +789,13 @@ fn finalize_opcode_stack_map( }); } -fn trap_if_misaligned( - builder: &Builder, - intrinsics: &Intrinsics, - context: &Context, - function: &FunctionValue, +fn trap_if_misaligned<'ctx>( + builder: &Builder<'ctx>, + intrinsics: &Intrinsics<'ctx>, + context: &'ctx Context, + function: &FunctionValue<'ctx>, memarg: &MemoryImmediate, - ptr: PointerValue, + ptr: PointerValue<'ctx>, ) { let align = match memarg.flags & 3 { 0 => { @@ -826,8 +827,8 @@ fn trap_if_misaligned( .unwrap() .into_int_value(); - let continue_block = context.append_basic_block(function, "aligned_access_continue_block"); - let not_aligned_block = context.append_basic_block(function, "misaligned_trap_block"); + let continue_block = context.append_basic_block(*function, "aligned_access_continue_block"); + let not_aligned_block = context.append_basic_block(*function, "misaligned_trap_block"); builder.build_conditional_branch(aligned, &continue_block, ¬_aligned_block); builder.position_at_end(¬_aligned_block); @@ -861,45 +862,45 @@ pub unsafe extern "C" fn callback_trampoline( } } -pub struct LLVMModuleCodeGenerator { - context: Option, - builder: Option, - intrinsics: Option, - functions: Vec, - signatures: Map, +pub struct LLVMModuleCodeGenerator<'ctx> { + context: Option<&'ctx Context>, + builder: Option>, + intrinsics: Option>, + functions: Vec>, + signatures: Map>, signatures_raw: Map, function_signatures: Option>>, - llvm_functions: Rc>>, + llvm_functions: Rc>>>, func_import_count: usize, - personality_func: FunctionValue, - module: Rc>, + personality_func: ManuallyDrop>, + module: ManuallyDrop>>>, stackmaps: Rc>, track_state: bool, target_machine: TargetMachine, } -pub struct LLVMFunctionCodeGenerator { - context: Option, - builder: Option, - alloca_builder: Option, - intrinsics: Option, - state: State, - llvm_functions: Rc>>, - function: FunctionValue, +pub struct LLVMFunctionCodeGenerator<'ctx> { + context: Option<&'ctx Context>, + builder: Option>, + alloca_builder: Option>, + intrinsics: Option>, + state: State<'ctx>, + llvm_functions: Rc>>>, + function: FunctionValue<'ctx>, func_sig: FuncSig, - signatures: Map, - locals: Vec, // Contains params and locals + signatures: Map>, + locals: Vec>, // Contains params and locals num_params: usize, - ctx: Option>, + ctx: Option>, unreachable_depth: usize, stackmaps: Rc>, index: usize, opcode_offset: usize, track_state: bool, - module: Rc>, + module: Rc>>, } -impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { +impl<'ctx> FunctionCodeGenerator for LLVMFunctionCodeGenerator<'ctx> { fn feed_return(&mut self, _ty: WpType) -> Result<(), CodegenError> { Ok(()) } @@ -950,7 +951,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .context .as_ref() .unwrap() - .append_basic_block(&self.function, "start_of_code"); + .append_basic_block(self.function, "start_of_code"); let entry_end_inst = self .builder .as_ref() @@ -965,10 +966,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { cache_builder.position_before(&entry_end_inst); let module_info = unsafe { ::std::mem::transmute::<&ModuleInfo, &'static ModuleInfo>(module_info) }; - let function = unsafe { - ::std::mem::transmute::<&FunctionValue, &'static FunctionValue>(&self.function) - }; - let ctx = CtxType::new(module_info, function, cache_builder); + let ctx = CtxType::new(module_info, &self.function, cache_builder); self.ctx = Some(ctx); @@ -1045,7 +1043,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ctx.internal_field(idx, intrinsics, self.module.clone(), builder); let result = builder.build_load(field_ptr, "get_internal"); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "internal", result.as_instruction_value().unwrap(), @@ -1062,7 +1060,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { let v = state.pop1()?; let store = builder.build_store(field_ptr, v); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "internal", store, @@ -1110,7 +1108,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { offset: -1isize as usize, })?; - let end_block = context.append_basic_block(&function, "end"); + let end_block = context.append_basic_block(function, "end"); builder.position_at_end(&end_block); let phis = if let Ok(wasmer_ty) = blocktype_to_type(ty) { @@ -1127,8 +1125,8 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { builder.position_at_end(¤t_block); } Operator::Loop { ty } => { - let loop_body = context.append_basic_block(&function, "loop_body"); - let loop_next = context.append_basic_block(&function, "loop_outer"); + let loop_body = context.append_basic_block(function, "loop_body"); + let loop_next = context.append_basic_block(function, "loop_outer"); builder.build_unconditional_branch(&loop_body); @@ -1233,7 +1231,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { phi.add_incoming(&[(&value, ¤t_block)]); } - let else_block = context.append_basic_block(&function, "else"); + let else_block = context.append_basic_block(function, "else"); let cond_value = builder.build_int_compare( IntPredicate::NE, @@ -1299,9 +1297,9 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { message: "not currently in a block", offset: -1isize as usize, })?; - let if_then_block = context.append_basic_block(&function, "if_then"); - let if_else_block = context.append_basic_block(&function, "if_else"); - let end_block = context.append_basic_block(&function, "if_end"); + let if_then_block = context.append_basic_block(function, "if_then"); + let if_else_block = context.append_basic_block(function, "if_else"); + let end_block = context.append_basic_block(function, "if_end"); let end_phis = { builder.position_at_end(&end_block); @@ -1656,7 +1654,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { let pointer_value = locals[local_index as usize]; let v = builder.build_load(pointer_value, &state.var_name()); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "local", v.as_instruction_value().unwrap(), @@ -1669,26 +1667,14 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { let (v, i) = state.pop1_extra()?; let v = apply_pending_canonicalization(builder, intrinsics, v, i); let store = builder.build_store(pointer_value, v); - tbaa_label( - self.module.clone(), - intrinsics, - "local", - store, - Some(local_index), - ); + tbaa_label(&self.module, intrinsics, "local", store, Some(local_index)); } Operator::TeeLocal { local_index } => { let pointer_value = locals[local_index as usize]; let (v, i) = state.peek1_extra()?; let v = apply_pending_canonicalization(builder, intrinsics, v, i); let store = builder.build_store(pointer_value, v); - tbaa_label( - self.module.clone(), - intrinsics, - "local", - store, - Some(local_index), - ); + tbaa_label(&self.module, intrinsics, "local", store, Some(local_index)); } Operator::GetGlobal { global_index } => { @@ -1701,7 +1687,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { GlobalCache::Mut { ptr_to_value } => { let value = builder.build_load(ptr_to_value, "global_value"); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "global", value.as_instruction_value().unwrap(), @@ -1720,7 +1706,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { GlobalCache::Mut { ptr_to_value } => { let store = builder.build_store(ptr_to_value, value); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "global", store, @@ -1994,9 +1980,9 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .into_int_value(); let in_bounds_continue_block = - context.append_basic_block(&function, "in_bounds_continue_block"); + context.append_basic_block(function, "in_bounds_continue_block"); let not_in_bounds_block = - context.append_basic_block(&function, "not_in_bounds_block"); + context.append_basic_block(function, "not_in_bounds_block"); builder.build_conditional_branch( index_in_bounds, &in_bounds_continue_block, @@ -2035,9 +2021,9 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .unwrap() .into_int_value(); - let continue_block = context.append_basic_block(&function, "continue_block"); + let continue_block = context.append_basic_block(function, "continue_block"); let sigindices_notequal_block = - context.append_basic_block(&function, "sigindices_notequal_block"); + context.append_basic_block(function, "sigindices_notequal_block"); builder.build_conditional_branch( sigindices_equal, &continue_block, @@ -4760,7 +4746,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .set_alignment(1) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", result.as_instruction_value().unwrap(), @@ -4788,7 +4774,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .set_alignment(1) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", result.as_instruction_value().unwrap(), @@ -4816,7 +4802,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .set_alignment(1) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", result.as_instruction_value().unwrap(), @@ -4844,7 +4830,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .set_alignment(1) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", result.as_instruction_value().unwrap(), @@ -4872,7 +4858,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .set_alignment(1) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", result.as_instruction_value().unwrap(), @@ -4897,7 +4883,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { )?; let store = builder.build_store(effective_address, value); store.set_alignment(1).unwrap(); - tbaa_label(self.module.clone(), intrinsics, "memory", store, Some(0)); + tbaa_label(&self.module, intrinsics, "memory", store, Some(0)); } Operator::I64Store { ref memarg } => { let value = state.pop1()?; @@ -4915,7 +4901,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { )?; let store = builder.build_store(effective_address, value); store.set_alignment(1).unwrap(); - tbaa_label(self.module.clone(), intrinsics, "memory", store, Some(0)); + tbaa_label(&self.module, intrinsics, "memory", store, Some(0)); } Operator::F32Store { ref memarg } => { let (v, i) = state.pop1_extra()?; @@ -4934,7 +4920,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { )?; let store = builder.build_store(effective_address, v); store.set_alignment(1).unwrap(); - tbaa_label(self.module.clone(), intrinsics, "memory", store, Some(0)); + tbaa_label(&self.module, intrinsics, "memory", store, Some(0)); } Operator::F64Store { ref memarg } => { let (v, i) = state.pop1_extra()?; @@ -4953,7 +4939,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { )?; let store = builder.build_store(effective_address, v); store.set_alignment(1).unwrap(); - tbaa_label(self.module.clone(), intrinsics, "memory", store, Some(0)); + tbaa_label(&self.module, intrinsics, "memory", store, Some(0)); } Operator::V128Store { ref memarg } => { let (v, i) = state.pop1_extra()?; @@ -4972,7 +4958,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { )?; let store = builder.build_store(effective_address, v); store.set_alignment(1).unwrap(); - tbaa_label(self.module.clone(), intrinsics, "memory", store, Some(0)); + tbaa_label(&self.module, intrinsics, "memory", store, Some(0)); } Operator::I32Load8S { ref memarg } => { let effective_address = resolve_memory_ptr( @@ -4994,7 +4980,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .set_alignment(1) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", narrow_result.as_instruction_value().unwrap(), @@ -5027,7 +5013,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .set_alignment(1) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", narrow_result.as_instruction_value().unwrap(), @@ -5062,7 +5048,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .set_alignment(1) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", narrow_result.as_instruction_value().unwrap(), @@ -5094,7 +5080,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .set_alignment(1) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", narrow_result.as_instruction_value().unwrap(), @@ -5124,7 +5110,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .set_alignment(1) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", narrow_result.as_instruction_value().unwrap(), @@ -5158,7 +5144,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .set_alignment(1) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", narrow_result.as_instruction_value().unwrap(), @@ -5191,7 +5177,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .set_alignment(1) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", narrow_result.as_instruction_value().unwrap(), @@ -5224,7 +5210,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .set_alignment(1) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", narrow_result.as_instruction_value().unwrap(), @@ -5257,7 +5243,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .set_alignment(1) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", narrow_result.as_instruction_value().unwrap(), @@ -5290,7 +5276,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .set_alignment(1) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", narrow_result.as_instruction_value().unwrap(), @@ -5322,7 +5308,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { builder.build_int_truncate(value, intrinsics.i8_ty, &state.var_name()); let store = builder.build_store(effective_address, narrow_value); store.set_alignment(1).unwrap(); - tbaa_label(self.module.clone(), intrinsics, "memory", store, Some(0)); + tbaa_label(&self.module, intrinsics, "memory", store, Some(0)); } Operator::I32Store16 { ref memarg } | Operator::I64Store16 { ref memarg } => { let value = state.pop1()?.into_int_value(); @@ -5342,7 +5328,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { builder.build_int_truncate(value, intrinsics.i16_ty, &state.var_name()); let store = builder.build_store(effective_address, narrow_value); store.set_alignment(1).unwrap(); - tbaa_label(self.module.clone(), intrinsics, "memory", store, Some(0)); + tbaa_label(&self.module, intrinsics, "memory", store, Some(0)); } Operator::I64Store32 { ref memarg } => { let value = state.pop1()?.into_int_value(); @@ -5362,7 +5348,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { builder.build_int_truncate(value, intrinsics.i32_ty, &state.var_name()); let store = builder.build_store(effective_address, narrow_value); store.set_alignment(1).unwrap(); - tbaa_label(self.module.clone(), intrinsics, "memory", store, Some(0)); + tbaa_label(&self.module, intrinsics, "memory", store, Some(0)); } Operator::I8x16Neg => { let (v, i) = state.pop1_extra()?; @@ -5731,7 +5717,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .set_alignment(1) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", elem.as_instruction_value().unwrap(), @@ -5766,7 +5752,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .set_alignment(1) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", elem.as_instruction_value().unwrap(), @@ -5801,7 +5787,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .set_alignment(1) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", elem.as_instruction_value().unwrap(), @@ -5836,7 +5822,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { .set_alignment(1) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", elem.as_instruction_value().unwrap(), @@ -5887,7 +5873,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { load.set_alignment(4).unwrap(); load.set_atomic_ordering(AtomicOrdering::SequentiallyConsistent) .unwrap(); - tbaa_label(self.module.clone(), intrinsics, "memory", load, Some(0)); + tbaa_label(&self.module, intrinsics, "memory", load, Some(0)); state.push1(result); } Operator::I64AtomicLoad { ref memarg } => { @@ -5916,7 +5902,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { load.set_alignment(8).unwrap(); load.set_atomic_ordering(AtomicOrdering::SequentiallyConsistent) .unwrap(); - tbaa_label(self.module.clone(), intrinsics, "memory", load, Some(0)); + tbaa_label(&self.module, intrinsics, "memory", load, Some(0)); state.push1(result); } Operator::I32AtomicLoad8U { ref memarg } => { @@ -5947,7 +5933,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { load.set_alignment(1).unwrap(); load.set_atomic_ordering(AtomicOrdering::SequentiallyConsistent) .unwrap(); - tbaa_label(self.module.clone(), intrinsics, "memory", load, Some(0)); + tbaa_label(&self.module, intrinsics, "memory", load, Some(0)); let result = builder.build_int_z_extend(narrow_result, intrinsics.i32_ty, &state.var_name()); state.push1_extra(result, ExtraInfo::arithmetic_f32()); @@ -5980,7 +5966,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { load.set_alignment(2).unwrap(); load.set_atomic_ordering(AtomicOrdering::SequentiallyConsistent) .unwrap(); - tbaa_label(self.module.clone(), intrinsics, "memory", load, Some(0)); + tbaa_label(&self.module, intrinsics, "memory", load, Some(0)); let result = builder.build_int_z_extend(narrow_result, intrinsics.i32_ty, &state.var_name()); state.push1_extra(result, ExtraInfo::arithmetic_f32()); @@ -6013,7 +5999,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { load.set_alignment(1).unwrap(); load.set_atomic_ordering(AtomicOrdering::SequentiallyConsistent) .unwrap(); - tbaa_label(self.module.clone(), intrinsics, "memory", load, Some(0)); + tbaa_label(&self.module, intrinsics, "memory", load, Some(0)); let result = builder.build_int_z_extend(narrow_result, intrinsics.i64_ty, &state.var_name()); state.push1_extra(result, ExtraInfo::arithmetic_f64()); @@ -6046,7 +6032,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { load.set_alignment(2).unwrap(); load.set_atomic_ordering(AtomicOrdering::SequentiallyConsistent) .unwrap(); - tbaa_label(self.module.clone(), intrinsics, "memory", load, Some(0)); + tbaa_label(&self.module, intrinsics, "memory", load, Some(0)); let result = builder.build_int_z_extend(narrow_result, intrinsics.i64_ty, &state.var_name()); state.push1_extra(result, ExtraInfo::arithmetic_f64()); @@ -6079,7 +6065,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { load.set_alignment(4).unwrap(); load.set_atomic_ordering(AtomicOrdering::SequentiallyConsistent) .unwrap(); - tbaa_label(self.module.clone(), intrinsics, "memory", load, Some(0)); + tbaa_label(&self.module, intrinsics, "memory", load, Some(0)); let result = builder.build_int_z_extend(narrow_result, intrinsics.i64_ty, &state.var_name()); state.push1_extra(result, ExtraInfo::arithmetic_f64()); @@ -6111,7 +6097,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { store .set_atomic_ordering(AtomicOrdering::SequentiallyConsistent) .unwrap(); - tbaa_label(self.module.clone(), intrinsics, "memory", store, Some(0)); + tbaa_label(&self.module, intrinsics, "memory", store, Some(0)); } Operator::I64AtomicStore { ref memarg } => { let value = state.pop1()?; @@ -6140,7 +6126,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { store .set_atomic_ordering(AtomicOrdering::SequentiallyConsistent) .unwrap(); - tbaa_label(self.module.clone(), intrinsics, "memory", store, Some(0)); + tbaa_label(&self.module, intrinsics, "memory", store, Some(0)); } Operator::I32AtomicStore8 { ref memarg } | Operator::I64AtomicStore8 { ref memarg } => { let value = state.pop1()?.into_int_value(); @@ -6171,7 +6157,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { store .set_atomic_ordering(AtomicOrdering::SequentiallyConsistent) .unwrap(); - tbaa_label(self.module.clone(), intrinsics, "memory", store, Some(0)); + tbaa_label(&self.module, intrinsics, "memory", store, Some(0)); } Operator::I32AtomicStore16 { ref memarg } | Operator::I64AtomicStore16 { ref memarg } => { @@ -6203,7 +6189,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { store .set_atomic_ordering(AtomicOrdering::SequentiallyConsistent) .unwrap(); - tbaa_label(self.module.clone(), intrinsics, "memory", store, Some(0)); + tbaa_label(&self.module, intrinsics, "memory", store, Some(0)); } Operator::I64AtomicStore32 { ref memarg } => { let value = state.pop1()?.into_int_value(); @@ -6234,7 +6220,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { store .set_atomic_ordering(AtomicOrdering::SequentiallyConsistent) .unwrap(); - tbaa_label(self.module.clone(), intrinsics, "memory", store, Some(0)); + tbaa_label(&self.module, intrinsics, "memory", store, Some(0)); } Operator::I32AtomicRmw8UAdd { ref memarg } => { let value = state.pop1()?.into_int_value(); @@ -6269,7 +6255,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -6311,7 +6297,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -6351,7 +6337,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -6392,7 +6378,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -6434,7 +6420,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -6476,7 +6462,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -6516,7 +6502,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -6557,7 +6543,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -6599,7 +6585,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -6639,7 +6625,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -6680,7 +6666,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -6722,7 +6708,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -6764,7 +6750,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -6804,7 +6790,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -6845,7 +6831,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -6887,7 +6873,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -6927,7 +6913,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -6968,7 +6954,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7010,7 +6996,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7052,7 +7038,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7092,7 +7078,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7133,7 +7119,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7175,7 +7161,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7215,7 +7201,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7257,7 +7243,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7299,7 +7285,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7341,7 +7327,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7381,7 +7367,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7422,7 +7408,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7464,7 +7450,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7504,7 +7490,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7545,7 +7531,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7587,7 +7573,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7629,7 +7615,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7669,7 +7655,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7710,7 +7696,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7752,7 +7738,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7792,7 +7778,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7833,7 +7819,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7875,7 +7861,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7917,7 +7903,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -7957,7 +7943,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -8004,7 +7990,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -8056,7 +8042,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -8104,7 +8090,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -8152,7 +8138,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -8204,7 +8190,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -8256,7 +8242,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -8304,7 +8290,7 @@ impl FunctionCodeGenerator for LLVMFunctionCodeGenerator { ) .unwrap(); tbaa_label( - self.module.clone(), + &self.module, intrinsics, "memory", old.as_instruction_value().unwrap(), @@ -8430,10 +8416,35 @@ impl From for CodegenError { } } -impl ModuleCodeGenerator - for LLVMModuleCodeGenerator +impl Drop for LLVMModuleCodeGenerator<'_> { + fn drop(&mut self) { + // Ensure that all members of the context are dropped before we drop the context. + drop(self.builder.take()); + drop(self.intrinsics.take()); + self.functions.clear(); + self.signatures.clear(); + assert!( + Rc::strong_count(&*self.module) == 1, + "references to module live while dropping LLVMModuleCodeGenerator" + ); + unsafe { + ManuallyDrop::drop(&mut self.personality_func); + ManuallyDrop::drop(&mut self.module); + }; + let context = self.context.take(); + match context { + None => {} + Some(context_ref) => unsafe { + Box::from_raw(context_ref as *const Context as *mut Context); + }, + } + } +} + +impl<'ctx> ModuleCodeGenerator, LLVMBackend, CodegenError> + for LLVMModuleCodeGenerator<'ctx> { - fn new() -> LLVMModuleCodeGenerator { + fn new() -> LLVMModuleCodeGenerator<'ctx> { Self::new_with_target(None, None, None) } @@ -8441,8 +8452,9 @@ impl ModuleCodeGenerator triple: Option, cpu_name: Option, cpu_features: Option, - ) -> LLVMModuleCodeGenerator { - let context = Context::create(); + ) -> LLVMModuleCodeGenerator<'ctx> { + let context_ptr = Box::into_raw(Box::new(Context::create())); + let context = unsafe { &*context_ptr }; let module = context.create_module("module"); let triple = triple.unwrap_or(TargetMachine::get_default_triple().to_string()); @@ -8488,14 +8500,14 @@ impl ModuleCodeGenerator context: Some(context), builder: Some(builder), intrinsics: Some(intrinsics), - module: Rc::new(RefCell::new(module)), + module: ManuallyDrop::new(Rc::new(RefCell::new(module))), functions: vec![], signatures: Map::new(), signatures_raw: Map::new(), function_signatures: None, llvm_functions: Rc::new(RefCell::new(HashMap::new())), func_import_count: 0, - personality_func, + personality_func: ManuallyDrop::new(personality_func), stackmaps: Rc::new(RefCell::new(StackmapRegistry::default())), track_state: false, target_machine, @@ -8513,7 +8525,7 @@ impl ModuleCodeGenerator fn next_function( &mut self, _module_info: Arc>, - ) -> Result<&mut LLVMFunctionCodeGenerator, CodegenError> { + ) -> Result<&mut LLVMFunctionCodeGenerator<'ctx>, CodegenError> { // Creates a new function and returns the function-scope code generator for it. let (context, builder, intrinsics) = match self.functions.last_mut() { Some(x) => ( @@ -8533,14 +8545,14 @@ impl ModuleCodeGenerator let func_sig = self.signatures_raw[sig_id].clone(); let function = &self.llvm_functions.borrow_mut()[&func_index]; - function.set_personality_function(self.personality_func); + function.set_personality_function(*self.personality_func); - let mut state = State::new(); - let entry_block = context.append_basic_block(&function, "entry"); + let mut state: State<'ctx> = State::new(); + let entry_block = context.append_basic_block(*function, "entry"); let alloca_builder = context.create_builder(); alloca_builder.position_at_end(&entry_block); - let return_block = context.append_basic_block(&function, "return"); + let return_block = context.append_basic_block(*function, "return"); builder.position_at_end(&return_block); let phis: SmallVec<[PhiValue; 1]> = func_sig @@ -8602,7 +8614,7 @@ impl ModuleCodeGenerator index: local_func_index, opcode_offset: 0, track_state: self.track_state, - module: self.module.clone(), + module: (*self.module).clone(), }; self.functions.push(code); Ok(self.functions.last_mut().unwrap()) @@ -8688,7 +8700,7 @@ impl ModuleCodeGenerator let stackmaps = self.stackmaps.borrow(); let (backend, cache_gen) = LLVMBackend::new( - self.module.clone(), + (*self.module).clone(), self.intrinsics.take().unwrap(), &*stackmaps, module_info, diff --git a/lib/llvm-backend/src/intrinsics.rs b/lib/llvm-backend/src/intrinsics.rs index 2e3466e45..c983e4175 100644 --- a/lib/llvm-backend/src/intrinsics.rs +++ b/lib/llvm-backend/src/intrinsics.rs @@ -12,7 +12,6 @@ use inkwell::{ }; use std::cell::RefCell; use std::collections::HashMap; -use std::marker::PhantomData; use std::rc::Rc; use wasmer_runtime_core::{ memory::MemoryType, @@ -25,7 +24,7 @@ use wasmer_runtime_core::{ vm::{Ctx, INTERNALS_SIZE}, }; -fn type_to_llvm_ptr(intrinsics: &Intrinsics, ty: Type) -> PointerType { +fn type_to_llvm_ptr<'ctx>(intrinsics: &Intrinsics<'ctx>, ty: Type) -> PointerType<'ctx> { match ty { Type::I32 => intrinsics.i32_ptr_ty, Type::I64 => intrinsics.i64_ptr_ty, @@ -35,124 +34,124 @@ fn type_to_llvm_ptr(intrinsics: &Intrinsics, ty: Type) -> PointerType { } } -pub struct Intrinsics { - pub ctlz_i32: FunctionValue, - pub ctlz_i64: FunctionValue, +pub struct Intrinsics<'ctx> { + pub ctlz_i32: FunctionValue<'ctx>, + pub ctlz_i64: FunctionValue<'ctx>, - pub cttz_i32: FunctionValue, - pub cttz_i64: FunctionValue, + pub cttz_i32: FunctionValue<'ctx>, + pub cttz_i64: FunctionValue<'ctx>, - pub ctpop_i32: FunctionValue, - pub ctpop_i64: FunctionValue, + pub ctpop_i32: FunctionValue<'ctx>, + pub ctpop_i64: FunctionValue<'ctx>, - pub sqrt_f32: FunctionValue, - pub sqrt_f64: FunctionValue, - pub sqrt_f32x4: FunctionValue, - pub sqrt_f64x2: FunctionValue, + pub sqrt_f32: FunctionValue<'ctx>, + pub sqrt_f64: FunctionValue<'ctx>, + pub sqrt_f32x4: FunctionValue<'ctx>, + pub sqrt_f64x2: FunctionValue<'ctx>, - pub ceil_f32: FunctionValue, - pub ceil_f64: FunctionValue, + pub ceil_f32: FunctionValue<'ctx>, + pub ceil_f64: FunctionValue<'ctx>, - pub floor_f32: FunctionValue, - pub floor_f64: FunctionValue, + pub floor_f32: FunctionValue<'ctx>, + pub floor_f64: FunctionValue<'ctx>, - pub trunc_f32: FunctionValue, - pub trunc_f64: FunctionValue, + pub trunc_f32: FunctionValue<'ctx>, + pub trunc_f64: FunctionValue<'ctx>, - pub nearbyint_f32: FunctionValue, - pub nearbyint_f64: FunctionValue, + pub nearbyint_f32: FunctionValue<'ctx>, + pub nearbyint_f64: FunctionValue<'ctx>, - pub fabs_f32: FunctionValue, - pub fabs_f64: FunctionValue, - pub fabs_f32x4: FunctionValue, - pub fabs_f64x2: FunctionValue, + pub fabs_f32: FunctionValue<'ctx>, + pub fabs_f64: FunctionValue<'ctx>, + pub fabs_f32x4: FunctionValue<'ctx>, + pub fabs_f64x2: FunctionValue<'ctx>, - pub copysign_f32: FunctionValue, - pub copysign_f64: FunctionValue, + pub copysign_f32: FunctionValue<'ctx>, + pub copysign_f64: FunctionValue<'ctx>, - pub sadd_sat_i8x16: FunctionValue, - pub sadd_sat_i16x8: FunctionValue, - pub uadd_sat_i8x16: FunctionValue, - pub uadd_sat_i16x8: FunctionValue, + pub sadd_sat_i8x16: FunctionValue<'ctx>, + pub sadd_sat_i16x8: FunctionValue<'ctx>, + pub uadd_sat_i8x16: FunctionValue<'ctx>, + pub uadd_sat_i16x8: FunctionValue<'ctx>, - pub ssub_sat_i8x16: FunctionValue, - pub ssub_sat_i16x8: FunctionValue, - pub usub_sat_i8x16: FunctionValue, - pub usub_sat_i16x8: FunctionValue, + pub ssub_sat_i8x16: FunctionValue<'ctx>, + pub ssub_sat_i16x8: FunctionValue<'ctx>, + pub usub_sat_i8x16: FunctionValue<'ctx>, + pub usub_sat_i16x8: FunctionValue<'ctx>, - pub expect_i1: FunctionValue, - pub trap: FunctionValue, + pub expect_i1: FunctionValue<'ctx>, + pub trap: FunctionValue<'ctx>, - pub void_ty: VoidType, - pub i1_ty: IntType, - pub i8_ty: IntType, - pub i16_ty: IntType, - pub i32_ty: IntType, - pub i64_ty: IntType, - pub i128_ty: IntType, - pub f32_ty: FloatType, - pub f64_ty: FloatType, + pub void_ty: VoidType<'ctx>, + pub i1_ty: IntType<'ctx>, + pub i8_ty: IntType<'ctx>, + pub i16_ty: IntType<'ctx>, + pub i32_ty: IntType<'ctx>, + pub i64_ty: IntType<'ctx>, + pub i128_ty: IntType<'ctx>, + pub f32_ty: FloatType<'ctx>, + pub f64_ty: FloatType<'ctx>, - pub i1x128_ty: VectorType, - pub i8x16_ty: VectorType, - pub i16x8_ty: VectorType, - pub i32x4_ty: VectorType, - pub i64x2_ty: VectorType, - pub f32x4_ty: VectorType, - pub f64x2_ty: VectorType, + pub i1x128_ty: VectorType<'ctx>, + pub i8x16_ty: VectorType<'ctx>, + pub i16x8_ty: VectorType<'ctx>, + pub i32x4_ty: VectorType<'ctx>, + pub i64x2_ty: VectorType<'ctx>, + pub f32x4_ty: VectorType<'ctx>, + pub f64x2_ty: VectorType<'ctx>, - pub i8_ptr_ty: PointerType, - pub i16_ptr_ty: PointerType, - pub i32_ptr_ty: PointerType, - pub i64_ptr_ty: PointerType, - pub i128_ptr_ty: PointerType, - pub f32_ptr_ty: PointerType, - pub f64_ptr_ty: PointerType, + pub i8_ptr_ty: PointerType<'ctx>, + pub i16_ptr_ty: PointerType<'ctx>, + pub i32_ptr_ty: PointerType<'ctx>, + pub i64_ptr_ty: PointerType<'ctx>, + pub i128_ptr_ty: PointerType<'ctx>, + pub f32_ptr_ty: PointerType<'ctx>, + pub f64_ptr_ty: PointerType<'ctx>, - pub anyfunc_ty: StructType, + pub anyfunc_ty: StructType<'ctx>, - pub i1_zero: IntValue, - pub i8_zero: IntValue, - pub i32_zero: IntValue, - pub i64_zero: IntValue, - pub i128_zero: IntValue, - pub f32_zero: FloatValue, - pub f64_zero: FloatValue, - pub f32x4_zero: VectorValue, - pub f64x2_zero: VectorValue, + pub i1_zero: IntValue<'ctx>, + pub i8_zero: IntValue<'ctx>, + pub i32_zero: IntValue<'ctx>, + pub i64_zero: IntValue<'ctx>, + pub i128_zero: IntValue<'ctx>, + pub f32_zero: FloatValue<'ctx>, + pub f64_zero: FloatValue<'ctx>, + pub f32x4_zero: VectorValue<'ctx>, + pub f64x2_zero: VectorValue<'ctx>, - pub trap_unreachable: BasicValueEnum, - pub trap_call_indirect_sig: BasicValueEnum, - pub trap_call_indirect_oob: BasicValueEnum, - pub trap_memory_oob: BasicValueEnum, - pub trap_illegal_arithmetic: BasicValueEnum, - pub trap_misaligned_atomic: BasicValueEnum, + pub trap_unreachable: BasicValueEnum<'ctx>, + pub trap_call_indirect_sig: BasicValueEnum<'ctx>, + pub trap_call_indirect_oob: BasicValueEnum<'ctx>, + pub trap_memory_oob: BasicValueEnum<'ctx>, + pub trap_illegal_arithmetic: BasicValueEnum<'ctx>, + pub trap_misaligned_atomic: BasicValueEnum<'ctx>, // VM intrinsics. - pub memory_grow_dynamic_local: FunctionValue, - pub memory_grow_static_local: FunctionValue, - pub memory_grow_shared_local: FunctionValue, - pub memory_grow_dynamic_import: FunctionValue, - pub memory_grow_static_import: FunctionValue, - pub memory_grow_shared_import: FunctionValue, + pub memory_grow_dynamic_local: FunctionValue<'ctx>, + pub memory_grow_static_local: FunctionValue<'ctx>, + pub memory_grow_shared_local: FunctionValue<'ctx>, + pub memory_grow_dynamic_import: FunctionValue<'ctx>, + pub memory_grow_static_import: FunctionValue<'ctx>, + pub memory_grow_shared_import: FunctionValue<'ctx>, - pub memory_size_dynamic_local: FunctionValue, - pub memory_size_static_local: FunctionValue, - pub memory_size_shared_local: FunctionValue, - pub memory_size_dynamic_import: FunctionValue, - pub memory_size_static_import: FunctionValue, - pub memory_size_shared_import: FunctionValue, + pub memory_size_dynamic_local: FunctionValue<'ctx>, + pub memory_size_static_local: FunctionValue<'ctx>, + pub memory_size_shared_local: FunctionValue<'ctx>, + pub memory_size_dynamic_import: FunctionValue<'ctx>, + pub memory_size_static_import: FunctionValue<'ctx>, + pub memory_size_shared_import: FunctionValue<'ctx>, - pub throw_trap: FunctionValue, - pub throw_breakpoint: FunctionValue, + pub throw_trap: FunctionValue<'ctx>, + pub throw_breakpoint: FunctionValue<'ctx>, - pub experimental_stackmap: FunctionValue, + pub experimental_stackmap: FunctionValue<'ctx>, - pub ctx_ptr_ty: PointerType, + pub ctx_ptr_ty: PointerType<'ctx>, } -impl Intrinsics { - pub fn declare(module: &Module, context: &Context) -> Self { +impl<'ctx> Intrinsics<'ctx> { + pub fn declare(module: &Module<'ctx>, context: &'ctx Context) -> Self { let void_ty = context.void_type(); let i1_ty = context.bool_type(); let i8_ty = context.i8_type(); @@ -560,66 +559,64 @@ impl Intrinsics { } #[derive(Clone, Copy)] -pub enum MemoryCache { +pub enum MemoryCache<'ctx> { /// The memory moves around. Dynamic { - ptr_to_base_ptr: PointerValue, - ptr_to_bounds: PointerValue, + ptr_to_base_ptr: PointerValue<'ctx>, + ptr_to_bounds: PointerValue<'ctx>, minimum: Pages, maximum: Option, }, /// The memory is always in the same place. Static { - base_ptr: PointerValue, - bounds: IntValue, + base_ptr: PointerValue<'ctx>, + bounds: IntValue<'ctx>, minimum: Pages, maximum: Option, }, } -struct TableCache { - ptr_to_base_ptr: PointerValue, - ptr_to_bounds: PointerValue, +struct TableCache<'ctx> { + ptr_to_base_ptr: PointerValue<'ctx>, + ptr_to_bounds: PointerValue<'ctx>, } #[derive(Clone, Copy)] -pub enum GlobalCache { - Mut { ptr_to_value: PointerValue }, - Const { value: BasicValueEnum }, +pub enum GlobalCache<'ctx> { + Mut { ptr_to_value: PointerValue<'ctx> }, + Const { value: BasicValueEnum<'ctx> }, } -struct ImportedFuncCache { - func_ptr: PointerValue, - ctx_ptr: PointerValue, +struct ImportedFuncCache<'ctx> { + func_ptr: PointerValue<'ctx>, + ctx_ptr: PointerValue<'ctx>, } -pub struct CtxType<'a> { - ctx_ptr_value: PointerValue, +pub struct CtxType<'a, 'ctx> { + ctx_ptr_value: PointerValue<'ctx>, info: &'a ModuleInfo, - cache_builder: Builder, + cache_builder: Builder<'ctx>, - cached_signal_mem: Option, + cached_signal_mem: Option>, - cached_memories: HashMap, - cached_tables: HashMap, - cached_sigindices: HashMap, - cached_globals: HashMap, - cached_imported_functions: HashMap, - - _phantom: PhantomData<&'a FunctionValue>, + cached_memories: HashMap>, + cached_tables: HashMap>, + cached_sigindices: HashMap>, + cached_globals: HashMap>, + cached_imported_functions: HashMap>, } fn offset_to_index(offset: u8) -> u32 { (offset as usize / ::std::mem::size_of::()) as u32 } -impl<'a> CtxType<'a> { +impl<'a, 'ctx> CtxType<'a, 'ctx> { pub fn new( info: &'a ModuleInfo, - func_value: &'a FunctionValue, - cache_builder: Builder, - ) -> CtxType<'a> { + func_value: &FunctionValue<'ctx>, + cache_builder: Builder<'ctx>, + ) -> CtxType<'a, 'ctx> { CtxType { ctx_ptr_value: func_value.get_nth_param(0).unwrap().into_pointer_value(), @@ -633,16 +630,14 @@ impl<'a> CtxType<'a> { cached_sigindices: HashMap::new(), cached_globals: HashMap::new(), cached_imported_functions: HashMap::new(), - - _phantom: PhantomData, } } - pub fn basic(&self) -> BasicValueEnum { + pub fn basic(&self) -> BasicValueEnum<'ctx> { self.ctx_ptr_value.as_basic_value_enum() } - pub fn signal_mem(&mut self) -> PointerValue { + pub fn signal_mem(&mut self) -> PointerValue<'ctx> { if let Some(x) = self.cached_signal_mem { return x; } @@ -666,9 +661,9 @@ impl<'a> CtxType<'a> { pub fn memory( &mut self, index: MemoryIndex, - intrinsics: &Intrinsics, - module: Rc>, - ) -> MemoryCache { + intrinsics: &Intrinsics<'ctx>, + module: Rc>>, + ) -> MemoryCache<'ctx> { let (cached_memories, info, ctx_ptr_value, cache_builder) = ( &mut self.cached_memories, self.info, @@ -713,7 +708,7 @@ impl<'a> CtxType<'a> { .build_load(memory_array_ptr_ptr, "memory_array_ptr") .into_pointer_value(); tbaa_label( - module.clone(), + &module, intrinsics, field_name, memory_array_ptr.as_instruction_value().unwrap(), @@ -731,7 +726,7 @@ impl<'a> CtxType<'a> { .build_load(memory_ptr_ptr, "memory_ptr") .into_pointer_value(); tbaa_label( - module.clone(), + &module, intrinsics, "memory_ptr", memory_ptr.as_instruction_value().unwrap(), @@ -760,14 +755,14 @@ impl<'a> CtxType<'a> { .build_load(ptr_to_bounds, "bounds") .into_int_value(); tbaa_label( - module.clone(), + &module, intrinsics, "static_memory_base", base_ptr.as_instruction_value().unwrap(), Some(index as u32), ); tbaa_label( - module.clone(), + &module, intrinsics, "static_memory_bounds", bounds.as_instruction_value().unwrap(), @@ -787,9 +782,9 @@ impl<'a> CtxType<'a> { pub fn table_prepare( &mut self, index: TableIndex, - intrinsics: &Intrinsics, - module: Rc>, - ) -> (PointerValue, PointerValue) { + intrinsics: &Intrinsics<'ctx>, + module: Rc>>, + ) -> (PointerValue<'ctx>, PointerValue<'ctx>) { let (cached_tables, info, ctx_ptr_value, cache_builder) = ( &mut self.cached_tables, self.info, @@ -830,7 +825,7 @@ impl<'a> CtxType<'a> { .build_load(table_array_ptr_ptr, "table_array_ptr") .into_pointer_value(); tbaa_label( - module.clone(), + &module, intrinsics, field_name, table_array_ptr.as_instruction_value().unwrap(), @@ -844,7 +839,7 @@ impl<'a> CtxType<'a> { .build_load(table_ptr_ptr, "table_ptr") .into_pointer_value(); tbaa_label( - module.clone(), + &module, intrinsics, "table_ptr", table_array_ptr.as_instruction_value().unwrap(), @@ -870,10 +865,10 @@ impl<'a> CtxType<'a> { pub fn table( &mut self, index: TableIndex, - intrinsics: &Intrinsics, - module: Rc>, - builder: &Builder, - ) -> (PointerValue, IntValue) { + intrinsics: &Intrinsics<'ctx>, + module: Rc>>, + builder: &Builder<'ctx>, + ) -> (PointerValue<'ctx>, IntValue<'ctx>) { let (ptr_to_base_ptr, ptr_to_bounds) = self.table_prepare(index, intrinsics, module.clone()); let base_ptr = builder @@ -881,14 +876,14 @@ impl<'a> CtxType<'a> { .into_pointer_value(); let bounds = builder.build_load(ptr_to_bounds, "bounds").into_int_value(); tbaa_label( - module.clone(), + &module, intrinsics, "table_base_ptr", base_ptr.as_instruction_value().unwrap(), Some(index.index() as u32), ); tbaa_label( - module.clone(), + &module, intrinsics, "table_bounds", bounds.as_instruction_value().unwrap(), @@ -897,7 +892,11 @@ impl<'a> CtxType<'a> { (base_ptr, bounds) } - pub fn dynamic_sigindex(&mut self, index: SigIndex, intrinsics: &Intrinsics) -> IntValue { + pub fn dynamic_sigindex( + &mut self, + index: SigIndex, + intrinsics: &Intrinsics<'ctx>, + ) -> IntValue<'ctx> { let (cached_sigindices, ctx_ptr_value, cache_builder) = ( &mut self.cached_sigindices, self.ctx_ptr_value, @@ -934,9 +933,9 @@ impl<'a> CtxType<'a> { pub fn global_cache( &mut self, index: GlobalIndex, - intrinsics: &Intrinsics, - module: Rc>, - ) -> GlobalCache { + intrinsics: &Intrinsics<'ctx>, + module: Rc>>, + ) -> GlobalCache<'ctx> { let (cached_globals, ctx_ptr_value, info, cache_builder) = ( &mut self.cached_globals, self.ctx_ptr_value, @@ -987,7 +986,7 @@ impl<'a> CtxType<'a> { .build_load(globals_array_ptr_ptr, "global_array_ptr") .into_pointer_value(); tbaa_label( - module.clone(), + &module, intrinsics, field_name, global_array_ptr.as_instruction_value().unwrap(), @@ -1005,7 +1004,7 @@ impl<'a> CtxType<'a> { .build_load(global_ptr_ptr, "global_ptr") .into_pointer_value(); tbaa_label( - module.clone(), + &module, intrinsics, "global_ptr", global_ptr.as_instruction_value().unwrap(), @@ -1022,7 +1021,7 @@ impl<'a> CtxType<'a> { } else { let value = cache_builder.build_load(global_ptr_typed, "global_value"); tbaa_label( - module.clone(), + &module, intrinsics, "global", value.as_instruction_value().unwrap(), @@ -1036,9 +1035,9 @@ impl<'a> CtxType<'a> { pub fn imported_func( &mut self, index: ImportedFuncIndex, - intrinsics: &Intrinsics, - module: Rc>, - ) -> (PointerValue, PointerValue) { + intrinsics: &Intrinsics<'ctx>, + module: Rc>>, + ) -> (PointerValue<'ctx>, PointerValue<'ctx>) { let (cached_imported_functions, ctx_ptr_value, cache_builder) = ( &mut self.cached_imported_functions, self.ctx_ptr_value, @@ -1057,7 +1056,7 @@ impl<'a> CtxType<'a> { .build_load(func_array_ptr_ptr, "func_array_ptr") .into_pointer_value(); tbaa_label( - module.clone(), + &module, intrinsics, "context_field_ptr_to_imported_funcs", func_array_ptr.as_instruction_value().unwrap(), @@ -1089,14 +1088,14 @@ impl<'a> CtxType<'a> { .build_load(ctx_ptr_ptr, "ctx_ptr") .into_pointer_value(); tbaa_label( - module.clone(), + &module, intrinsics, "imported_func_ptr", func_ptr.as_instruction_value().unwrap(), Some(index.index() as u32), ); tbaa_label( - module.clone(), + &module, intrinsics, "imported_func_ctx_ptr", ctx_ptr.as_instruction_value().unwrap(), @@ -1112,10 +1111,10 @@ impl<'a> CtxType<'a> { pub fn internal_field( &mut self, index: usize, - intrinsics: &Intrinsics, - module: Rc>, - builder: &Builder, - ) -> PointerValue { + intrinsics: &Intrinsics<'ctx>, + module: Rc>>, + builder: &Builder<'ctx>, + ) -> PointerValue<'ctx> { assert!(index < INTERNALS_SIZE); let local_internals_ptr_ptr = unsafe { @@ -1129,7 +1128,7 @@ impl<'a> CtxType<'a> { .build_load(local_internals_ptr_ptr, "local_internals_ptr") .into_pointer_value(); tbaa_label( - module.clone(), + &module, intrinsics, "context_field_ptr_to_internals", local_internals_ptr.as_instruction_value().unwrap(), @@ -1147,11 +1146,11 @@ impl<'a> CtxType<'a> { // Given an instruction that operates on memory, mark the access as not aliasing // other memory accesses which have a different (label, index) pair. -pub fn tbaa_label( - module: Rc>, - intrinsics: &Intrinsics, +pub fn tbaa_label<'ctx>( + module: &Rc>>, + intrinsics: &Intrinsics<'ctx>, label: &str, - instruction: InstructionValue, + instruction: InstructionValue<'ctx>, index: Option, ) { // To convey to LLVM that two pointers must be pointing to distinct memory, @@ -1170,6 +1169,12 @@ pub fn tbaa_label( let module = module.borrow_mut(); let context = module.get_context(); + // TODO: ContextRef can't return us the lifetime from module through Deref. + // This could be fixed once generic_associated_types is stable. + let context2 = &*context; + let context = unsafe { std::mem::transmute::<&Context, &'ctx Context>(context2) }; + std::mem::forget(context2); + // `!wasmer_tbaa_root = {}`, the TBAA root node for wasmer. let tbaa_root = module .get_global_metadata("wasmer_tbaa_root") diff --git a/lib/llvm-backend/src/lib.rs b/lib/llvm-backend/src/lib.rs index 8194f797a..2b3f7d2e6 100644 --- a/lib/llvm-backend/src/lib.rs +++ b/lib/llvm-backend/src/lib.rs @@ -29,8 +29,8 @@ pub use code::LLVMModuleCodeGenerator as ModuleCodeGenerator; use wasmer_runtime_core::codegen::SimpleStreamingCompilerGen; pub type LLVMCompiler = SimpleStreamingCompilerGen< - code::LLVMModuleCodeGenerator, - code::LLVMFunctionCodeGenerator, + code::LLVMModuleCodeGenerator<'static>, + code::LLVMFunctionCodeGenerator<'static>, backend::LLVMBackend, code::CodegenError, >; diff --git a/lib/llvm-backend/src/state.rs b/lib/llvm-backend/src/state.rs index 82ef5ec88..e870b6627 100644 --- a/lib/llvm-backend/src/state.rs +++ b/lib/llvm-backend/src/state.rs @@ -8,23 +8,23 @@ use std::ops::{BitAnd, BitOr, BitOrAssign}; use wasmparser::BinaryReaderError; #[derive(Debug)] -pub enum ControlFrame { +pub enum ControlFrame<'ctx> { Block { next: BasicBlock, - phis: SmallVec<[PhiValue; 1]>, + phis: SmallVec<[PhiValue<'ctx>; 1]>, stack_size_snapshot: usize, }, Loop { body: BasicBlock, next: BasicBlock, - phis: SmallVec<[PhiValue; 1]>, + phis: SmallVec<[PhiValue<'ctx>; 1]>, stack_size_snapshot: usize, }, IfElse { if_then: BasicBlock, if_else: BasicBlock, next: BasicBlock, - phis: SmallVec<[PhiValue; 1]>, + phis: SmallVec<[PhiValue<'ctx>; 1]>, stack_size_snapshot: usize, if_else_state: IfElseState, }, @@ -36,7 +36,7 @@ pub enum IfElseState { Else, } -impl ControlFrame { +impl<'ctx> ControlFrame<'ctx> { pub fn code_after(&self) -> &BasicBlock { match self { ControlFrame::Block { ref next, .. } @@ -52,7 +52,7 @@ impl ControlFrame { } } - pub fn phis(&self) -> &[PhiValue] { + pub fn phis(&self) -> &[PhiValue<'ctx>] { match self { ControlFrame::Block { ref phis, .. } | ControlFrame::Loop { ref phis, .. } @@ -193,15 +193,15 @@ impl BitAnd for ExtraInfo { } #[derive(Debug)] -pub struct State { - pub stack: Vec<(BasicValueEnum, ExtraInfo)>, - control_stack: Vec, +pub struct State<'ctx> { + pub stack: Vec<(BasicValueEnum<'ctx>, ExtraInfo)>, + control_stack: Vec>, value_counter: Cell, pub reachable: bool, } -impl State { +impl<'ctx> State<'ctx> { pub fn new() -> Self { Self { stack: vec![], @@ -211,7 +211,7 @@ impl State { } } - pub fn reset_stack(&mut self, frame: &ControlFrame) { + pub fn reset_stack(&mut self, frame: &ControlFrame<'ctx>) { let stack_size_snapshot = match frame { ControlFrame::Block { stack_size_snapshot, @@ -229,14 +229,14 @@ impl State { self.stack.truncate(stack_size_snapshot); } - pub fn outermost_frame(&self) -> Result<&ControlFrame, BinaryReaderError> { + pub fn outermost_frame(&self) -> Result<&ControlFrame<'ctx>, BinaryReaderError> { self.control_stack.get(0).ok_or(BinaryReaderError { message: "invalid control stack depth", offset: -1isize as usize, }) } - pub fn frame_at_depth(&self, depth: u32) -> Result<&ControlFrame, BinaryReaderError> { + pub fn frame_at_depth(&self, depth: u32) -> Result<&ControlFrame<'ctx>, BinaryReaderError> { let index = self.control_stack.len() - 1 - (depth as usize); self.control_stack.get(index).ok_or(BinaryReaderError { message: "invalid control stack depth", @@ -247,7 +247,7 @@ impl State { pub fn frame_at_depth_mut( &mut self, depth: u32, - ) -> Result<&mut ControlFrame, BinaryReaderError> { + ) -> Result<&mut ControlFrame<'ctx>, BinaryReaderError> { let index = self.control_stack.len() - 1 - (depth as usize); self.control_stack.get_mut(index).ok_or(BinaryReaderError { message: "invalid control stack depth", @@ -255,7 +255,7 @@ impl State { }) } - pub fn pop_frame(&mut self) -> Result { + pub fn pop_frame(&mut self) -> Result, BinaryReaderError> { self.control_stack.pop().ok_or(BinaryReaderError { message: "cannot pop from control stack", offset: -1isize as usize, @@ -269,26 +269,28 @@ impl State { s } - pub fn push1(&mut self, value: T) { + pub fn push1>(&mut self, value: T) { self.push1_extra(value, Default::default()); } - pub fn push1_extra(&mut self, value: T, info: ExtraInfo) { + pub fn push1_extra>(&mut self, value: T, info: ExtraInfo) { self.stack.push((value.as_basic_value_enum(), info)); } - pub fn pop1(&mut self) -> Result { + pub fn pop1(&mut self) -> Result, BinaryReaderError> { Ok(self.pop1_extra()?.0) } - pub fn pop1_extra(&mut self) -> Result<(BasicValueEnum, ExtraInfo), BinaryReaderError> { + pub fn pop1_extra(&mut self) -> Result<(BasicValueEnum<'ctx>, ExtraInfo), BinaryReaderError> { self.stack.pop().ok_or(BinaryReaderError { message: "invalid value stack", offset: -1isize as usize, }) } - pub fn pop2(&mut self) -> Result<(BasicValueEnum, BasicValueEnum), BinaryReaderError> { + pub fn pop2( + &mut self, + ) -> Result<(BasicValueEnum<'ctx>, BasicValueEnum<'ctx>), BinaryReaderError> { let v2 = self.pop1()?; let v1 = self.pop1()?; Ok((v1, v2)) @@ -296,7 +298,13 @@ impl State { pub fn pop2_extra( &mut self, - ) -> Result<((BasicValueEnum, ExtraInfo), (BasicValueEnum, ExtraInfo)), BinaryReaderError> { + ) -> Result< + ( + (BasicValueEnum<'ctx>, ExtraInfo), + (BasicValueEnum<'ctx>, ExtraInfo), + ), + BinaryReaderError, + > { let v2 = self.pop1_extra()?; let v1 = self.pop1_extra()?; Ok((v1, v2)) @@ -306,9 +314,9 @@ impl State { &mut self, ) -> Result< ( - (BasicValueEnum, ExtraInfo), - (BasicValueEnum, ExtraInfo), - (BasicValueEnum, ExtraInfo), + (BasicValueEnum<'ctx>, ExtraInfo), + (BasicValueEnum<'ctx>, ExtraInfo), + (BasicValueEnum<'ctx>, ExtraInfo), ), BinaryReaderError, > { @@ -318,7 +326,7 @@ impl State { Ok((v1, v2, v3)) } - pub fn peek1_extra(&self) -> Result<(BasicValueEnum, ExtraInfo), BinaryReaderError> { + pub fn peek1_extra(&self) -> Result<(BasicValueEnum<'ctx>, ExtraInfo), BinaryReaderError> { self.stack .get(self.stack.len() - 1) .ok_or(BinaryReaderError { @@ -328,14 +336,14 @@ impl State { .map(|v| *v) } - pub fn peekn(&self, n: usize) -> Result, BinaryReaderError> { + pub fn peekn(&self, n: usize) -> Result>, BinaryReaderError> { Ok(self.peekn_extra(n)?.iter().map(|x| x.0).collect()) } pub fn peekn_extra( &self, n: usize, - ) -> Result<&[(BasicValueEnum, ExtraInfo)], BinaryReaderError> { + ) -> Result<&[(BasicValueEnum<'ctx>, ExtraInfo)], BinaryReaderError> { let new_len = self.stack.len().checked_sub(n).ok_or(BinaryReaderError { message: "invalid value stack", offset: -1isize as usize, @@ -347,7 +355,7 @@ impl State { pub fn popn_save_extra( &mut self, n: usize, - ) -> Result, BinaryReaderError> { + ) -> Result, ExtraInfo)>, BinaryReaderError> { let v = self.peekn_extra(n)?.to_vec(); self.popn(n)?; Ok(v) @@ -366,7 +374,7 @@ impl State { Ok(()) } - pub fn push_block(&mut self, next: BasicBlock, phis: SmallVec<[PhiValue; 1]>) { + pub fn push_block(&mut self, next: BasicBlock, phis: SmallVec<[PhiValue<'ctx>; 1]>) { self.control_stack.push(ControlFrame::Block { next, phis, @@ -374,7 +382,12 @@ impl State { }); } - pub fn push_loop(&mut self, body: BasicBlock, next: BasicBlock, phis: SmallVec<[PhiValue; 1]>) { + pub fn push_loop( + &mut self, + body: BasicBlock, + next: BasicBlock, + phis: SmallVec<[PhiValue<'ctx>; 1]>, + ) { self.control_stack.push(ControlFrame::Loop { body, next, @@ -388,7 +401,7 @@ impl State { if_then: BasicBlock, if_else: BasicBlock, next: BasicBlock, - phis: SmallVec<[PhiValue; 1]>, + phis: SmallVec<[PhiValue<'ctx>; 1]>, ) { self.control_stack.push(ControlFrame::IfElse { if_then, diff --git a/lib/llvm-backend/src/trampolines.rs b/lib/llvm-backend/src/trampolines.rs index c9bd50e1b..c4894ef84 100644 --- a/lib/llvm-backend/src/trampolines.rs +++ b/lib/llvm-backend/src/trampolines.rs @@ -13,13 +13,13 @@ use wasmer_runtime_core::{ types::{FuncSig, SigIndex, Type}, }; -pub fn generate_trampolines( +pub fn generate_trampolines<'ctx>( info: &ModuleInfo, - signatures: &SliceMap, - module: &Module, - context: &Context, - builder: &Builder, - intrinsics: &Intrinsics, + signatures: &SliceMap>, + module: &Module<'ctx>, + context: &'ctx Context, + builder: &Builder<'ctx>, + intrinsics: &Intrinsics<'ctx>, ) -> Result<(), String> { for (sig_index, sig) in info.signatures.iter() { let func_type = signatures[sig_index]; @@ -47,14 +47,14 @@ pub fn generate_trampolines( Ok(()) } -fn generate_trampoline( +fn generate_trampoline<'ctx>( trampoline_func: FunctionValue, func_sig: &FuncSig, - context: &Context, - builder: &Builder, - intrinsics: &Intrinsics, + context: &'ctx Context, + builder: &Builder<'ctx>, + intrinsics: &Intrinsics<'ctx>, ) -> Result<(), String> { - let entry_block = context.append_basic_block(&trampoline_func, "entry"); + let entry_block = context.append_basic_block(trampoline_func, "entry"); builder.position_at_end(&entry_block); let (vmctx_ptr, func_ptr, args_ptr, returns_ptr) = match trampoline_func.get_params().as_slice() diff --git a/lib/runtime-core/src/backend.rs b/lib/runtime-core/src/backend.rs index df4ef7751..febfdda0e 100644 --- a/lib/runtime-core/src/backend.rs +++ b/lib/runtime-core/src/backend.rs @@ -28,6 +28,7 @@ pub enum Backend { Cranelift, Singlepass, LLVM, + Auto, } impl Backend { @@ -40,6 +41,7 @@ impl Backend { "singlepass", #[cfg(feature = "backend-llvm")] "llvm", + "auto", ] } @@ -50,6 +52,7 @@ impl Backend { Backend::Cranelift => "cranelift", Backend::Singlepass => "singlepass", Backend::LLVM => "llvm", + Backend::Auto => "auto", } } } @@ -67,6 +70,7 @@ impl std::str::FromStr for Backend { "singlepass" => Ok(Backend::Singlepass), "cranelift" => Ok(Backend::Cranelift), "llvm" => Ok(Backend::LLVM), + "auto" => Ok(Backend::Auto), _ => Err(format!("The backend {} doesn't exist", s)), } } diff --git a/lib/runtime-core/src/codegen.rs b/lib/runtime-core/src/codegen.rs index 7b4533296..991e05ed8 100644 --- a/lib/runtime-core/src/codegen.rs +++ b/lib/runtime-core/src/codegen.rs @@ -265,6 +265,7 @@ fn requires_pre_validation(backend: Backend) -> bool { Backend::Cranelift => true, Backend::LLVM => true, Backend::Singlepass => false, + Backend::Auto => false, } } diff --git a/lib/runtime/src/lib.rs b/lib/runtime/src/lib.rs index 2ac6c1742..0c832bf30 100644 --- a/lib/runtime/src/lib.rs +++ b/lib/runtime/src/lib.rs @@ -254,11 +254,6 @@ pub fn compiler_for_backend(backend: Backend) -> Option> { #[cfg(feature = "llvm")] Backend::LLVM => Some(Box::new(wasmer_llvm_backend::LLVMCompiler::new())), - #[cfg(any( - not(feature = "llvm"), - not(feature = "singlepass"), - not(feature = "cranelift") - ))] _ => None, } } diff --git a/src/bin/wasmer.rs b/src/bin/wasmer.rs index a08f7bd53..457b6f510 100644 --- a/src/bin/wasmer.rs +++ b/src/bin/wasmer.rs @@ -10,7 +10,7 @@ extern crate structopt; use std::env; -use std::fs::{read_to_string, File}; +use std::fs::{metadata, read_to_string, File}; use std::io; use std::io::Read; use std::path::PathBuf; @@ -130,7 +130,7 @@ struct Run { #[cfg(target_arch = "x86_64")] #[structopt( long = "backend", - default_value = "cranelift", + default_value = "auto", case_insensitive = true, possible_values = Backend::variants(), )] @@ -855,8 +855,30 @@ fn interactive_shell(mut ctx: InteractiveShellContext) -> ShellExitOperation { } } -fn run(options: Run) { - match execute_wasm(&options) { +fn update_backend(options: &mut Run) { + let binary_size = match metadata(&options.path) { + Ok(wasm_binary) => wasm_binary.len(), + Err(_e) => 0, + }; + + // Update backend when a backend flag is `auto`. + // Use the Singlepass backend if it's enabled and the file provided is larger + // than 10MiB (10485760 bytes), or it's enabled and the target architecture + // is AArch64. Otherwise, use the Cranelift backend. + if options.backend == Backend::Auto { + if Backend::variants().contains(&Backend::Singlepass.to_string()) + && (binary_size > 10485760 || cfg!(target_arch = "aarch64")) + { + options.backend = Backend::Singlepass; + } else { + options.backend = Backend::Cranelift; + } + } +} + +fn run(options: &mut Run) { + update_backend(options); + match execute_wasm(options) { Ok(()) => {} Err(message) => { eprintln!("Error: {}", message); @@ -940,6 +962,7 @@ fn get_compiler_by_backend(backend: Backend, _opts: &Run) -> Option Box::new(LLVMCompiler::new()), #[cfg(not(feature = "backend-llvm"))] Backend::LLVM => return None, + Backend::Auto => return None, }) } @@ -958,7 +981,7 @@ fn main() { } }); match options { - CLIOptions::Run(options) => run(options), + CLIOptions::Run(mut options) => run(&mut options), #[cfg(not(target_os = "windows"))] CLIOptions::SelfUpdate => update::self_update(), #[cfg(target_os = "windows")]