diff --git a/Cargo.lock b/Cargo.lock index 24b2288..4371c96 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -16,22 +16,12 @@ dependencies = [ "winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "arrayref" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "arrayvec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "ascii-canvas" -version = "2.0.0" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "term 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "term 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -44,21 +34,11 @@ dependencies = [ "winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "autocfg" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "autocfg" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "base64" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "bit-set" version = "0.5.2" @@ -77,56 +57,17 @@ name = "bitflags" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "blake2b_simd" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "arrayref 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "arrayvec 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "block-buffer" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "generic-array 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "block-padding" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "boring-lang" version = "0.0.1" dependencies = [ "clap 2.33.3 (registry+https://github.com/rust-lang/crates.io-index)", "inkwell 0.1.0 (git+https://github.com/TheDan64/inkwell?branch=llvm7-0)", - "lalrpop 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lalrpop-util 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lalrpop 0.19.6 (registry+https://github.com/rust-lang/crates.io-index)", + "lalrpop-util 0.19.6 (registry+https://github.com/rust-lang/crates.io-index)", "regex 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "byteorder" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "cc" version = "1.0.67" @@ -152,27 +93,9 @@ dependencies = [ ] [[package]] -name = "cloudabi" -version = "0.0.3" +name = "crunchy" +version = "0.2.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)", -] - -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "crossbeam-utils" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] name = "diff" @@ -180,34 +103,24 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "digest" -version = "0.8.1" +name = "dirs-next" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "generic-array 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "dirs-sys-next 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "dirs" -version = "1.0.5" +name = "dirs-sys-next" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "libc 0.2.88 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_users 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_users 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "docopt" -version = "1.1.0" -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)", - "regex 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.124 (registry+https://github.com/rust-lang/crates.io-index)", - "strsim 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "either" version = "1.6.1" @@ -215,45 +128,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "ena" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "log 0.4.14 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "fake-simd" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "fixedbitset" -version = "0.1.9" +version = "0.2.0" 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 = "generic-array" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "typenum 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "getrandom" -version = "0.1.16" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.88 (registry+https://github.com/rust-lang/crates.io-index)", - "wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)", + "wasi 0.10.2+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "hermit-abi" version = "0.1.18" @@ -262,6 +162,15 @@ dependencies = [ "libc 0.2.88 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "indexmap" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "hashbrown 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "inkwell" version = "0.1.0" @@ -296,7 +205,7 @@ dependencies = [ [[package]] name = "itertools" -version = "0.8.2" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "either 1.6.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -304,31 +213,29 @@ dependencies = [ [[package]] name = "lalrpop" -version = "0.18.1" +version = "0.19.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "ascii-canvas 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "ascii-canvas 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", "bit-set 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "diff 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "docopt 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ena 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)", - "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lalrpop-util 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)", - "petgraph 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)", + "ena 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", + "itertools 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lalrpop-util 0.19.6 (registry+https://github.com/rust-lang/crates.io-index)", + "petgraph 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pico-args 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "regex 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "regex-syntax 0.6.22 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.124 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.124 (registry+https://github.com/rust-lang/crates.io-index)", - "sha2 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)", - "term 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "string_cache 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "term 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tiny-keccak 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "lalrpop-util" -version = "0.18.1" +version = "0.19.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "regex 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -387,16 +294,6 @@ name = "once_cell" version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "opaque-debug" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ordermap" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "parking_lot" version = "0.11.1" @@ -422,30 +319,26 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.4.13" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "fixedbitset 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "ordermap 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "phf_generator" -version = "0.7.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "fixedbitset 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "indexmap 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "phf_shared" -version = "0.7.24" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "siphasher 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "pico-args" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "precomputed-hash" version = "0.1.1" @@ -467,115 +360,6 @@ dependencies = [ "proc-macro2 1.0.24 (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.88 (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.9 (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_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_core" -version = "0.4.2" -source = "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_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.88 (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.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_os" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.88 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.9 (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 = "rdrand" -version = "0.4.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 = "redox_syscall" -version = "0.1.57" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "redox_syscall" version = "0.2.5" @@ -586,12 +370,11 @@ dependencies = [ [[package]] name = "redox_users" -version = "0.3.5" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "getrandom 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.57 (registry+https://github.com/rust-lang/crates.io-index)", - "rust-argon2 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)", + "getrandom 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -611,15 +394,9 @@ version = "0.6.22" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "rust-argon2" -version = "0.8.3" +name = "rustversion" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "base64 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", - "blake2b_simd 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", - "constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] name = "scopeguard" @@ -639,38 +416,9 @@ name = "semver-parser" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "serde" -version = "1.0.124" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "serde_derive 1.0.124 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "serde_derive" -version = "1.0.124" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.62 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "sha2" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", - "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "siphasher" -version = "0.2.3" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -680,45 +428,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "string_cache" -version = "0.7.5" +version = "0.8.1" 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)", "new_debug_unreachable 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.124 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache_codegen 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "string_cache_codegen" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", - "string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "string_cache_shared" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "strsim" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "strsim" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "syn" version = "1.0.62" @@ -731,11 +454,11 @@ dependencies = [ [[package]] name = "term" -version = "0.5.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "dirs 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "dirs-next 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rustversion 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -756,9 +479,12 @@ dependencies = [ ] [[package]] -name = "typenum" -version = "1.12.0" +name = "tiny-keccak" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crunchy 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "unicode-width" @@ -777,7 +503,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" +version = "0.10.2+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -802,45 +528,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] "checksum aho-corasick 0.7.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" "checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" -"checksum arrayref 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" -"checksum arrayvec 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" -"checksum ascii-canvas 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff8eb72df928aafb99fe5d37b383f2fe25bd2a765e3e5f7c365916b6f2463a29" +"checksum ascii-canvas 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" "checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" "checksum autocfg 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" -"checksum base64 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" "checksum bit-set 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de" "checksum bit-vec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" "checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" -"checksum blake2b_simd 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)" = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587" -"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" -"checksum block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" -"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" -"checksum byteorder 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b" "checksum cc 1.0.67 (registry+https://github.com/rust-lang/crates.io-index)" = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd" "checksum cfg-if 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" "checksum clap 2.33.3 (registry+https://github.com/rust-lang/crates.io-index)" = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" -"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -"checksum constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" -"checksum crossbeam-utils 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49" +"checksum crunchy 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" "checksum diff 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499" -"checksum digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -"checksum dirs 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901" -"checksum docopt 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7f525a586d310c87df72ebcd98009e57f1cc030c8c268305287a476beb653969" +"checksum dirs-next 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +"checksum dirs-sys-next 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" "checksum either 1.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" -"checksum ena 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8944dc8fa28ce4a38f778bd46bf7d923fe73eed5a439398507246c8e017e6f36" -"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" -"checksum fixedbitset 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33" -"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" -"checksum generic-array 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -"checksum getrandom 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +"checksum ena 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d7402b94a93c24e742487327a7cd839dc9d36fec9de9fb25b09f2dae459f36c3" +"checksum fixedbitset 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" +"checksum getrandom 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +"checksum hashbrown 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" "checksum hermit-abi 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c" +"checksum indexmap 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" "checksum inkwell 0.1.0 (git+https://github.com/TheDan64/inkwell?branch=llvm7-0)" = "" "checksum inkwell_internals 0.2.0 (git+https://github.com/TheDan64/inkwell?branch=llvm7-0)" = "" "checksum instant 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" -"checksum itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" -"checksum lalrpop 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)" = "de5e019883a6e9734d093f34216a3857160c6bc2a9a1ec196a177aaa737c74af" -"checksum lalrpop-util 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7d6e9bc1801eb54529fd6a020aaf9514e8193bb6b42d96d0fe7da99187efa93d" +"checksum itertools 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf" +"checksum lalrpop 0.19.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b15174f1c529af5bf1283c3bc0058266b483a67156f79589fab2a25e23cf8988" +"checksum lalrpop-util 0.19.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d3e58cce361efcc90ba8a0a5f982c741ff86b603495bb15a998412e957dcd278" "checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" "checksum libc 0.2.88 (registry+https://github.com/rust-lang/crates.io-index)" = "03b07a082330a35e43f63177cc01689da34fbffa0105e1246cf0311472cac73a" "checksum llvm-sys 70.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "673300127ec17878e6f7fee4e851ba6fd36b08c26b2d6258732d699d1b3e3fcd" @@ -849,55 +562,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum memchr 2.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" "checksum new_debug_unreachable 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" "checksum once_cell 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3" -"checksum opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" -"checksum ordermap 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "a86ed3f5f244b372d6b1a00b72ef7f8876d0bc6a78a4c9985c53614041512063" "checksum parking_lot 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" "checksum parking_lot_core 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018" -"checksum petgraph 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)" = "9c3659d1ee90221741f65dd128d9998311b0e40c5d3c23a62445938214abce4f" -"checksum phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662" -"checksum phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0" +"checksum petgraph 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7" +"checksum phf_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +"checksum pico-args 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "db8bcd96cb740d03149cbad5518db9fd87126a10ab519c011893b1754134c468" "checksum precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" "checksum proc-macro2 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)" = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" "checksum quote 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" -"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -"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_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -"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 rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -"checksum redox_syscall 0.1.57 (registry+https://github.com/rust-lang/crates.io-index)" = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" "checksum redox_syscall 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "94341e4e44e24f6b591b59e47a8a027df12e008d73fd5672dbea9cc22f4507d9" -"checksum redox_users 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" +"checksum redox_users 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" "checksum regex 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a" "checksum regex-syntax 0.6.22 (registry+https://github.com/rust-lang/crates.io-index)" = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581" -"checksum rust-argon2 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb" +"checksum rustversion 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "61b3909d758bb75c79f23d4736fac9433868679d3ad2ea7a61e3c25cfda9a088" "checksum scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" "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.124 (registry+https://github.com/rust-lang/crates.io-index)" = "bd761ff957cb2a45fbb9ab3da6512de9de55872866160b23c25f1a841e99d29f" -"checksum serde_derive 1.0.124 (registry+https://github.com/rust-lang/crates.io-index)" = "1800f7693e94e186f5e25a28291ae1570da908aff7d97a095dec1e56ff99069b" -"checksum sha2 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" -"checksum siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" +"checksum siphasher 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "729a25c17d72b06c68cb47955d44fda88ad2d3e7d77e025663fdd69b93dd71a1" "checksum smallvec 1.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" -"checksum string_cache 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "89c058a82f9fd69b1becf8c274f412281038877c553182f1d02eb027045a2d67" -"checksum string_cache_codegen 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0f45ed1b65bf9a4bf2f7b7dc59212d1926e9eaf00fa998988e420fd124467c6" -"checksum string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b1884d1bc09741d466d9b14e6d37ac89d6909cbcac41dd9ae982d4d063bbedfc" +"checksum string_cache 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8ddb1139b5353f96e429e1a5e19fbaf663bddedaa06d1dbd49f82e352601209a" "checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" -"checksum strsim 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" "checksum syn 1.0.62 (registry+https://github.com/rust-lang/crates.io-index)" = "123a78a3596b24fee53a6464ce52d8ecbf62241e6294c7e7fe12086cd161f512" -"checksum term 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "edd106a334b7657c10b7c540a0106114feadeb4dc314513e97df481d5d966f42" +"checksum term 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" "checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" "checksum thread_local 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" -"checksum typenum 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" +"checksum tiny-keccak 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" "checksum unicode-width 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" "checksum unicode-xid 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" "checksum vec_map 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" -"checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" +"checksum wasi 0.10.2+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" "checksum winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/Cargo.toml b/Cargo.toml index 8a0639c..4d249f5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,11 +7,11 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [build-dependencies.lalrpop] # <-- We added this and everything after! -version = "0.18.1" +version = "0.19.6" features = ["lexer"] [dependencies] -lalrpop-util = "0.18.1" +lalrpop-util = "0.19.6" regex = "1" inkwell = { git = "https://github.com/TheDan64/inkwell", branch = "llvm7-0" } clap = "2.33.0" diff --git a/Dockerfile b/Dockerfile index ff8c9ac..76040e5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM rust:1.39 +FROM rust:1.54 RUN apt update && apt-get install -y llvm clang WORKDIR /code diff --git a/docker-compose.yml b/docker-compose.yml index 4d1cfc5..b0b0e7b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,12 +1,12 @@ version: "3" services: - # boring: - # build: . - # volumes: - # - .:/code/ - boring-python: - build: - context: . - dockerfile: Dockerfile-python + boring: + build: . volumes: - .:/code/ + # boring-python: + # build: + # context: . + # dockerfile: Dockerfile-python + # volumes: + # - .:/code/ diff --git a/examples/math/main.bl b/examples/math/main.bl index d1c676f..faf0e91 100644 --- a/examples/math/main.bl +++ b/examples/math/main.bl @@ -65,19 +65,19 @@ impl User { } } -type TestTrait trait { - fn classMethod(id: I64): Self; - fn instanceMethod(self: Self): I64; - fn defaultImpl(self: Self): I64 { - return self.instanceMethod; - } -} - -impl TestTrait for User { - fn classMethod(id: I64): Self { - return User{id: id,}; - } - fn instanceMethod(self: Self): I64 { - return self.get_id(); - } -} +// type TestTrait trait { +// fn classMethod(id: I64): Self; +// fn instanceMethod(self: Self): I64; +// fn defaultImpl(self: Self): I64 { +// return self.instanceMethod; +// } +// } +// +// impl TestTrait for User { +// fn classMethod(id: I64): Self { +// return User{id: id,}; +// } +// fn instanceMethod(self: Self): I64 { +// return self.get_id(); +// } +// } diff --git a/src/ast.rs b/src/ast.rs index 1b0fdb6..c10cb3d 100644 --- a/src/ast.rs +++ b/src/ast.rs @@ -1,86 +1,73 @@ -use std::collections::HashMap; -use crate::types; - +use std::cell::RefCell; pub struct IdGenerator { - counter: i64, + counter: RefCell, } impl IdGenerator { pub fn new() -> Self { - IdGenerator{counter: 0} + IdGenerator{counter: RefCell::new(0)} } - pub fn next(&mut self) -> String { - self.counter += 1; - ("S" + self.counter.to_string()).to_string() + pub fn next(&self) -> String { + *self.counter.borrow_mut() += 1; + ("S".to_owned() + &self.counter.borrow().to_string()).to_string() } } -pub fn new_named(name: String) -> { - ast::TypeUsage::Named(ast::NamedTypeUsage{ - name: ast::Identifier{ - name: ast::Spanned{ - span: ast::Span{left: 0, right: 0}, //todo: figure out a sane value for these - value: name, - } - } - ) -} - -pub fn new_unit() -> { - ast::TypeUsage::Named(ast::NamedTypeUsage{ - name: ast::Identifier{ - name: ast::Spanned{ - span: ast::Span{left: 0, right: 0}, //todo: figure out a sane value for these +pub fn new_unit() -> TypeUsage { + TypeUsage::Named(NamedTypeUsage{ + name: Identifier{ + name: Spanned{ + span: Span{left: 0, right: 0}, //todo: figure out a sane value for these value: "()".to_string(), } } - ) + }) } -pub fn new_never() -> { - ast::TypeUsage::Named(ast::NamedTypeUsage{ - name: ast::Identifier{ - name: ast::Spanned{ - span: ast::Span{left: 0, right: 0}, //todo: figure out a sane value for these +pub fn new_never() -> TypeUsage { + TypeUsage::Named(NamedTypeUsage{ + name: Identifier{ + name: Spanned{ + span: Span{left: 0, right: 0}, //todo: figure out a sane value for these value: "!".to_string(), } } - ) + }) } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Span { pub left: usize, pub right: usize } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Spanned { pub span: Span, pub value: T, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct FunctionTypeUsage { pub arguments: Vec, pub return_type: Box, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct NamedTypeUsage { - name: Identifier, + pub name: Identifier, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct UnknownTypeUsage { - name: String, + pub name: String, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum TypeUsage { Function(FunctionTypeUsage), Named(NamedTypeUsage), @@ -88,38 +75,38 @@ pub enum TypeUsage { } impl TypeUsage { - pub fn new_unknown(id_gen: &mut IdGenerator) -> TypeUsage { + pub fn new_unknown(id_gen: &IdGenerator) -> TypeUsage { return TypeUsage::Unknown(UnknownTypeUsage{ name: id_gen.next(), }); } - pub fn new_named(identifier: &Identifier) -> TypeUsage { + pub fn new_named(identifier: Identifier) -> TypeUsage { return TypeUsage::Named(NamedTypeUsage{ name: identifier.clone(), }); } pub fn new_builtin(name: String) -> TypeUsage { - ast::TypeUsage::Named(ast::NamedTypeUsage{ - name: ast::Identifier{ - name: ast::Spanned{ - span: ast::Span{left: 0, right: 0}, //todo: figure out a sane value for these + TypeUsage::Named(NamedTypeUsage{ + name: Identifier{ + name: Spanned{ + span: Span{left: 0, right: 0}, //todo: figure out a sane value for these value: name, } } - ) + }) } - pub fn new_function(arg_count: usize, id_gen: &mut IdGenerator) -> TypeUsage { + pub fn new_function(arg_count: usize, id_gen: &IdGenerator) -> TypeUsage { return TypeUsage::Function(FunctionTypeUsage{ - arguments: 0..arg_count.map(|_| => TypeUsage.new_unknown(&mut id_gen)).collect(), - return_type: Box::new(TypeUsage.new_unknown(&mut id_gen)), + arguments: (0..arg_count).map(|_| TypeUsage::new_unknown(&id_gen)).collect(), + return_type: Box::new(TypeUsage::new_unknown(&id_gen)), }); } } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum Operator { Mul, Div, @@ -127,98 +114,100 @@ pub enum Operator { Minus, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct LiteralInt { - pub value: Spanned, + pub value: Spanned, pub type_: TypeUsage, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct LiteralFloat { - pub value: Spanned, + pub value: Spanned, pub type_: TypeUsage, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct LiteralStruct { pub name: Identifier, - pub fields: HashMap, + pub fields: Vec<(Identifier, Expression)>, pub type_: TypeUsage, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Identifier { pub name: Spanned, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct FunctionCall { pub source: Expression, pub arguments: Vec, pub type_: TypeUsage, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct StructGetter { pub source: Expression, pub attribute: Identifier, pub type_: TypeUsage, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Operation { pub left: Expression, pub op: Operator, pub right: Expression, - pub type_: TypeUsage, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct VariableUsage { pub name: Identifier, pub type_: TypeUsage, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum Subexpression { LiteralInt(LiteralInt), LiteralFloat(LiteralFloat), LiteralStruct(LiteralStruct), FunctionCall(FunctionCall), - Identifier(Identifier), + VariableUsage(VariableUsage), + StructGetter(StructGetter), + Block(Block), Op(Operation), } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Expression { - pub subexpression: Spanned>, + pub subexpression: Box, pub type_: TypeUsage, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct ReturnStatement { pub source: Expression, -}; - -#[derive(Clone, PartialEq, Eq, Hash)] -pub struct LetStatement { - variable_name: Identifier, - expression: Expression, - type_: TypeUsage, } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct LetStatement { + pub variable_name: Identifier, + pub expression: Expression, + pub type_: TypeUsage, +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum AssignmentTarget { Variable(VariableUsage), StructAttr(StructGetter), } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct AssignmentStatement { pub source: AssignmentTarget, pub expression: Expression, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum Statement { Return(ReturnStatement), Let(LetStatement), @@ -226,75 +215,75 @@ pub enum Statement { Expression(Expression), } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Block { pub statements: Vec, pub type_: TypeUsage, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct VariableDeclaration { pub name: Identifier, pub type_: TypeUsage, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct FunctionDeclaration { pub name: Identifier, pub arguments: Vec, pub return_type: TypeUsage, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Function { pub declaration: FunctionDeclaration, pub block: Block, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct PrimitiveTypeDeclaration { pub name: String, // cannot be identifier as it's not declared anywhere specific, it's builtins } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct StructField { pub name: Identifier, pub type_: TypeUsage, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct StructTypeDeclaration { pub name: Identifier, pub fields: Vec, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct AliasTypeDeclaration { pub name: Identifier, pub replaces: TypeUsage, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum TypeDeclaration { Struct(StructTypeDeclaration), Primitive(PrimitiveTypeDeclaration), Alias(AliasTypeDeclaration), } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Impl { pub struct_name: Identifier, pub functions: Vec, } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum ModuleItem { Function(Function), TypeDeclaration(TypeDeclaration), Impl(Impl), } -#[derive(Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Module { pub items: Vec, } diff --git a/src/grammar.lalrpop b/src/grammar.lalrpop index fcc650c..c8b9473 100644 --- a/src/grammar.lalrpop +++ b/src/grammar.lalrpop @@ -1,90 +1,129 @@ use std::str::FromStr; use crate::ast; -use crate::types; -grammar(id_generator: ast::IdGenerator); +grammar(id_generator: &ast::IdGenerator); + +match { + r"[0-9]+", + r"[0-9]+\.[0-9]+", + r"[A-Za-z_][A-Za-z0-9_]*", + ":", + ";", + "{", + "}", + "(", + ")", + ".", + "+", + "-", + "*", + "/", + "fn", + "return", + "let", + "=", + "type", + "struct", + "impl", + ",", + + r"\s*" => { }, + r"//[^\n\r]*[\n\r]*" => { }, // `// comment` +} -pub TypeUsage: ast::TypeUsage = { - "fn" "(" > ")" => ast::TypeUsage::Function(ast::FunctionTypeUsage{arguments: args, return_type: Box::new(ast::new_unit())}), - "fn" "(" > ")" ":" => ast::TypeUsage::Function(ast::FunctionTypeUsage{arguments: args, return_type: Box::new(return_type)), - => ast::TypeUsage::Named(ast::NamedTypeUsage{name: name}) +pub LiteralInt: String = { + => literal.to_string() }; - -pub LiteralInt: i64 = { - => i64::from_str(literal).unwrap() +pub SpannedLiteralInt: ast::LiteralInt = { + > => ast::LiteralInt{value: literal_int, type_: ast::TypeUsage::new_builtin("i64".to_string())} }; -pub SpannedLiteralInt: ast::LiteralInt { - > => ast::LiteralInt{value: literal_int, type_: ast::TypeUsage::new_builtin("i64")} +pub LiteralFloat: String = { + => literal.to_string() }; -pub LiteralFloat: f64 = { - => f64::from_str(literal).unwrap() -}; - -pub SpannedLiteralInt: ast::LiteralFloat { - > => ast::LiteralFloat{value: literal_float, type_: ast::TypeUsage::new_builtin("f64")} +pub SpannedLiteralFloat: ast::LiteralFloat = { + > => ast::LiteralFloat{value: literal_float, type_: ast::TypeUsage::new_builtin("f64".to_string())} }; pub Identifier: String = { => i.to_string() }; -pub LiteralStructField: (String, Expression) { +pub LiteralStructField: (ast::Identifier, ast::Expression) = { ":" => (field, expr) }; -pub LiteralStruct: ast::LiteralStruct { - "{" > "}" => LiteralStruct{ - name: i, - fields: field_list.into_iter().collect(), +pub LiteralStruct: ast::LiteralStruct = { + "{" > "}" => ast::LiteralStruct{ + name: i.clone(), + fields: field_list, type_: ast::TypeUsage::new_named(i.clone()), } }; -pub SpannedIdentifier: ast::Identifier { +pub SpannedIdentifier: ast::Identifier = { > => ast::Identifier{name: i} }; pub FunctionCall: ast::FunctionCall = { - "(" > ")" => ast::FunctionCall{source: source, arguments: args, type_: ast::TypeUsage::new_unknown(&mut id_generator)} + "(" > ")" => ast::FunctionCall{source: source, arguments: args, type_: ast::TypeUsage::new_unknown(&id_generator)} }; pub StructGetter: ast::StructGetter = { - "." => ast::StructGetter{source: source, attribute: field, type: ast::TypeUsage::new_unknown(&mut id_generator)} + "." => ast::StructGetter{source: source, attribute: field, type_: ast::TypeUsage::new_unknown(&id_generator)} }; pub VariableUsage: ast::VariableUsage = { - => ast::VariableUsage{name: identifier, type_: ast::TypeUsage::new_unknown(&mut id_generator)} -}; - -pub Subxpression: Box = { - "+" => Box::new(ast::Subexpression::Op(ast::Operation{left: l, op: ast::Operator::Plus, right: r})), - "-" => Box::new(ast::Subexpression::Op(ast::Operation{left: l, op: ast::Operator::Minus, right: r})), - Factor, -}; - -pub Factor: Box = { - "*" => Box::new(ast::Subexpression::Op(ast::Operation{left: l, op: ast::Operator::Mul, right: r})), - "/" => Box::new(ast::Subexpression::Op(ast::Operation{left: l, op: ast::Operator::Div, right: r})), - Term, -}; - -pub Term: Box = { - SpannedLiteralInt => Box::new(ast::Subexpression::LiteralInt(<>)), - SpannedLiteralFloat => Box::new(ast::Subexpression::LiteralFloat(<>)), - SpannedLiteralStruct => Box::new(ast::Subexpression::LiteralStruct(<>)), - FunctionCall => Box::new(ast::Subexpression::FunctionCall(<>)), - Identifier => Box::new(ast::Subexpression::Identifier(<>)), - "(" ")" => e.subexpression, + => ast::VariableUsage{name: identifier, type_: ast::TypeUsage::new_unknown(&id_generator)} }; pub Expression: ast::Expression = { - => ast::Expression{subexpression: sub, type_: ast::TypeUsage::new_unknown(&mut id_generator)} + "+" => { + ast::Expression{ + subexpression: Box::new(ast::Subexpression::Op(ast::Operation{left: l, op: ast::Operator::Plus, right: r})), + type_: ast::TypeUsage::new_unknown(&id_generator), + } + }, + "-" => { + ast::Expression{ + subexpression: Box::new(ast::Subexpression::Op(ast::Operation{left: l, op: ast::Operator::Minus, right: r})), + type_: ast::TypeUsage::new_unknown(&id_generator), + } + }, + Factor, }; +pub Factor: ast::Expression = { + "*" => { + ast::Expression{ + subexpression: Box::new(ast::Subexpression::Op(ast::Operation{left: l, op: ast::Operator::Mul, right: r})), + type_: ast::TypeUsage::new_unknown(&id_generator), + } + }, + "/" => { + ast::Expression{ + subexpression: Box::new(ast::Subexpression::Op(ast::Operation{left: l, op: ast::Operator::Div, right: r})), + type_: ast::TypeUsage::new_unknown(&id_generator), + } + }, + Term, +}; + +pub Term: ast::Expression = { + SpannedLiteralInt => ast::Expression{subexpression: Box::new(ast::Subexpression::LiteralInt(<>)), type_: ast::TypeUsage::new_unknown(&id_generator)}, + SpannedLiteralFloat => ast::Expression{subexpression: Box::new(ast::Subexpression::LiteralFloat(<>)), type_: ast::TypeUsage::new_unknown(&id_generator)}, + LiteralStruct => ast::Expression{subexpression: Box::new(ast::Subexpression::LiteralStruct(<>)), type_: ast::TypeUsage::new_unknown(&id_generator)}, + FunctionCall => ast::Expression{subexpression: Box::new(ast::Subexpression::FunctionCall(<>)), type_: ast::TypeUsage::new_unknown(&id_generator)}, + StructGetter => ast::Expression{subexpression: Box::new(ast::Subexpression::StructGetter(<>)), type_: ast::TypeUsage::new_unknown(&id_generator)}, + VariableUsage => ast::Expression{subexpression: Box::new(ast::Subexpression::VariableUsage(<>)), type_: ast::TypeUsage::new_unknown(&id_generator)}, + Block => ast::Expression{subexpression: Box::new(ast::Subexpression::Block(<>)), type_: ast::TypeUsage::new_unknown(&id_generator)}, + "(" ")" => e, +}; + + pub ReturnStatement: ast::ReturnStatement = { "return" => ast::ReturnStatement{source: e} }; @@ -92,82 +131,82 @@ pub ReturnStatement: ast::ReturnStatement = { pub LetStatement: ast::LetStatement = { //TODO: support destructuring with tuples, when they exist. //TODO: add mut, weak - "let" "=" => ast::LetStatement{variable_name: n, type_usage: ast::TypeUsage::new_unknown(&mut id_generator), expression: e}, - "let" ":" "=" => ast::LetStatement{variable_name: n, type_usage: ast::TypeUsage::Named(ast::NamedTypeUsage{name: t}), expression: e}, + "let" "=" => ast::LetStatement{variable_name: n, type_: ast::TypeUsage::new_unknown(&id_generator), expression: e}, + "let" ":" "=" => ast::LetStatement{variable_name: n, type_: t, expression: e}, }; -pub AssignmentStatement: ast::AssignmentStatement { +pub AssignmentStatement: ast::AssignmentStatement = { "=" => ast::AssignmentStatement{source: ast::AssignmentTarget::Variable(v), expression: e}, "=" => ast::AssignmentStatement{source: ast::AssignmentTarget::StructAttr(sg), expression: e}, -} +}; pub Statement: ast::Statement = { ";" => ast::Statement::Return(r), ";" => ast::Statement::Let(l), - ";" => ast::Statement::Assignment(l), + ";" => ast::Statement::Assignment(a), ";" => ast::Statement::Expression(e), -} +}; pub Block: ast::Block = { - "{" "}" => match e { - None => ast::Block{statements: s, type_: ast::new_never()}, + "{" )*> "}" => match e { + None => ast::Block{statements: v, type_: ast::new_never()}, Some(e) => { let mut v = v; v.push(ast::Statement::Expression(e)); - ast::Block{statements: v, type_: ast::TypeUsage::new_unknown(&mut id_generator)} + ast::Block{statements: v, type_: ast::TypeUsage::new_unknown(&id_generator)} } } -} +}; pub TypeUsage: ast::TypeUsage = { => ast::TypeUsage::Named(ast::NamedTypeUsage{name: n}), - "fn" "(" > ")" => ast::TypeUsage::Function(ast::FunctionTypeUsage{arguments: args, return_type: Box::new(ast::TypeUsage::new_unknown(&mut id_generator))}), + "fn" "(" > ")" => ast::TypeUsage::Function(ast::FunctionTypeUsage{arguments: args, return_type: Box::new(ast::TypeUsage::new_unknown(&id_generator))}), "fn" "(" > ")" ":" => ast::TypeUsage::Function(ast::FunctionTypeUsage{arguments: args, return_type: Box::new(rt)}), -} +}; pub VariableDeclaration: ast::VariableDeclaration = { - ":" => ast::VariableDeclaration{name: i, type_usage: t}, -} + ":" => ast::VariableDeclaration{name: i, type_: t}, +}; -pub FunctionDeclaration: ast::FunctionDeclaration { - "fn" "(" > ")" => ast::FunctionDeclaration{name: n, arguments: args, return_type: ast::TypeUsage::new_unknown(&mut id_generator)}, +pub FunctionDeclaration: ast::FunctionDeclaration = { + "fn" "(" > ")" => ast::FunctionDeclaration{name: n, arguments: args, return_type: ast::TypeUsage::new_unknown(&id_generator)}, "fn" "(" > ")" ":" => ast::FunctionDeclaration{name: n, arguments: args, return_type: rt}, -} +}; pub Function: ast::Function = { => ast::Function{declaration: d, block: b} -} +}; pub StructField: ast::StructField = { - ":" => (i, t), -} + ":" => ast::StructField{name: i, type_: t}, +}; -pub StructTypeDeclaration: ast::StructTypeDeclaration { - "type" "struct" "{" Comma "}" -} +pub StructTypeDeclaration: ast::StructTypeDeclaration = { + "type" "struct" "{" > "}" => ast::StructTypeDeclaration{name: i, fields: f} +}; -pub TypeAliasDeclaration: ast::TypeAliasDeclaration { +pub AliasTypeDeclaration: ast::AliasTypeDeclaration = { "type" "=" ";" => ast::AliasTypeDeclaration{name: i, replaces: t} -} +}; -pub TypeDeclaration: ast::TypeDeclaration { +pub TypeDeclaration: ast::TypeDeclaration = { => ast::TypeDeclaration::Struct(s), => ast::TypeDeclaration::Alias(a), -} +}; -pub Impl: ast::Impl { - "impl" "{" "}" => ast::Impl{struct_name: i, functions: s} -} +pub Impl: ast::Impl = { + "impl" "{" "}" => ast::Impl{struct_name: i, functions: f} +}; -pub ModuleItem: ast::ModuleItem { +pub ModuleItem: ast::ModuleItem = { => ast::ModuleItem::Function(f), => ast::ModuleItem::TypeDeclaration(td), => ast::ModuleItem::Impl(i), -} +}; pub Module: ast::Module = { => ast::Module{items: i} -} +}; // From https://lalrpop.github.io/lalrpop/tutorial/006_macros.html // Comma seperated list of T with optional trailing comma diff --git a/src/main.rs b/src/main.rs index 99fceaa..054d59c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ -mod types; +// mod types; mod ast; #[macro_use] extern crate lalrpop_util; @@ -7,7 +7,7 @@ lalrpop_mod!(pub grammar); // synthesized by LALRPOP use std::fs; use std::io::Write; // mod compiler; -use inkwell::context::Context; +// use inkwell::context::Context; extern crate clap; use clap::{Arg, App}; @@ -38,7 +38,9 @@ fn main() { let output = matches.value_of("OUTPUT").unwrap_or(default_output); let contents = fs::read_to_string(input).expect("input file not found"); - let module_ast = grammar::ModuleParser::new().parse(&contents).unwrap(); //TODO: convert to error + let unknown_id_gen = ast::IdGenerator::new(); + let module_ast = grammar::ModuleParser::new().parse(&unknown_id_gen, &contents).unwrap(); //TODO: convert to error + println!("ast: {:#?}", &module_ast); // let context = Context::create(); @@ -52,33 +54,34 @@ fn main() { #[test] fn grammar() { - assert!(grammar::LiteralIntParser::new().parse("22").is_ok()); - assert!(grammar::IdentifierParser::new().parse("foo").is_ok()); - assert!(grammar::LiteralIntParser::new().parse("2a").is_err()); + let id_gen = ast::IdGenerator::new(); + assert!(grammar::LiteralIntParser::new().parse(&id_gen, "22").is_ok()); + assert!(grammar::IdentifierParser::new().parse(&id_gen, "foo").is_ok()); + assert!(grammar::LiteralIntParser::new().parse(&id_gen, "2a").is_err()); - assert!(grammar::TermParser::new().parse("22").is_ok()); - assert!(grammar::TermParser::new().parse("foo").is_ok()); + assert!(grammar::TermParser::new().parse(&id_gen, "22").is_ok()); + assert!(grammar::TermParser::new().parse(&id_gen, "foo").is_ok()); - assert!(grammar::ExpressionParser::new().parse("22 * foo").is_ok()); - assert!(grammar::ExpressionParser::new().parse("22 * 33").is_ok()); - assert!(grammar::ExpressionParser::new().parse("(22 * 33) + 24").is_ok()); + assert!(grammar::ExpressionParser::new().parse(&id_gen, "22 * foo").is_ok()); + assert!(grammar::ExpressionParser::new().parse(&id_gen, "22 * 33").is_ok()); + assert!(grammar::ExpressionParser::new().parse(&id_gen, "(22 * 33) + 24").is_ok()); - assert!(grammar::BlockParser::new().parse("{ (22 * 33) + 24 }").is_ok()); - assert!(grammar::BlockParser::new().parse("{ (22 * 33) + 24; 24 }").is_ok()); + assert!(grammar::BlockParser::new().parse(&id_gen, "{ (22 * 33) + 24 }").is_ok()); + assert!(grammar::BlockParser::new().parse(&id_gen, "{ (22 * 33) + 24; 25 }").is_ok()); // assert!(grammar::BlockParser::new().parse("{ (22 * 33) + 24\n 24 }").is_ok()); - assert!(grammar::BlockParser::new().parse("{ }").is_err()); + assert!(grammar::BlockParser::new().parse(&id_gen, "{ }").is_ok()); - assert!(grammar::VariableDeclarationParser::new().parse("foo: Int32").is_ok()); - assert!(grammar::VariableDeclarationParser::new().parse("foo").is_err()); - assert!(grammar::VariableDeclarationParser::new().parse("1234").is_err()); + assert!(grammar::VariableDeclarationParser::new().parse(&id_gen, "foo: Int32").is_ok()); + assert!(grammar::VariableDeclarationParser::new().parse(&id_gen, "foo").is_err()); + assert!(grammar::VariableDeclarationParser::new().parse(&id_gen, "1234").is_err()); - assert!(grammar::FunctionParser::new().parse("fn add(a: Int32, b: Int32) Int32 { a + b }").is_ok()); - assert!(grammar::FunctionParser::new().parse("fn random_dice_roll() Int32 { 4 }").is_ok()); - assert!(grammar::FunctionParser::new().parse("fn add(a: Int32, b: Int32) Int32 { a + }").is_err()); - assert!(grammar::FunctionParser::new().parse("fn add(a: Int32, b: Int32) Int32").is_err()); + assert!(grammar::FunctionParser::new().parse(&id_gen, "fn add(a: Int32, b: Int32): Int32 { a + b }").is_ok()); + assert!(grammar::FunctionParser::new().parse(&id_gen, "fn random_dice_roll(): Int32 { 4 }").is_ok()); + assert!(grammar::FunctionParser::new().parse(&id_gen, "fn add(a: Int32, b: Int32): Int32 { a + }").is_err()); + assert!(grammar::FunctionParser::new().parse(&id_gen, "fn add(a: Int32, b: Int32): Int32").is_err()); - assert!(grammar::FunctionCallParser::new().parse("foo(1, 2)").is_ok()); + assert!(grammar::FunctionCallParser::new().parse(&id_gen, "foo(1, 2)").is_ok()); - assert!(grammar::ModuleParser::new().parse("fn add(a: Int32, b: Int32) Int32 { a + b }").is_ok()); - assert!(grammar::ModuleParser::new().parse("fn add(a: Int32, b: Int32) Int32 { a + b } fn subtract(a: Int32, b: Int32) Int32 { a - b }").is_ok()); + assert!(grammar::ModuleParser::new().parse(&id_gen, "fn add(a: Int32, b: Int32): Int32 { a + b }").is_ok()); + assert!(grammar::ModuleParser::new().parse(&id_gen, "fn add(a: Int32, b: Int32): Int32 { a + b } fn subtract(a: Int32, b: Int32): Int32 { a - b }").is_ok()); }