diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..57eb8ac --- /dev/null +++ b/.editorconfig @@ -0,0 +1,7 @@ +[*.rs] +end_of_file = lf +insert_final_newline = true +trim_trailing_whitespace = true +charset = utf-8 +indent_style = space +indent_size = 4 diff --git a/Cargo.lock b/Cargo.lock index 5a57ec7..9df6d74 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,46 +1,5 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -[[package]] -name = "aho-corasick" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "memchr 2.3.0 (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.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ascii-canvas" -version = "2.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)", -] - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (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.0" @@ -51,11 +10,6 @@ name = "base-x" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "base64" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "bimap" version = "0.4.0" @@ -64,68 +18,16 @@ dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "bit-set" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bit-vec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "bit-vec" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "bitflags" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "blake2b_simd" -version = "0.5.10" -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.1 (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.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "generic-array 0.12.3 (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 = "bumpalo" version = "3.1.2" source = "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.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "cfg-if" version = "0.1.10" @@ -139,73 +41,11 @@ 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.7.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)", - "cfg-if 0.1.10 (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" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "digest" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "dirs" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_users 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "discard" version = "1.0.4" source = "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.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (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.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ena" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "enterprise" version = "0.1.0" @@ -225,7 +65,10 @@ dependencies = [ "petgraph 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "proc-macro2 1.0.8 (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.104 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", "spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "symbol 0.1.0", "syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -233,51 +76,19 @@ dependencies = [ name = "enterprise-macros" version = "0.1.0" dependencies = [ - "lalrpop 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lalrpop-util 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)", + "enterprise-compiler 0.1.0", "proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "thiserror 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "symbol 0.1.0", + "syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)", + "thiserror 1.0.11 (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" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "fixedbitset" 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.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "getrandom" -version = "0.1.14" -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.66 (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)", -] - [[package]] name = "helloworld" version = "0.1.0" @@ -288,14 +99,6 @@ dependencies = [ "stdweb 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "hermit-abi" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "indexmap" version = "1.3.1" @@ -304,48 +107,11 @@ dependencies = [ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "itertools" -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)", -] - [[package]] name = "itoa" version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "lalrpop" -version = "0.17.2" -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)", - "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", - "bit-set 0.5.1 (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.17.2 (registry+https://github.com/rust-lang/crates.io-index)", - "petgraph 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "sha2 0.8.1 (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)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lalrpop-util" -version = "0.17.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "lazy_static" version = "1.4.0" @@ -377,26 +143,6 @@ name = "maplit" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "memchr" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "new_debug_unreachable" -version = "1.0.4" -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.10.0" @@ -419,15 +165,6 @@ dependencies = [ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "petgraph" -version = "0.4.13" -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 = "petgraph" version = "0.5.0" @@ -437,28 +174,6 @@ dependencies = [ "indexmap 1.3.1 (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)", -] - -[[package]] -name = "phf_shared" -version = "0.7.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "proc-macro2" version = "1.0.8" @@ -475,152 +190,11 @@ dependencies = [ "proc-macro2 1.0.8 (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.66 (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_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.66 (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" -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.66 (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.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 = "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.56" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "redox_users" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "rust-argon2 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "regex" -version = "1.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "aho-corasick 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "regex-syntax" -version = "0.6.14" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "rust-argon2" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "blake2b_simd 0.5.10 (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.7.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "rustc_version" version = "0.2.3" @@ -656,9 +230,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" name = "serde" version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] name = "serde_derive" @@ -685,22 +256,6 @@ name = "sha1" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "sha2" -version = "0.8.1" -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" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "smallvec" version = "1.2.0" @@ -759,41 +314,13 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "string_cache" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" +name = "symbol" +version = "0.1.0" 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)", - "precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (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)", + "spin 0.5.2 (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.8 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (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.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "syn" version = "1.0.14" @@ -804,27 +331,17 @@ dependencies = [ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "term" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "dirs 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "thiserror" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "thiserror-impl 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "thiserror-impl 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "thiserror-impl" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -832,34 +349,11 @@ dependencies = [ "syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "thread_local" -version = "1.0.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)", -] - -[[package]] -name = "typenum" -version = "1.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "unicode-xid" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "unicode-xid" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "wasm-bindgen" version = "0.2.58" @@ -929,82 +423,28 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] -"checksum aho-corasick 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)" = "743ad5a418686aad3b87fd14c43badd828cf26e214a00f92a384291cf22e1811" -"checksum arrayref 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" -"checksum arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8" -"checksum ascii-canvas 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff8eb72df928aafb99fe5d37b383f2fe25bd2a765e3e5f7c365916b6f2463a29" -"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.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" "checksum base-x 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1b20b618342cf9891c292c4f5ac2cde7287cc5c87e87e9c769d617793607dec1" -"checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" "checksum bimap 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "783204f24fd7724ea274d327619cfa6a6018047bb0561a68aadff6f56787591b" -"checksum bit-set 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e84c238982c4b1e1ee668d136c510c67a13465279c0cb367ea6baf6310620a80" -"checksum bit-vec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f59bbe95d4e52a6398ec21238d31577f2b28a9d86807f06ca59d191d8440d0bb" "checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" -"checksum blake2b_simd 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a" -"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 bumpalo 3.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5fb8038c1ddc0a5f73787b130f4cc75151e96ed33e417fde765eb5a81e3532f4" -"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" -"checksum byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" "checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" "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.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4" -"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 discard 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" -"checksum docopt 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7f525a586d310c87df72ebcd98009e57f1cc030c8c268305287a476beb653969" -"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" -"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 fixedbitset 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" -"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" -"checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" -"checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" -"checksum hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "eff2656d88f158ce120947499e971d743c05dbcbed62e5bd2f38f1698bbc3772" "checksum indexmap 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b54058f0a6ff80b6803da8faf8997cde53872b38f4023728f6830b06cd3c0dc" -"checksum itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" "checksum itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e" -"checksum lalrpop 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)" = "64dc3698e75d452867d9bd86f4a723f452ce9d01fe1d55990b79f0c790aa67db" -"checksum lalrpop-util 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c277d18683b36349ab5cd030158b54856fca6bb2d5dc5263b06288f486958b7c" "checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" "checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558" "checksum lock_api 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "79b2de95ecb4691949fea4716ca53cdbcfccb2c612e19644a8bad05edcf9f47b" "checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" "checksum maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" -"checksum memchr 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3197e20c7edb283f87c071ddfc7a2cca8f8e0b888c242959846a6fce03c72223" -"checksum new_debug_unreachable 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" -"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.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "92e98c49ab0b7ce5b222f2cc9193fc4efe11c6d0bd4f648e374684a6857b1cfc" "checksum parking_lot_core 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7582838484df45743c8434fbff785e8edf260c28748353d44bc0da32e0ceabf1" -"checksum petgraph 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)" = "9c3659d1ee90221741f65dd128d9998311b0e40c5d3c23a62445938214abce4f" "checksum petgraph 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "29c127eea4a29ec6c85d153c59dc1213f33ec74cead30fe4730aecc88cc1fd92" -"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 precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" "checksum proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3acb317c6ff86a4e579dfa00fc5e6cca91ecbb4e7eb2df0468805b674eb88548" "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_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.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" -"checksum redox_users 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "09b23093265f8d200fa7b4c2c76297f47e681c655f6f1285a8780d6a022f7431" -"checksum regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "322cf97724bea3ee221b78fe25ac9c46114ebb51747ad5babd51a2fc6a8235a8" -"checksum regex-syntax 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)" = "b28dfe3fe9badec5dbf0a79a9cccad2cfc2ab5484bdb3e44cbd1ae8b3ba2be06" -"checksum rust-argon2 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017" "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 scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" @@ -1014,27 +454,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64" "checksum serde_json 1.0.46 (registry+https://github.com/rust-lang/crates.io-index)" = "21b01d7f0288608a01dca632cf1df859df6fd6ffa885300fc275ce2ba6221953" "checksum sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" -"checksum sha2 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "27044adfd2e1f077f649f59deb9490d3941d674002f7d062870a60ebe9bd47a0" -"checksum siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" "checksum smallvec 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5c2fb2ec9bcd216a5b0d0ccf31ab17b5ed1d627960edff65bbe95d3ce221cefc" "checksum spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" "checksum stdweb 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)" = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" "checksum stdweb-derive 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" "checksum stdweb-internal-macros 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" "checksum stdweb-internal-runtime 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" -"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 strsim 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" "checksum syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "af6f3550d8dff9ef7dc34d384ac6f107e5d31c8f57d9f28e0081503f547ac8f5" -"checksum term 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "edd106a334b7657c10b7c540a0106114feadeb4dc314513e97df481d5d966f42" -"checksum thiserror 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "205684fd018ca14432b12cce6ea3d46763311a571c3d294e71ba3f01adcf1aad" -"checksum thiserror-impl 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "57e4d2e50ca050ed44fb58309bdce3efa79948f84f9993ad1978de5eebdce5a7" -"checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" -"checksum typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9" -"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" +"checksum thiserror 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "ee14bf8e6767ab4c687c9e8bc003879e042a96fd67a3ba5934eadb6536bef4db" +"checksum thiserror-impl 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "a7b51e1fbc44b5a0840be594fbc0f960be09050f2617e61e6aa43bef97cd3ef4" "checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" -"checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" "checksum wasm-bindgen 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "5205e9afdf42282b192e2310a5b463a6d1c1d774e30dc3c791ac37ab42d2616c" "checksum wasm-bindgen-backend 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "11cdb95816290b525b32587d76419facd99662a07e59d3cdb560488a819d9a45" "checksum wasm-bindgen-macro 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "574094772ce6921576fb6f2e3f7497b8a76273b6db092be18fc48a082de09dc3" diff --git a/Cargo.toml b/Cargo.toml index 501afab..21c3bd8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,8 @@ edition = "2018" members = [ "enterprise-compiler", "enterprise-macros", + "symbol", + "examples/helloworld", ] diff --git a/enterprise-compiler/Cargo.toml b/enterprise-compiler/Cargo.toml index 9d372d4..ee138d4 100644 --- a/enterprise-compiler/Cargo.toml +++ b/enterprise-compiler/Cargo.toml @@ -4,9 +4,6 @@ version = "0.1.0" authors = ["Michael Zhang "] edition = "2018" -[lib] -proc-macro = true - [dependencies] bimap = "0.4.0" lazy_static = "1.4.0" @@ -14,5 +11,8 @@ maplit = "1.0.2" petgraph = "0.5.0" proc-macro2 = "1.0.8" quote = "1.0.2" +serde = "1.0.104" +serde_derive = "1.0.104" spin = "0.5.2" -syn = { version = "1.0.14", features = ["extra-traits", "full"] } +symbol = { path = "../symbol" } +syn = { version = "1.0.14", features = ["extra-traits", "full"] } \ No newline at end of file diff --git a/enterprise-compiler/src/lib.rs b/enterprise-compiler/src/lib.rs index b21d09b..b5c8f6e 100644 --- a/enterprise-compiler/src/lib.rs +++ b/enterprise-compiler/src/lib.rs @@ -2,20 +2,19 @@ extern crate quote; #[macro_use] extern crate maplit; -extern crate proc_macro; +#[macro_use] +extern crate serde_derive; -mod symbol; -mod model; +pub mod model; mod visitor; use std::collections::HashMap; -use proc_macro2::TokenStream; -use syn::Expr; - -use crate::symbol::Symbol; -use crate::visitor::{Visitor}; use crate::model::{Elem, Rsx, TagLhs}; +use crate::visitor::Visitor; +use proc_macro2::TokenStream; +use symbol::Symbol; +use syn::Expr; fn process( name: impl AsRef, @@ -88,34 +87,34 @@ fn process( } } -#[proc_macro] -pub fn example(_input_tokens: proc_macro::TokenStream) -> proc_macro::TokenStream { - let helloworld_datamodel: HashMap = hashmap! { - "name".into() => "String".into(), - }; +// #[proc_macro] +// pub fn example(_input_tokens: proc_macro::TokenStream) -> proc_macro::TokenStream { +// let helloworld_datamodel: HashMap = hashmap! { +// "name".into() => "String".into(), +// }; - let helloworld_datainit: HashMap = hashmap! { - "name".into() => "\"world\".into()".into(), - }; +// let helloworld_datainit: HashMap = hashmap! { +// "name".into() => "\"world\".into()".into(), +// }; - let helloworld_dom = vec![ - Rsx::Elem(Elem { - tag: "input".into(), - attrs: hashmap! { - TagLhs::Bind("value".into()) => "name".into(), - }, - inner: vec![], - }), - Rsx::Text("Hello, ".into()), - Rsx::Code(Box::new(syn::parse_str::("name").unwrap())), - Rsx::Text("!".into()), - ]; +// let helloworld_dom = vec![ +// Rsx::Elem(Elem { +// tag: "input".into(), +// attrs: hashmap! { +// TagLhs::Bind("value".into()) => "name".into(), +// }, +// inner: vec![], +// }), +// Rsx::Text("Hello, ".into()), +// Rsx::Code(Box::new(syn::parse_str::("name").unwrap())), +// Rsx::Text("!".into()), +// ]; - process( - "HelloWorld", - &helloworld_datamodel, - &helloworld_datainit, - &helloworld_dom, - ) - .into() -} +// process( +// "HelloWorld", +// &helloworld_datamodel, +// &helloworld_datainit, +// &helloworld_dom, +// ) +// .into() +// } diff --git a/enterprise-compiler/src/model.rs b/enterprise-compiler/src/model.rs index d1f5bf5..fc2b2fc 100644 --- a/enterprise-compiler/src/model.rs +++ b/enterprise-compiler/src/model.rs @@ -1,10 +1,20 @@ -use crate::symbol::Symbol; use std::collections::HashMap; -use syn::Expr; + +use symbol::Symbol; +use syn::{Expr, Type}; pub type Id = Symbol; -#[derive(Clone, Debug, PartialEq, Eq, Hash)] +pub type ModelMap = HashMap; + +#[derive(Debug)] +pub struct Component { + pub name: String, + pub model: ModelMap, + pub view: Rsx, +} + +#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum TagLhs { Bind(String), // On(String), @@ -47,4 +57,4 @@ impl TaggedRsx { _ => unimplemented!(), } } -} \ No newline at end of file +} diff --git a/enterprise-compiler/src/visitor.rs b/enterprise-compiler/src/visitor.rs index 374451f..ed8af62 100644 --- a/enterprise-compiler/src/visitor.rs +++ b/enterprise-compiler/src/visitor.rs @@ -8,7 +8,7 @@ use proc_macro2::{TokenStream, TokenTree}; use quote::ToTokens; use syn::Expr; -use crate::model::{Id, TaggedRsx, Elem, Rsx, TagLhs}; +use crate::model::{Elem, Id, Rsx, TagLhs, TaggedRsx}; use crate::Symbol; #[derive(Copy, Clone, Debug, Hash, PartialOrd, Ord, PartialEq, Eq)] diff --git a/enterprise-macros-old/Cargo.toml b/enterprise-macros-old/Cargo.toml new file mode 100644 index 0000000..fe87072 --- /dev/null +++ b/enterprise-macros-old/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "enterprise-macros" +version = "0.1.0" +authors = ["Michael Zhang "] +edition = "2018" + +[lib] +proc-macro = true + +[build-dependencies] +lalrpop = "0.17.2" + +[dependencies] +proc-macro2 = { version = "1.0.7", features = ["span-locations"] } +quote = "1.0.2" +thiserror = "1.0.9" +lalrpop-util = "0.17.2" \ No newline at end of file diff --git a/enterprise-macros/build.rs b/enterprise-macros-old/build.rs similarity index 100% rename from enterprise-macros/build.rs rename to enterprise-macros-old/build.rs diff --git a/enterprise-macros/src/ast.rs b/enterprise-macros-old/src/ast.rs similarity index 100% rename from enterprise-macros/src/ast.rs rename to enterprise-macros-old/src/ast.rs diff --git a/enterprise-macros/src/flatten.rs b/enterprise-macros-old/src/flatten.rs similarity index 100% rename from enterprise-macros/src/flatten.rs rename to enterprise-macros-old/src/flatten.rs diff --git a/enterprise-macros-old/src/lib.rs b/enterprise-macros-old/src/lib.rs new file mode 100644 index 0000000..64e156a --- /dev/null +++ b/enterprise-macros-old/src/lib.rs @@ -0,0 +1,80 @@ +extern crate proc_macro; +extern crate thiserror; +#[macro_use] +extern crate lalrpop_util; + +mod ast; +mod flatten; + +mod parser { + #![allow(dead_code, unused_variables, unknown_lints, non_snake_case)] + lalrpop_mod!(pub parser); +} + +use proc_macro2::TokenStream; +use quote::quote; + +use crate::flatten::{Span, TokenType}; +use crate::parser::parser::*; + +#[proc_macro] +pub fn component(input_tokens: proc_macro::TokenStream) -> proc_macro::TokenStream { + let input_tokens: TokenStream = input_tokens.into(); + let tokens = flatten::flatten(input_tokens); + + eprintln!("Tokens:"); + for token in tokens.iter() { + eprintln!("- {:?}", token); + } + eprintln!(); + + let parser = ProgramParser::new(); + let result = parser.parse(tokens); + match result { + Ok(result) => eprintln!("success: {:?}", result), + Err(err) => { + use lalrpop_util::ParseError::*; + match err { + User { ref error } => print!("user error: {:?}", error), + InvalidToken { ref location } => print!("Invalid token at {}", location), + UnrecognizedEOF { + ref location, + ref expected, + } => { + print!("Unrecognized EOF found at {}", location); + fmt_expected(expected) + } + UnrecognizedToken { + token: (ref start, ref token, ref end), + ref expected, + } => { + print!("Unrecognized token `{}` found at {}:{}", token, start, end); + fmt_expected(expected) + } + ExtraToken { + token: (ref start, ref token, ref end), + } => print!("Extra token {} found at {}:{}", token, start, end), + } + } + } + panic!(); + + let result = quote! {}; + result.into() +} + +/// Format a list of expected tokens. +fn fmt_expected(expected: &[String]) { + if !expected.is_empty() { + println!(); + for (i, e) in expected.iter().enumerate() { + let sep = match i { + 0 => "Expected one of", + _ if i < expected.len() - 1 => ",", + // Last expected message to be written + _ => " or", + }; + print!("{} {}", sep, e); + } + } +} diff --git a/enterprise-macros/src/parser.lalrpop b/enterprise-macros-old/src/parser.lalrpop similarity index 100% rename from enterprise-macros/src/parser.lalrpop rename to enterprise-macros-old/src/parser.lalrpop diff --git a/enterprise-macros/Cargo.toml b/enterprise-macros/Cargo.toml index fe87072..70cf499 100644 --- a/enterprise-macros/Cargo.toml +++ b/enterprise-macros/Cargo.toml @@ -7,11 +7,10 @@ edition = "2018" [lib] proc-macro = true -[build-dependencies] -lalrpop = "0.17.2" - [dependencies] proc-macro2 = { version = "1.0.7", features = ["span-locations"] } quote = "1.0.2" thiserror = "1.0.9" -lalrpop-util = "0.17.2" \ No newline at end of file +symbol = { path = "../symbol" } +enterprise-compiler = { path = "../enterprise-compiler" } +syn = { version = "1.0.14", features = ["extra-traits", "full"] } diff --git a/enterprise-macros/src/lib.rs b/enterprise-macros/src/lib.rs index 64e156a..adca18b 100644 --- a/enterprise-macros/src/lib.rs +++ b/enterprise-macros/src/lib.rs @@ -1,80 +1,274 @@ extern crate proc_macro; -extern crate thiserror; #[macro_use] -extern crate lalrpop_util; +extern crate quote; -mod ast; -mod flatten; +use std::collections::HashMap; +use std::iter::FromIterator; +use std::iter::Peekable; -mod parser { - #![allow(dead_code, unused_variables, unknown_lints, non_snake_case)] - lalrpop_mod!(pub parser); +use enterprise_compiler::model::{Component, ModelMap, Rsx}; +use proc_macro2::{ + token_stream::IntoIter, Delimiter, Group, Ident, Punct, Spacing, TokenStream, TokenTree, +}; +use symbol::Symbol; +use syn::{ + parse::{Parse, ParseStream}, + Error as SynError, Expr, Result as SynResult, Token, Type, +}; + +#[derive(Debug)] +enum ParseError { + ExpectedKeyword(Symbol, Ident), + ExpectedIdent(TokenTree), + ExpectedGroup(TokenTree), + ExpectedPunct(TokenTree), + WrongDelimiter(Delimiter, Delimiter), + WrongPunct(Punct, Punct), + Syn(SynError), + UnexpectedEOF, + UnexpectedKeyword, + MissingModel, + MissingView, } -use proc_macro2::TokenStream; -use quote::quote; +impl From for ParseError { + fn from(err: SynError) -> Self { + ParseError::Syn(err) + } +} -use crate::flatten::{Span, TokenType}; -use crate::parser::parser::*; +enum ComponentBlock { + Model(ModelMap), + View(Rsx), +} + +struct Visitor(Peekable); + +impl Visitor { + fn from_tokens(stream: TokenStream) -> Self { + Visitor(stream.into_iter().peekable()) + } + + fn consume_component(&mut self) -> Result, ParseError> { + if let None = self.0.peek() { + return Ok(None); + } + + self.consume_keyword("component")?; + let name = self.consume_ident()?.to_string(); + let def = self.consume_group(Delimiter::Brace)?; + let mut def_visitor = Visitor::from_tokens(def.stream()); + let mut model_map = None; + let mut view = None; + while let Some(block) = def_visitor.next_inner_block()? { + match block { + ComponentBlock::Model(inner) => model_map = Some(inner), + ComponentBlock::View(inner) => view = Some(inner), + } + } + + let model = match model_map { + Some(model_map) => model_map, + None => return Err(ParseError::MissingModel), + }; + let view = match view { + Some(view) => view, + None => return Err(ParseError::MissingView), + }; + Ok(Some(Component { name, model, view })) + } + + fn next_inner_block(&mut self) -> Result, ParseError> { + let next_token = self.0.peek(); + if next_token.is_none() { + return Ok(None); + } + + let next_ident = self.consume_ident()?; + match next_ident.to_string().as_ref() { + "model" => { + let next_group = self.consume_group(Delimiter::Brace)?; + let mut model_visitor = Visitor::from_tokens(next_group.stream()); + println!("SHIET"); + let model_map = model_visitor.consume_model_map()?; + Ok(Some(ComponentBlock::Model(model_map))) + } + "view" => { + let next_group = self.consume_group(Delimiter::Brace)?; + let mut view_visitor = Visitor::from_tokens(next_group.stream()); + let view = view_visitor.consume_view()?; + Ok(Some(ComponentBlock::View(view))) + } + _ => Err(ParseError::UnexpectedKeyword), + } + } + + fn consume_model_map(&mut self) -> Result { + #[derive(Debug)] + struct ModelEntry { + name: Ident, + colon: Token![:], + ty: Type, + eq: Token![=], + init: Expr, + } + + impl Parse for ModelEntry { + fn parse(input: ParseStream) -> SynResult { + Ok(ModelEntry { + name: input.parse()?, + colon: input.parse()?, + ty: input.parse()?, + eq: input.parse()?, + init: input.parse()?, + }) + } + } + + let mut single_def = || -> Result, ParseError> { + let next_token = self.0.peek(); + if next_token.is_none() { + return Ok(None); + } + + // read until comma or end + let mut buf = Vec::new(); + let mut hit_comma = false; + loop { + let next_token = self.0.peek(); + if next_token.is_none() { + break; + } + let next_token = self.0.next().expect("unreachable"); + if let TokenTree::Punct(ref punct) = next_token { + if punct.as_char() == ',' && punct.spacing() == Spacing::Alone { + hit_comma = true; + break; + } + } + buf.push(next_token); + } + + // probably shouldn't happen? + if buf.len() == 0 { + return Ok(None); + } + + let stream = TokenStream::from_iter(buf); + let item = syn::parse2::(stream)?; + println!("ITEM: {:?}", item); + + Ok(Some(( + Symbol::from(item.name.to_string()), + item.ty, + item.init, + hit_comma, + ))) + }; + + let mut map = HashMap::new(); + while let Some((name, ty, init, comma)) = single_def()? { + map.insert(name, (ty, init)); + if comma { + break; + } + } + Ok(map) + } + + fn consume_view(&mut self) -> Result { + let lt = self.consume_punct(Some(Punct::new('<', Spacing::Alone)))?; + let gt = self.consume_punct(Some(Punct::new('>', Spacing::Alone)))?; + Ok(Rsx::Text(String::new())) + } + + fn consume_keyword(&mut self, keyword: impl AsRef) -> Result<(), ParseError> { + let keyword = keyword.as_ref(); + let ident = self.consume_ident()?; + let ident_str = ident.to_string(); + + if keyword == &ident_str { + Ok(()) + } else { + Err(ParseError::ExpectedKeyword(Symbol::from(keyword), ident)) + } + } + + fn consume_punct(&mut self, equals: Option) -> Result { + let next_token = self.0.peek(); + if next_token.is_none() { + return Err(ParseError::UnexpectedEOF); + } + + let next_token = self.0.next().expect("unreachable"); + if let TokenTree::Punct(punct) = next_token { + if let Some(equals) = equals { + if punct.as_char() == equals.as_char() && punct.spacing() == equals.spacing() { + Ok(punct) + } else { + Err(ParseError::WrongPunct(equals, punct)) + } + } else { + Ok(punct) + } + } else { + Err(ParseError::ExpectedPunct(next_token)) + } + } + + fn consume_ident(&mut self) -> Result { + let next_token = self.0.peek(); + if next_token.is_none() { + return Err(ParseError::UnexpectedEOF); + } + + let next_token = self.0.next().expect("unreachable"); + if let TokenTree::Ident(ident) = next_token { + Ok(ident) + } else { + Err(ParseError::ExpectedIdent(next_token)) + } + } + + fn consume_group(&mut self, delimiter: Delimiter) -> Result { + let next_token = self.0.peek(); + if next_token.is_none() { + return Err(ParseError::UnexpectedEOF); + } + + let next_token = self.0.next().expect("unreachable"); + if let TokenTree::Group(group) = next_token { + if delimiter == group.delimiter() { + Ok(group) + } else { + Err(ParseError::WrongDelimiter(delimiter, group.delimiter())) + } + } else { + Err(ParseError::ExpectedGroup(next_token)) + } + } +} + +impl Iterator for Visitor { + type Item = Result; + + fn next(&mut self) -> Option { + match self.consume_component() { + Ok(Some(component)) => Some(Ok(component)), + Ok(None) => None, + Err(err) => Some(Err(err)), + } + } +} #[proc_macro] pub fn component(input_tokens: proc_macro::TokenStream) -> proc_macro::TokenStream { let input_tokens: TokenStream = input_tokens.into(); - let tokens = flatten::flatten(input_tokens); - - eprintln!("Tokens:"); - for token in tokens.iter() { - eprintln!("- {:?}", token); - } - eprintln!(); - - let parser = ProgramParser::new(); - let result = parser.parse(tokens); - match result { - Ok(result) => eprintln!("success: {:?}", result), - Err(err) => { - use lalrpop_util::ParseError::*; - match err { - User { ref error } => print!("user error: {:?}", error), - InvalidToken { ref location } => print!("Invalid token at {}", location), - UnrecognizedEOF { - ref location, - ref expected, - } => { - print!("Unrecognized EOF found at {}", location); - fmt_expected(expected) - } - UnrecognizedToken { - token: (ref start, ref token, ref end), - ref expected, - } => { - print!("Unrecognized token `{}` found at {}:{}", token, start, end); - fmt_expected(expected) - } - ExtraToken { - token: (ref start, ref token, ref end), - } => print!("Extra token {} found at {}:{}", token, start, end), - } - } + println!("TOKENS: {:?}", input_tokens); + let visitor = Visitor::from_tokens(input_tokens); + for component in visitor { + println!("- {:?}", component); } panic!(); - - let result = quote! {}; - result.into() -} - -/// Format a list of expected tokens. -fn fmt_expected(expected: &[String]) { - if !expected.is_empty() { - println!(); - for (i, e) in expected.iter().enumerate() { - let sep = match i { - 0 => "Expected one of", - _ if i < expected.len() - 1 => ",", - // Last expected message to be written - _ => " or", - }; - print!("{} {}", sep, e); - } - } + (quote! {}).into() } diff --git a/examples/helloworld/src/build.rs b/examples/helloworld/src/build.rs index e697a1d..b4699ef 100644 --- a/examples/helloworld/src/build.rs +++ b/examples/helloworld/src/build.rs @@ -3,9 +3,15 @@ extern crate enterprise_macros; component! { component HelloWorld { + model { + name: String = "hello", + } + view { + + Hello, {name}! + } } } -fn main() { -} +fn main() {} diff --git a/src/lib.rs b/src/lib.rs index 0fbbf97..ea24e84 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,8 +11,6 @@ pub extern crate stdweb; mod backend; pub mod compiler; -pub use enterprise_compiler::example; - pub use crate::backend::{Backend, Web}; /// Components are the building-blocks of enterprise applications. diff --git a/symbol/Cargo.toml b/symbol/Cargo.toml new file mode 100644 index 0000000..399ea7b --- /dev/null +++ b/symbol/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "symbol" +version = "0.1.0" +authors = ["Michael Zhang "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +lazy_static = "1.4.0" +spin = "0.5.2" diff --git a/enterprise-compiler/src/symbol.rs b/symbol/src/lib.rs similarity index 98% rename from enterprise-compiler/src/symbol.rs rename to symbol/src/lib.rs index d8b0977..c9d1b35 100644 --- a/enterprise-compiler/src/symbol.rs +++ b/symbol/src/lib.rs @@ -1,4 +1,4 @@ -// https://github.com/remexre/symbol-rs +// cribbed from https://github.com/remexre/symbol-rs use std::cmp::Ordering; use std::collections::BTreeSet;