1
0
Fork 0
mirror of synced 2025-09-23 12:18:44 +00:00

change to file import, mock code generation, mock output count, wip

This commit is contained in:
schaeff 2021-11-08 10:49:06 +01:00
parent d924368038
commit 54a1b920db
20 changed files with 895 additions and 89 deletions

543
Cargo.lock generated
View file

@ -309,9 +309,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb5b856a29bea7b810858116a596beee3d20fc4c5aeb240e8e5a8bca4845a470"
dependencies = [
"rand 0.7.3",
"rand_xorshift",
"rand_xorshift 0.2.0",
]
[[package]]
name = "arrayref"
version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
[[package]]
name = "arrayvec"
version = "0.4.12"
@ -321,6 +327,21 @@ dependencies = [
"nodrop",
]
[[package]]
name = "arrayvec"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
[[package]]
name = "ascii-canvas"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff8eb72df928aafb99fe5d37b383f2fe25bd2a765e3e5f7c365916b6f2463a29"
dependencies = [
"term",
]
[[package]]
name = "assert_cli"
version = "0.5.4"
@ -346,6 +367,12 @@ dependencies = [
"winapi",
]
[[package]]
name = "autocfg"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"
[[package]]
name = "autocfg"
version = "1.0.1"
@ -367,6 +394,12 @@ dependencies = [
"rustc-demangle",
]
[[package]]
name = "base64"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
[[package]]
name = "bellman_ce"
version = "0.3.5"
@ -395,6 +428,15 @@ dependencies = [
"serde",
]
[[package]]
name = "bit-set"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de"
dependencies = [
"bit-vec",
]
[[package]]
name = "bit-vec"
version = "0.6.3"
@ -424,11 +466,22 @@ version = "0.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdc60350286c7c3db13b98e91dbe5c8b6830a6821bc20af5b0c310ce94d74915"
dependencies = [
"arrayvec",
"arrayvec 0.4.12",
"byteorder",
"constant_time_eq",
]
[[package]]
name = "blake2b_simd"
version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587"
dependencies = [
"arrayref",
"arrayvec 0.5.2",
"constant_time_eq",
]
[[package]]
name = "block-buffer"
version = "0.7.3"
@ -547,12 +600,21 @@ dependencies = [
"ansi_term",
"atty",
"bitflags",
"strsim",
"strsim 0.8.0",
"textwrap",
"unicode-width",
"vec_map",
]
[[package]]
name = "cloudabi"
version = "0.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
dependencies = [
"bitflags",
]
[[package]]
name = "cmake"
version = "0.1.45"
@ -562,6 +624,25 @@ dependencies = [
"cc",
]
[[package]]
name = "codespan"
version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ebaf6bb6a863ad6aa3a18729e9710c53d75df03306714d9cc1f7357a00cd789"
dependencies = [
"codespan-reporting",
]
[[package]]
name = "codespan-reporting"
version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e0762455306b1ed42bc651ef6a2197aabda5e1d4a43c34d5eab5c1a3634e81d"
dependencies = [
"termcolor",
"unicode-width",
]
[[package]]
name = "colored"
version = "1.9.3"
@ -609,7 +690,7 @@ dependencies = [
"crossbeam-deque",
"crossbeam-epoch",
"crossbeam-queue",
"crossbeam-utils",
"crossbeam-utils 0.7.2",
]
[[package]]
@ -618,7 +699,7 @@ version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87"
dependencies = [
"crossbeam-utils",
"crossbeam-utils 0.7.2",
"maybe-uninit",
]
@ -629,7 +710,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c20ff29ded3204c5106278a81a38f4b482636ed4fa1e6cfbeef193291beb29ed"
dependencies = [
"crossbeam-epoch",
"crossbeam-utils",
"crossbeam-utils 0.7.2",
"maybe-uninit",
]
@ -639,9 +720,9 @@ version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace"
dependencies = [
"autocfg",
"autocfg 1.0.1",
"cfg-if 0.1.10",
"crossbeam-utils",
"crossbeam-utils 0.7.2",
"lazy_static",
"maybe-uninit",
"memoffset",
@ -655,7 +736,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570"
dependencies = [
"cfg-if 0.1.10",
"crossbeam-utils",
"crossbeam-utils 0.7.2",
"maybe-uninit",
]
@ -665,11 +746,21 @@ version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
dependencies = [
"autocfg",
"autocfg 1.0.1",
"cfg-if 0.1.10",
"lazy_static",
]
[[package]]
name = "crossbeam-utils"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db"
dependencies = [
"cfg-if 1.0.0",
"lazy_static",
]
[[package]]
name = "crunchy"
version = "0.2.2"
@ -729,6 +820,12 @@ dependencies = [
"syn 1.0.80",
]
[[package]]
name = "diff"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499"
[[package]]
name = "difference"
version = "1.0.0"
@ -759,6 +856,17 @@ dependencies = [
"generic-array 0.14.4",
]
[[package]]
name = "dirs"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901"
dependencies = [
"libc",
"redox_users 0.3.5",
"winapi",
]
[[package]]
name = "dirs"
version = "3.0.2"
@ -775,16 +883,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780"
dependencies = [
"libc",
"redox_users",
"redox_users 0.4.0",
"winapi",
]
[[package]]
name = "docopt"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f3f119846c823f9eafcf953a8f6ffb6ed69bf6240883261a7f13b634579a51f"
dependencies = [
"lazy_static",
"regex 1.5.4",
"serde",
"strsim 0.10.0",
]
[[package]]
name = "either"
version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
[[package]]
name = "ena"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8944dc8fa28ce4a38f778bd46bf7d923fe73eed5a439398507246c8e017e6f36"
dependencies = [
"log",
]
[[package]]
name = "env_logger"
version = "0.9.0"
@ -887,6 +1016,12 @@ dependencies = [
"syn 1.0.80",
]
[[package]]
name = "fixedbitset"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33"
[[package]]
name = "form_urlencoded"
version = "1.0.1"
@ -986,7 +1121,7 @@ version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481"
dependencies = [
"autocfg",
"autocfg 1.0.1",
"futures-channel",
"futures-core",
"futures-io",
@ -1124,6 +1259,15 @@ dependencies = [
"either",
]
[[package]]
name = "itertools"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484"
dependencies = [
"either",
]
[[package]]
name = "itoa"
version = "0.4.8"
@ -1148,11 +1292,48 @@ dependencies = [
"wasm-bindgen",
]
[[package]]
name = "lalrpop"
version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "de5e019883a6e9734d093f34216a3857160c6bc2a9a1ec196a177aaa737c74af"
dependencies = [
"ascii-canvas",
"atty",
"bit-set",
"diff",
"docopt",
"ena",
"itertools 0.8.2",
"lalrpop-util",
"petgraph",
"regex 1.5.4",
"regex-syntax 0.6.25",
"serde",
"serde_derive",
"sha2 0.8.2",
"string_cache",
"term",
"unicode-xid 0.2.2",
]
[[package]]
name = "lalrpop-util"
version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d6e9bc1801eb54529fd6a020aaf9514e8193bb6b42d96d0fe7da99187efa93d"
dependencies = [
"regex 1.5.4",
]
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
dependencies = [
"spin",
]
[[package]]
name = "libc"
@ -1174,6 +1355,12 @@ dependencies = [
"pkg-config",
]
[[package]]
name = "libm"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a"
[[package]]
name = "libssh2-sys"
version = "0.2.23"
@ -1239,7 +1426,7 @@ version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa"
dependencies = [
"autocfg",
"autocfg 1.0.1",
]
[[package]]
@ -1249,9 +1436,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
dependencies = [
"adler",
"autocfg",
"autocfg 1.0.1",
]
[[package]]
name = "new_debug_unreachable"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
[[package]]
name = "nodrop"
version = "0.1.14"
@ -1275,7 +1468,7 @@ version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304"
dependencies = [
"autocfg",
"autocfg 1.0.1",
"num-integer",
"num-traits 0.2.14",
"serde",
@ -1287,18 +1480,36 @@ version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74e768dff5fb39a41b3bcd30bb25cf989706c90d028d1ad71971987aa309d535"
dependencies = [
"autocfg",
"autocfg 1.0.1",
"num-integer",
"num-traits 0.2.14",
]
[[package]]
name = "num-bigint-dig"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d51546d704f52ef14b3c962b5776e53d5b862e5790e40a350d366c209bd7f7a"
dependencies = [
"autocfg 0.1.7",
"byteorder",
"lazy_static",
"libm",
"num-integer",
"num-iter",
"num-traits 0.2.14",
"rand 0.7.3",
"serde",
"smallvec",
]
[[package]]
name = "num-integer"
version = "0.1.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
dependencies = [
"autocfg",
"autocfg 1.0.1",
"num-traits 0.2.14",
]
@ -1308,7 +1519,7 @@ version = "0.1.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59"
dependencies = [
"autocfg",
"autocfg 1.0.1",
"num-integer",
"num-traits 0.2.14",
]
@ -1328,7 +1539,7 @@ version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
dependencies = [
"autocfg",
"autocfg 1.0.1",
]
[[package]]
@ -1380,13 +1591,19 @@ version = "0.9.67"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69df2d8dfc6ce3aaf44b40dec6f487d5a886516cf6879c49e98e0710f310a058"
dependencies = [
"autocfg",
"autocfg 1.0.1",
"cc",
"libc",
"pkg-config",
"vcpkg",
]
[[package]]
name = "ordermap"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a86ed3f5f244b372d6b1a00b72ef7f8876d0bc6a78a4c9985c53614041512063"
[[package]]
name = "output_vt100"
version = "0.1.2"
@ -1407,6 +1624,21 @@ dependencies = [
"rand 0.4.6",
]
[[package]]
name = "parser"
version = "0.1.0"
dependencies = [
"lalrpop",
"lalrpop-util",
"num-bigint-dig",
"num-traits 0.2.14",
"program_structure",
"regex 1.5.4",
"rustc-hex",
"serde",
"serde_derive",
]
[[package]]
name = "percent-encoding"
version = "2.1.0"
@ -1428,7 +1660,7 @@ version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fbf404899169771dd6a32c84248b83cd67a26cc7cc957aac87661490e1227e4"
dependencies = [
"itertools",
"itertools 0.7.11",
"proc-macro2 0.4.30",
"quote 0.6.13",
"single",
@ -1469,6 +1701,35 @@ dependencies = [
"sha-1",
]
[[package]]
name = "petgraph"
version = "0.4.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c3659d1ee90221741f65dd128d9998311b0e40c5d3c23a62445938214abce4f"
dependencies = [
"fixedbitset",
"ordermap",
]
[[package]]
name = "phf_generator"
version = "0.7.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662"
dependencies = [
"phf_shared",
"rand 0.6.5",
]
[[package]]
name = "phf_shared"
version = "0.7.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0"
dependencies = [
"siphasher",
]
[[package]]
name = "pin-project-lite"
version = "0.2.7"
@ -1493,6 +1754,12 @@ version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
[[package]]
name = "precomputed-hash"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
[[package]]
name = "pretty_assertions"
version = "0.6.1"
@ -1523,6 +1790,20 @@ dependencies = [
"unicode-xid 0.2.2",
]
[[package]]
name = "program_structure"
version = "0.1.0"
dependencies = [
"codespan",
"codespan-reporting",
"num-bigint-dig",
"num-traits 0.2.14",
"regex 1.5.4",
"rustc-hex",
"serde",
"serde_derive",
]
[[package]]
name = "pulldown-cmark"
version = "0.8.0"
@ -1565,6 +1846,25 @@ dependencies = [
"winapi",
]
[[package]]
name = "rand"
version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
dependencies = [
"autocfg 0.1.7",
"libc",
"rand_chacha 0.1.1",
"rand_core 0.4.2",
"rand_hc 0.1.0",
"rand_isaac",
"rand_jitter",
"rand_os",
"rand_pcg",
"rand_xorshift 0.1.1",
"winapi",
]
[[package]]
name = "rand"
version = "0.7.3"
@ -1590,6 +1890,16 @@ dependencies = [
"rand_hc 0.3.1",
]
[[package]]
name = "rand_chacha"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
dependencies = [
"autocfg 0.1.7",
"rand_core 0.3.1",
]
[[package]]
name = "rand_chacha"
version = "0.2.2"
@ -1643,6 +1953,15 @@ dependencies = [
"getrandom 0.2.3",
]
[[package]]
name = "rand_hc"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
dependencies = [
"rand_core 0.3.1",
]
[[package]]
name = "rand_hc"
version = "0.2.0"
@ -1661,6 +1980,59 @@ dependencies = [
"rand_core 0.6.3",
]
[[package]]
name = "rand_isaac"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
dependencies = [
"rand_core 0.3.1",
]
[[package]]
name = "rand_jitter"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
dependencies = [
"libc",
"rand_core 0.4.2",
"winapi",
]
[[package]]
name = "rand_os"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
dependencies = [
"cloudabi",
"fuchsia-cprng",
"libc",
"rand_core 0.4.2",
"rdrand",
"winapi",
]
[[package]]
name = "rand_pcg"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
dependencies = [
"autocfg 0.1.7",
"rand_core 0.4.2",
]
[[package]]
name = "rand_xorshift"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
dependencies = [
"rand_core 0.3.1",
]
[[package]]
name = "rand_xorshift"
version = "0.2.0"
@ -1679,6 +2051,12 @@ dependencies = [
"rand_core 0.3.1",
]
[[package]]
name = "redox_syscall"
version = "0.1.57"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
[[package]]
name = "redox_syscall"
version = "0.2.10"
@ -1688,6 +2066,17 @@ dependencies = [
"bitflags",
]
[[package]]
name = "redox_users"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d"
dependencies = [
"getrandom 0.1.16",
"redox_syscall 0.1.57",
"rust-argon2",
]
[[package]]
name = "redox_users"
version = "0.4.0"
@ -1695,7 +2084,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
dependencies = [
"getrandom 0.2.3",
"redox_syscall",
"redox_syscall 0.2.10",
]
[[package]]
@ -1758,12 +2147,30 @@ dependencies = [
"winapi",
]
[[package]]
name = "rust-argon2"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb"
dependencies = [
"base64",
"blake2b_simd",
"constant_time_eq",
"crossbeam-utils 0.8.5",
]
[[package]]
name = "rustc-demangle"
version = "0.1.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
[[package]]
name = "rustc-hex"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6"
[[package]]
name = "rustc_version"
version = "0.3.3"
@ -1913,6 +2320,12 @@ dependencies = [
"failure",
]
[[package]]
name = "siphasher"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac"
[[package]]
name = "skeptic"
version = "0.13.6"
@ -1934,12 +2347,64 @@ version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590"
[[package]]
name = "smallvec"
version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309"
[[package]]
name = "spin"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
[[package]]
name = "string_cache"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89c058a82f9fd69b1becf8c274f412281038877c553182f1d02eb027045a2d67"
dependencies = [
"lazy_static",
"new_debug_unreachable",
"phf_shared",
"precomputed-hash",
"serde",
"string_cache_codegen",
"string_cache_shared",
]
[[package]]
name = "string_cache_codegen"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0f45ed1b65bf9a4bf2f7b7dc59212d1926e9eaf00fa998988e420fd124467c6"
dependencies = [
"phf_generator",
"phf_shared",
"proc-macro2 1.0.29",
"quote 1.0.10",
"string_cache_shared",
]
[[package]]
name = "string_cache_shared"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1884d1bc09741d466d9b14e6d37ac89d6909cbcac41dd9ae982d4d063bbedfc"
[[package]]
name = "strsim"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
[[package]]
name = "strsim"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]]
name = "subtle"
version = "2.4.1"
@ -1999,11 +2464,22 @@ dependencies = [
"cfg-if 1.0.0",
"libc",
"rand 0.8.4",
"redox_syscall",
"redox_syscall 0.2.10",
"remove_dir_all",
"winapi",
]
[[package]]
name = "term"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "edd106a334b7657c10b7c540a0106114feadeb4dc314513e97df481d5d966f42"
dependencies = [
"byteorder",
"dirs 1.0.5",
"winapi",
]
[[package]]
name = "termcolor"
version = "1.1.2"
@ -2084,6 +2560,15 @@ version = "0.1.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4"
[[package]]
name = "type_analysis"
version = "0.1.0"
dependencies = [
"num-bigint-dig",
"num-traits 0.2.14",
"program_structure",
]
[[package]]
name = "typed-arena"
version = "1.7.0"
@ -2378,6 +2863,15 @@ dependencies = [
"zokrates_field",
]
[[package]]
name = "zokrates_circom"
version = "0.1.0"
dependencies = [
"parser",
"program_structure",
"type_analysis",
]
[[package]]
name = "zokrates_cli"
version = "0.7.7"
@ -2386,7 +2880,7 @@ dependencies = [
"bincode",
"cfg-if 0.1.10",
"clap",
"dirs",
"dirs 3.0.2",
"env_logger",
"fs_extra",
"glob 0.2.11",
@ -2445,6 +2939,7 @@ dependencies = [
"sha2 0.9.8",
"typed-arena",
"wasm-bindgen-test",
"zokrates_circom",
"zokrates_common",
"zokrates_embed",
"zokrates_field",

View file

@ -10,6 +10,7 @@ members = [
"zokrates_abi",
"zokrates_test",
"zokrates_core_test",
"zokrates_circom",
]
exclude = ["zokrates_js"]

11
circuit.circom Normal file
View file

@ -0,0 +1,11 @@
pragma circom 2.0.0;
template Multiplier2(){
//Declaration of signals
signal input in1;
signal input in2;
signal output out;
out <== in1 * in2;
}
component main {public [in1,in2]} = Multiplier2();

5
test.zok Normal file
View file

@ -0,0 +1,5 @@
from "./circuit.circom" import main as multiply
def main(field a, field b) -> field:
field out = multiply(a, b)
return out

View file

@ -0,0 +1,11 @@
[package]
name = "zokrates_circom"
version = "0.1.0"
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
program_structure = { path = "../../circom/program_structure" }
type_analysis = { path = "../../circom/type_analysis" }
parser = { path = "../../circom/parser" }

109
zokrates_circom/src/lib.rs Normal file
View file

@ -0,0 +1,109 @@
use parser::parser_logic;
use program_structure::file_definition::FileLibrary;
use program_structure::program_archive::ProgramArchive;
use std::fmt;
pub fn parse(src: &str) -> CircomModule {
let file_library = FileLibrary::new();
let mut definitions = Vec::new();
let mut main_components = Vec::new();
let file_id = 0;
let program = parser_logic::parse_file(&src, file_id)
.map_err(|_| ())
.unwrap();
if let Some(main) = program.main_component {
main_components.push((file_id, main));
}
let includes = program.includes;
assert_eq!(includes.len(), 0);
definitions.push((file_id, program.definitions));
assert!(main_components.len() == 1);
let (main_id, main_component) = main_components.pop().unwrap();
let result_program_archive =
ProgramArchive::new(file_library, main_id, main_component, definitions);
CircomModule {
program: result_program_archive.map_err(|_| ()).unwrap(),
span: src,
}
}
pub fn check(p: CircomModule) -> CircomModule {
let mut p = p;
type_analysis::check_types::check_types(&mut p.program)
.map_err(|_| ())
.unwrap();
p
}
pub fn get_output_count(p: &CircomModule) -> usize {
// match &p.program.initial_template_call {
// program_structure::abstract_syntax_tree::ast::Expression::Call {
// meta: _,
// id: _,
// args,
// } => dbg!(args.len()),
// _ => {
// unimplemented!();
// }
// }
1
}
pub fn get_input_count(p: &CircomModule) -> usize {
p.program.public_inputs.len()
}
/// A circom module as a ProgramArchive
#[derive(Clone)]
pub struct CircomModule<'ast> {
pub span: &'ast str,
pub program: ProgramArchive,
}
impl<'ast> fmt::Debug for CircomModule<'ast> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.span)
}
}
impl<'ast> fmt::Display for CircomModule<'ast> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.span)
}
}
impl<'ast> PartialEq for CircomModule<'ast> {
fn eq(&self, other: &Self) -> bool {
self.span.eq(other.span)
}
}
impl<'ast> Eq for CircomModule<'ast> {}
impl<'ast> PartialOrd for CircomModule<'ast> {
fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
self.span.partial_cmp(other.span)
}
}
impl<'ast> Ord for CircomModule<'ast> {
fn cmp(&self, other: &Self) -> std::cmp::Ordering {
self.partial_cmp(other).unwrap()
}
}
impl<'ast> std::hash::Hash for CircomModule<'ast> {
fn hash<H: std::hash::Hasher>(&self, hasher: &mut H) {
self.span.hash(hasher);
}
}

