diff --git a/.circleci/config.yml b/.circleci/config.yml index 6a45390dc4..dbd8f5495f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -5,7 +5,7 @@ commands: parameters: cache_key: type: string - default: leo-stable-cache + default: leo-stable-linux-cache steps: - run: set -e - setup_remote_docker @@ -31,7 +31,7 @@ commands: parameters: cache_key: type: string - default: leo-stable-cache + default: leo-stable-linux-cache steps: - run: (sccache -s||true) - run: set +e @@ -40,25 +40,81 @@ commands: paths: - .cache/sccache - .cargo -jobs: +# orbs: +# codecov: codecov/codecov@1.2.3 - rust-stable: +jobs: + check-style: docker: - image: cimg/rust:1.53 resource_class: xlarge steps: - checkout - setup_environment: - cache_key: leo-stable-cache + cache_key: leo-fmt-cache - run: - name: Build and run tests - no_output_timeout: 30m - command: cargo test --all - - persist_to_workspace: - root: ~/ - paths: project/ + name: Check style + no_output_timeout: 35m + command: cargo fmt --all -- --check - clear_environment: - cache_key: leo-stable-cache + cache_key: leo-fmt-cache + + clippy: + docker: + - image: cimg/rust:1.53 + resource_class: xlarge + steps: + - checkout + - setup_environment: + cache_key: leo-clippy-cache + - run: + name: Clippy + no_output_timeout: 35m + command: cargo clippy --all-features --examples --all --benches + - clear_environment: + cache_key: leo-clippy-cache + + # code-cov: + # docker: + # - image: cimg/rust:1.53.0 + # resource_class: xlarge + # environment: + # RUSTC_BOOTSTRAP: 1 + # steps: + # - checkout + # - setup_environment: + # cache_key: leo-codecov-cache + # - run: + # name: Build and run tests + # no_output_timeout: 30m + # command: cargo test --all + # - run: + # name: Install Code Cov Deps + # no_output_timeout: 30m + # command: | + # sudo apt-get update + # sudo apt-get -y install binutils-dev libcurl4-openssl-dev zlib1g-dev libdw-dev libiberty-dev + # - run: + # name: Generate Coverage Report + # no_output_timeout: 30m + # command: | + # wget https://github.com/SimonKagstrom/kcov/archive/master.tar.gz + # tar xzf master.tar.gz + # cd kcov-master + # mkdir build && cd build + # cmake .. && make + # make install DESTDIR=../../kcov-build + # cd ../.. + # rm -rf kcov-master + # for file in target/debug/deps/*-*; do if [[ "$file" != *\.* ]]; then mkdir -p "target/cov/$(basename $file)"; ./kcov-build/usr/local/bin/kcov --exclude-pattern=/.cargo,/usr/lib --exclude-region='@kcov_skip(start):@kcov_skip(end)' --verify "target/cov/$(basename $file)" "$file"; fi done + # steps: + # - codecov/upload: + # file: {{}} + # - persist_to_workspace: + # root: ~/ + # paths: project/ + # - clear_environment: + # cache_key: leo-codecov-cache leo-executable: docker: @@ -199,7 +255,8 @@ workflows: version: 2 main-workflow: jobs: - - rust-stable + - check-style + - clippy - leo-executable - leo-new: requires: diff --git a/.github/dependabot.yml b/.github/dependabot.yml index d88ec80da1..b5ec31d537 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,7 +5,7 @@ updates: schedule: interval: daily time: "10:00" - open-pull-requests-limit: 10 + open-pull-requests-limit: 20 ignore: - dependency-name: snarkvm-curves versions: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8f0d7c2e18..d4d6a4bd8f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,117 +1,239 @@ name: CI on: pull_request: - push: - branches: - - master - - staging - - trying - paths-ignore: - - 'docs/**' - - 'documentation/**' + push: + branches: + - master + - staging + - trying + paths-ignore: + - 'docs/**' + - 'documentation/**' env: RUST_BACKTRACE: 1 jobs: - style: - name: Check Style - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v1 - - - name: Install Rust - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: nightly - override: true - components: rustfmt - - - name: cargo fmt --check - uses: actions-rs/cargo@v1 - with: - command: fmt - args: --all -- --check - - clippy: - name: Clippy - runs-on: ubuntu-latest + test-package: + name: Test Package ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [macOS-latest, windows-latest, ubuntu-latest] + include: + - os: ubuntu-latest + sccache-path: /home/runner/.cache/sccache + - os: macos-latest + sccache-path: /Users/runner/Library/Caches/Mozilla.sccache + - os: windows-latest + sccache-path: "C:\\Users\\runneradmin\\AppData\\Local\\Mozilla\\sccache" env: - RUSTFLAGS: -Dwarnings + RUSTC_WRAPPER: sccache + SCCACHE_CACHE_SIZE: 2G + SCCACHE_DIR: ${{ matrix.sccache-path }} + # SCCACHE_RECACHE: 1 # Uncomment this to clear cache, then comment it back out steps: - name: Checkout uses: actions/checkout@v2 + - name: Install sccache Ubuntu + if: matrix.os == 'ubuntu-latest' + env: + LINK: https://github.com/mozilla/sccache/releases/download + SCCACHE_VERSION: v0.2.15 + run: | + SCCACHE_FILE=sccache-$SCCACHE_VERSION-x86_64-unknown-linux-musl + mkdir -p $HOME/.local/bin + curl -L "$LINK/$SCCACHE_VERSION/$SCCACHE_FILE.tar.gz" | tar xz + mv -f $SCCACHE_FILE/sccache $HOME/.local/bin/sccache + chmod +x $HOME/.local/bin/sccache + echo "$HOME/.local/bin" >> $GITHUB_PATH + + - name: Install sccache Macos + if: matrix.os == 'macos-latest' + run: | + brew update + brew install sccache + + - name: Install sccache Windows + if: matrix.os == 'windows-latest' + run: | + iwr -useb get.scoop.sh | iex + Set-ExecutionPolicy RemoteSigned -scope CurrentUser + scoop install sccache + echo "C:\Users\runneradmin\scoop\shims" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + + - name: Install Rust Stable + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + override: true + + - name: Cache cargo registry + uses: actions/cache@v2 + continue-on-error: false + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo- + + - name: Save sccache + uses: actions/cache@v2 + continue-on-error: false + with: + path: ${{ matrix.sccache-path }} + key: ${{ runner.os }}-sccache-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-sccache- + + - name: Start sccache server + run: | + sccache --start-server + + - name: Install cargo-all-features + run: | + cargo install cargo-all-features + + - name: Test + run: | + cd package + cargo test-all-features + + - name: Print sccache stats + run: sccache --show-stats + + - name: Stop sccache server + run: sccache --stop-server || true + + test-package-macos_m1: + name: Test Package macOS M1 + runs-on: macos-latest + env: + RUSTC_WRAPPER: sccache + SCCACHE_CACHE_SIZE: 2G + SCCACHE_DIR: /Users/runner/Library/Caches/Mozilla.sccache + steps: + - name: Xcode Select + uses: devbotsxyz/xcode-select@v1.1.0 + + - name: Checkout + uses: actions/checkout@v2 + + - name: Install sccache + run: | + brew update + brew install sccache + + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + profile: minimal + target: aarch64-apple-darwin + toolchain: stable + override: true + components: rustfmt + + - name: Cache cargo registry + uses: actions/cache@v2 + continue-on-error: false + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: m1-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + m1-cargo- + + - name: Save sccache + uses: actions/cache@v2 + continue-on-error: false + with: + path: /Users/runner/Library/Caches/Mozilla.sccache + key: m1-sccache-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + m1-sccache- + + - name: Start sccache server + run: | + sccache --start-server + + - name: Install cargo-all-features + run: | + SDKROOT=$(xcrun -sdk macosx11.1 --show-sdk-path) \ + MACOSX_DEPLOYMENT_TARGET=$(xcrun -sdk macosx11.1 --show-sdk-platform-version) \ + cargo install cargo-all-features + + - name: Test + run: | + SDKROOT=$(xcrun -sdk macosx11.1 --show-sdk-path) \ + MACOSX_DEPLOYMENT_TARGET=$(xcrun -sdk macosx11.1 --show-sdk-platform-version) \ + cd package && cargo test-all-features + + - name: Print sccache stats + run: sccache --show-stats + + - name: Stop sccache server + run: sccache --stop-server || true + + codecov: + name: Code Coverage + runs-on: ubuntu-latest + env: + RUSTC_BOOTSTRAP: 1 + RUSTC_WRAPPER: sccache + SCCACHE_CACHE_SIZE: 2G + SCCACHE_DIR: /home/runner/.cache/sccache + steps: + - name: Checkout + uses: actions/checkout@v1 + + - name: Install sccache Ubuntu + env: + LINK: https://github.com/mozilla/sccache/releases/download + SCCACHE_VERSION: v0.2.15 + run: | + SCCACHE_FILE=sccache-$SCCACHE_VERSION-x86_64-unknown-linux-musl + mkdir -p $HOME/.local/bin + curl -L "$LINK/$SCCACHE_VERSION/$SCCACHE_FILE.tar.gz" | tar xz + mv -f $SCCACHE_FILE/sccache $HOME/.local/bin/sccache + chmod +x $HOME/.local/bin/sccache + echo "$HOME/.local/bin" >> $GITHUB_PATH + - name: Install Rust uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable override: true - components: clippy - - - name: Check examples - uses: actions-rs/cargo@v1 - with: - command: clippy - args: --examples --all - - - name: Check examples with all features on stable - uses: actions-rs/cargo@v1 - with: - command: clippy - args: --examples --all-features --all - - - name: Check benchmarks on nightly - uses: actions-rs/cargo@v1 - with: - command: clippy - args: --all-features --examples --all --benches - - test-package: - name: Test Package - runs-on: ubuntu-latest - strategy: - matrix: - rust: - - stable - - nightly - steps: - - name: Checkout - uses: actions/checkout@v2 - - - name: Install Rust (${{ matrix.rust }}) - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: ${{ matrix.rust }} - override: true - - - name: Install cargo-all-features - run: | - cargo install cargo-all-features - - - name: Test - run: | - cd package - cargo test-all-features - - codecov: - name: Code Coverage - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v1 - - - name: Install Rust - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: nightly - override: true components: rustfmt + - name: Cache cargo registry + uses: actions/cache@v2 + continue-on-error: false + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: codecov-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + codecov-cargo- + + - name: Save sccache + uses: actions/cache@v2 + continue-on-error: false + with: + path: /Users/runner/Library/Caches/Mozilla.sccache + key: codecov-sccache-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + codecov-sccache- + + - name: Start sccache server + run: | + sccache --start-server + - name: Test uses: actions-rs/cargo@v1 with: @@ -142,3 +264,9 @@ jobs: with: github-token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.CODECOV_TOKEN }} + + - name: Print sccache stats + run: sccache --show-stats + + - name: Stop sccache server + run: sccache --stop-server || true diff --git a/.rustfmt.toml b/.rustfmt.toml index 39028b1340..4cca92e79e 100644 --- a/.rustfmt.toml +++ b/.rustfmt.toml @@ -8,9 +8,9 @@ use_field_init_shorthand = true use_try_shorthand = true # Nightly configurations -imports_layout = "HorizontalVertical" -license_template_path = ".resources/license_header" -imports_granularity = "Crate" -overflow_delimited_expr = true -reorder_impl_items = true -version = "Two" +# imports_layout = "HorizontalVertical" +# license_template_path = ".resources/license_header" +# imports_granularity = "Crate" +# overflow_delimited_expr = true +# reorder_impl_items = true +# version = "Two" diff --git a/Cargo.lock b/Cargo.lock index d18dc2919a..8b40fe9c27 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -88,9 +88,9 @@ checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" [[package]] name = "assert_cmd" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d20831bd004dda4c7c372c19cdabff369f794a95e955b3f13fe460e3e1ae95f" +checksum = "c98233c6673d8601ab23e77eb38f999c51100d46c5703b17288c57fddf3a1ffe" dependencies = [ "bstr", "doc-comment", @@ -281,7 +281,7 @@ version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c24dab4283a142afa2fdca129b80ad2c6284e073930f964c3a1293c225ee39a" dependencies = [ - "rustc_version 0.4.0", + "rustc_version", ] [[package]] @@ -2191,15 +2191,6 @@ version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dead70b0b5e03e9c814bcb6b01e03e68f7c57a80aa48c72ec92152ab3e818d49" -[[package]] -name = "rustc_version" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" -dependencies = [ - "semver 0.11.0", -] - [[package]] name = "rustc_version" version = "0.4.0" @@ -2319,9 +2310,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.126" +version = "1.0.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7505abeacaec74ae4778d9d9328fe5a5d04253220a85c4ee022239fc996d03" +checksum = "f03b9878abf6d14e6779d3f24f07b2cfa90352cfec4acc5aab8f1ac7f146fae8" dependencies = [ "serde_derive", ] @@ -2338,9 +2329,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.126" +version = "1.0.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "963a7dbc9895aeac7ac90e74f34a5d5261828f79df35cbed41e10189d3804d43" +checksum = "a024926d3432516606328597e0f224a51355a493b49fdd67e9209187cbe55ecc" dependencies = [ "proc-macro2 1.0.27", "quote 1.0.9", @@ -2439,9 +2430,9 @@ checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" [[package]] name = "snarkvm-algorithms" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8bbefe6252ed85bb073f8ecbc402830e3d119b1aaadcea5a9c9e7a21a99cd2" +checksum = "d8db2338bd30c4f5f08f27cae89bccd9ba48b06166e1cddcc4e845de0390229f" dependencies = [ "anyhow", "bitvec", @@ -2467,14 +2458,14 @@ dependencies = [ [[package]] name = "snarkvm-curves" -version = "0.7.5" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62fdf07998a6e88fce7a8139e8282fb6b2702e49624b6d7e10a5cc1c9f014264" +checksum = "7cb586a9383563b62120e788f8d9200cfcd5a5b610c2723403a72e6b4cc7ee71" dependencies = [ "derivative", "rand 0.8.4", "rand_xorshift", - "rustc_version 0.3.3", + "rustc_version", "serde", "snarkvm-fields", "snarkvm-utilities", @@ -2483,9 +2474,9 @@ dependencies = [ [[package]] name = "snarkvm-derives" -version = "0.7.5" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d42f4d5abda149130149ce3865aef23d380dfcdd97fea7f75fd79b0aee369b29" +checksum = "ec9f9134f9b06f279312d39a41c23fcc9ab29e987e74fc1e97a0945d1d169ff0" dependencies = [ "proc-macro-crate", "proc-macro-error", @@ -2496,9 +2487,9 @@ dependencies = [ [[package]] name = "snarkvm-dpc" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af8dd1b815a1101c4014c17cbdffadecb1032e8662fdf5fd4bd67a3c149d8449" +checksum = "c65b21cece03e1191989230062d8773d5dd7b848099fd0380e35d3f920b7c77e" dependencies = [ "anyhow", "base58", @@ -2528,9 +2519,9 @@ dependencies = [ [[package]] name = "snarkvm-fields" -version = "0.7.5" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ecd058b3608140610276be1eb1139a032a1bb171969b3ad70550c471d3ae503" +checksum = "8a0717dbbf3e92e12084c913e53b21534270d2d00584a4344453af1c66952bee" dependencies = [ "anyhow", "bincode", @@ -2544,9 +2535,9 @@ dependencies = [ [[package]] name = "snarkvm-gadgets" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b462bb5e5ac219eafd1a828c73c181e7b23692ade5c49fd72d71bfe4250a6b1" +checksum = "753400eccfb80757e90daaf077c37ce8988bf163816ded6eb884e725290a78f1" dependencies = [ "derivative", "digest 0.9.0", @@ -2564,9 +2555,9 @@ dependencies = [ [[package]] name = "snarkvm-marlin" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5b1bb7923a757053c0a544072ec6b298585f83c9f4a3ae777ca048bb6e5589" +checksum = "abcc01851cf4cee0de8c4fda76f8096789cab813c738703ec67fe2d19d89a204" dependencies = [ "blake2", "derivative", @@ -2588,9 +2579,9 @@ dependencies = [ [[package]] name = "snarkvm-parameters" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14356edda788a3e52ac6e809e6fdbfd5cf7558249bf6051525843b045a73d12a" +checksum = "7f21f3b1fc09bff0e3a352a2e30927a3fbfbe183ef658cbb42bd2805db7d6420" dependencies = [ "curl", "hex", @@ -2601,9 +2592,9 @@ dependencies = [ [[package]] name = "snarkvm-polycommit" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28fac50de72680316fe57fbbbde2874ae28de7191a3f23ff9e541119951ddaa8" +checksum = "920e188506d5036cca0fdae46d63ad1779d3f49c671ea2339b9cda0c0ab8751a" dependencies = [ "derivative", "digest 0.9.0", @@ -2620,15 +2611,15 @@ dependencies = [ [[package]] name = "snarkvm-profiler" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ebfa546f0376a1348b857a9defdb3f4505a0420d82f8caa2b0cebbe197245fa" +checksum = "1a060c67f5c11015465721bdbbaf71f8c5132fdc885cb2e7307f8c936dd43ca1" [[package]] name = "snarkvm-r1cs" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aca9bb7105244ebc91f964b11a1ae63f173a77181307d1fa94f04e15dbde137" +checksum = "8b87182d37dc6665816e1dcd480820f6c6494d1d9604c481b756eb0771956265" dependencies = [ "cfg-if 1.0.0", "fxhash", @@ -2641,9 +2632,9 @@ dependencies = [ [[package]] name = "snarkvm-utilities" -version = "0.7.5" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b7ecf6a7afdd60a45cbd5ffab75185c296d8a4bf5eb20f3912384b1d4027c2" +checksum = "1cc0611d450dfd4e9ad305dd343c0420430f83c73cdb79f6e6e184848dc3e2ee" dependencies = [ "anyhow", "bincode", diff --git a/Cargo.toml b/Cargo.toml index acdb0c7ea3..9698fec8b4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -74,22 +74,22 @@ path = "./synthesizer" version = "1.5.3" [dependencies.snarkvm-algorithms] -version = "0.7.4" +version = "0.7.6" [dependencies.snarkvm-curves] -version = "0.7.5" +version = "0.7.7" default-features = false [dependencies.snarkvm-gadgets] -version = "0.7.5" +version = "0.7.6" default-features = false [dependencies.snarkvm-r1cs] -version = "0.7.5" +version = "0.7.6" default-features = false [dependencies.snarkvm-utilities] -version = "0.7.4" +version = "0.7.6" [dependencies.anyhow] version = "1.0" @@ -166,7 +166,7 @@ version = "0.12.1" version = "0.11.2" [dev-dependencies.assert_cmd] -version = "1.0.7" +version = "1.0.8" [dev-dependencies.test_dir] version = "0.1.0" diff --git a/asg/src/checks/return_path.rs b/asg/src/checks/return_path.rs index ed8874deb2..31e24e2e52 100644 --- a/asg/src/checks/return_path.rs +++ b/asg/src/checks/return_path.rs @@ -15,14 +15,7 @@ // along with the Leo library. If not, see . use crate::{ - statement::*, - BoolAnd, - Expression, - Monoid, - MonoidalReducerExpression, - MonoidalReducerStatement, - Node, - Span, + statement::*, BoolAnd, Expression, Monoid, MonoidalReducerExpression, MonoidalReducerStatement, Node, Span, }; pub struct ReturnPathReducer { diff --git a/asg/src/const_value.rs b/asg/src/const_value.rs index d430f0bbc4..cfe091f749 100644 --- a/asg/src/const_value.rs +++ b/asg/src/const_value.rs @@ -315,16 +315,16 @@ impl ConstInt { pub fn parse(int_type: &IntegerType, value: &str, span: &Span) -> Result { Ok(match int_type { - IntegerType::I8 => ConstInt::I8(value.parse().map_err(|_| AsgConvertError::invalid_int(&value, span))?), - IntegerType::I16 => ConstInt::I16(value.parse().map_err(|_| AsgConvertError::invalid_int(&value, span))?), - IntegerType::I32 => ConstInt::I32(value.parse().map_err(|_| AsgConvertError::invalid_int(&value, span))?), - IntegerType::I64 => ConstInt::I64(value.parse().map_err(|_| AsgConvertError::invalid_int(&value, span))?), - IntegerType::I128 => ConstInt::I128(value.parse().map_err(|_| AsgConvertError::invalid_int(&value, span))?), - IntegerType::U8 => ConstInt::U8(value.parse().map_err(|_| AsgConvertError::invalid_int(&value, span))?), - IntegerType::U16 => ConstInt::U16(value.parse().map_err(|_| AsgConvertError::invalid_int(&value, span))?), - IntegerType::U32 => ConstInt::U32(value.parse().map_err(|_| AsgConvertError::invalid_int(&value, span))?), - IntegerType::U64 => ConstInt::U64(value.parse().map_err(|_| AsgConvertError::invalid_int(&value, span))?), - IntegerType::U128 => ConstInt::U128(value.parse().map_err(|_| AsgConvertError::invalid_int(&value, span))?), + IntegerType::I8 => ConstInt::I8(value.parse().map_err(|_| AsgConvertError::invalid_int(value, span))?), + IntegerType::I16 => ConstInt::I16(value.parse().map_err(|_| AsgConvertError::invalid_int(value, span))?), + IntegerType::I32 => ConstInt::I32(value.parse().map_err(|_| AsgConvertError::invalid_int(value, span))?), + IntegerType::I64 => ConstInt::I64(value.parse().map_err(|_| AsgConvertError::invalid_int(value, span))?), + IntegerType::I128 => ConstInt::I128(value.parse().map_err(|_| AsgConvertError::invalid_int(value, span))?), + IntegerType::U8 => ConstInt::U8(value.parse().map_err(|_| AsgConvertError::invalid_int(value, span))?), + IntegerType::U16 => ConstInt::U16(value.parse().map_err(|_| AsgConvertError::invalid_int(value, span))?), + IntegerType::U32 => ConstInt::U32(value.parse().map_err(|_| AsgConvertError::invalid_int(value, span))?), + IntegerType::U64 => ConstInt::U64(value.parse().map_err(|_| AsgConvertError::invalid_int(value, span))?), + IntegerType::U128 => ConstInt::U128(value.parse().map_err(|_| AsgConvertError::invalid_int(value, span))?), }) } } diff --git a/asg/src/expression/call.rs b/asg/src/expression/call.rs index d0ae36f32e..41b7cb0660 100644 --- a/asg/src/expression/call.rs +++ b/asg/src/expression/call.rs @@ -15,19 +15,8 @@ // along with the Leo library. If not, see . use crate::{ - AsgConvertError, - CircuitMember, - ConstValue, - Expression, - ExpressionNode, - FromAst, - Function, - FunctionQualifier, - Node, - PartialType, - Scope, - Span, - Type, + AsgConvertError, CircuitMember, ConstValue, Expression, ExpressionNode, FromAst, Function, FunctionQualifier, Node, + PartialType, Scope, Span, Type, }; pub use leo_ast::{BinaryOperation, Node as AstNode}; diff --git a/asg/src/expression/circuit_access.rs b/asg/src/expression/circuit_access.rs index 37af4e17bc..e945c8f902 100644 --- a/asg/src/expression/circuit_access.rs +++ b/asg/src/expression/circuit_access.rs @@ -15,19 +15,8 @@ // along with the Leo library. If not, see . use crate::{ - AsgConvertError, - Circuit, - CircuitMember, - ConstValue, - Expression, - ExpressionNode, - FromAst, - Identifier, - Node, - PartialType, - Scope, - Span, - Type, + AsgConvertError, Circuit, CircuitMember, ConstValue, Expression, ExpressionNode, FromAst, Identifier, Node, + PartialType, Scope, Span, Type, }; use std::cell::Cell; diff --git a/asg/src/expression/circuit_init.rs b/asg/src/expression/circuit_init.rs index 7c26aa25e3..4da91ea8b6 100644 --- a/asg/src/expression/circuit_init.rs +++ b/asg/src/expression/circuit_init.rs @@ -15,19 +15,8 @@ // along with the Leo library. If not, see . use crate::{ - AsgConvertError, - Circuit, - CircuitMember, - ConstValue, - Expression, - ExpressionNode, - FromAst, - Identifier, - Node, - PartialType, - Scope, - Span, - Type, + AsgConvertError, Circuit, CircuitMember, ConstValue, Expression, ExpressionNode, FromAst, Identifier, Node, + PartialType, Scope, Span, Type, }; use indexmap::{IndexMap, IndexSet}; diff --git a/asg/src/expression/constant.rs b/asg/src/expression/constant.rs index 8fb638974a..212df302c1 100644 --- a/asg/src/expression/constant.rs +++ b/asg/src/expression/constant.rs @@ -15,19 +15,8 @@ // along with the Leo library. If not, see . use crate::{ - AsgConvertError, - CharValue, - ConstInt, - ConstValue, - Expression, - ExpressionNode, - FromAst, - GroupValue, - Node, - PartialType, - Scope, - Span, - Type, + AsgConvertError, CharValue, ConstInt, ConstValue, Expression, ExpressionNode, FromAst, GroupValue, Node, + PartialType, Scope, Span, Type, }; use std::cell::Cell; @@ -115,7 +104,7 @@ impl<'a> FromAst<'a, leo_ast::ValueExpression> for Constant<'a> { value: ConstValue::Boolean( value .parse::() - .map_err(|_| AsgConvertError::invalid_boolean(&value, span))?, + .map_err(|_| AsgConvertError::invalid_boolean(value, span))?, ), } } @@ -151,7 +140,7 @@ impl<'a> FromAst<'a, leo_ast::ValueExpression> for Constant<'a> { Constant { parent: Cell::new(None), span: Some(span.clone()), - value: ConstValue::Field(value.parse().map_err(|_| AsgConvertError::invalid_int(&value, span))?), + value: ConstValue::Field(value.parse().map_err(|_| AsgConvertError::invalid_int(value, span))?), } } Group(value) => { @@ -188,7 +177,7 @@ impl<'a> FromAst<'a, leo_ast::ValueExpression> for Constant<'a> { Some(PartialType::Type(Type::Field)) => Constant { parent: Cell::new(None), span: Some(span.clone()), - value: ConstValue::Field(value.parse().map_err(|_| AsgConvertError::invalid_int(&value, span))?), + value: ConstValue::Field(value.parse().map_err(|_| AsgConvertError::invalid_int(value, span))?), }, Some(PartialType::Type(Type::Group)) => Constant { parent: Cell::new(None), diff --git a/asg/src/expression/mod.rs b/asg/src/expression/mod.rs index 4778e3b6a6..60c9d3f47c 100644 --- a/asg/src/expression/mod.rs +++ b/asg/src/expression/mod.rs @@ -341,7 +341,7 @@ impl<'a> FromAst<'a, leo_ast::Expression> for &'a Expression<'a> { .context .alloc_expression(CallExpression::from_ast(scope, call, expected_type).map(Expression::Call)?), }; - expression.enforce_parents(&expression); + expression.enforce_parents(expression); Ok(expression) } } diff --git a/asg/src/expression/variable_ref.rs b/asg/src/expression/variable_ref.rs index 4a4e209223..ba8b59221b 100644 --- a/asg/src/expression/variable_ref.rs +++ b/asg/src/expression/variable_ref.rs @@ -15,20 +15,8 @@ // along with the Leo library. If not, see . use crate::{ - AsgConvertError, - ConstValue, - Constant, - DefinitionStatement, - Expression, - ExpressionNode, - FromAst, - Node, - PartialType, - Scope, - Span, - Statement, - Type, - Variable, + AsgConvertError, ConstValue, Constant, DefinitionStatement, Expression, ExpressionNode, FromAst, Node, PartialType, + Scope, Span, Statement, Type, Variable, }; use std::cell::Cell; diff --git a/asg/src/node.rs b/asg/src/node.rs index 4272c5669a..b7e5a2c3e5 100644 --- a/asg/src/node.rs +++ b/asg/src/node.rs @@ -15,16 +15,7 @@ // along with the Leo library. If not, see . use crate::{ - AsgContextInner, - AsgConvertError, - Circuit, - Expression, - Function, - PartialType, - Scope, - Span, - Statement, - Variable, + AsgContextInner, AsgConvertError, Circuit, Expression, Function, PartialType, Scope, Span, Statement, Variable, }; /// A node in the abstract semantic graph. diff --git a/asg/src/program/function.rs b/asg/src/program/function.rs index bf89b0020f..6d8f68e68b 100644 --- a/asg/src/program/function.rs +++ b/asg/src/program/function.rs @@ -15,18 +15,8 @@ // along with the Leo library. If not, see . use crate::{ - AsgConvertError, - BlockStatement, - Circuit, - FromAst, - Identifier, - MonoidalDirector, - ReturnPathReducer, - Scope, - Span, - Statement, - Type, - Variable, + AsgConvertError, BlockStatement, Circuit, FromAst, Identifier, MonoidalDirector, ReturnPathReducer, Scope, Span, + Statement, Type, Variable, }; use indexmap::IndexMap; pub use leo_ast::Annotation; @@ -101,7 +91,7 @@ impl<'a> Function<'a> { let variable = scope.context.alloc_variable(RefCell::new(crate::InnerVariable { id: scope.context.get_id(), name: identifier.clone(), - type_: scope.resolve_ast_type(&type_)?, + type_: scope.resolve_ast_type(type_)?, mutable: *mutable, const_: *const_, declaration: crate::VariableDeclaration::Parameter, diff --git a/asg/src/program/mod.rs b/asg/src/program/mod.rs index d6c00ef7e3..cc2ec02dcc 100644 --- a/asg/src/program/mod.rs +++ b/asg/src/program/mod.rs @@ -25,15 +25,7 @@ mod function; pub use function::*; use crate::{ - node::FromAst, - ArenaNode, - AsgContext, - AsgConvertError, - DefinitionStatement, - ImportResolver, - Input, - Scope, - Statement, + node::FromAst, ArenaNode, AsgContext, AsgConvertError, DefinitionStatement, ImportResolver, Input, Scope, Statement, }; use leo_ast::{Identifier, PackageAccess, PackageOrPackages, Span}; @@ -127,7 +119,7 @@ fn resolve_import_package_access( PackageAccess::Multiple(packages) => { package_segments.push(packages.name.name.to_string()); for subaccess in packages.accesses.iter() { - resolve_import_package_access(output, package_segments.clone(), &subaccess); + resolve_import_package_access(output, package_segments.clone(), subaccess); } } } diff --git a/asg/src/reducer/monoidal_director.rs b/asg/src/reducer/monoidal_director.rs index 161183a19b..858a1bb256 100644 --- a/asg/src/reducer/monoidal_director.rs +++ b/asg/src/reducer/monoidal_director.rs @@ -308,6 +308,6 @@ impl<'a, T: Monoid, R: MonoidalReducerProgram<'a, T>> MonoidalDirector<'a, T, R> let circuits = input.circuits.iter().map(|(_, c)| self.reduce_circuit(c)).collect(); self.reducer - .reduce_program(&input, imported_modules, functions, circuits) + .reduce_program(input, imported_modules, functions, circuits) } } diff --git a/asg/src/statement/assign.rs b/asg/src/statement/assign.rs index e1f44b8210..3fe02a1928 100644 --- a/asg/src/statement/assign.rs +++ b/asg/src/statement/assign.rs @@ -15,22 +15,8 @@ // along with the Leo library. If not, see . use crate::{ - AsgConvertError, - CircuitMember, - ConstInt, - ConstValue, - Expression, - ExpressionNode, - FromAst, - Identifier, - IntegerType, - Node, - PartialType, - Scope, - Span, - Statement, - Type, - Variable, + AsgConvertError, CircuitMember, ConstInt, ConstValue, Expression, ExpressionNode, FromAst, Identifier, IntegerType, + Node, PartialType, Scope, Span, Statement, Type, Variable, }; pub use leo_ast::AssignOperation; use leo_ast::AssigneeAccess as AstAssigneeAccess; @@ -79,12 +65,12 @@ impl<'a> FromAst<'a, leo_ast::AssignStatement> for &'a Statement<'a> { } } else { scope - .resolve_variable(&name) - .ok_or_else(|| AsgConvertError::unresolved_reference(name, &span))? + .resolve_variable(name) + .ok_or_else(|| AsgConvertError::unresolved_reference(name, span))? }; if !variable.borrow().mutable { - return Err(AsgConvertError::immutable_assignment(&name, &statement.span)); + return Err(AsgConvertError::immutable_assignment(name, &statement.span)); } let mut target_type: Option = Some(variable.borrow().type_.clone().into()); @@ -123,13 +109,13 @@ impl<'a> FromAst<'a, leo_ast::AssignStatement> for &'a Statement<'a> { ) { let left = match left { ConstValue::Int(x) => x.to_usize().ok_or_else(|| { - AsgConvertError::invalid_assign_index(&name, &x.to_string(), &statement.span) + AsgConvertError::invalid_assign_index(name, &x.to_string(), &statement.span) })?, _ => unimplemented!(), }; let right = match right { ConstValue::Int(x) => x.to_usize().ok_or_else(|| { - AsgConvertError::invalid_assign_index(&name, &x.to_string(), &statement.span) + AsgConvertError::invalid_assign_index(name, &x.to_string(), &statement.span) })?, _ => unimplemented!(), }; @@ -137,7 +123,7 @@ impl<'a> FromAst<'a, leo_ast::AssignStatement> for &'a Statement<'a> { target_type = Some(PartialType::Array(item.clone(), Some((right - left) as usize))) } else { return Err(AsgConvertError::invalid_backwards_assignment( - &name, + name, left, right, &statement.span, @@ -145,7 +131,7 @@ impl<'a> FromAst<'a, leo_ast::AssignStatement> for &'a Statement<'a> { } } } - _ => return Err(AsgConvertError::index_into_non_array(&name, &statement.span)), + _ => return Err(AsgConvertError::index_into_non_array(name, &statement.span)), } AssignAccess::ArrayRange(Cell::new(left), Cell::new(right)) @@ -153,7 +139,7 @@ impl<'a> FromAst<'a, leo_ast::AssignStatement> for &'a Statement<'a> { AstAssigneeAccess::ArrayIndex(index) => { target_type = match target_type.clone() { Some(PartialType::Array(item, _)) => item.map(|x| *x), - _ => return Err(AsgConvertError::index_into_non_array(&name, &statement.span)), + _ => return Err(AsgConvertError::index_into_non_array(name, &statement.span)), }; AssignAccess::ArrayIndex(Cell::new(<&Expression<'a>>::from_ast( scope, @@ -171,7 +157,7 @@ impl<'a> FromAst<'a, leo_ast::AssignStatement> for &'a Statement<'a> { .get(index) .cloned() .ok_or_else(|| AsgConvertError::tuple_index_out_of_bounds(index, &statement.span))?, - _ => return Err(AsgConvertError::index_into_non_tuple(&name, &statement.span)), + _ => return Err(AsgConvertError::index_into_non_tuple(name, &statement.span)), }; AssignAccess::Tuple(index) } diff --git a/asg/src/statement/block.rs b/asg/src/statement/block.rs index 9a64fcdfb9..2b50d0c3df 100644 --- a/asg/src/statement/block.rs +++ b/asg/src/statement/block.rs @@ -42,7 +42,7 @@ impl<'a> FromAst<'a, leo_ast::Block> for BlockStatement<'a> { let mut output = vec![]; for item in statement.statements.iter() { - output.push(Cell::new(<&'a Statement<'a>>::from_ast(&new_scope, item, None)?)); + output.push(Cell::new(<&'a Statement<'a>>::from_ast(new_scope, item, None)?)); } Ok(BlockStatement { parent: Cell::new(None), diff --git a/asg/src/statement/definition.rs b/asg/src/statement/definition.rs index f340052409..481af198a5 100644 --- a/asg/src/statement/definition.rs +++ b/asg/src/statement/definition.rs @@ -15,18 +15,8 @@ // along with the Leo library. If not, see . use crate::{ - AsgConvertError, - Expression, - ExpressionNode, - FromAst, - InnerVariable, - Node, - PartialType, - Scope, - Span, - Statement, - Type, - Variable, + AsgConvertError, Expression, ExpressionNode, FromAst, InnerVariable, Node, PartialType, Scope, Span, Statement, + Type, Variable, }; use std::cell::{Cell, RefCell}; @@ -44,12 +34,15 @@ impl<'a> DefinitionStatement<'a> { self.variables .iter() .map(|variable| { - (variable.borrow().name.name.to_string(), DefinitionStatement { - parent: self.parent.clone(), - span: self.span.clone(), - variables: vec![variable], - value: self.value.clone(), - }) + ( + variable.borrow().name.name.to_string(), + DefinitionStatement { + parent: self.parent.clone(), + span: self.span.clone(), + variables: vec![variable], + value: self.value.clone(), + }, + ) }) .collect() } @@ -70,7 +63,7 @@ impl<'a> FromAst<'a, leo_ast::DefinitionStatement> for &'a Statement<'a> { let type_ = statement .type_ .as_ref() - .map(|x| scope.resolve_ast_type(&x)) + .map(|x| scope.resolve_ast_type(x)) .transpose()?; let value = <&Expression<'a>>::from_ast(scope, &statement.value, type_.clone().map(Into::into))?; diff --git a/asg/src/statement/iteration.rs b/asg/src/statement/iteration.rs index 04d327606e..bc38076659 100644 --- a/asg/src/statement/iteration.rs +++ b/asg/src/statement/iteration.rs @@ -17,16 +17,7 @@ use leo_ast::IntegerType; use crate::{ - AsgConvertError, - Expression, - ExpressionNode, - FromAst, - InnerVariable, - Node, - PartialType, - Scope, - Span, - Statement, + AsgConvertError, Expression, ExpressionNode, FromAst, InnerVariable, Node, PartialType, Scope, Span, Statement, Variable, }; diff --git a/ast/src/common/identifier.rs b/ast/src/common/identifier.rs index f4a571bbb8..6728212c77 100644 --- a/ast/src/common/identifier.rs +++ b/ast/src/common/identifier.rs @@ -21,13 +21,9 @@ use tendril::StrTendril; use crate::Node; use serde::{ de::{ - Visitor, - {self}, + Visitor, {self}, }, - Deserialize, - Deserializer, - Serialize, - Serializer, + Deserialize, Deserializer, Serialize, Serializer, }; use std::{ collections::BTreeMap, diff --git a/ast/src/expression/mod.rs b/ast/src/expression/mod.rs index 701efc50bc..2d2389d0ac 100644 --- a/ast/src/expression/mod.rs +++ b/ast/src/expression/mod.rs @@ -15,13 +15,7 @@ // along with the Leo library. If not, see . use crate::{ - ArrayDimensions, - CircuitImpliedVariableDefinition, - GroupValue, - Identifier, - IntegerType, - PositiveNumber, - Span, + ArrayDimensions, CircuitImpliedVariableDefinition, GroupValue, Identifier, IntegerType, PositiveNumber, Span, SpreadOrExpression, }; diff --git a/ast/src/groups/group_coordinate.rs b/ast/src/groups/group_coordinate.rs index 7f3e8a4666..b8d05ee786 100644 --- a/ast/src/groups/group_coordinate.rs +++ b/ast/src/groups/group_coordinate.rs @@ -16,11 +16,8 @@ use crate::common::span::Span; use leo_input::values::{ - GroupCoordinate as InputGroupCoordinate, - Inferred as InputInferred, - NumberValue as InputNumberValue, - SignHigh as InputSignHigh, - SignLow as InputSignLow, + GroupCoordinate as InputGroupCoordinate, Inferred as InputInferred, NumberValue as InputNumberValue, + SignHigh as InputSignHigh, SignLow as InputSignLow, }; use serde::{Deserialize, Serialize}; diff --git a/ast/src/groups/group_value.rs b/ast/src/groups/group_value.rs index f7e26069c7..e3bff066dc 100644 --- a/ast/src/groups/group_value.rs +++ b/ast/src/groups/group_value.rs @@ -16,9 +16,7 @@ use crate::{common::span::Span, groups::GroupCoordinate}; use leo_input::values::{ - GroupRepresentation as InputGroupRepresentation, - GroupTuple as InputGroupTuple, - GroupValue as InputGroupValue, + GroupRepresentation as InputGroupRepresentation, GroupTuple as InputGroupTuple, GroupValue as InputGroupValue, }; use serde::{Deserialize, Serialize}; diff --git a/ast/src/input/input_value.rs b/ast/src/input/input_value.rs index d12a8b8990..735bba7222 100644 --- a/ast/src/input/input_value.rs +++ b/ast/src/input/input_value.rs @@ -20,15 +20,8 @@ use leo_input::{ expressions::{ArrayInitializerExpression, ArrayInlineExpression, Expression, StringExpression, TupleExpression}, types::{ArrayType, CharType, DataType, IntegerType, TupleType, Type}, values::{ - Address, - AddressValue, - BooleanValue, - CharValue as InputCharValue, - FieldValue, - GroupValue as InputGroupValue, - IntegerValue, - NumberValue, - Value, + Address, AddressValue, BooleanValue, CharValue as InputCharValue, FieldValue, GroupValue as InputGroupValue, + IntegerValue, NumberValue, Value, }, }; use pest::Span; diff --git a/ast/src/input/program_state/public_state/public_state.rs b/ast/src/input/program_state/public_state/public_state.rs index 995aa06759..7de8b04691 100644 --- a/ast/src/input/program_state/public_state/public_state.rs +++ b/ast/src/input/program_state/public_state/public_state.rs @@ -40,7 +40,11 @@ impl PublicState { } pub fn len(&self) -> usize { - if self.state.is_present() { 1usize } else { 0usize } + if self.state.is_present() { + 1usize + } else { + 0usize + } } /// Parse all input variables included in a file and store them in `self`. diff --git a/ast/src/reducer/canonicalization.rs b/ast/src/reducer/canonicalization.rs index edf300ada4..0e14208fc1 100644 --- a/ast/src/reducer/canonicalization.rs +++ b/ast/src/reducer/canonicalization.rs @@ -47,7 +47,7 @@ impl Canonicalizer { let mut left = Box::new(start); for access in accesses.iter() { - match self.canonicalize_assignee_access(&access) { + match self.canonicalize_assignee_access(access) { AssigneeAccess::ArrayIndex(index) => { left = Box::new(Expression::ArrayAccess(ArrayAccessExpression { array: left, @@ -276,6 +276,11 @@ impl Canonicalizer { span: call.span.clone(), }); } + Expression::Identifier(identifier) => { + if identifier.name.as_ref() == "Self" && self.circuit_name.is_some() { + return Expression::Identifier(self.circuit_name.as_ref().unwrap().clone()); + } + } _ => {} } @@ -290,7 +295,7 @@ impl Canonicalizer { AssigneeAccess::ArrayRange(left, right) } - AssigneeAccess::ArrayIndex(index) => AssigneeAccess::ArrayIndex(self.canonicalize_expression(&index)), + AssigneeAccess::ArrayIndex(index) => AssigneeAccess::ArrayIndex(self.canonicalize_expression(index)), _ => access.clone(), } } @@ -313,7 +318,7 @@ impl Canonicalizer { let statements = block .statements .iter() - .map(|block_statement| self.canonicalize_statement(&block_statement)) + .map(|block_statement| self.canonicalize_statement(block_statement)) .collect(); Block { diff --git a/ast/src/reducer/reconstructing_director.rs b/ast/src/reducer/reconstructing_director.rs index cf5a409d06..d7710df122 100644 --- a/ast/src/reducer/reconstructing_director.rs +++ b/ast/src/reducer/reconstructing_director.rs @@ -50,34 +50,32 @@ impl ReconstructingDirector { // Expressions pub fn reduce_expression(&mut self, expression: &Expression) -> Result { let new = match expression { - Expression::Identifier(identifier) => Expression::Identifier(self.reduce_identifier(&identifier)?), - Expression::Value(value) => self.reduce_value(&value)?, - Expression::Binary(binary) => Expression::Binary(self.reduce_binary(&binary)?), - Expression::Unary(unary) => Expression::Unary(self.reduce_unary(&unary)?), - Expression::Ternary(ternary) => Expression::Ternary(self.reduce_ternary(&ternary)?), - Expression::Cast(cast) => Expression::Cast(self.reduce_cast(&cast)?), + Expression::Identifier(identifier) => Expression::Identifier(self.reduce_identifier(identifier)?), + Expression::Value(value) => self.reduce_value(value)?, + Expression::Binary(binary) => Expression::Binary(self.reduce_binary(binary)?), + Expression::Unary(unary) => Expression::Unary(self.reduce_unary(unary)?), + Expression::Ternary(ternary) => Expression::Ternary(self.reduce_ternary(ternary)?), + Expression::Cast(cast) => Expression::Cast(self.reduce_cast(cast)?), - Expression::ArrayInline(array_inline) => Expression::ArrayInline(self.reduce_array_inline(&array_inline)?), - Expression::ArrayInit(array_init) => Expression::ArrayInit(self.reduce_array_init(&array_init)?), - Expression::ArrayAccess(array_access) => Expression::ArrayAccess(self.reduce_array_access(&array_access)?), + Expression::ArrayInline(array_inline) => Expression::ArrayInline(self.reduce_array_inline(array_inline)?), + Expression::ArrayInit(array_init) => Expression::ArrayInit(self.reduce_array_init(array_init)?), + Expression::ArrayAccess(array_access) => Expression::ArrayAccess(self.reduce_array_access(array_access)?), Expression::ArrayRangeAccess(array_range_access) => { - Expression::ArrayRangeAccess(self.reduce_array_range_access(&array_range_access)?) + Expression::ArrayRangeAccess(self.reduce_array_range_access(array_range_access)?) } - Expression::TupleInit(tuple_init) => Expression::TupleInit(self.reduce_tuple_init(&tuple_init)?), - Expression::TupleAccess(tuple_access) => Expression::TupleAccess(self.reduce_tuple_access(&tuple_access)?), + Expression::TupleInit(tuple_init) => Expression::TupleInit(self.reduce_tuple_init(tuple_init)?), + Expression::TupleAccess(tuple_access) => Expression::TupleAccess(self.reduce_tuple_access(tuple_access)?), - Expression::CircuitInit(circuit_init) => Expression::CircuitInit(self.reduce_circuit_init(&circuit_init)?), + Expression::CircuitInit(circuit_init) => Expression::CircuitInit(self.reduce_circuit_init(circuit_init)?), Expression::CircuitMemberAccess(circuit_member_access) => { - Expression::CircuitMemberAccess(self.reduce_circuit_member_access(&circuit_member_access)?) + Expression::CircuitMemberAccess(self.reduce_circuit_member_access(circuit_member_access)?) } Expression::CircuitStaticFunctionAccess(circuit_static_fn_access) => { - Expression::CircuitStaticFunctionAccess( - self.reduce_circuit_static_fn_access(&circuit_static_fn_access)?, - ) + Expression::CircuitStaticFunctionAccess(self.reduce_circuit_static_fn_access(circuit_static_fn_access)?) } - Expression::Call(call) => Expression::Call(self.reduce_call(&call)?), + Expression::Call(call) => Expression::Call(self.reduce_call(call)?), }; self.reducer.reduce_expression(expression, new) @@ -93,7 +91,7 @@ impl ReconstructingDirector { pub fn reduce_group_value(&mut self, group_value: &GroupValue) -> Result { let new = match group_value { - GroupValue::Tuple(group_tuple) => GroupValue::Tuple(self.reduce_group_tuple(&group_tuple)?), + GroupValue::Tuple(group_tuple) => GroupValue::Tuple(self.reduce_group_tuple(group_tuple)?), _ => group_value.clone(), }; @@ -107,9 +105,9 @@ impl ReconstructingDirector { pub fn reduce_value(&mut self, value: &ValueExpression) -> Result { let new = match value { ValueExpression::Group(group_value) => { - Expression::Value(ValueExpression::Group(Box::new(self.reduce_group_value(&group_value)?))) + Expression::Value(ValueExpression::Group(Box::new(self.reduce_group_value(group_value)?))) } - ValueExpression::String(string, span) => self.reduce_string(string, &span)?, + ValueExpression::String(string, span) => self.reduce_string(string, span)?, _ => Expression::Value(value.clone()), }; @@ -284,14 +282,14 @@ impl ReconstructingDirector { // Statements pub fn reduce_statement(&mut self, statement: &Statement) -> Result { let new = match statement { - Statement::Return(return_statement) => Statement::Return(self.reduce_return(&return_statement)?), - Statement::Definition(definition) => Statement::Definition(self.reduce_definition(&definition)?), - Statement::Assign(assign) => Statement::Assign(self.reduce_assign(&assign)?), - Statement::Conditional(conditional) => Statement::Conditional(self.reduce_conditional(&conditional)?), - Statement::Iteration(iteration) => Statement::Iteration(self.reduce_iteration(&iteration)?), - Statement::Console(console) => Statement::Console(self.reduce_console(&console)?), - Statement::Expression(expression) => Statement::Expression(self.reduce_expression_statement(&expression)?), - Statement::Block(block) => Statement::Block(self.reduce_block(&block)?), + Statement::Return(return_statement) => Statement::Return(self.reduce_return(return_statement)?), + Statement::Definition(definition) => Statement::Definition(self.reduce_definition(definition)?), + Statement::Assign(assign) => Statement::Assign(self.reduce_assign(assign)?), + Statement::Conditional(conditional) => Statement::Conditional(self.reduce_conditional(conditional)?), + Statement::Iteration(iteration) => Statement::Iteration(self.reduce_iteration(iteration)?), + Statement::Console(console) => Statement::Console(self.reduce_console(console)?), + Statement::Expression(expression) => Statement::Expression(self.reduce_expression_statement(expression)?), + Statement::Block(block) => Statement::Block(self.reduce_block(block)?), }; self.reducer.reduce_statement(statement, new) @@ -334,8 +332,8 @@ impl ReconstructingDirector { AssigneeAccess::ArrayRange(left, right) } - AssigneeAccess::ArrayIndex(index) => AssigneeAccess::ArrayIndex(self.reduce_expression(&index)?), - AssigneeAccess::Member(identifier) => AssigneeAccess::Member(self.reduce_identifier(&identifier)?), + AssigneeAccess::ArrayIndex(index) => AssigneeAccess::ArrayIndex(self.reduce_expression(index)?), + AssigneeAccess::Member(identifier) => AssigneeAccess::Member(self.reduce_identifier(identifier)?), _ => access.clone(), }; @@ -456,7 +454,7 @@ impl ReconstructingDirector { let mut global_consts = IndexMap::new(); for (name, definition) in program.global_consts.iter() { - global_consts.insert(name.clone(), self.reduce_definition(&definition)?); + global_consts.insert(name.clone(), self.reduce_definition(definition)?); } self.reducer @@ -513,12 +511,10 @@ impl ReconstructingDirector { pub fn reduce_circuit_member(&mut self, circuit_member: &CircuitMember) -> Result { let new = match circuit_member { CircuitMember::CircuitVariable(identifier, type_) => CircuitMember::CircuitVariable( - self.reduce_identifier(&identifier)?, - self.reduce_type(&type_, &identifier.span)?, + self.reduce_identifier(identifier)?, + self.reduce_type(type_, &identifier.span)?, ), - CircuitMember::CircuitFunction(function) => { - CircuitMember::CircuitFunction(self.reduce_function(&function)?) - } + CircuitMember::CircuitFunction(function) => CircuitMember::CircuitFunction(self.reduce_function(function)?), }; self.reducer.reduce_circuit_member(circuit_member, new) diff --git a/ast/src/types/integer_type.rs b/ast/src/types/integer_type.rs index e2f3cab5bc..a7768a3512 100644 --- a/ast/src/types/integer_type.rs +++ b/ast/src/types/integer_type.rs @@ -15,8 +15,7 @@ // along with the Leo library. If not, see . use leo_input::types::{ - IntegerType as InputIntegerType, - SignedIntegerType as InputSignedIntegerType, + IntegerType as InputIntegerType, SignedIntegerType as InputSignedIntegerType, UnsignedIntegerType as InputUnsignedIntegerType, }; diff --git a/ast/src/types/type_.rs b/ast/src/types/type_.rs index fb4ad87522..bc6f3f8fd0 100644 --- a/ast/src/types/type_.rs +++ b/ast/src/types/type_.rs @@ -16,10 +16,7 @@ use crate::{ArrayDimensions, Identifier, IntegerType}; use leo_input::types::{ - ArrayType as InputArrayType, - DataType as InputDataType, - TupleType as InputTupleType, - Type as InputType, + ArrayType as InputArrayType, DataType as InputDataType, TupleType as InputTupleType, Type as InputType, }; use serde::{Deserialize, Serialize}; @@ -70,8 +67,8 @@ impl Type { (Type::Char, Type::Char) => true, (Type::Field, Type::Field) => true, (Type::Group, Type::Group) => true, - (Type::IntegerType(left), Type::IntegerType(right)) => left.eq(&right), - (Type::Circuit(left), Type::Circuit(right)) => left.eq(&right), + (Type::IntegerType(left), Type::IntegerType(right)) => left.eq(right), + (Type::Circuit(left), Type::Circuit(right)) => left.eq(right), (Type::SelfType, Type::SelfType) => true, (Type::Array(left_type, left_dim), Type::Array(right_type, right_dim)) => { // Convert array dimensions to owned. diff --git a/compiler/Cargo.toml b/compiler/Cargo.toml index 5725a5f453..f4613b434b 100644 --- a/compiler/Cargo.toml +++ b/compiler/Cargo.toml @@ -57,28 +57,28 @@ version = "1.5.3" version = "0.4" [dependencies.snarkvm-curves] -version = "0.7.5" +version = "0.7.7" default-features = false [dependencies.snarkvm-fields] -version = "0.7.5" +version = "0.7.7" default-features = false [dependencies.snarkvm-dpc] -version = "0.7.5" +version = "0.7.6" default-features = false [dependencies.snarkvm-gadgets] -version = "0.7.5" +version = "0.7.6" default-features = false features = [ "curves" ] [dependencies.snarkvm-r1cs] -version = "0.7.5" +version = "0.7.6" default-features = false [dependencies.snarkvm-utilities] -version = "0.7.4" +version = "0.7.6" [dependencies.bincode] version = "1.3" @@ -119,7 +119,7 @@ version = "0.3" default-features = false [dev-dependencies.snarkvm-algorithms] -version = "0.7.4" +version = "0.7.6" default-features = false [dev-dependencies.tempfile] diff --git a/compiler/src/compiler.rs b/compiler/src/compiler.rs index b8b507db0d..f2eef8ad70 100644 --- a/compiler/src/compiler.rs +++ b/compiler/src/compiler.rs @@ -18,12 +18,7 @@ use crate::{ constraints::{generate_constraints, generate_test_constraints}, errors::CompilerError, - AstSnapshotOptions, - CompilerOptions, - GroupType, - Output, - OutputFile, - TypeInferencePhase, + AstSnapshotOptions, CompilerOptions, GroupType, Output, OutputFile, TypeInferencePhase, }; pub use leo_asg::{new_context, AsgContext as Context, AsgContext}; use leo_asg::{Asg, AsgPass, FormattedError, Program as AsgProgram}; @@ -190,7 +185,7 @@ impl<'a, F: PrimeField, G: GroupType> Compiler<'a, F, G> { state_string: &str, state_path: &Path, ) -> Result<(), CompilerError> { - let input_syntax_tree = LeoInputParser::parse_file(&input_string).map_err(|mut e| { + let input_syntax_tree = LeoInputParser::parse_file(input_string).map_err(|mut e| { e.set_path( input_path.to_str().unwrap_or_default(), &input_string.lines().map(|x| x.to_string()).collect::>()[..], @@ -198,7 +193,7 @@ impl<'a, F: PrimeField, G: GroupType> Compiler<'a, F, G> { e })?; - let state_syntax_tree = LeoInputParser::parse_file(&state_string).map_err(|mut e| { + let state_syntax_tree = LeoInputParser::parse_file(state_string).map_err(|mut e| { e.set_path( state_path.to_str().unwrap_or_default(), &state_string.lines().map(|x| x.to_string()).collect::>()[..], @@ -315,14 +310,14 @@ impl<'a, F: PrimeField, G: GroupType> Compiler<'a, F, G> { /// Synthesizes the circuit with program input to verify correctness. /// pub fn compile_constraints>(&self, cs: &mut CS) -> Result { - generate_constraints::(cs, &self.asg.as_ref().unwrap(), &self.program_input) + generate_constraints::(cs, self.asg.as_ref().unwrap(), &self.program_input) } /// /// Synthesizes the circuit for test functions with program input. /// pub fn compile_test_constraints(self, input_pairs: InputPairs) -> Result<(u32, u32), CompilerError> { - generate_test_constraints::(&self.asg.as_ref().unwrap(), input_pairs, &self.output_directory) + generate_test_constraints::(self.asg.as_ref().unwrap(), input_pairs, &self.output_directory) } /// diff --git a/compiler/src/console/assert.rs b/compiler/src/console/assert.rs index e850829f40..ef9ef8cebc 100644 --- a/compiler/src/console/assert.rs +++ b/compiler/src/console/assert.rs @@ -17,11 +17,7 @@ //! Enforces an assert equals statement in a compiled Leo program. use crate::{ - errors::ConsoleError, - get_indicator_value, - program::ConstrainedProgram, - value::ConstrainedValue, - GroupType, + errors::ConsoleError, get_indicator_value, program::ConstrainedProgram, value::ConstrainedValue, GroupType, }; use leo_asg::{Expression, Span}; diff --git a/compiler/src/constraints/constraints.rs b/compiler/src/constraints/constraints.rs index 6d256dea96..4e34b4c096 100644 --- a/compiler/src/constraints/constraints.rs +++ b/compiler/src/constraints/constraints.rs @@ -44,7 +44,7 @@ pub fn generate_constraints<'a, F: PrimeField, G: GroupType, CS: ConstraintSy match main { Some(function) => { - let result = resolved_program.enforce_main_function(cs, &function, input)?; + let result = resolved_program.enforce_main_function(cs, function, input)?; Ok(result) } _ => Err(CompilerError::NoMainFunction), diff --git a/compiler/src/errors/expression.rs b/compiler/src/errors/expression.rs index 3f360438e5..0ceeed1fe5 100644 --- a/compiler/src/errors/expression.rs +++ b/compiler/src/errors/expression.rs @@ -15,14 +15,7 @@ // along with the Leo library. If not, see . use crate::errors::{ - AddressError, - BooleanError, - CharError, - FieldError, - FunctionError, - GroupError, - IntegerError, - ValueError, + AddressError, BooleanError, CharError, FieldError, FunctionError, GroupError, IntegerError, ValueError, }; use leo_ast::{FormattedError, Identifier, LeoError, Span}; use snarkvm_r1cs::SynthesisError; diff --git a/compiler/src/errors/function.rs b/compiler/src/errors/function.rs index 3ec7f66a6f..17c9ff07ba 100644 --- a/compiler/src/errors/function.rs +++ b/compiler/src/errors/function.rs @@ -15,16 +15,8 @@ // along with the Leo library. If not, see . use crate::errors::{ - AddressError, - BooleanError, - CharError, - ExpressionError, - FieldError, - GroupError, - IntegerError, - OutputBytesError, - StatementError, - ValueError, + AddressError, BooleanError, CharError, ExpressionError, FieldError, GroupError, IntegerError, OutputBytesError, + StatementError, ValueError, }; use leo_asg::AsgConvertError; use leo_ast::{FormattedError, LeoError, Span}; diff --git a/compiler/src/expression/array/access.rs b/compiler/src/expression/array/access.rs index 11009dbd64..0fd6e7f5fb 100644 --- a/compiler/src/expression/array/access.rs +++ b/compiler/src/expression/array/access.rs @@ -94,7 +94,7 @@ impl<'a, F: PrimeField, G: GroupType> ConstrainedProgram<'a, F, G> { .len() .try_into() .map_err(|_| ExpressionError::array_length_out_of_bounds(span))?; - self.array_bounds_check(cs, &&index_resolved, array_len, span)?; + self.array_bounds_check(cs, &index_resolved, array_len, span)?; } let mut current_value = array.pop().unwrap(); diff --git a/compiler/src/expression/expression.rs b/compiler/src/expression/expression.rs index cc55b6d1d7..da22053fd1 100644 --- a/compiler/src/expression/expression.rs +++ b/compiler/src/expression/expression.rs @@ -24,8 +24,7 @@ use crate::{ relational::*, resolve_core_circuit, value::{Address, Char, CharType, ConstrainedCircuitMember, ConstrainedValue, Integer}, - FieldType, - GroupType, + FieldType, GroupType, }; use leo_asg::{expression::*, ConstValue, Expression, Node, Span}; diff --git a/compiler/src/expression/function/function.rs b/compiler/src/expression/function/function.rs index e67700d7a8..58f2f0b3d4 100644 --- a/compiler/src/expression/function/function.rs +++ b/compiler/src/expression/function/function.rs @@ -44,7 +44,7 @@ impl<'a, F: PrimeField, G: GroupType> ConstrainedProgram<'a, F, G> { }; let return_value = self - .enforce_function(&mut cs.ns(name_unique), &function, target, arguments) + .enforce_function(&mut cs.ns(name_unique), function, target, arguments) .map_err(|error| ExpressionError::from(Box::new(error)))?; Ok(return_value) diff --git a/compiler/src/function/input/main_function_input.rs b/compiler/src/function/input/main_function_input.rs index 75379676fe..3f54f73200 100644 --- a/compiler/src/function/input/main_function_input.rs +++ b/compiler/src/function/input/main_function_input.rs @@ -21,16 +21,10 @@ use crate::{ errors::{FunctionError, IntegerError}, program::ConstrainedProgram, value::{ - boolean::input::bool_from_input, - char::char_from_input, - field::input::field_from_input, - group::input::group_from_input, - ConstrainedValue, + boolean::input::bool_from_input, char::char_from_input, field::input::field_from_input, + group::input::group_from_input, ConstrainedValue, }, - CharType, - FieldType, - GroupType, - Integer, + CharType, FieldType, GroupType, Integer, }; use leo_asg::{ConstInt, Type}; use leo_ast::{Char, InputValue, Span}; @@ -62,7 +56,7 @@ impl<'a, F: PrimeField, G: GroupType> ConstrainedProgram<'a, F, G> { span, )?)), Type::Array(type_, len) => self.allocate_array(cs, name, &*type_, *len, input_option, span), - Type::Tuple(types) => self.allocate_tuple(cs, &name, types, input_option, span), + Type::Tuple(types) => self.allocate_tuple(cs, name, types, input_option, span), _ => unimplemented!("main function input not implemented for type {}", type_), // Should not happen. } } diff --git a/compiler/src/function/main_function.rs b/compiler/src/function/main_function.rs index 8fe7e3a635..2e615924dc 100644 --- a/compiler/src/function/main_function.rs +++ b/compiler/src/function/main_function.rs @@ -39,7 +39,7 @@ impl<'a, F: PrimeField, G: GroupType> ConstrainedProgram<'a, F, G> { if let Some(asg_input) = asg_input { let value = - self.allocate_input_keyword(cs, &function.name.borrow().span, &asg_input.container_circuit, input)?; + self.allocate_input_keyword(cs, &function.name.borrow().span, asg_input.container_circuit, input)?; self.store(asg_input.container.borrow().id, value); } diff --git a/compiler/src/function/mut_target.rs b/compiler/src/function/mut_target.rs index f9ecd96351..5ab48dade7 100644 --- a/compiler/src/function/mut_target.rs +++ b/compiler/src/function/mut_target.rs @@ -20,16 +20,8 @@ use std::cell::Cell; use crate::{errors::StatementError, program::ConstrainedProgram, value::ConstrainedValue, GroupType}; use leo_asg::{ - ArrayAccessExpression, - ArrayRangeAccessExpression, - AssignAccess, - AssignOperation, - AssignStatement, - CircuitAccessExpression, - Expression, - Node, - TupleAccessExpression, - Variable, + ArrayAccessExpression, ArrayRangeAccessExpression, AssignAccess, AssignOperation, AssignStatement, + CircuitAccessExpression, Expression, Node, TupleAccessExpression, Variable, }; use snarkvm_fields::PrimeField; diff --git a/compiler/src/function/result/result.rs b/compiler/src/function/result/result.rs index a0f71b896c..9e7885e86e 100644 --- a/compiler/src/function/result/result.rs +++ b/compiler/src/function/result/result.rs @@ -17,11 +17,7 @@ //! Enforces that one return value is produced in a compiled Leo program. use crate::{ - errors::StatementError, - get_indicator_value, - program::ConstrainedProgram, - value::ConstrainedValue, - GroupType, + errors::StatementError, get_indicator_value, program::ConstrainedProgram, value::ConstrainedValue, GroupType, }; use leo_asg::{Span, Type}; @@ -82,7 +78,7 @@ impl<'a, F: PrimeField, G: GroupType> ConstrainedProgram<'a, F, G> { cs.ns(|| format!("select result {} {}:{}", i, span.line_start, span.col_start)), &indicator, &result, - &value, + value, ) .map_err(|_| StatementError::select_fail(result.to_string(), value.to_string(), span))?, ); @@ -94,7 +90,7 @@ impl<'a, F: PrimeField, G: GroupType> ConstrainedProgram<'a, F, G> { if expected_return.is_unit() { Ok(ConstrainedValue::Tuple(vec![])) } else { - return_value.ok_or_else(|| StatementError::no_returns(&expected_return, span)) + return_value.ok_or_else(|| StatementError::no_returns(expected_return, span)) } } } diff --git a/compiler/src/output/mod.rs b/compiler/src/output/mod.rs index 89d09e6823..2030b12764 100644 --- a/compiler/src/output/mod.rs +++ b/compiler/src/output/mod.rs @@ -158,10 +158,13 @@ impl Output { _ => value.to_string(), }; - registers.insert(name.to_string(), OutputRegister { - type_: register_type.to_string(), - value, - }); + registers.insert( + name.to_string(), + OutputRegister { + type_: register_type.to_string(), + value, + }, + ); } Ok(Output { registers }) diff --git a/compiler/src/output/output_file.rs b/compiler/src/output/output_file.rs index b9b2570baf..4731c290f3 100644 --- a/compiler/src/output/output_file.rs +++ b/compiler/src/output/output_file.rs @@ -21,8 +21,7 @@ use crate::errors::OutputFileError; use std::{ borrow::Cow, fs::{ - File, - {self}, + File, {self}, }, io::Write, path::Path, diff --git a/compiler/src/phases/reducing_director.rs b/compiler/src/phases/reducing_director.rs index 2a934909a8..49480254e0 100644 --- a/compiler/src/phases/reducing_director.rs +++ b/compiler/src/phases/reducing_director.rs @@ -18,86 +18,37 @@ use indexmap::IndexMap; use leo_asg::{ - ArrayAccessExpression as AsgArrayAccessExpression, - ArrayInitExpression as AsgArrayInitExpression, - ArrayInlineExpression as AsgArrayInlineExpression, - ArrayRangeAccessExpression as AsgArrayRangeAccessExpression, - AssignAccess as AsgAssignAccess, - AssignStatement as AsgAssignStatement, - BinaryExpression as AsgBinaryExpression, - BlockStatement as AsgBlockStatement, - CallExpression as AsgCallExpression, - CastExpression as AsgCastExpression, - CharValue as AsgCharValue, - Circuit as AsgCircuit, - CircuitAccessExpression as AsgCircuitAccessExpression, - CircuitInitExpression as AsgCircuitInitExpression, - CircuitMember as AsgCircuitMember, - ConditionalStatement as AsgConditionalStatement, - ConsoleFunction as AsgConsoleFunction, - ConsoleStatement as AsgConsoleStatement, - ConstValue, - Constant as AsgConstant, - DefinitionStatement as AsgDefinitionStatement, - Expression as AsgExpression, - ExpressionStatement as AsgExpressionStatement, - Function as AsgFunction, - GroupValue as AsgGroupValue, - IterationStatement as AsgIterationStatement, - ReturnStatement as AsgReturnStatement, - Statement as AsgStatement, - TernaryExpression as AsgTernaryExpression, - TupleAccessExpression as AsgTupleAccessExpression, - TupleInitExpression as AsgTupleInitExpression, - Type as AsgType, - UnaryExpression as AsgUnaryExpression, + ArrayAccessExpression as AsgArrayAccessExpression, ArrayInitExpression as AsgArrayInitExpression, + ArrayInlineExpression as AsgArrayInlineExpression, ArrayRangeAccessExpression as AsgArrayRangeAccessExpression, + AssignAccess as AsgAssignAccess, AssignStatement as AsgAssignStatement, BinaryExpression as AsgBinaryExpression, + BlockStatement as AsgBlockStatement, CallExpression as AsgCallExpression, CastExpression as AsgCastExpression, + CharValue as AsgCharValue, Circuit as AsgCircuit, CircuitAccessExpression as AsgCircuitAccessExpression, + CircuitInitExpression as AsgCircuitInitExpression, CircuitMember as AsgCircuitMember, + ConditionalStatement as AsgConditionalStatement, ConsoleFunction as AsgConsoleFunction, + ConsoleStatement as AsgConsoleStatement, ConstValue, Constant as AsgConstant, + DefinitionStatement as AsgDefinitionStatement, Expression as AsgExpression, + ExpressionStatement as AsgExpressionStatement, Function as AsgFunction, GroupValue as AsgGroupValue, + IterationStatement as AsgIterationStatement, ReturnStatement as AsgReturnStatement, Statement as AsgStatement, + TernaryExpression as AsgTernaryExpression, TupleAccessExpression as AsgTupleAccessExpression, + TupleInitExpression as AsgTupleInitExpression, Type as AsgType, UnaryExpression as AsgUnaryExpression, VariableRef as AsgVariableRef, }; use leo_ast::{ - ArrayAccessExpression as AstArrayAccessExpression, - ArrayDimensions, - ArrayInitExpression as AstArrayInitExpression, - ArrayInlineExpression as AstArrayInlineExpression, - ArrayRangeAccessExpression as AstArrayRangeAccessExpression, - AssignStatement as AstAssignStatement, - Assignee, - AssigneeAccess as AstAssignAccess, - BinaryExpression as AstBinaryExpression, - Block as AstBlockStatement, - CallExpression as AstCallExpression, - CastExpression as AstCastExpression, - Char, - CharValue as AstCharValue, - Circuit as AstCircuit, - CircuitImpliedVariableDefinition, - CircuitInitExpression as AstCircuitInitExpression, - CircuitMember as AstCircuitMember, - CircuitMemberAccessExpression, - CircuitStaticFunctionAccessExpression, - CombinerError, - ConditionalStatement as AstConditionalStatement, - ConsoleArgs as AstConsoleArgs, - ConsoleFunction as AstConsoleFunction, - ConsoleStatement as AstConsoleStatement, - DefinitionStatement as AstDefinitionStatement, - Expression as AstExpression, - ExpressionStatement as AstExpressionStatement, - Function as AstFunction, - GroupTuple, - GroupValue as AstGroupValue, - IterationStatement as AstIterationStatement, - PositiveNumber, - ReconstructingReducer, - ReducerError, - ReturnStatement as AstReturnStatement, - Span, - SpreadOrExpression, - Statement as AstStatement, - TernaryExpression as AstTernaryExpression, - TupleAccessExpression as AstTupleAccessExpression, - TupleInitExpression as AstTupleInitExpression, - Type as AstType, - UnaryExpression as AstUnaryExpression, + ArrayAccessExpression as AstArrayAccessExpression, ArrayDimensions, ArrayInitExpression as AstArrayInitExpression, + ArrayInlineExpression as AstArrayInlineExpression, ArrayRangeAccessExpression as AstArrayRangeAccessExpression, + AssignStatement as AstAssignStatement, Assignee, AssigneeAccess as AstAssignAccess, + BinaryExpression as AstBinaryExpression, Block as AstBlockStatement, CallExpression as AstCallExpression, + CastExpression as AstCastExpression, Char, CharValue as AstCharValue, Circuit as AstCircuit, + CircuitImpliedVariableDefinition, CircuitInitExpression as AstCircuitInitExpression, + CircuitMember as AstCircuitMember, CircuitMemberAccessExpression, CircuitStaticFunctionAccessExpression, + CombinerError, ConditionalStatement as AstConditionalStatement, ConsoleArgs as AstConsoleArgs, + ConsoleFunction as AstConsoleFunction, ConsoleStatement as AstConsoleStatement, + DefinitionStatement as AstDefinitionStatement, Expression as AstExpression, + ExpressionStatement as AstExpressionStatement, Function as AstFunction, GroupTuple, GroupValue as AstGroupValue, + IterationStatement as AstIterationStatement, PositiveNumber, ReconstructingReducer, ReducerError, + ReturnStatement as AstReturnStatement, Span, SpreadOrExpression, Statement as AstStatement, + TernaryExpression as AstTernaryExpression, TupleAccessExpression as AstTupleAccessExpression, + TupleInitExpression as AstTupleInitExpression, Type as AstType, UnaryExpression as AstUnaryExpression, ValueExpression, }; use tendril::StrTendril; @@ -155,49 +106,49 @@ impl CombineAstAsgDirector { asg: &AsgExpression, ) -> Result { let new = match (ast, asg) { - (AstExpression::Value(value), AsgExpression::Constant(const_)) => self.reduce_value(&value, &const_)?, + (AstExpression::Value(value), AsgExpression::Constant(const_)) => self.reduce_value(value, const_)?, (AstExpression::Binary(ast), AsgExpression::Binary(asg)) => { - AstExpression::Binary(self.reduce_binary(&ast, &asg)?) + AstExpression::Binary(self.reduce_binary(ast, asg)?) } (AstExpression::Unary(ast), AsgExpression::Unary(asg)) => { - AstExpression::Unary(self.reduce_unary(&ast, &asg)?) + AstExpression::Unary(self.reduce_unary(ast, asg)?) } (AstExpression::Ternary(ast), AsgExpression::Ternary(asg)) => { - AstExpression::Ternary(self.reduce_ternary(&ast, &asg)?) + AstExpression::Ternary(self.reduce_ternary(ast, asg)?) } - (AstExpression::Cast(ast), AsgExpression::Cast(asg)) => AstExpression::Cast(self.reduce_cast(&ast, &asg)?), + (AstExpression::Cast(ast), AsgExpression::Cast(asg)) => AstExpression::Cast(self.reduce_cast(ast, asg)?), (AstExpression::ArrayInline(ast), AsgExpression::ArrayInline(asg)) => { - AstExpression::ArrayInline(self.reduce_array_inline(&ast, &asg)?) + AstExpression::ArrayInline(self.reduce_array_inline(ast, asg)?) } (AstExpression::ArrayInit(ast), AsgExpression::ArrayInit(asg)) => { - AstExpression::ArrayInit(self.reduce_array_init(&ast, &asg)?) + AstExpression::ArrayInit(self.reduce_array_init(ast, asg)?) } (AstExpression::ArrayAccess(ast), AsgExpression::ArrayAccess(asg)) => { - AstExpression::ArrayAccess(self.reduce_array_access(&ast, &asg)?) + AstExpression::ArrayAccess(self.reduce_array_access(ast, asg)?) } (AstExpression::ArrayRangeAccess(ast), AsgExpression::ArrayRangeAccess(asg)) => { - AstExpression::ArrayRangeAccess(self.reduce_array_range_access(&ast, &asg)?) + AstExpression::ArrayRangeAccess(self.reduce_array_range_access(ast, asg)?) } (AstExpression::TupleInit(ast), AsgExpression::TupleInit(asg)) => { - AstExpression::TupleInit(self.reduce_tuple_init(&ast, &asg)?) + AstExpression::TupleInit(self.reduce_tuple_init(ast, asg)?) } (AstExpression::TupleAccess(ast), AsgExpression::TupleAccess(asg)) => { - AstExpression::TupleAccess(self.reduce_tuple_access(&ast, &asg)?) + AstExpression::TupleAccess(self.reduce_tuple_access(ast, asg)?) } (AstExpression::CircuitInit(ast), AsgExpression::CircuitInit(asg)) => { - AstExpression::CircuitInit(self.reduce_circuit_init(&ast, &asg)?) + AstExpression::CircuitInit(self.reduce_circuit_init(ast, asg)?) } (AstExpression::CircuitMemberAccess(ast), AsgExpression::CircuitAccess(asg)) => { - AstExpression::CircuitMemberAccess(self.reduce_circuit_member_access(&ast, &asg)?) + AstExpression::CircuitMemberAccess(self.reduce_circuit_member_access(ast, asg)?) } (AstExpression::CircuitStaticFunctionAccess(ast), AsgExpression::CircuitAccess(asg)) => { - AstExpression::CircuitStaticFunctionAccess(self.reduce_circuit_static_fn_access(&ast, &asg)?) + AstExpression::CircuitStaticFunctionAccess(self.reduce_circuit_static_fn_access(ast, asg)?) } - (AstExpression::Call(ast), AsgExpression::Call(asg)) => AstExpression::Call(self.reduce_call(&ast, &asg)?), + (AstExpression::Call(ast), AsgExpression::Call(asg)) => AstExpression::Call(self.reduce_call(ast, asg)?), _ => ast.clone(), }; @@ -299,7 +250,7 @@ impl CombineAstAsgDirector { ast: &AstCastExpression, asg: &AsgCastExpression, ) -> Result { - let inner = self.reduce_expression(&ast.inner, &asg.inner.get())?; + let inner = self.reduce_expression(&ast.inner, asg.inner.get())?; let target_type = self.reduce_type(&ast.target_type, &asg.target_type, &ast.span)?; self.ast_reducer.reduce_cast(ast, inner, target_type) @@ -524,7 +475,7 @@ impl CombineAstAsgDirector { AstAssignAccess::ArrayRange(left, right) } (AstAssignAccess::ArrayIndex(ast_index), AsgAssignAccess::ArrayIndex(asg_index)) => { - let index = self.reduce_expression(&ast_index, asg_index.get())?; + let index = self.reduce_expression(ast_index, asg_index.get())?; AstAssignAccess::ArrayIndex(index) } _ => ast.clone(), @@ -577,7 +528,7 @@ impl CombineAstAsgDirector { block = self.reduce_block(&ast.block, asg_block)?; } else { return Err(ReducerError::from(CombinerError::asg_statement_not_block( - &asg.span.as_ref().unwrap(), + asg.span.as_ref().unwrap(), ))); } let next = match (ast.next.as_ref(), asg.next.get()) { @@ -595,7 +546,7 @@ impl CombineAstAsgDirector { ) -> Result { let function = match (&ast.function, &asg.function) { (AstConsoleFunction::Assert(ast_expression), AsgConsoleFunction::Assert(asg_expression)) => { - AstConsoleFunction::Assert(self.reduce_expression(&ast_expression, asg_expression.get())?) + AstConsoleFunction::Assert(self.reduce_expression(ast_expression, asg_expression.get())?) } (AstConsoleFunction::Error(ast_console_args), AsgConsoleFunction::Error(asg_format)) | (AstConsoleFunction::Log(ast_console_args), AsgConsoleFunction::Log(asg_format)) => { @@ -603,7 +554,7 @@ impl CombineAstAsgDirector { for (ast_parameter, asg_parameter) in ast_console_args.parameters.iter().zip(asg_format.parameters.iter()) { - parameters.push(self.reduce_expression(&ast_parameter, asg_parameter.get())?); + parameters.push(self.reduce_expression(ast_parameter, asg_parameter.get())?); } let args = AstConsoleArgs { @@ -640,14 +591,14 @@ impl CombineAstAsgDirector { let asg_type = AsgType::Tuple(types); type_ = match &ast.type_ { - Some(ast_type) => Some(self.reduce_type(&ast_type, &asg_type, &ast.span)?), + Some(ast_type) => Some(self.reduce_type(ast_type, &asg_type, &ast.span)?), None if self.options.type_inference_enabled() => Some((&asg_type).into()), _ => None, }; } else { type_ = match &ast.type_ { Some(ast_type) => { - Some(self.reduce_type(&ast_type, &asg.variables.first().unwrap().borrow().type_, &ast.span)?) + Some(self.reduce_type(ast_type, &asg.variables.first().unwrap().borrow().type_, &ast.span)?) } None if self.options.type_inference_enabled() => { Some((&asg.variables.first().unwrap().borrow().type_).into()) @@ -683,7 +634,7 @@ impl CombineAstAsgDirector { block = self.reduce_block(&ast.block, asg_block)?; } else { return Err(ReducerError::from(CombinerError::asg_statement_not_block( - &asg.span.as_ref().unwrap(), + asg.span.as_ref().unwrap(), ))); } diff --git a/compiler/src/prelude/blake2s.rs b/compiler/src/prelude/blake2s.rs index e22ac21f14..1b27e9267e 100644 --- a/compiler/src/prelude/blake2s.rs +++ b/compiler/src/prelude/blake2s.rs @@ -20,10 +20,7 @@ use leo_asg::{Function, Span}; use snarkvm_fields::PrimeField; use snarkvm_gadgets::{ - algorithms::prf::Blake2sGadget, - bits::ToBytesGadget, - integers::uint::UInt8, - traits::algorithms::PRFGadget, + algorithms::prf::Blake2sGadget, bits::ToBytesGadget, integers::uint::UInt8, traits::algorithms::PRFGadget, }; use snarkvm_r1cs::ConstraintSystem; diff --git a/compiler/src/statement/assign/assignee/array_index.rs b/compiler/src/statement/assign/assignee/array_index.rs index 4b7fc6f3b0..62d817b870 100644 --- a/compiler/src/statement/assign/assignee/array_index.rs +++ b/compiler/src/statement/assign/assignee/array_index.rs @@ -22,8 +22,7 @@ use crate::{ errors::{ExpressionError, StatementError}, program::ConstrainedProgram, value::ConstrainedValue, - GroupType, - Integer, + GroupType, Integer, }; use leo_asg::{ConstInt, Expression, Node}; @@ -69,7 +68,7 @@ impl<'a, F: PrimeField, G: GroupType> ConstrainedProgram<'a, F, G> { .len() .try_into() .map_err(|_| ExpressionError::array_length_out_of_bounds(&span))?; - self.array_bounds_check(cs, &&index_resolved, array_len, &span)?; + self.array_bounds_check(cs, &index_resolved, array_len, &span)?; } for (i, item) in input.iter_mut().enumerate() { @@ -116,7 +115,7 @@ impl<'a, F: PrimeField, G: GroupType> ConstrainedProgram<'a, F, G> { unique_namespace, &index_comparison, &temp_item, - &item, + item, ) .map_err(|e| ExpressionError::cannot_enforce("conditional select".to_string(), e, &span))?; *item = value; @@ -153,7 +152,7 @@ impl<'a, F: PrimeField, G: GroupType> ConstrainedProgram<'a, F, G> { .len() .try_into() .map_err(|_| ExpressionError::array_length_out_of_bounds(&span))?; - self.array_bounds_check(cs, &&index_resolved, array_len, &span)?; + self.array_bounds_check(cs, &index_resolved, array_len, &span)?; } for (i, item) in context.input.iter_mut().enumerate() { @@ -197,7 +196,7 @@ impl<'a, F: PrimeField, G: GroupType> ConstrainedProgram<'a, F, G> { item }; let value = - ConstrainedValue::conditionally_select(unique_namespace, &index_comparison, &temp_item, &item) + ConstrainedValue::conditionally_select(unique_namespace, &index_comparison, &temp_item, item) .map_err(|e| ExpressionError::cannot_enforce("conditional select".to_string(), e, &span))?; **item = value; } diff --git a/compiler/src/statement/assign/assignee/mod.rs b/compiler/src/statement/assign/assignee/mod.rs index d6e5a67f70..1072c4039b 100644 --- a/compiler/src/statement/assign/assignee/mod.rs +++ b/compiler/src/statement/assign/assignee/mod.rs @@ -95,15 +95,18 @@ impl<'a, F: PrimeField, G: GroupType> ConstrainedProgram<'a, F, G> { let mut target = self.get(variable.id).unwrap().clone(); let accesses: Vec<_> = assignee.target_accesses.iter().rev().collect(); - self.resolve_target_access(cs, ResolverContext { - input: vec![&mut target], - span, - target_value, - remaining_accesses: &accesses[..], - indicator, - operation: assignee.operation, - from_range: false, - })?; + self.resolve_target_access( + cs, + ResolverContext { + input: vec![&mut target], + span, + target_value, + remaining_accesses: &accesses[..], + indicator, + operation: assignee.operation, + from_range: false, + }, + )?; *self.get_mut(variable.id).unwrap() = target; Ok(()) } diff --git a/compiler/src/statement/conditional/conditional.rs b/compiler/src/statement/conditional/conditional.rs index 3fe7469209..2a252edb1e 100644 --- a/compiler/src/statement/conditional/conditional.rs +++ b/compiler/src/statement/conditional/conditional.rs @@ -17,12 +17,8 @@ //! Methods to enforce constraints on statements in a compiled Leo program. use crate::{ - errors::StatementError, - program::ConstrainedProgram, - value::ConstrainedValue, - GroupType, - IndicatorAndConstrainedValue, - StatementResult, + errors::StatementError, program::ConstrainedProgram, value::ConstrainedValue, GroupType, + IndicatorAndConstrainedValue, StatementResult, }; use leo_asg::ConditionalStatement; @@ -91,7 +87,7 @@ impl<'a, F: PrimeField, G: GroupType> ConstrainedProgram<'a, F, G> { ); let branch_2_indicator = Boolean::and( &mut cs.ns(|| format!("branch 2 {}:{}", &span.line_start, &span.col_start)), - &outer_indicator, + outer_indicator, &inner_indicator, ) .map_err(|_| StatementError::indicator_calculation(branch_2_name, &span))?; diff --git a/compiler/src/statement/iteration/iteration.rs b/compiler/src/statement/iteration/iteration.rs index ea7af7a1eb..e4e885c502 100644 --- a/compiler/src/statement/iteration/iteration.rs +++ b/compiler/src/statement/iteration/iteration.rs @@ -17,14 +17,8 @@ //! Enforces an iteration statement in a compiled Leo program. use crate::{ - errors::StatementError, - program::ConstrainedProgram, - value::ConstrainedValue, - GroupType, - IndicatorAndConstrainedValue, - Integer, - IntegerTrait, - StatementResult, + errors::StatementError, program::ConstrainedProgram, value::ConstrainedValue, GroupType, + IndicatorAndConstrainedValue, Integer, IntegerTrait, StatementResult, }; use leo_asg::IterationStatement; diff --git a/compiler/src/test.rs b/compiler/src/test.rs index c1cf0d5bc9..6bc69e5f26 100644 --- a/compiler/src/test.rs +++ b/compiler/src/test.rs @@ -30,11 +30,7 @@ use serde_yaml::Value; use snarkvm_curves::{bls12_377::Bls12_377, edwards_bls12::Fq}; use crate::{ - compiler::Compiler, - errors::CompilerError, - targets::edwards_bls12::EdwardsGroupType, - AstSnapshotOptions, - Output, + compiler::Compiler, errors::CompilerError, targets::edwards_bls12::EdwardsGroupType, AstSnapshotOptions, Output, }; pub type EdwardsTestCompiler = Compiler<'static, Fq, EdwardsGroupType>; diff --git a/compiler/src/value/address/address.rs b/compiler/src/value/address/address.rs index a9fd35a42a..61c13ee83e 100644 --- a/compiler/src/value/address/address.rs +++ b/compiler/src/value/address/address.rs @@ -224,7 +224,11 @@ impl ConditionalEqGadget for Address { } fn cond_select_helper(first: &Address, second: &Address, cond: bool) -> Address { - if cond { first.clone() } else { second.clone() } + if cond { + first.clone() + } else { + second.clone() + } } impl CondSelectGadget for Address { diff --git a/compiler/src/value/char/char.rs b/compiler/src/value/char/char.rs index efa6e81ca5..400046ba76 100644 --- a/compiler/src/value/char/char.rs +++ b/compiler/src/value/char/char.rs @@ -17,8 +17,7 @@ use crate::{ errors::CharError, value::{field::input::allocate_field, ConstrainedValue}, - FieldType, - GroupType, + FieldType, GroupType, }; use leo_ast::{InputValue, Span}; diff --git a/compiler/src/value/group/targets/edwards_bls12.rs b/compiler/src/value/group/targets/edwards_bls12.rs index bf6367ea35..be98cecfab 100644 --- a/compiler/src/value/group/targets/edwards_bls12.rs +++ b/compiler/src/value/group/targets/edwards_bls12.rs @@ -20,8 +20,7 @@ use leo_asg::{GroupCoordinate, GroupValue, Span}; use snarkvm_curves::{ edwards_bls12::{EdwardsAffine, EdwardsParameters, Fq}, templates::twisted_edwards_extended::Affine, - AffineCurve, - TwistedEdwardsParameters, + AffineCurve, TwistedEdwardsParameters, }; use snarkvm_fields::{Fp256, One, Zero}; use snarkvm_gadgets::{ @@ -479,7 +478,11 @@ impl CondSelectGadget for EdwardsGroupType { second: &Self, ) -> Result { if let Boolean::Constant(cond) = *cond { - if cond { Ok(first.clone()) } else { Ok(second.clone()) } + if cond { + Ok(first.clone()) + } else { + Ok(second.clone()) + } } else { let first_gadget = first.allocated(cs.ns(|| "first"))?; let second_gadget = second.allocated(cs.ns(|| "second"))?; diff --git a/compiler/src/value/value.rs b/compiler/src/value/value.rs index eb23ec9843..158879d57a 100644 --- a/compiler/src/value/value.rs +++ b/compiler/src/value/value.rs @@ -124,7 +124,7 @@ impl<'a, F: PrimeField, G: GroupType> fmt::Display for ConstrainedValue<'a, F write!(f, "({})", values) } - ConstrainedValue::CircuitExpression(ref circuit, ref members) => { + ConstrainedValue::CircuitExpression(circuit, ref members) => { write!(f, "{} {{", circuit.name.borrow())?; for (i, member) in members.iter().enumerate() { write!(f, "{}: {}", member.0, member.1)?; diff --git a/grammar/README.md b/grammar/README.md index 364002f1eb..13bbc6de82 100644 --- a/grammar/README.md +++ b/grammar/README.md @@ -476,7 +476,7 @@ Line terminators form whitespace, along with spaces and horizontal tabs. whitespace = space / horizontal-tab / newline ``` -Go to: _[space](#user-content-space), [newline](#user-content-newline), [horizontal-tab](#user-content-horizontal-tab)_; +Go to: _[horizontal-tab](#user-content-horizontal-tab), [newline](#user-content-newline), [space](#user-content-space)_; There are two kinds of comments in Leo, as in other languages. @@ -511,7 +511,7 @@ rest-of-block-comment = "*" rest-of-block-comment-after-star / not-star rest-of-block-comment ``` -Go to: _[not-star](#user-content-not-star), [rest-of-block-comment](#user-content-rest-of-block-comment), [rest-of-block-comment-after-star](#user-content-rest-of-block-comment-after-star)_; +Go to: _[rest-of-block-comment-after-star](#user-content-rest-of-block-comment-after-star), [not-star](#user-content-not-star), [rest-of-block-comment](#user-content-rest-of-block-comment)_; @@ -521,7 +521,7 @@ rest-of-block-comment-after-star = "/" / not-star-or-slash rest-of-block-comment ``` -Go to: _[rest-of-block-comment-after-star](#user-content-rest-of-block-comment-after-star), [not-star-or-slash](#user-content-not-star-or-slash), [rest-of-block-comment](#user-content-rest-of-block-comment)_; +Go to: _[not-star-or-slash](#user-content-not-star-or-slash), [rest-of-block-comment](#user-content-rest-of-block-comment), [rest-of-block-comment-after-star](#user-content-rest-of-block-comment-after-star)_; @@ -572,13 +572,7 @@ keyword = %s"address" / %s"u128" ``` -The following rules define (ASCII) -digits and (uppercase and lowercase) letters. - - -```abnf -digit = %x30-39 ; 0-9 -``` +The following rules define (ASCII) letters. ```abnf @@ -595,12 +589,17 @@ lowercase-letter = %x61-7A ; a-z letter = uppercase-letter / lowercase-letter ``` -Go to: _[lowercase-letter](#user-content-lowercase-letter), [uppercase-letter](#user-content-uppercase-letter)_; +Go to: _[uppercase-letter](#user-content-uppercase-letter), [lowercase-letter](#user-content-lowercase-letter)_; -The following rules defines (ASCII) octal and hexadecimal digits. +The following rules defines (ASCII) decimal, octal, and hexadecimal digits. Note that the latter are case-insensitive. + +```abnf +decimal-digit = %x30-39 ; 0-9 +``` + ```abnf octal-digit = %x30-37 ; 0-7 @@ -608,13 +607,14 @@ octal-digit = %x30-37 ; 0-7 ```abnf -hexadecimal-digit = digit / "a" / "b" / "c" / "d" / "e" / "f" +hexadecimal-digit = decimal-digit / "a" / "b" / "c" / "d" / "e" / "f" ``` -Go to: _[digit](#user-content-digit)_; +Go to: _[decimal-digit](#user-content-decimal-digit)_; -An identifier is a non-empty sequence of letters, digits, and underscores, +An identifier is a non-empty sequence of +letters, (decimal) digits, and underscores, starting with a letter. It must not be a keyword: this is an extra-grammatical requirement. It must also not be or start with `aleo1`, @@ -623,7 +623,7 @@ this is another extra-grammatical requirement. ```abnf -identifier = letter *( letter / digit / "_" ) +identifier = letter *( letter / decimal-digit / "_" ) ; but not a keyword or a boolean literal or aleo1... ``` @@ -631,14 +631,15 @@ Go to: _[letter](#user-content-letter)_; A package name consists of one or more segments separated by single dashes, -where each segment is a non-empty sequence of lowercase letters and digits. +where each segment is a non-empty sequence of +lowercase letters and (decimal) digits. Similarly to an identifier, a package name must not be a keyword and must not be or start with `aleo1`. ```abnf -package-name = lowercase-letter *( lowercase-letter / digit ) - *( "-" 1*( lowercase-letter / digit ) ) +package-name = lowercase-letter *( lowercase-letter / decimal-digit ) + *( "-" 1*( lowercase-letter / decimal-digit ) ) ; but not a keyword or a boolean literal or aleo1... ``` @@ -658,12 +659,12 @@ annotation-name = "@" identifier Go to: _[identifier](#user-content-identifier)_; -A natural (number) is a sequence of one or more digits. +A natural (number) is a sequence of one or more decimal digits. We allow leading zeros, e.g. `007`. ```abnf -natural = 1*digit +natural = 1*decimal-digit ``` An integer (number) is either a natural or its negation. @@ -739,12 +740,12 @@ boolean-literal = %s"true" / %s"false" ``` An address literal starts with `aleo1` -and continues with exactly 58 lowercase letters and digits. +and continues with exactly 58 lowercase letters and (decimal) digits. Thus an address always consists of 63 characters. ```abnf -address-literal = %s"aleo1" 58( lowercase-letter / digit ) +address-literal = %s"aleo1" 58( lowercase-letter / decimal-digit ) ``` A character literal consists of an element surrounded by single quotes. @@ -772,7 +773,7 @@ character-literal-element = not-single-quote-or-backslash / unicode-character-escape ``` -Go to: _[unicode-character-escape](#user-content-unicode-character-escape), [simple-character-escape](#user-content-simple-character-escape), [not-single-quote-or-backslash](#user-content-not-single-quote-or-backslash), [ascii-character-escape](#user-content-ascii-character-escape)_; +Go to: _[not-single-quote-or-backslash](#user-content-not-single-quote-or-backslash), [ascii-character-escape](#user-content-ascii-character-escape), [unicode-character-escape](#user-content-unicode-character-escape), [simple-character-escape](#user-content-simple-character-escape)_; @@ -827,7 +828,7 @@ simple-character-escape = single-quote-escape / null-character-escape ``` -Go to: _[horizontal-tab-escape](#user-content-horizontal-tab-escape), [backslash-escape](#user-content-backslash-escape), [null-character-escape](#user-content-null-character-escape), [line-feed-escape](#user-content-line-feed-escape), [single-quote-escape](#user-content-single-quote-escape), [double-quote-escape](#user-content-double-quote-escape), [carriage-return-escape](#user-content-carriage-return-escape)_; +Go to: _[carriage-return-escape](#user-content-carriage-return-escape), [horizontal-tab-escape](#user-content-horizontal-tab-escape), [null-character-escape](#user-content-null-character-escape), [double-quote-escape](#user-content-double-quote-escape), [single-quote-escape](#user-content-single-quote-escape), [backslash-escape](#user-content-backslash-escape), [line-feed-escape](#user-content-line-feed-escape)_; @@ -863,7 +864,7 @@ string-literal-element = not-double-quote-or-backslash / unicode-character-escape ``` -Go to: _[not-double-quote-or-backslash](#user-content-not-double-quote-or-backslash), [simple-character-escape](#user-content-simple-character-escape), [ascii-character-escape](#user-content-ascii-character-escape), [unicode-character-escape](#user-content-unicode-character-escape)_; +Go to: _[ascii-character-escape](#user-content-ascii-character-escape), [unicode-character-escape](#user-content-unicode-character-escape), [simple-character-escape](#user-content-simple-character-escape), [not-double-quote-or-backslash](#user-content-not-double-quote-or-backslash)_; The ones above are all the atomic literals @@ -883,7 +884,7 @@ atomic-literal = untyped-literal / string-literal ``` -Go to: _[signed-literal](#user-content-signed-literal), [unsigned-literal](#user-content-unsigned-literal), [field-literal](#user-content-field-literal), [product-group-literal](#user-content-product-group-literal), [boolean-literal](#user-content-boolean-literal), [address-literal](#user-content-address-literal), [string-literal](#user-content-string-literal), [untyped-literal](#user-content-untyped-literal), [character-literal](#user-content-character-literal)_; +Go to: _[signed-literal](#user-content-signed-literal), [untyped-literal](#user-content-untyped-literal), [product-group-literal](#user-content-product-group-literal), [unsigned-literal](#user-content-unsigned-literal), [character-literal](#user-content-character-literal), [string-literal](#user-content-string-literal), [field-literal](#user-content-field-literal), [boolean-literal](#user-content-boolean-literal), [address-literal](#user-content-address-literal)_; After defining the (mostly) alphanumeric tokens above, @@ -927,7 +928,7 @@ token = keyword / symbol ``` -Go to: _[atomic-literal](#user-content-atomic-literal), [package-name](#user-content-package-name), [annotation-name](#user-content-annotation-name), [symbol](#user-content-symbol), [identifier](#user-content-identifier), [keyword](#user-content-keyword)_; +Go to: _[identifier](#user-content-identifier), [keyword](#user-content-keyword), [symbol](#user-content-symbol), [package-name](#user-content-package-name), [annotation-name](#user-content-annotation-name), [atomic-literal](#user-content-atomic-literal)_; Tokens, comments, and whitespace are lexemes, i.e. lexical units. @@ -937,7 +938,7 @@ Tokens, comments, and whitespace are lexemes, i.e. lexical units. lexeme = token / comment / whitespace ``` -Go to: _[whitespace](#user-content-whitespace), [comment](#user-content-comment), [token](#user-content-token)_; +Go to: _[whitespace](#user-content-whitespace), [token](#user-content-token), [comment](#user-content-comment)_; @@ -973,7 +974,7 @@ signed-type = %s"i8" / %s"i16" / %s"i32" / %s"i64" / %s"i128" integer-type = unsigned-type / signed-type ``` -Go to: _[unsigned-type](#user-content-unsigned-type), [signed-type](#user-content-signed-type)_; +Go to: _[signed-type](#user-content-signed-type), [unsigned-type](#user-content-unsigned-type)_; The integer types, along with the field and group types, @@ -1020,7 +1021,7 @@ character-type = %s"char" scalar-type = boolean-type / arithmetic-type / address-type / character-type ``` -Go to: _[address-type](#user-content-address-type), [boolean-type](#user-content-boolean-type), [character-type](#user-content-character-type), [arithmetic-type](#user-content-arithmetic-type)_; +Go to: _[character-type](#user-content-character-type), [arithmetic-type](#user-content-arithmetic-type), [boolean-type](#user-content-boolean-type), [address-type](#user-content-address-type)_; Circuit types are denoted by identifiers and the keyword `Self`. @@ -1060,7 +1061,7 @@ or a tuple of one or more dimensions. array-type = "[" type ";" array-dimensions "]" ``` -Go to: _[type](#user-content-type), [array-dimensions](#user-content-array-dimensions)_; +Go to: _[array-dimensions](#user-content-array-dimensions), [type](#user-content-type)_; @@ -1127,7 +1128,7 @@ A literal is either an atomic one or an affine group literal. literal = atomic-literal / affine-group-literal ``` -Go to: _[atomic-literal](#user-content-atomic-literal), [affine-group-literal](#user-content-affine-group-literal)_; +Go to: _[affine-group-literal](#user-content-affine-group-literal), [atomic-literal](#user-content-atomic-literal)_; The following rule is not directly referenced in the rules for expressions @@ -1140,7 +1141,7 @@ a group literal is either a product group literal or an affine group literal. group-literal = product-group-literal / affine-group-literal ``` -Go to: _[affine-group-literal](#user-content-affine-group-literal), [product-group-literal](#user-content-product-group-literal)_; +Go to: _[product-group-literal](#user-content-product-group-literal), [affine-group-literal](#user-content-affine-group-literal)_; As often done in grammatical language syntax specifications, @@ -1169,7 +1170,7 @@ primary-expression = identifier / circuit-expression ``` -Go to: _[expression](#user-content-expression), [array-expression](#user-content-array-expression), [literal](#user-content-literal), [identifier](#user-content-identifier), [circuit-expression](#user-content-circuit-expression), [tuple-expression](#user-content-tuple-expression)_; +Go to: _[array-expression](#user-content-array-expression), [expression](#user-content-expression), [circuit-expression](#user-content-circuit-expression), [identifier](#user-content-identifier), [tuple-expression](#user-content-tuple-expression), [literal](#user-content-literal)_; Tuple expressions construct tuples. @@ -1230,7 +1231,7 @@ Go to: _[expression](#user-content-expression), [array-dimensions](#user-content array-construction = array-inline-construction / array-repeat-construction ``` -Go to: _[array-inline-construction](#user-content-array-inline-construction), [array-repeat-construction](#user-content-array-repeat-construction)_; +Go to: _[array-repeat-construction](#user-content-array-repeat-construction), [array-inline-construction](#user-content-array-inline-construction)_; @@ -1317,7 +1318,7 @@ postfix-expression = primary-expression / postfix-expression "[" [expression] ".." [expression] "]" ``` -Go to: _[natural](#user-content-natural), [identifier](#user-content-identifier), [circuit-type](#user-content-circuit-type), [primary-expression](#user-content-primary-expression), [function-arguments](#user-content-function-arguments), [postfix-expression](#user-content-postfix-expression), [expression](#user-content-expression)_; +Go to: _[identifier](#user-content-identifier), [circuit-type](#user-content-circuit-type), [function-arguments](#user-content-function-arguments), [natural](#user-content-natural), [primary-expression](#user-content-primary-expression), [expression](#user-content-expression), [postfix-expression](#user-content-postfix-expression)_; Unary operators have the highest operator precedence. @@ -1331,7 +1332,7 @@ unary-expression = postfix-expression / "-" unary-expression ``` -Go to: _[postfix-expression](#user-content-postfix-expression), [unary-expression](#user-content-unary-expression)_; +Go to: _[unary-expression](#user-content-unary-expression), [postfix-expression](#user-content-postfix-expression)_; Next in the operator precedence is exponentiation, @@ -1357,7 +1358,7 @@ multiplicative-expression = exponential-expression / multiplicative-expression "/" exponential-expression ``` -Go to: _[exponential-expression](#user-content-exponential-expression), [multiplicative-expression](#user-content-multiplicative-expression)_; +Go to: _[multiplicative-expression](#user-content-multiplicative-expression), [exponential-expression](#user-content-exponential-expression)_; Then there are addition and subtraction, both left-assocative. @@ -1408,7 +1409,7 @@ conjunctive-expression = equality-expression / conjunctive-expression "&&" equality-expression ``` -Go to: _[equality-expression](#user-content-equality-expression), [conjunctive-expression](#user-content-conjunctive-expression)_; +Go to: _[conjunctive-expression](#user-content-conjunctive-expression), [equality-expression](#user-content-equality-expression)_; Next come disjunctive expressions, left-associative. @@ -1419,7 +1420,7 @@ disjunctive-expression = conjunctive-expression / disjunctive-expression "||" conjunctive-expression ``` -Go to: _[conjunctive-expression](#user-content-conjunctive-expression), [disjunctive-expression](#user-content-disjunctive-expression)_; +Go to: _[disjunctive-expression](#user-content-disjunctive-expression), [conjunctive-expression](#user-content-conjunctive-expression)_; Finally we have conditional expressions. @@ -1432,7 +1433,7 @@ conditional-expression = disjunctive-expression ":" conditional-expression ``` -Go to: _[expression](#user-content-expression), [disjunctive-expression](#user-content-disjunctive-expression), [conditional-expression](#user-content-conditional-expression)_; +Go to: _[disjunctive-expression](#user-content-disjunctive-expression), [expression](#user-content-expression), [conditional-expression](#user-content-conditional-expression)_; Those above are all the expressions. @@ -1465,7 +1466,7 @@ statement = expression-statement / block ``` -Go to: _[constant-declaration](#user-content-constant-declaration), [block](#user-content-block), [variable-declaration](#user-content-variable-declaration), [conditional-statement](#user-content-conditional-statement), [return-statement](#user-content-return-statement), [assignment-statement](#user-content-assignment-statement), [expression-statement](#user-content-expression-statement), [loop-statement](#user-content-loop-statement), [console-statement](#user-content-console-statement)_; +Go to: _[loop-statement](#user-content-loop-statement), [assignment-statement](#user-content-assignment-statement), [variable-declaration](#user-content-variable-declaration), [expression-statement](#user-content-expression-statement), [conditional-statement](#user-content-conditional-statement), [block](#user-content-block), [console-statement](#user-content-console-statement), [return-statement](#user-content-return-statement), [constant-declaration](#user-content-constant-declaration)_; @@ -1508,7 +1509,7 @@ variable-declaration = %s"let" identifier-or-identifiers [ ":" type ] "=" expression ";" ``` -Go to: _[type](#user-content-type), [expression](#user-content-expression), [identifier-or-identifiers](#user-content-identifier-or-identifiers)_; +Go to: _[type](#user-content-type), [identifier-or-identifiers](#user-content-identifier-or-identifiers), [expression](#user-content-expression)_; @@ -1517,7 +1518,7 @@ constant-declaration = %s"const" identifier-or-identifiers [ ":" type ] "=" expression ";" ``` -Go to: _[identifier-or-identifiers](#user-content-identifier-or-identifiers), [type](#user-content-type), [expression](#user-content-expression)_; +Go to: _[type](#user-content-type), [expression](#user-content-expression), [identifier-or-identifiers](#user-content-identifier-or-identifiers)_; @@ -1540,7 +1541,7 @@ Note that blocks are required in all branches, not merely statements. branch = %s"if" expression block ``` -Go to: _[block](#user-content-block), [expression](#user-content-expression)_; +Go to: _[expression](#user-content-expression), [block](#user-content-block)_; @@ -1550,7 +1551,7 @@ conditional-statement = branch / branch %s"else" conditional-statement ``` -Go to: _[branch](#user-content-branch), [conditional-statement](#user-content-conditional-statement), [block](#user-content-block)_; +Go to: _[branch](#user-content-branch), [block](#user-content-block), [conditional-statement](#user-content-conditional-statement)_; A loop statement implicitly defines a loop variable @@ -1606,7 +1607,7 @@ console-call = assert-call / print-call ``` -Go to: _[assert-call](#user-content-assert-call), [print-call](#user-content-print-call)_; +Go to: _[print-call](#user-content-print-call), [assert-call](#user-content-assert-call)_; @@ -1665,7 +1666,7 @@ function-declaration = *annotation %s"function" identifier block ``` -Go to: _[block](#user-content-block), [identifier](#user-content-identifier), [function-parameters](#user-content-function-parameters), [type](#user-content-type)_; +Go to: _[identifier](#user-content-identifier), [function-parameters](#user-content-function-parameters), [type](#user-content-type), [block](#user-content-block)_; @@ -1675,7 +1676,7 @@ function-parameters = self-parameter / function-inputs ``` -Go to: _[function-inputs](#user-content-function-inputs), [self-parameter](#user-content-self-parameter)_; +Go to: _[self-parameter](#user-content-self-parameter), [function-inputs](#user-content-function-inputs)_; @@ -1744,7 +1745,7 @@ circuit-declaration = %s"circuit" identifier *member-function-declaration "}" ``` -Go to: _[identifier](#user-content-identifier), [member-variable-declarations](#user-content-member-variable-declarations)_; +Go to: _[member-variable-declarations](#user-content-member-variable-declarations), [identifier](#user-content-identifier)_; An import declaration consists of the `import` keyword @@ -1766,7 +1767,7 @@ by using an explicit package name before the package path. import-declaration = %s"import" package-name "." package-path ";" ``` -Go to: _[package-path](#user-content-package-path), [package-name](#user-content-package-name)_; +Go to: _[package-name](#user-content-package-name), [package-path](#user-content-package-path)_; @@ -1777,7 +1778,7 @@ package-path = "*" / "(" package-path *( "," package-path ) [","] ")" ``` -Go to: _[package-name](#user-content-package-name), [identifier](#user-content-identifier), [package-path](#user-content-package-path)_; +Go to: _[identifier](#user-content-identifier), [package-path](#user-content-package-path), [package-name](#user-content-package-name)_; Finally, we define a file as a sequence of zero or more declarations. @@ -1792,7 +1793,7 @@ declaration = import-declaration / constant-declaration ``` -Go to: _[function-declaration](#user-content-function-declaration), [circuit-declaration](#user-content-circuit-declaration), [constant-declaration](#user-content-constant-declaration), [import-declaration](#user-content-import-declaration)_; +Go to: _[function-declaration](#user-content-function-declaration), [constant-declaration](#user-content-constant-declaration), [import-declaration](#user-content-import-declaration), [circuit-declaration](#user-content-circuit-declaration)_; diff --git a/grammar/abnf-grammar.txt b/grammar/abnf-grammar.txt index ee4dc083fa..e25a8aef02 100644 --- a/grammar/abnf-grammar.txt +++ b/grammar/abnf-grammar.txt @@ -421,10 +421,7 @@ keyword = %s"address" / %s"u64" / %s"u128" -; The following rules define (ASCII) -; digits and (uppercase and lowercase) letters. - -digit = %x30-39 ; 0-9 +; The following rules define (ASCII) letters. uppercase-letter = %x41-5A ; A-Z @@ -432,30 +429,34 @@ lowercase-letter = %x61-7A ; a-z letter = uppercase-letter / lowercase-letter -; The following rules defines (ASCII) octal and hexadecimal digits. +; The following rules defines (ASCII) decimal, octal, and hexadecimal digits. ; Note that the latter are case-insensitive. +decimal-digit = %x30-39 ; 0-9 + octal-digit = %x30-37 ; 0-7 -hexadecimal-digit = digit / "a" / "b" / "c" / "d" / "e" / "f" +hexadecimal-digit = decimal-digit / "a" / "b" / "c" / "d" / "e" / "f" -; An identifier is a non-empty sequence of letters, digits, and underscores, +; An identifier is a non-empty sequence of +; letters, (decimal) digits, and underscores, ; starting with a letter. ; It must not be a keyword: this is an extra-grammatical requirement. ; It must also not be or start with `aleo1`, ; because that is used for address literals: ; this is another extra-grammatical requirement. -identifier = letter *( letter / digit / "_" ) +identifier = letter *( letter / decimal-digit / "_" ) ; but not a keyword or a boolean literal or aleo1... ; A package name consists of one or more segments separated by single dashes, -; where each segment is a non-empty sequence of lowercase letters and digits. +; where each segment is a non-empty sequence of +; lowercase letters and (decimal) digits. ; Similarly to an identifier, a package name must not be a keyword ; and must not be or start with `aleo1`. -package-name = lowercase-letter *( lowercase-letter / digit ) - *( "-" 1*( lowercase-letter / digit ) ) +package-name = lowercase-letter *( lowercase-letter / decimal-digit ) + *( "-" 1*( lowercase-letter / decimal-digit ) ) ; but not a keyword or a boolean literal or aleo1... ; Note that, grammatically, identifiers are also package names. @@ -465,10 +466,10 @@ package-name = lowercase-letter *( lowercase-letter / digit ) annotation-name = "@" identifier -; A natural (number) is a sequence of one or more digits. +; A natural (number) is a sequence of one or more decimal digits. ; We allow leading zeros, e.g. `007`. -natural = 1*digit +natural = 1*decimal-digit ; An integer (number) is either a natural or its negation. ; We allow leading zeros also in negative numbers, e.g. `-007`. @@ -504,10 +505,10 @@ product-group-literal = integer %s"group" boolean-literal = %s"true" / %s"false" ; An address literal starts with `aleo1` -; and continues with exactly 58 lowercase letters and digits. +; and continues with exactly 58 lowercase letters and (decimal) digits. ; Thus an address always consists of 63 characters. -address-literal = %s"aleo1" 58( lowercase-letter / digit ) +address-literal = %s"aleo1" 58( lowercase-letter / decimal-digit ) ; A character literal consists of an element surrounded by single quotes. ; The element is any character other than single quote or backslash, diff --git a/imports/src/parser/parse_symbol.rs b/imports/src/parser/parse_symbol.rs index ce1f391f60..1b8183f7b0 100644 --- a/imports/src/parser/parse_symbol.rs +++ b/imports/src/parser/parse_symbol.rs @@ -54,7 +54,7 @@ impl<'a> ImportParser<'a> { // Build the package abstract syntax tree. let program_string = &std::fs::read_to_string(&file_path).map_err(|x| ImportParserError::io_error(span, file_path_str, x))?; - let mut program = leo_parser::parse(&file_path_str, &program_string)?; + let mut program = leo_parser::parse(file_path_str, program_string)?; program.name = file_name; let mut ast = leo_ast::Ast::new(program); ast.canonicalize()?; diff --git a/input/src/errors/parser.rs b/input/src/errors/parser.rs index 215dd7382c..cca4dc850a 100644 --- a/input/src/errors/parser.rs +++ b/input/src/errors/parser.rs @@ -191,7 +191,7 @@ impl InputParserError { expected, actual ); - Self::new_from_span(message, &span) + Self::new_from_span(message, span) } pub fn section(header: Header) -> Self { diff --git a/input/src/values/group_coordinate.rs b/input/src/values/group_coordinate.rs index 8a4882c39c..70217b85cf 100644 --- a/input/src/values/group_coordinate.rs +++ b/input/src/values/group_coordinate.rs @@ -32,7 +32,7 @@ pub enum GroupCoordinate<'ast> { impl<'ast> GroupCoordinate<'ast> { pub fn span(&self) -> &Span<'ast> { match self { - GroupCoordinate::Number(number) => &number.span(), + GroupCoordinate::Number(number) => number.span(), GroupCoordinate::SignHigh(sign_high) => &sign_high.span, GroupCoordinate::SignLow(sign_low) => &sign_low.span, GroupCoordinate::Inferred(inferred) => &inferred.span, diff --git a/input/src/values/value.rs b/input/src/values/value.rs index 0c3ccfe5e9..993d5ee04b 100644 --- a/input/src/values/value.rs +++ b/input/src/values/value.rs @@ -39,13 +39,13 @@ pub enum Value<'ast> { impl<'ast> Value<'ast> { pub fn span(&self) -> &Span<'ast> { match self { - Value::Address(value) => &value.span(), + Value::Address(value) => value.span(), Value::Boolean(value) => &value.span, Value::Char(value) => &value.span, Value::Field(value) => &value.span, Value::Group(value) => &value.span, - Value::Implicit(value) => &value.span(), - Value::Integer(value) => &value.span(), + Value::Implicit(value) => value.span(), + Value::Integer(value) => value.span(), } } } diff --git a/leo/api.rs b/leo/api.rs index 53b6157d09..124f68b182 100644 --- a/leo/api.rs +++ b/leo/api.rs @@ -17,8 +17,7 @@ use anyhow::{anyhow, Error, Result}; use reqwest::{ blocking::{multipart::Form, Client, Response}, - Method, - StatusCode, + Method, StatusCode, }; use serde::{Deserialize, Serialize}; use std::{collections::HashMap, path::PathBuf}; diff --git a/leo/commands/build.rs b/leo/commands/build.rs index 96debbd1c2..acccd02b75 100644 --- a/leo/commands/build.rs +++ b/leo/commands/build.rs @@ -18,8 +18,7 @@ use crate::{commands::Command, context::Context}; use leo_compiler::{ compiler::{thread_leaked_context, Compiler}, group::targets::edwards_bls12::EdwardsGroupType, - AstSnapshotOptions, - CompilerOptions, + AstSnapshotOptions, CompilerOptions, }; use leo_package::{ inputs::*, diff --git a/leo/commands/package/clone.rs b/leo/commands/package/clone.rs index 92cad951cd..3daf00897a 100644 --- a/leo/commands/package/clone.rs +++ b/leo/commands/package/clone.rs @@ -20,8 +20,7 @@ use anyhow::{anyhow, Result}; use std::{ borrow::Cow, fs::{ - File, - {self}, + File, {self}, }, io::{Read, Write}, path::Path, diff --git a/leo/config.rs b/leo/config.rs index ae85bc3d2c..7e08c6088a 100644 --- a/leo/config.rs +++ b/leo/config.rs @@ -16,9 +16,7 @@ use std::{ fs::{ - create_dir_all, - File, - {self}, + create_dir_all, File, {self}, }, io, io::prelude::*, @@ -144,10 +142,10 @@ pub fn write_token_and_username(token: &str, username: &str) -> Result<(), io::E } let mut credentials = File::create(&LEO_CREDENTIALS_PATH.to_path_buf())?; - credentials.write_all(&token.as_bytes())?; + credentials.write_all(token.as_bytes())?; let mut username_file = File::create(&LEO_USERNAME_PATH.to_path_buf())?; - username_file.write_all(&username.as_bytes())?; + username_file.write_all(username.as_bytes())?; Ok(()) } diff --git a/leo/main.rs b/leo/main.rs index 4ddf251f19..12b1be42d1 100644 --- a/leo/main.rs +++ b/leo/main.rs @@ -23,19 +23,7 @@ pub mod updater; use commands::{ package::{Clone, Fetch, Login, Logout, Publish}, - Build, - Clean, - Command, - Deploy, - Init, - Lint, - New, - Prove, - Run, - Setup, - Test, - Update, - Watch, + Build, Clean, Command, Deploy, Init, Lint, New, Prove, Run, Setup, Test, Update, Watch, }; use anyhow::Result; @@ -193,10 +181,13 @@ fn main() { fn run_with_args(opt: Opt) -> Result<()> { if !opt.quiet { // Init logger with optional debug flag. - logger::init_logger("leo", match opt.debug { - false => 1, - true => 2, - })?; + logger::init_logger( + "leo", + match opt.debug { + false => 1, + true => 2, + }, + )?; } // Get custom root folder and create context for it. @@ -437,14 +428,13 @@ mod cli_tests { .unwrap(); assert!(run_cmd("leo fetch", install_path).is_ok()); - assert!( - file.write_all( + assert!(file + .write_all( br#" sudoku = {author = "justice-league", package = "u8u32", version = "0.1.0"} "# ) - .is_ok() - ); + .is_ok()); assert!(run_cmd("leo fetch", install_path).is_ok()); assert!(run_cmd("leo build", install_path).is_ok()); diff --git a/leo/tests/mod.rs b/leo/tests/mod.rs index 12e4e63eb8..3281fb71a4 100644 --- a/leo/tests/mod.rs +++ b/leo/tests/mod.rs @@ -20,14 +20,7 @@ use std::path::PathBuf; use crate::{ commands::{ package::{Login, Logout}, - Build, - Command, - Prove, - Run, - Setup, - Test, - Update, - UpdateAutomatic, + Build, Command, Prove, Run, Setup, Test, Update, UpdateAutomatic, }, context::{create_context, Context}, }; diff --git a/leo/updater.rs b/leo/updater.rs index cc5c8972da..a5e5b7668a 100644 --- a/leo/updater.rs +++ b/leo/updater.rs @@ -53,7 +53,7 @@ impl Updater { .repo_owner(Self::LEO_REPO_OWNER) .repo_name(Self::LEO_REPO_NAME) .bin_name(Self::LEO_BIN_NAME) - .current_version(&env!("CARGO_PKG_VERSION")) + .current_version(env!("CARGO_PKG_VERSION")) .show_download_progress(show_output) .no_confirm(true) .show_output(show_output) @@ -69,7 +69,7 @@ impl Updater { .repo_owner(Self::LEO_REPO_OWNER) .repo_name(Self::LEO_REPO_NAME) .bin_name(Self::LEO_BIN_NAME) - .current_version(&env!("CARGO_PKG_VERSION")) + .current_version(env!("CARGO_PKG_VERSION")) .build()?; let current_version = updater.current_version(); diff --git a/package/src/inputs/input.rs b/package/src/inputs/input.rs index 3e01cbbe5d..74ca67484a 100644 --- a/package/src/inputs/input.rs +++ b/package/src/inputs/input.rs @@ -22,8 +22,7 @@ use serde::Deserialize; use std::{ borrow::Cow, fs::{ - File, - {self}, + File, {self}, }, io::Write, path::Path, diff --git a/package/src/inputs/state.rs b/package/src/inputs/state.rs index 7bda80ceb7..4c7994291e 100644 --- a/package/src/inputs/state.rs +++ b/package/src/inputs/state.rs @@ -22,8 +22,7 @@ use serde::Deserialize; use std::{ borrow::Cow, fs::{ - File, - {self}, + File, {self}, }, io::Write, path::Path, diff --git a/package/src/outputs/checksum.rs b/package/src/outputs/checksum.rs index 9352429973..3f56c22a76 100644 --- a/package/src/outputs/checksum.rs +++ b/package/src/outputs/checksum.rs @@ -22,8 +22,7 @@ use serde::Deserialize; use std::{ borrow::Cow, fs::{ - File, - {self}, + File, {self}, }, io::Write, path::Path, diff --git a/package/src/outputs/circuit.rs b/package/src/outputs/circuit.rs index d9d0e8cced..81a528f310 100644 --- a/package/src/outputs/circuit.rs +++ b/package/src/outputs/circuit.rs @@ -22,8 +22,7 @@ use serde::Deserialize; use std::{ borrow::Cow, fs::{ - File, - {self}, + File, {self}, }, io::Write, path::Path, diff --git a/package/src/outputs/proof.rs b/package/src/outputs/proof.rs index 815d6048be..6a9419b889 100644 --- a/package/src/outputs/proof.rs +++ b/package/src/outputs/proof.rs @@ -22,8 +22,7 @@ use serde::Deserialize; use std::{ borrow::Cow, fs::{ - File, - {self}, + File, {self}, }, io::Write, path::Path, diff --git a/package/src/outputs/proving_key.rs b/package/src/outputs/proving_key.rs index 7e2d938bd7..35f054554d 100644 --- a/package/src/outputs/proving_key.rs +++ b/package/src/outputs/proving_key.rs @@ -22,8 +22,7 @@ use serde::Deserialize; use std::{ borrow::Cow, fs::{ - File, - {self}, + File, {self}, }, io::Write, path::Path, diff --git a/package/src/outputs/verification_key.rs b/package/src/outputs/verification_key.rs index 6f7fca8797..9acfe62fc4 100644 --- a/package/src/outputs/verification_key.rs +++ b/package/src/outputs/verification_key.rs @@ -22,8 +22,7 @@ use serde::Deserialize; use std::{ borrow::Cow, fs::{ - File, - {self}, + File, {self}, }, io::Write, path::Path, diff --git a/package/src/package.rs b/package/src/package.rs index 8a7fb861e7..1a6b8273de 100644 --- a/package/src/package.rs +++ b/package/src/package.rs @@ -123,14 +123,14 @@ impl Package { } // Check if the input file already exists. - let input_file = InputFile::new(&package_name); + let input_file = InputFile::new(package_name); if input_file.exists_at(path) { existing_files.push(input_file.filename()); result = false; } // Check if the state file already exists. - let state_file = StateFile::new(&package_name); + let state_file = StateFile::new(package_name); if state_file.exists_at(path) { existing_files.push(state_file.filename()); result = false; @@ -157,24 +157,24 @@ impl Package { } // Check if the manifest file exists. - if !Manifest::exists_at(&path) { + if !Manifest::exists_at(path) { return false; } // Check if the input file exists. - let input_file = InputFile::new(&package_name); - if !input_file.exists_at(&path) { + let input_file = InputFile::new(package_name); + if !input_file.exists_at(path) { return false; } // Check if the state file exists. - let state_file = StateFile::new(&package_name); - if !state_file.exists_at(&path) { + let state_file = StateFile::new(package_name); + if !state_file.exists_at(path) { return false; } // Check if the main file exists. - if !MainFile::exists_at(&path) { + if !MainFile::exists_at(path) { return false; } @@ -195,34 +195,34 @@ impl Package { // Next, initialize this directory as a Leo package. { // Create the manifest file. - Manifest::new(&package_name, author)?.write_to(&path)?; + Manifest::new(package_name, author)?.write_to(path)?; // Verify that the .gitignore file does not exist. - if !Gitignore::exists_at(&path) { + if !Gitignore::exists_at(path) { // Create the .gitignore file. - Gitignore::new().write_to(&path)?; + Gitignore::new().write_to(path)?; } // Verify that the README.md file does not exist. - if !README::exists_at(&path) { + if !README::exists_at(path) { // Create the README.md file. - README::new(package_name).write_to(&path)?; + README::new(package_name).write_to(path)?; } // Create the source directory. - SourceDirectory::create(&path)?; + SourceDirectory::create(path)?; // Create the input directory. - InputsDirectory::create(&path)?; + InputsDirectory::create(path)?; // Create the input file in the inputs directory. - InputFile::new(&package_name).write_to(&path)?; + InputFile::new(package_name).write_to(path)?; // Create the state file in the inputs directory. - StateFile::new(&package_name).write_to(&path)?; + StateFile::new(package_name).write_to(path)?; // Create the main file in the source directory. - MainFile::new(&package_name).write_to(&path)?; + MainFile::new(package_name).write_to(path)?; } // Next, verify that a valid Leo package has been initialized in this directory { diff --git a/package/src/root/zip.rs b/package/src/root/zip.rs index f9f3a9fe5b..732433d674 100644 --- a/package/src/root/zip.rs +++ b/package/src/root/zip.rs @@ -21,12 +21,8 @@ use crate::{ imports::IMPORTS_DIRECTORY_NAME, inputs::{INPUTS_DIRECTORY_NAME, INPUT_FILE_EXTENSION, STATE_FILE_EXTENSION}, outputs::{ - CHECKSUM_FILE_EXTENSION, - CIRCUIT_FILE_EXTENSION, - OUTPUTS_DIRECTORY_NAME, - PROOF_FILE_EXTENSION, - PROVING_KEY_FILE_EXTENSION, - VERIFICATION_KEY_FILE_EXTENSION, + CHECKSUM_FILE_EXTENSION, CIRCUIT_FILE_EXTENSION, OUTPUTS_DIRECTORY_NAME, PROOF_FILE_EXTENSION, + PROVING_KEY_FILE_EXTENSION, VERIFICATION_KEY_FILE_EXTENSION, }, root::{MANIFEST_FILENAME, README_FILENAME}, source::{SOURCE_DIRECTORY_NAME, SOURCE_FILE_EXTENSION}, @@ -36,8 +32,7 @@ use serde::Deserialize; use std::{ borrow::Cow, fs::{ - File, - {self}, + File, {self}, }, io::{Read, Write}, path::Path, diff --git a/package/tests/mod.rs b/package/tests/mod.rs index 8f72a16b3e..c04bfade1f 100644 --- a/package/tests/mod.rs +++ b/package/tests/mod.rs @@ -22,8 +22,7 @@ pub mod manifest; use lazy_static::lazy_static; use std::{ cell::RefCell, - env, - fs, + env, fs, path::PathBuf, sync::atomic::{AtomicUsize, Ordering}, }; diff --git a/parser/examples/parser.rs b/parser/examples/parser.rs index bd6c8f477a..2c7788f49c 100644 --- a/parser/examples/parser.rs +++ b/parser/examples/parser.rs @@ -48,7 +48,7 @@ fn main() -> Result<(), SyntaxError> { let input_filepath = Path::new(&cli_arguments[1]); // Construct the serialized syntax tree. - let serialized_leo_tree = to_leo_tree(&input_filepath)?; + let serialized_leo_tree = to_leo_tree(input_filepath)?; println!("{}", serialized_leo_tree); // Determine the output directory. diff --git a/parser/src/parser/file.rs b/parser/src/parser/file.rs index 80abacaddb..cda0e84112 100644 --- a/parser/src/parser/file.rs +++ b/parser/src/parser/file.rs @@ -227,7 +227,7 @@ impl ParserContext { base.name = format_tendril!("{}{}", base.name, next.name); base.span = base.span + next.span; } - x if KEYWORD_TOKENS.contains(&x) => { + x if KEYWORD_TOKENS.contains(x) => { let next = self.expect_loose_identifier()?; base.name = format_tendril!("{}{}", base.name, next.name); base.span = base.span + next.span; @@ -384,10 +384,13 @@ impl ParserContext { self.expect(Token::LeftCurly)?; let members = self.parse_circuit_declaration()?; - Ok((name.clone(), Circuit { - circuit_name: name, - members, - })) + Ok(( + name.clone(), + Circuit { + circuit_name: name, + members, + }, + )) } /// @@ -464,14 +467,17 @@ impl ParserContext { None }; let block = self.parse_block()?; - Ok((name.clone(), Function { - annotations, - identifier: name, - input: inputs, - output, - span: start + block.span.clone(), - block, - })) + Ok(( + name.clone(), + Function { + annotations, + identifier: name, + input: inputs, + output, + span: start + block.span.clone(), + block, + }, + )) } /// diff --git a/parser/src/parser/statement.rs b/parser/src/parser/statement.rs index 1b82145f43..1448dad6bc 100644 --- a/parser/src/parser/statement.rs +++ b/parser/src/parser/statement.rs @@ -281,7 +281,7 @@ impl ParserContext { "log" => ConsoleFunction::Log(self.parse_console_args()?), x => { return Err(SyntaxError::unexpected_ident( - &x, + x, &["assert", "error", "log"], &function.span, )); diff --git a/parser/src/tokenizer/lexer.rs b/parser/src/tokenizer/lexer.rs index cf9b452e9b..0b573409bb 100644 --- a/parser/src/tokenizer/lexer.rs +++ b/parser/src/tokenizer/lexer.rs @@ -101,7 +101,7 @@ impl Token { return None; } - if let Ok(ascii_number) = u8::from_str_radix(&hex_string, 16) { + if let Ok(ascii_number) = u8::from_str_radix(hex_string, 16) { // According to RFC, we allow only values less than 128. if ascii_number > 127 { return None; @@ -123,7 +123,7 @@ impl Token { return None; } - if let Ok(hex) = u32::from_str_radix(&unicode_number, 16) { + if let Ok(hex) = u32::from_str_radix(unicode_number, 16) { if let Some(character) = std::char::from_u32(hex) { // scalar return Some(Char::Scalar(character)); diff --git a/parser/src/tokenizer/mod.rs b/parser/src/tokenizer/mod.rs index 5da374e575..46547d481a 100644 --- a/parser/src/tokenizer/mod.rs +++ b/parser/src/tokenizer/mod.rs @@ -82,17 +82,20 @@ pub(crate) fn tokenize(path: &str, input: StrTendril) -> Result(runner: &T, expectation_category: &str) { if errors.is_empty() { if expectations.is_none() { - outputs.push((expectation_path, TestExpectation { - namespace: config.namespace, - expectation: config.expectation, - outputs: new_outputs, - })); + outputs.push(( + expectation_path, + TestExpectation { + namespace: config.namespace, + expectation: config.expectation, + outputs: new_outputs, + }, + )); } pass_categories += 1; } else { diff --git a/tests/expectations/compiler/compiler/circuits/member_static_function_nested.leo.out b/tests/expectations/compiler/compiler/circuits/member_static_function_nested.leo.out index 8e891e6ac9..14f7a27016 100644 --- a/tests/expectations/compiler/compiler/circuits/member_static_function_nested.leo.out +++ b/tests/expectations/compiler/compiler/circuits/member_static_function_nested.leo.out @@ -17,5 +17,5 @@ outputs: type: bool value: "true" initial_ast: 4c74b65863cddde8ce523495358ab619ec48645dcb8409658a3fb3d7a3821d6d - canonicalized_ast: b5697d5884139da5a68861213ff3c7660f694e682078e1bd350856206e0289b8 - type_inferenced_ast: ff4b8f91f014277d6bb2d8d82c31361e5a5c5a46ed87a1e61f0c2e2e8d5fd254 + canonicalized_ast: 45dc35a683e14503f8a1fc40280f05e7d096b49896f115ffa649e76b9cd80941 + type_inferenced_ast: 11af72cfc90adc12c3412e3067ad285a2279de0f4f12af5081dbe27c58b5a3bf