View file

@ -33,6 +33,7 @@ zokrates_field = { version = "0.4.0", path = "../zokrates_field", default-featur
zokrates_pest_ast = { version = "0.2.0", path = "../zokrates_pest_ast" }
zokrates_common = { path = "../zokrates_common" }
zokrates_embed = { version = "0.1.0", path = "../zokrates_embed" }
zokrates_circom = { version = "0.1.0", path = "../zokrates_circom" }
getrandom = { version = "0.2", features = ["js"] }
rand_0_4 = { version = "0.4", package = "rand" }
rand_0_7 = { version = "0.7", package = "rand" }

View file

@ -4,9 +4,9 @@ use num_bigint::BigUint;
use std::path::Path;
use zokrates_pest_ast as pest;
impl<'ast> From<pest::File<'ast>> for absy::Module<'ast> {
fn from(file: pest::File<'ast>) -> absy::Module<'ast> {
absy::Module::with_symbols(file.declarations.into_iter().flat_map(|d| match d {
impl<'ast> From<pest::File<'ast>> for absy::ZokModule<'ast> {
fn from(file: pest::File<'ast>) -> absy::ZokModule<'ast> {
absy::ZokModule::with_symbols(file.declarations.into_iter().flat_map(|d| match d {
pest::SymbolDeclaration::Import(i) => import_directive_to_symbol_vec(i),
pest::SymbolDeclaration::Constant(c) => vec![c.into()],
pest::SymbolDeclaration::Struct(s) => vec![s.into()],

View file

@ -22,6 +22,7 @@ use std::fmt;
use num_bigint::BigUint;
use std::collections::HashMap;
use zokrates_circom::CircomModule;
/// An identifier of a function or a variable
pub type Identifier<'ast> = &'ast str;
@ -140,7 +141,7 @@ pub enum SymbolDefinition<'ast> {
pub enum Symbol<'ast> {
Here(SymbolDefinition<'ast>),
There(SymbolImportNode<'ast>),
Flat(FlatEmbed),
Flat(FlatEmbed<'ast>),
}
impl<'ast> fmt::Display for SymbolDeclaration<'ast> {
@ -179,16 +180,22 @@ impl<'ast> fmt::Display for SymbolDeclaration<'ast> {
pub type SymbolDeclarationNode<'ast> = Node<SymbolDeclaration<'ast>>;
/// A module as a collection of `FunctionDeclaration`s
#[derive(Debug, Clone, PartialEq)]
pub struct Module<'ast> {
pub enum Module<'ast> {
Zok(ZokModule<'ast>),
Circom(CircomModule<'ast>),
}
/// A zokrates module as a collection of `FunctionDeclaration`s
#[derive(Debug, Clone, PartialEq)]
pub struct ZokModule<'ast> {
/// Symbols of the module
pub symbols: Declarations<'ast>,
}
impl<'ast> Module<'ast> {
impl<'ast> ZokModule<'ast> {
pub fn with_symbols<I: IntoIterator<Item = SymbolDeclarationNode<'ast>>>(i: I) -> Self {
Module {
ZokModule {
symbols: i.into_iter().collect(),
}
}
@ -252,7 +259,7 @@ impl<'ast> fmt::Display for ConstantDefinition<'ast> {
}
}
impl<'ast> fmt::Display for Module<'ast> {
impl<'ast> fmt::Display for ZokModule<'ast> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let res = self
.symbols
@ -263,6 +270,15 @@ impl<'ast> fmt::Display for Module<'ast> {
}
}
impl<'ast> fmt::Display for Module<'ast> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Module::Zok(m) => write!(f, "{}", m),
Module::Circom(m) => write!(f, "{}", m),
}
}
}
pub type ConstantGenericNode<'ast> = Node<Identifier<'ast>>;
/// A function defined locally

View file

@ -3,7 +3,7 @@
//! @file compile.rs
//! @author Thibaut Schaeffer <thibaut@schaeff.fr>
//! @date 2018
use crate::absy::{Module, OwnedModuleId, Program};
use crate::absy::{Module, OwnedModuleId, Program, ZokModule};
use crate::flatten::Flattener;
use crate::imports::{self, Importer};
use crate::ir;
@ -273,7 +273,7 @@ pub fn parse_program<'ast, T: Field, E: Into<imports::Error>>(
let main = parse_module::<T, E>(source, location.clone(), resolver, &mut modules, arena)?;
modules.insert(location.clone(), main);
modules.insert(location.clone(), Module::Zok(main));
Ok(Program {
main: location,
@ -287,7 +287,7 @@ pub fn parse_module<'ast, T: Field, E: Into<imports::Error>>(
resolver: Option<&dyn Resolver<E>>,
modules: &mut HashMap<OwnedModuleId, Module<'ast>>,
arena: &'ast Arena<String>,
) -> Result<Module<'ast>, CompileErrors> {
) -> Result<ZokModule<'ast>, CompileErrors> {
log::debug!("Generate pest AST for {}", location.display());
let ast = pest::generate_ast(source)
@ -300,7 +300,7 @@ pub fn parse_module<'ast, T: Field, E: Into<imports::Error>>(
log::debug!("Generate absy for {}", location.display());
let module_without_imports: Module = Module::from(ast);
let module_without_imports: ZokModule = ZokModule::from(ast);
log::debug!("Apply imports to absy for {}", location.display());

View file

@ -12,6 +12,7 @@ use crate::typed_absy::types::{
GenericIdentifier,
};
use std::collections::HashMap;
use zokrates_circom::CircomModule;
use zokrates_field::Field;
cfg_if::cfg_if! {
@ -30,8 +31,8 @@ cfg_if::cfg_if! {
/// A low level function that contains non-deterministic introduction of variables. It is carried out as is until
/// the flattening step when it can be inlined.
#[derive(Debug, Clone, PartialEq, Eq, Hash, Copy, PartialOrd, Ord)]
pub enum FlatEmbed {
#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum FlatEmbed<'ast> {
BitArrayLe,
Unpack,
U8ToBits,
@ -46,11 +47,13 @@ pub enum FlatEmbed {
Sha256Round,
#[cfg(feature = "ark")]
SnarkVerifyBls12377,
Circom(CircomModule<'ast>),
}
impl FlatEmbed {
impl<'ast> FlatEmbed<'ast> {
pub fn signature(&self) -> UnresolvedSignature {
match self {
FlatEmbed::Circom(_) => unreachable!(),
FlatEmbed::BitArrayLe => UnresolvedSignature::new()
.generics(vec![ConstantGenericNode::mock("N")])
.inputs(vec![
@ -173,8 +176,19 @@ impl FlatEmbed {
}
}
pub fn typed_signature<T>(&self) -> DeclarationSignature<'static, T> {
pub fn typed_signature<T>(&self) -> DeclarationSignature<'ast, T> {
match self {
FlatEmbed::Circom(module) => DeclarationSignature::new()
.inputs(
(0..zokrates_circom::get_input_count(&module))
.map(|_| DeclarationType::FieldElement)
.collect(),
)
.outputs(
(0..zokrates_circom::get_output_count(&module))
.map(|_| DeclarationType::FieldElement)
.collect(),
),
FlatEmbed::BitArrayLe => DeclarationSignature::new()
.generics(vec![Some(DeclarationConstant::Generic(
GenericIdentifier {
@ -305,7 +319,7 @@ impl FlatEmbed {
}
}
pub fn generics<'ast, T>(&self, assignment: &ConcreteGenericsAssignment<'ast>) -> Vec<u32> {
pub fn generics<T>(&self, assignment: &ConcreteGenericsAssignment<'ast>) -> Vec<u32> {
let gen = self.typed_signature().generics.into_iter().map(
|c: Option<DeclarationConstant<'ast, T>>| match c.unwrap() {
DeclarationConstant::Generic(g) => g,
@ -333,6 +347,7 @@ impl FlatEmbed {
FlatEmbed::Sha256Round => "_SHA256_ROUND",
#[cfg(feature = "ark")]
FlatEmbed::SnarkVerifyBls12377 => "_SNARK_VERIFY_BLS12_377",
FlatEmbed::Circom(_) => "_CIRCOM",
}
}
@ -344,6 +359,24 @@ impl FlatEmbed {
FlatEmbed::Sha256Round => sha256_round(),
#[cfg(feature = "ark")]
FlatEmbed::SnarkVerifyBls12377 => snark_verify_bls12_377(generics[0] as usize),
FlatEmbed::Circom(_) => FlatFunction {
arguments: vec![
FlatParameter::private(FlatVariable::new(0)),
FlatParameter::private(FlatVariable::new(1)),
],
statements: vec![
FlatStatement::Definition(
FlatVariable::new(2),
FlatExpression::Mult(
box FlatExpression::Identifier(FlatVariable::new(0)),
box FlatExpression::Identifier(FlatVariable::new(1)),
),
),
FlatStatement::Return(FlatExpressionList {
expressions: vec![FlatExpression::Identifier(FlatVariable::new(2))],
}),
],
},
_ => unreachable!(),
}
}

View file

@ -2455,7 +2455,7 @@ impl<'ast, T: Field> Flattener<'ast, T> {
ZirExpressionList::EmbedCall(embed, generics, exprs) => {
let rhs_flattened = self.flatten_embed_call(
statements_flattened,
embed,
embed.clone(),
generics,
exprs.clone(),
);

View file

@ -69,12 +69,12 @@ pub struct Importer;
impl Importer {
pub fn apply_imports<'ast, T: Field, E: Into<Error>>(
destination: Module<'ast>,
destination: ZokModule<'ast>,
location: PathBuf,
resolver: Option<&dyn Resolver<E>>,
modules: &mut HashMap<OwnedModuleId, Module<'ast>>,
arena: &'ast Arena<String>,
) -> Result<Module<'ast>, CompileErrors> {
) -> Result<ZokModule<'ast>, CompileErrors> {
let symbols: Vec<_> = destination
.symbols
.into_iter()
@ -86,7 +86,7 @@ impl Importer {
})
.collect::<Result<_, _>>()?;
Ok(Module::with_symbols(symbols))
Ok(ZokModule::with_symbols(symbols))
}
fn resolve<'ast, T: Field, E: Into<Error>>(
@ -226,15 +226,24 @@ impl Importer {
Some(_) => {}
None => {
let source = arena.alloc(source);
let compiled = parse_module::<T, E>(
source,
new_location.clone(),
resolver,
modules,
arena,
)?;
assert!(modules.insert(new_location.clone(), compiled).is_none());
let parsed =
match new_location.extension().unwrap().to_str().unwrap() {
"zok" => parse_module::<T, E>(
source,
new_location.clone(),
resolver,
modules,
arena,
)
.map(|m| Module::Zok(m)),
"circom" => {
Ok(Module::Circom(zokrates_circom::parse(source)))
}
_ => unimplemented!(),
}?;
assert!(modules.insert(new_location.clone(), parsed).is_none());
}
};

View file

@ -657,6 +657,8 @@ impl<'ast, T: Field> Checker<'ast, T> {
}
}
Symbol::There(import) => {
println!("check there");
let pos = import.pos();
let import = import.value;
@ -676,6 +678,8 @@ impl<'ast, T: Field> Checker<'ast, T> {
})
.collect();
println!("candidates {:?}", function_candidates);
// find candidates in the types
let type_candidate = state
.types
@ -866,27 +870,69 @@ impl<'ast, T: Field> Checker<'ast, T> {
None => None,
// if it was not, check it
Some(module) => {
// create default entries for this module
state.types.entry(module_id.to_path_buf()).or_default();
state.constants.entry(module_id.to_path_buf()).or_default();
match module {
Module::Zok(module) => {
// create default entries for this module
state.types.entry(module_id.to_path_buf()).or_default();
state.constants.entry(module_id.to_path_buf()).or_default();
// we keep track of the introduced symbols to avoid collisions between types and functions
let mut symbol_unifier = SymbolUnifier::default();
// we keep track of the introduced symbols to avoid collisions between types and functions
let mut symbol_unifier = SymbolUnifier::default();
// we go through symbol declarations and check them
for declaration in module.symbols {
self.check_symbol_declaration(
declaration,
module_id,
state,
&mut checked_symbols,
&mut symbol_unifier,
)?
// we go through symbol declarations and check them
for declaration in module.symbols {
self.check_symbol_declaration(
declaration,
module_id,
state,
&mut checked_symbols,
&mut symbol_unifier,
)?
}
Some(TypedModule {
symbols: checked_symbols,
})
}
Module::Circom(module) => {
// We define a function symbol for the entry point of this module
// the signature is found in the circom program
let module = zokrates_circom::check(module);
let signature = DeclarationSignature::new()
.inputs(vec![
DeclarationType::FieldElement;
zokrates_circom::get_input_count(&module)
])
.outputs(vec![
DeclarationType::FieldElement;
zokrates_circom::get_output_count(&module)
]);
println!("{}", signature);
let id = "main";
self.functions.insert(
DeclarationFunctionKey::with_location(module_id.to_path_buf(), id)
.signature(signature.clone()),
);
checked_symbols.push(
TypedFunctionSymbolDeclaration::new(
DeclarationFunctionKey::with_location(module_id.to_path_buf(), id)
.signature(signature.clone()),
TypedFunctionSymbol::Flat(crate::embed::FlatEmbed::Circom(
module.clone(),
)),
)
.into(),
);
Some(TypedModule {
symbols: checked_symbols,
})
}
}
Some(TypedModule {
symbols: checked_symbols,
})
}
};
@ -1594,6 +1640,70 @@ impl<'ast, T: Field> Checker<'ast, T> {
let pos = stat.pos();
match stat.value {
// Statement::Assembly(a) => {
// let mut body = a.body;
// let arguments: Vec<FieldElementExpression<'ast, T>> = a
// .arguments
// .into_iter()
// .map(|a| match self.check_expression(a, module_id, types) {
// Ok(TypedExpression::FieldElement(e)) => Ok(e),
// Ok(e) => Err(vec![ErrorInner {
// pos: Some(pos),
// message: format!(
// "Only supported type for assembly arguments is field, found {}",
// e.get_type()
// ),
// }]),
// Err(e) => Err(vec![e]),
// })
// .collect::<Result<Vec<_>, _>>()?;
// // check lhs assignees are defined
// let (assignees, errors): (Vec<_>, Vec<_>) = a
// .lhs
// .into_iter()
// .map(|a| self.check_assignee(a, module_id, types))
// .partition(|r| r.is_ok());
// if !errors.is_empty() {
// return Err(errors.into_iter().map(|e| e.unwrap_err()).collect());
// }
// let assignees: Vec<_> = assignees.into_iter().map(|a| a.unwrap()).collect();
// let field_assignees: Vec<TypedAssignee<'ast, T>> = assignees
// .into_iter()
// .map(|a| match a.get_type() {
// Type::FieldElement => Ok(a),
// t => Err(vec![ErrorInner {
// pos: Some(pos),
// message: format!(
// "Only supported type to assign assembly values to is field, found {}",
// t
// ),
// }]),
// })
// .collect::<Result<Vec<_>, _>>()?;
// type_analysis::check_types::check_types(&mut body)
// .map_err(|_| ())
// .unwrap();
// match body.initial_template_call {
// program_structure::abstract_syntax_tree::ast::Expression::Call {
// meta: _,
// id: _,
// args,
// } if args.len() == arguments.len() => {}
// _ => {
// unimplemented!();
// }
// }
// //TypedStatement::Assembly(p)
// unimplemented!()
// }
Statement::Return(e) => {
let mut expression_list_checked = vec![];
let mut errors = vec![];
@ -1832,6 +1942,8 @@ impl<'ast, T: Field> Checker<'ast, T> {
let functions = self.find_functions(&query);
println!("{:#?}", functions);
match functions.len() {
// the function has to be defined
1 => {

View file

@ -383,6 +383,7 @@ impl<'ast, 'a, T: Field> ResultFolder<'ast, T> for Propagator<'ast, 'a, T> {
match arguments.iter().all(|a| a.is_constant()) {
true => {
let r: Option<TypedExpression<'ast, T>> = match embed {
FlatEmbed::Circom(_) => Ok(None),
FlatEmbed::BitArrayLe => Ok(None), // todo
FlatEmbed::U64FromBits => Ok(Some(process_u_from_bits(
assignees.clone(),

View file

@ -43,8 +43,8 @@ use zokrates_field::Field;
pub enum InlineError<'ast, T> {
Generic(DeclarationFunctionKey<'ast, T>, ConcreteFunctionKey<'ast>),
Flat(
FlatEmbed,
Vec<u32>,
FlatEmbed<'ast>,
Vec<TypedExpression<'ast, T>>,
Types<'ast, T>,
),
@ -154,8 +154,8 @@ pub fn inline_call<'a, 'ast, T: Field, E: Expr<'ast, T>>(
let f = match decl.symbol {
TypedFunctionSymbol::Here(f) => Ok(f),
TypedFunctionSymbol::Flat(e) => Err(InlineError::Flat(
e,
e.generics::<T>(&assignment),
e,
arguments.clone(),
output_types,
)),

View file

@ -285,7 +285,7 @@ impl<'ast, 'a, T: Field> ResultFolder<'ast, T> for Reducer<'ast, 'a, T> {
self.statement_buffer
.push(TypedStatement::MultipleDefinition(
v,
TypedExpressionListInner::EmbedCall(embed, generics, arguments)
TypedExpressionListInner::EmbedCall(generics, embed, arguments)
.annotate(output_types),
));
Ok(FunctionCallOrExpression::Expression(E::identifier(
@ -403,7 +403,7 @@ impl<'ast, 'a, T: Field> ResultFolder<'ast, T> for Reducer<'ast, 'a, T> {
Err(InlineError::Flat(embed, generics, arguments, output_types)) => {
Ok(vec![TypedStatement::MultipleDefinition(
v,
TypedExpressionListInner::EmbedCall(embed, generics, arguments)
TypedExpressionListInner::EmbedCall(generics, embed, arguments)
.annotate(output_types),
)])
}

View file

@ -247,7 +247,7 @@ impl<'ast, T> TypedModule<'ast, T> {
pub enum TypedFunctionSymbol<'ast, T> {
Here(TypedFunction<'ast, T>),
There(DeclarationFunctionKey<'ast, T>),
Flat(FlatEmbed),
Flat(FlatEmbed<'ast>),
}
impl<'ast, T: Field> TypedFunctionSymbol<'ast, T> {
@ -862,7 +862,7 @@ impl<'ast, T: fmt::Display> fmt::Display for TypedExpressionList<'ast, T> {
#[derive(Clone, PartialEq, Debug, Hash, Eq, PartialOrd, Ord)]
pub enum TypedExpressionListInner<'ast, T> {
FunctionCall(FunctionCallExpression<'ast, T, TypedExpressionList<'ast, T>>),
EmbedCall(FlatEmbed, Vec<u32>, Vec<TypedExpression<'ast, T>>),
EmbedCall(FlatEmbed<'ast>, Vec<u32>, Vec<TypedExpression<'ast, T>>),
}
impl<'ast, T> MultiTyped<'ast, T> for TypedExpressionList<'ast, T> {

View file

@ -249,7 +249,7 @@ pub trait MultiTyped {
#[derive(Clone, PartialEq, Hash, Eq)]
pub enum ZirExpressionList<'ast, T> {
EmbedCall(FlatEmbed, Vec<u32>, Vec<ZirExpression<'ast, T>>),
EmbedCall(FlatEmbed<'ast>, Vec<u32>, Vec<ZirExpression<'ast, T>>),
}
/// An expression of type `field`

View file

@ -41,17 +41,19 @@ impl<'a> Resolver<io::Error> for FileSystemResolver<'a> {
_ => PathBuf::from(self.stdlib_root_path.unwrap_or("")),
};
let path_owned = base.join(import_location.clone()).with_extension("zok");
let path_owned = match import_location.extension() {
Some(_) => base.join(import_location.clone()),
None => base.join(import_location.clone()).with_extension("zok"),
};
if !path_owned.is_file() {
return Err(io::Error::new(
io::ErrorKind::Other,
format!("No file found at {}", import_location.display()),
));
}
let source = read_to_string(&path_owned)?;
Ok((source, path_owned))
read_to_string(&path_owned)
.map_err(|_| {
io::Error::new(
io::ErrorKind::Other,
format!("No file found at {}", path_owned.display()),
)
})
.map(|source| (source, path_owned))
}
}