diff --git a/.circleci/config.yml b/.circleci/config.yml index a4adbfbb3bd4..4224b1795628 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -34,7 +34,7 @@ parameters: default: "solbuildpackpusher/solidity-buildpack-deps@sha256:98f963ed799a0d206ef8e7b5475f847e0dea53b7fdea9618bbc6106a62730bd2" evm-version: type: string - default: cancun + default: prague orbs: win: circleci/windows@2.2.0 @@ -385,7 +385,7 @@ commands: name: Installing dependencies / Restoring dependency cache command: | if [[ -f ~/osx-dependencies-cached ]]; then - echo "Dependency flag exists. Removing /usr/local/ and /opt/homebrew/. These directories will be restored from cache." + echo "Dependency flag exists. Removing /usr/local/, /opt/homebrew/, and /opt/boost. These directories will be restored from cache." # CircleCI is providing the circleci cli tools via some kind of symlink magic. # So we just save the original symlinks and restore them later. @@ -405,6 +405,10 @@ commands: sudo mkdir -p /usr/local/bin sudo chmod 777 /usr/{local,local/bin} + sudo rm -rf /opt/boost + sudo mkdir -p /opt/boost + sudo chmod 777 /opt/boost + mv /tmp/circleci "${circleci_binary_path}" mv /tmp/circleci-agent "${circleci_agent_binary_path}" fi @@ -425,6 +429,7 @@ commands: # Homebrew is installed in /usr/local on intel macs, but in /opt/homebrew on apple silicon. - /usr/local - /opt/homebrew + - /opt/boost - save_cache: key: osx-dependencies-cached-{{ arch }}-{{ checksum ".circleci/osx_install_dependencies.sh" }} paths: @@ -835,6 +840,7 @@ defaults: project: uniswap binary_type: native image: cimg/node:18.16 + resource_class: medium # Tests run out of memory on a smaller machine - job_native_test_ext_prb_math: &job_native_test_ext_prb_math <<: *requires_b_ubu_static @@ -1168,7 +1174,8 @@ jobs: environment: <<: *base_osx_env CMAKE_BUILD_TYPE: Release - CMAKE_OPTIONS: -DCMAKE_OSX_ARCHITECTURES:STRING=x86_64;arm64 + # boost root configured to the prefix used in `osx_install_dependencies.sh` + CMAKE_OPTIONS: -DCMAKE_OSX_ARCHITECTURES:STRING=x86_64;arm64 -DBoost_ROOT=/opt/boost steps: - checkout - install_dependencies_osx diff --git a/.circleci/osx_install_dependencies.sh b/.circleci/osx_install_dependencies.sh index e7a0b9ddfda2..367e8cbb40cb 100755 --- a/.circleci/osx_install_dependencies.sh +++ b/.circleci/osx_install_dependencies.sh @@ -59,9 +59,6 @@ then brew install openjdk@11 brew install unzip - # writing to /usr/local/lib need administrative privileges. - sudo ./scripts/install_obsolete_jsoncpp_1_7_4.sh - # boost boost_version="1.84.0" boost_package="boost_${boost_version//./_}.tar.bz2" @@ -72,7 +69,8 @@ then cd "$boost_dir" ./bootstrap.sh --with-toolset=clang --with-libraries=thread,system,filesystem,program_options,serialization,test # the default number of jobs that b2 is taking, is the number of detected available CPU threads. - sudo ./b2 -a address-model=64 architecture=arm+x86 install + # install boost to /opt/boost, to use it in CMake, specify Boost_ROOT + sudo ./b2 -a address-model=64 architecture=arm+x86 --prefix=/opt/boost install cd .. sudo rm -rf "$boost_dir" diff --git a/.circleci/soltest_all.sh b/.circleci/soltest_all.sh index 49dd6d3e2ece..20f1c180ef1e 100755 --- a/.circleci/soltest_all.sh +++ b/.circleci/soltest_all.sh @@ -38,7 +38,7 @@ EVMS_WITH_EOF=(osaka) # set EVM_VALUES to the default values. IFS=" " read -ra EVM_VALUES <<< "${1:-${DEFAULT_EVM_VALUES[@]}}" -DEFAULT_EVM=cancun +DEFAULT_EVM=prague OPTIMIZE_VALUES=(0 1) EOF_VERSIONS=(0) diff --git a/CMakeLists.txt b/CMakeLists.txt index d95b7213ebe6..5b39878f26d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,7 @@ include(EthPolicy) eth_policy() # project name and version should be set after cmake_policy CMP0048 -set(PROJECT_VERSION "0.8.29") +set(PROJECT_VERSION "0.8.30") # OSX target needed in order to support std::visit set(CMAKE_OSX_DEPLOYMENT_TARGET "10.14") project(solidity VERSION ${PROJECT_VERSION} LANGUAGES C CXX) diff --git a/CODING_STYLE.md b/CODING_STYLE.md index 2305ae1ec752..b70126d91643 100644 --- a/CODING_STYLE.md +++ b/CODING_STYLE.md @@ -110,9 +110,9 @@ Use `solAssert` and `solUnimplementedAssert` generously to check assumptions tha 4. Favour declarations close to use; do not habitually declare at top of scope ala C. 5. Pass non-trivial parameters as const reference, unless the data is to be copied into the function, then either pass by const reference or by value and use std::move. 6. If a function returns multiple values, use std::tuple (std::pair acceptable) or better introduce a struct type. Do not use */& arguments. -7. Use parameters of pointer type only if ``nullptr`` is a valid argument, use references otherwise. Often, ``std::optional`` is better suited than a raw pointer. +7. Use parameters of pointer type only if `nullptr` is a valid argument, use references otherwise. Often, `std::optional` is better suited than a raw pointer. 8. Never use a macro where adequate non-preprocessor C++ can be written. -9. Only use ``auto`` if the type is very long and rather irrelevant. +9. Only use `auto` if the type is very long and rather irrelevant. 10. Do not pass bools: prefer enumerations instead. 11. Prefer enum class to straight enum. 12. Always initialize POD variables, even if their value is overwritten later. diff --git a/Changelog.md b/Changelog.md index 978cff2b587f..5a0121b5a3bf 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,16 @@ +### 0.8.30 (2025-05-07) + +Compiler Features: +* EVM: Set default EVM Version to `prague`. +* NatSpec: Capture Natspec documentation of `enum` values in the AST. + + +Bugfixes: +* SMTChecker: Do not consider loop conditions as constant-condition verification target as this could cause incorrect reports and internal compiler errors. +* SMTChecker: Fix incorrect analysis when only a subset of contracts is selected with `--model-checker-contracts`. +* SMTChecker: Fix internal compiler error when string literal is used to initialize user-defined type based on fixed bytes. + + ### 0.8.29 (2025-03-12) Language Features: diff --git a/ReleaseChecklist.md b/ReleaseChecklist.md index f55384230aa4..c9fcaba79fb7 100644 --- a/ReleaseChecklist.md +++ b/ReleaseChecklist.md @@ -1,125 +1,124 @@ ## Checklist for making a release: ### Requirements - - [ ] GitHub account with access to [solidity](https://github.com/ethereum/solidity), [solc-js](https://github.com/ethereum/solc-js), - [solc-bin](https://github.com/ethereum/solc-bin), [solidity-website](https://github.com/ethereum/solidity-website). - - [ ] DockerHub account with push rights to the [``solc`` image](https://hub.docker.com/r/ethereum/solc). - - [ ] Launchpad (Ubuntu One) account with a membership in the ["Ethereum" team](https://launchpad.net/~ethereum) and - a gnupg key for your email in the ``ethereum.org`` domain (has to be version 1, gpg2 won't work). - - [ ] Ubuntu/Debian dependencies of the PPA scripts: ``devscripts``, ``debhelper``, ``dput``, ``git``, ``wget``, ``ca-certificates``. - - [ ] [npm Registry](https://www.npmjs.com) account added as a collaborator for the [``solc`` package](https://www.npmjs.com/package/solc). - - [ ] Access to the [solidity_lang Twitter account](https://twitter.com/solidity_lang). - - [ ] [Reddit](https://www.reddit.com) account that is at least 10 days old with a minimum of 20 comment karma (``/r/ethereum`` requirements). +- [ ] GitHub account with access to [solidity](https://github.com/ethereum/solidity), [solc-js](https://github.com/ethereum/solc-js), + [solc-bin](https://github.com/ethereum/solc-bin), [solidity-website](https://github.com/ethereum/solidity-website). +- [ ] DockerHub account with push rights to the [`solc` image](https://hub.docker.com/r/ethereum/solc). +- [ ] Launchpad (Ubuntu One) account with a membership in the ["Ethereum" team](https://launchpad.net/~ethereum) and + a gnupg key for your email in the `ethereum.org` domain (has to be version 1, gpg2 won't work). +- [ ] Ubuntu/Debian dependencies of the Docker script: `docker-buildx`. +- [ ] Ubuntu/Debian dependencies of the PPA scripts: `devscripts`, `debhelper`, `dput`, `git`, `wget`, `ca-certificates`. +- [ ] [npm Registry](https://www.npmjs.com) account added as a collaborator for the [`solc` package](https://www.npmjs.com/package/solc). +- [ ] Access to the [solidity_lang Twitter account](https://twitter.com/solidity_lang). +- [ ] [Reddit](https://www.reddit.com) account that is at least 10 days old with a minimum of 20 comment karma (`/r/ethereum` requirements). ### Pre-flight checks At least a day before the release: - - [ ] Run ``make linkcheck`` from within ``docs/`` and fix any broken links it finds. - Ignore false positives caused by ``href`` anchors and dummy links not meant to work. - **Note**: In order to run the link check, make sure you've built the docs first via ``docs.sh``. - - [ ] Double-check that [the most recent docs builds at readthedocs](https://readthedocs.org/projects/solidity/builds/) succeeded. - - [ ] Make sure that all merged PRs that should have changelog entries do have them. - - [ ] Rerun CI on the top commits of main branches in all repositories that do not have daily activity by creating a test branch or PR: - - [ ] ``solc-js`` - - [ ] ``solc-bin`` (make sure the bytecode comparison check did run) - - [ ] (Optional) Create a prerelease in our Ubuntu PPA by following the steps in the PPA section below on ``develop`` rather than on a tag. - This is recommended especially when dealing with PPA for the first time, when we add a new Ubuntu version or when the PPA scripts were modified in this release cycle. - - [ ] Verify that the release tarball of ``solc-js`` works. - Bump version locally, add ``soljson.js`` from CI, build it, compare the file structure with the previous version, install it locally and try to use it. - - [ ] Review [Learning from Past Releases](https://notes.ethereum.org/@solidity/release-mistakes) to make sure you don't repeat the same mistakes. +- [ ] Run `make linkcheck` from within `docs/` and fix any broken links it finds. + Ignore false positives caused by `href` anchors and dummy links not meant to work. + **Note**: In order to run the link check, make sure you've built the docs first via `docs.sh`. +- [ ] Double-check that [the most recent docs builds at readthedocs](https://readthedocs.org/projects/solidity/builds/) succeeded. +- [ ] Make sure that all merged PRs that should have changelog entries do have them. +- [ ] Rerun CI on the top commits of main branches in all repositories that do not have daily activity by creating a test branch or PR: + - [ ] `solc-js` + - [ ] `solc-bin` (make sure the bytecode comparison check did run) +- [ ] (Optional) Create a prerelease in our Ubuntu PPA by following the steps in the PPA section below on `develop` rather than on a tag. + This is recommended especially when dealing with PPA for the first time, when we add a new Ubuntu version or when the PPA scripts were modified in this release cycle. +- [ ] Verify that the release tarball of `solc-js` works. + Bump version locally, add `soljson.js` from CI, build it, compare the file structure with the previous version, install it locally and try to use it. +- [ ] Review [Learning from Past Releases](https://notes.ethereum.org/@solidity/release-mistakes) to make sure you don't repeat the same mistakes. ### Drafts At least a day before the release: - - [ ] Create a draft PR to sort the changelog. - - [ ] Create draft PRs to bump version in ``solidity`` and ``solc-js``. - **Note**: The ``solc-js`` PR won't pass CI checks yet because it depends on the soljson binary from ``solc-bin``. - - [ ] Create a draft of the release on github. - - [ ] Create a draft PR to update soliditylang.org. - - [ ] Create drafts of blog posts. - - [ ] Prepare drafts of Twitter, Reddit and Solidity Forum announcements. +- [ ] Create a draft PR to sort the changelog. +- [ ] Create draft PRs to bump version in `solidity` and `solc-js`. + **Note**: The `solc-js` PR won't pass CI checks yet because it depends on the soljson binary from `solc-bin`. +- [ ] Create a draft of the release on github. +- [ ] Create a draft PR to update soliditylang.org. +- [ ] Create drafts of blog posts. +- [ ] Prepare drafts of Twitter, Reddit and Solidity Forum announcements. ### Blog Post - - [ ] Create a post on [solidity-website](https://github.com/ethereum/solidity-website/tree/main/src/posts) in the ``Releases`` category and explain some of the new features or concepts. - - [ ] Create a post on [solidity-website](https://github.com/ethereum/solidity-website/tree/main/src/posts) in the ``Security Alerts`` category in case of important bug(s). - - [ ] Get the posts reviewed and approved **before the release starts**. +- [ ] Create a post on [solidity-website](https://github.com/ethereum/solidity-website/tree/main/src/posts) in the `Releases` category and explain some of the new features or concepts. +- [ ] Create a post on [solidity-website](https://github.com/ethereum/solidity-website/tree/main/src/posts) in the `Security Alerts` category in case of important bug(s). +- [ ] Get the posts reviewed and approved **before the release starts**. ### Changelog - - [ ] Sort the changelog entries alphabetically and correct any errors you notice. Commit it. - - [ ] Update the changelog to include a release date. - - [ ] Run ``scripts/update_bugs_by_version.py`` to regenerate ``bugs_by_version.json`` from the changelog and ``bugs.json``. - Make sure that the resulting ``bugs_by_version.json`` has a new, empty entry for the new version. - - [ ] Commit changes, create a pull request and wait for the tests. Then merge it. - - [ ] Copy the changelog into the release blog post. +- [ ] Sort the changelog entries alphabetically and correct any errors you notice. Commit it. +- [ ] Update the changelog to include a release date. +- [ ] Run `scripts/update_bugs_by_version.py` to regenerate `bugs_by_version.json` from the changelog and `bugs.json`. + Make sure that the resulting `bugs_by_version.json` has a new, empty entry for the new version. +- [ ] Commit changes, create a pull request and wait for the tests. Then merge it. +- [ ] Copy the changelog into the release blog post. ### Create the Release - - [ ] Create a [release on GitHub](https://github.com/ethereum/solidity/releases/new). - Set the target to the ``develop`` branch and the tag to the new version, e.g. ``v0.8.5``. - Include the following warning: ``**The release is still in progress. You may see broken links and binaries may not yet be available from all sources.**``. - Do not publish it yet - click the ``Save draft`` button instead. - - [ ] Thank voluntary contributors in the GitHub release notes. - Use ``scripts/list_contributors.sh v`` to get initial list of names. - Remove different variants of the same name manually before using the output. - - [ ] Check that all tests on the latest commit in ``develop`` are green. - - [ ] Click the ``Publish release`` button on the release page, creating the tag. - **Important: Must not be done before all the PRs, including changelog cleanup and date, are merged.** - - [ ] Wait for the CI runs on the tag itself. +- [ ] Create a [release on GitHub](https://github.com/ethereum/solidity/releases/new). + Set the target to the `develop` branch and the tag to the new version, e.g. `v0.8.5`. + Include the following warning: `**The release is still in progress. You may see broken links and binaries may not yet be available from all sources.**`. + Do not publish it yet - click the `Save draft` button instead. +- [ ] Thank voluntary contributors in the GitHub release notes. + Use `scripts/list_contributors.sh v` to get initial list of names. + Remove different variants of the same name manually before using the output. +- [ ] Check that all tests on the latest commit in `develop` are green. +- [ ] Click the `Publish release` button on the release page, creating the tag. + **Important: Must not be done before all the PRs, including changelog cleanup and date, are merged.** +- [ ] Wait for the CI runs on the tag itself. ### Upload Release Artifacts and Publish Binaries - - [ ] Switch to the tag that archives have to be created for. - - [ ] Create the ``prerelease.txt`` file: (``echo -n > prerelease.txt``). - - [ ] Run ``scripts/create_source_tarball.sh`` while being on the tag to create the source tarball. This will create the tarball in a directory called ``upload``. - - [ ] Take the tarball from the upload directory (its name should be ``solidity_x.x.x.tar.gz``, otherwise ``prerelease.txt`` was missing in the step before) and upload the source tarball to the release page. - - [ ] Take the ``github-binaries.tar`` tarball from ``c_release_binaries`` run of the tagged commit in circle-ci and add all binaries from it to the release page. - Make sure it contains four binaries: ``solc-windows.exe``, ``solc-macos``, ``solc-static-linux`` and ``soljson.js``. - - [ ] Take the ``solc-bin-binaries.tar`` tarball from ``c_release_binaries`` run of the tagged commit in circle-ci and add all binaries from it to solc-bin. - - [ ] Run ``npm install`` if you've got a clean checkout of the solc-bin repo. - - [ ] Run ``npm run update -- --reuse-hashes`` in ``solc-bin`` and verify that the script has updated ``list.js``, ``list.txt`` and ``list.json`` files correctly and that symlinks to the new release have been added in ``solc-bin/wasm/`` and ``solc-bin/emscripten-wasm32/``. - - [ ] Create a pull request in solc-bin and merge. +- [ ] Switch to the tag that archives have to be created for. +- [ ] Create the `prerelease.txt` file: (`echo -n > prerelease.txt`). +- [ ] Run `scripts/create_source_tarball.sh` while being on the tag to create the source tarball. This will create the tarball in a directory called `upload`. +- [ ] Take the tarball from the upload directory (its name should be `solidity_x.x.x.tar.gz`, otherwise `prerelease.txt` was missing in the step before) and upload the source tarball to the release page. +- [ ] Take the `github-binaries.tar` tarball from `c_release_binaries` run of the tagged commit in circle-ci and add all binaries from it to the release page. + Make sure it contains four binaries: `solc-windows.exe`, `solc-macos`, `solc-static-linux` and `soljson.js`. +- [ ] Take the `solc-bin-binaries.tar` tarball from `c_release_binaries` run of the tagged commit in circle-ci and add all binaries from it to solc-bin. +- [ ] Run `npm install` if you've got a clean checkout of the solc-bin repo. +- [ ] Run `npm run update -- --reuse-hashes` in `solc-bin` and verify that the script has updated `list.js`, `list.txt` and `list.json` files correctly and that symlinks to the new release have been added in `solc-bin/wasm/` and `solc-bin/emscripten-wasm32/`. +- [ ] Create a pull request in solc-bin and merge. ### Homebrew and MacOS - - [ ] Update the version and the hash (``sha256sum solidity_$VERSION.tar.gz``) in the [``solidity`` formula in Homebrew core repository](https://github.com/Homebrew/homebrew-core/blob/master/Formula/s/solidity.rb). +- [ ] Update the version and the hash (`sha256sum solidity_$VERSION.tar.gz`) in the [`solidity` formula in Homebrew core repository](https://github.com/Homebrew/homebrew-core/blob/master/Formula/s/solidity.rb). ### Docker - - [ ] Run ``./scripts/docker_deploy_manual.sh v$VERSION``. +- [ ] Make sure `docker-buildx` is installed. +- [ ] Run `./scripts/docker_deploy_manual.sh v$VERSION`. ### PPA - - [ ] Create ``.release_ppa_auth`` at the root of your local Solidity checkout and set ``LAUNCHPAD_EMAIL`` and ``LAUNCHPAD_KEYID`` to your key's email and key id. - - [ ] Double-check that the ``DISTRIBUTIONS`` list in ``scripts/release_ppa.sh`` and ``scripts/deps-ppa/static_z3.sh`` contains the most recent versions of Ubuntu. - - [ ] Make sure the [``~ethereum/cpp-build-deps`` PPA repository](https://launchpad.net/~ethereum/+archive/ubuntu/cpp-build-deps) contains ``libz3-static-dev`` builds for all current versions of Ubuntu. - Note that it may be included in the ``z3-static`` multipackage (follow the ``View package details`` link to check). - If not present, run ``scripts/deps-ppa/static_z3.sh`` and wait for the builds to succeed before continuing. - - [ ] Run ``scripts/release_ppa.sh v$VERSION`` to create the PPA release. - This will create a single package containing static binary for older Ubuntu versions in the [``~ethereum/ethereum-static`` PPA](https://launchpad.net/~ethereum/+archive/ubuntu/ethereum-static) - and separate packages with dynamically-linked binaries for recent versions (those listed in ``DISTRIBUTIONS``) in the [``~ethereum/ethereum`` PPA](https://launchpad.net/~ethereum/+archive/ubuntu/ethereum). - - [ ] Wait for the build to be finished and published for *all architectures* (currently we only build for ``amd64``, but we may add ``arm`` in the future). - **SERIOUSLY: DO NOT PROCEED EARLIER!!!** - - [ ] *After* the package with the static build is *published*, use it to create packages for older Ubuntu versions. - Copy the static package to the [``~ethereum/ethereum`` PPA](https://launchpad.net/~ethereum/+archive/ubuntu/ethereum) - for the destination series ``Trusty``, ``Xenial``, ``Bionic``, and ``Focal`` - while selecting ``Copy existing binaries``. +- [ ] Create `.release_ppa_auth` at the root of your local Solidity checkout and set `LAUNCHPAD_EMAIL` and `LAUNCHPAD_KEYID` to your key's email and key id. +- [ ] Double-check that the `DISTRIBUTIONS` list in `scripts/release_ppa.sh` contains the most recent versions of Ubuntu. +- [ ] Run `scripts/release_ppa.sh v$VERSION` to create the PPA release. + This will create a single package containing static binary for older Ubuntu versions in the [`~ethereum/ethereum-static` PPA](https://launchpad.net/~ethereum/+archive/ubuntu/ethereum-static) + and separate packages with dynamically-linked binaries for recent versions (those listed in `DISTRIBUTIONS`) in the [`~ethereum/ethereum` PPA](https://launchpad.net/~ethereum/+archive/ubuntu/ethereum). +- [ ] Wait for the build to be finished and published for *all architectures* (currently we only build for `amd64`, but we may add `arm` in the future). + **SERIOUSLY: DO NOT PROCEED EARLIER!!!** +- [ ] *After* the package with the static build is *published*, use it to create packages for older Ubuntu versions. + Copy the static package to the [`~ethereum/ethereum` PPA](https://launchpad.net/~ethereum/+archive/ubuntu/ethereum) + for the destination series `Trusty`, `Xenial`, `Bionic`, and `Focal` + while selecting `Copy existing binaries`. ### Release solc-js - - [ ] Wait until solc-bin was properly deployed. You can test this via remix - a test run through remix is advisable anyway. - - [ ] Increment the version number, create a pull request for that, merge it after tests succeeded. - - [ ] Create a tag using ``git tag --annotate v$VERSION`` and push it with ``git push --tags``. - - [ ] Wait for the CI runs on the tag itself. - - [ ] Take the ``solc-x.y.z.tgz`` artifact from ``build-package`` run on the tagged commit in circle-ci. - Inspect the tarball to ensure that it contains an up-to-date compiler binary (``soljson.js``). - - [ ] Run ``npm publish solc-x.y.z.tgz`` to publish the newly created tarball. +- [ ] Wait until solc-bin was properly deployed. You can test this via remix - a test run through remix is advisable anyway. +- [ ] Increment the version number, create a pull request for that, merge it after tests succeeded. +- [ ] Create a tag using `git tag --annotate v$VERSION` and push it with `git push --tags`. +- [ ] Wait for the CI runs on the tag itself. +- [ ] Take the `solc-x.y.z.tgz` artifact from `build-package` run on the tagged commit in circle-ci. + Inspect the tarball to ensure that it contains an up-to-date compiler binary (`soljson.js`). +- [ ] Run `npm publish solc-x.y.z.tgz` to publish the newly created tarball. ### Post-release - - [ ] Make sure the documentation for the new release has been published successfully. - Go to the [documentation status page at ReadTheDocs](https://readthedocs.org/projects/solidity/) and verify that the new version is listed, works and is marked as default. - - [ ] Remove "still in progress" warning from the [release notes](https://github.com/ethereum/solidity/releases). - - [ ] Merge the [blog posts](https://github.com/ethereum/solidity-website/pulls) related to the release. - - [ ] Create a commit to increase the version number on ``develop`` in ``CMakeLists.txt`` and add a new skeleton changelog entry. - - [ ] Update the release information section [in the source of soliditylang.org](https://github.com/ethereum/solidity-website/blob/main/src/pages/index.tsx). - - [ ] Announce on [Twitter](https://twitter.com/solidity_lang), including links to the release and the blog post. - - [ ] Announce on [Fosstodon](https://fosstodon.org/@solidity/), including links to the release and the blog post. - - [ ] Share the announcement on Reddit in [``/r/ethdev``](https://reddit.com/r/ethdev/), cross-posted to [``/r/ethereum``](https://reddit.com/r/ethereum/). - - [ ] Share the announcement on the [Solidity forum](https://forum.soliditylang.org) in the ``Announcements`` category. - - [ ] Share the announcement on [Project Updates](https://discord.com/channels/420394352083337236/798974456704925696) - - [ ] Share the announcement on [`#solidity` channel on Matrix](https://matrix.to/#/#ethereum_solidity:gitter.im) - - [ ] Share the announcement on [`#solc-tooling`](https://matrix.to/#/#solc-tooling:matrix.org) - - [ ] If anything went wrong this time, mention it in [Learning from Past Releases](https://notes.ethereum.org/@solidity/release-mistakes). - - [ ] Bump vendored dependencies. - - [ ] Lean back, wait for bug reports and repeat from step 1 :). +- [ ] Make sure the documentation for the new release has been published successfully. + Go to the [documentation status page at ReadTheDocs](https://readthedocs.org/projects/solidity/) and verify that the new version is listed, works and is marked as default. +- [ ] Remove "still in progress" warning from the [release notes](https://github.com/ethereum/solidity/releases). +- [ ] Merge the [blog posts](https://github.com/ethereum/solidity-website/pulls) related to the release. +- [ ] Create a commit to increase the version number on `develop` in `CMakeLists.txt` and add a new skeleton changelog entry. +- [ ] Update the release information section [in the source of soliditylang.org](https://github.com/ethereum/solidity-website/blob/main/src/pages/index.tsx). +- [ ] Announce on [Twitter](https://twitter.com/solidity_lang), including links to the release and the blog post. +- [ ] Announce on [Fosstodon](https://fosstodon.org/@solidity/), including links to the release and the blog post. +- [ ] Share the announcement on Reddit in [`/r/ethdev`](https://reddit.com/r/ethdev/), cross-posted to [`/r/ethereum`](https://reddit.com/r/ethereum/). +- [ ] Share the announcement on the [Solidity forum](https://forum.soliditylang.org) in the `Announcements` category. +- [ ] Share the announcement on [Project Updates](https://discord.com/channels/420394352083337236/798974456704925696) +- [ ] Share the announcement on [`#solidity` channel on Matrix](https://matrix.to/#/#ethereum_solidity:gitter.im) +- [ ] Share the announcement on [`#solc-tooling`](https://matrix.to/#/#solc-tooling:matrix.org) +- [ ] If anything went wrong this time, mention it in [Learning from Past Releases](https://notes.ethereum.org/@solidity/release-mistakes). +- [ ] Bump vendored dependencies. +- [ ] Lean back, wait for bug reports and repeat from step 1 :). diff --git a/cmake/EthDependencies.cmake b/cmake/EthDependencies.cmake index 87a5e1b5e17e..f79140dd29d9 100644 --- a/cmake/EthDependencies.cmake +++ b/cmake/EthDependencies.cmake @@ -31,6 +31,10 @@ endif() set(BOOST_COMPONENTS "filesystem;unit_test_framework;program_options;system") +# CMake >= 3.30 should not use the vendored boost +if(POLICY CMP0167) + cmake_policy(SET CMP0167 NEW) +endif() if (WIN32) # Boost 1.77 fixes a bug that causes crashes on Windows for some relative paths in --allow-paths. # See https://github.com/boostorg/filesystem/issues/201 @@ -38,7 +42,16 @@ if (WIN32) else() # Boost 1.65 is the first to also provide boost::get for rvalue-references (#5787). # Boost 1.67 moved container_hash into is own module. - find_package(Boost 1.67.0 QUIET REQUIRED COMPONENTS ${BOOST_COMPONENTS}) + # Boost 1.70 comes with its own BoostConfig.cmake and is the new (non-deprecated) behavior + find_package(Boost 1.70.0 QUIET COMPONENTS ${BOOST_COMPONENTS}) + if (NOT ${Boost_FOUND}) + # If the boost version is < 1.70.0, there is no boost config delivered with it, revert to old behavior + # todo drop this once cmake minimum version >= 3.30 is reached + if(POLICY CMP0167) + cmake_policy(SET CMP0167 OLD) + endif() + find_package(Boost 1.67.0 QUIET REQUIRED COMPONENTS ${BOOST_COMPONENTS}) + endif() endif() # If cmake is older than boost and boost is older than 1.70, @@ -49,8 +62,7 @@ if (NOT TARGET Boost::boost) # header only target add_library(Boost::boost INTERFACE IMPORTED) set_property(TARGET Boost::boost APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${Boost_INCLUDE_DIRS}) endif() -get_property(LOCATION TARGET Boost::boost PROPERTY INTERFACE_INCLUDE_DIRECTORIES) -message(STATUS "Found Boost headers in ${LOCATION}") +message(STATUS "Found Boost ${Boost_VERSION} headers in ${Boost_INCLUDE_DIRS}") foreach (BOOST_COMPONENT IN LISTS BOOST_COMPONENTS) if (NOT TARGET Boost::${BOOST_COMPONENT}) diff --git a/deps/fmtlib b/deps/fmtlib index 0c9fce2ffefe..123913715afe 160000 --- a/deps/fmtlib +++ b/deps/fmtlib @@ -1 +1 @@ -Subproject commit 0c9fce2ffefecfdce794e1859584e25877b7b592 +Subproject commit 123913715afeb8a437e6388b4473fcc4753e1c9a diff --git a/docs/_static/css/custom.css b/docs/_static/css/custom.css index d2c9c86e7b2e..bdfb5ce0bce5 100644 --- a/docs/_static/css/custom.css +++ b/docs/_static/css/custom.css @@ -93,7 +93,7 @@ h1 { } section:first-of-type h1:first-of-type { - font-family: 'Overpass mono', monospace; + font-family: 'Overpass Mono', monospace; font-size: 48px; margin-top: 3rem; margin-bottom: 5rem; diff --git a/docs/bugs_by_version.json b/docs/bugs_by_version.json index 60fcdd049a0f..1a210b885c2a 100644 --- a/docs/bugs_by_version.json +++ b/docs/bugs_by_version.json @@ -1923,6 +1923,10 @@ ], "released": "2021-03-23" }, + "0.8.30": { + "bugs": [], + "released": "2025-05-07" + }, "0.8.4": { "bugs": [ "FullInlinerNonExpressionSplitArgumentEvaluationOrder", diff --git a/docs/contracts/events.rst b/docs/contracts/events.rst index 8c73c31603ae..c83970099a65 100644 --- a/docs/contracts/events.rst +++ b/docs/contracts/events.rst @@ -15,7 +15,7 @@ arguments to be stored in the transaction's log - a special data structure in the blockchain. These logs are associated with the address of the contract that emitted them, are incorporated into the blockchain, and stay there as long as a block is accessible (forever as of now, but this might -change in the future). The Log and its event data is not accessible from within +change in the future). The Log and its event data are not accessible from within contracts (not even from the contract that created them). It is possible to request a Merkle proof for logs, so if diff --git a/docs/contracts/inheritance.rst b/docs/contracts/inheritance.rst index fccfee609587..8a2d12afd839 100644 --- a/docs/contracts/inheritance.rst +++ b/docs/contracts/inheritance.rst @@ -548,7 +548,7 @@ Multiple Inheritance and Linearization Languages that allow multiple inheritance have to deal with several problems. One is the `Diamond Problem `_. -Solidity is similar to Python in that it uses "`C3 Linearization `_" +Solidity is similar to Python in that it uses C3 Linearization to force a specific order in the directed acyclic graph (DAG) of base classes. This results in the desirable property of monotonicity but disallows some inheritance graphs. Especially, the order in diff --git a/docs/control-structures.rst b/docs/control-structures.rst index 544390c686e8..61e946cd4a37 100644 --- a/docs/control-structures.rst +++ b/docs/control-structures.rst @@ -111,22 +111,35 @@ otherwise, the ``value`` option would not be available. the ``value`` and ``gas`` settings are lost, only ``feed.info{value: 10, gas: 800}()`` performs the function call. -Due to the fact that the EVM considers a call to a non-existing contract to -always succeed, Solidity uses the ``extcodesize`` opcode to check that -the contract that is about to be called actually exists (it contains code) -and causes an exception if it does not. This check is skipped if the return -data will be decoded after the call and thus the ABI decoder will catch the -case of a non-existing contract. +.. warning:: + Due to the fact that the EVM considers a call to a non-existing contract to + always succeed, Solidity uses the ``extcodesize`` opcode to check that + the contract that is about to be called actually exists (it contains code) + and causes an exception if it does not. This check is skipped if the return + data will be decoded after the call and thus the ABI decoder will catch the + case of a non-existing contract. -Note that this check is not performed in case of :ref:`low-level calls ` which -operate on addresses rather than contract instances. + This check is not performed in case of :ref:`low-level calls ` which + operate on addresses rather than contract instances. -.. note:: +.. warning:: Be careful when using high-level calls to :ref:`precompiled contracts `, since the compiler considers them non-existing according to the above logic even though they execute code and can return data. +.. note:: + Since the version 0.8.10, the compiler does not check ``extcodesize`` on + high-level external calls if return data is expected, because an empty code + will be unable to return data, and the ABI decoder will revert. + As a consequence, this allows high-level external calls to precompiled + contracts, since they can return data despite having no code + associated with their addresses. + + Read about :ref:`precompiled contracts ` and + :ref:`low-level calls ` + for more information. + Function calls also cause exceptions if the called contract itself throws an exception or goes out of gas. @@ -901,4 +914,4 @@ in scope in the block that follows. out-of-gas situation and not a deliberate error condition: The caller always retains at least 1/64th of the gas in a call and thus even if the called contract goes out of gas, the caller still - has some gas left. + has some gas left. \ No newline at end of file diff --git a/docs/examples/micropayment.rst b/docs/examples/micropayment.rst index 9a3ad845ce1a..a7b26bb51b8b 100644 --- a/docs/examples/micropayment.rst +++ b/docs/examples/micropayment.rst @@ -274,8 +274,8 @@ Opening the Payment Channel To open the payment channel, Alice deploys the smart contract, attaching the Ether to be escrowed and specifying the intended recipient and a -maximum duration for the channel to exist. This is the function -``SimplePaymentChannel`` in the contract, at the end of this section. +maximum duration for the channel to exist. This is the ``constructor`` +in the ``SimplePaymentChannel`` contract, at the end of this section. Making Payments --------------- diff --git a/docs/metadata.rst b/docs/metadata.rst index 063936a9dcde..90513ee326de 100644 --- a/docs/metadata.rst +++ b/docs/metadata.rst @@ -124,56 +124,29 @@ explanatory purposes. "version": 1 // NatSpec version } }, - // Required: Compiler settings. Reflects the settings in the JSON input during compilation. - // Check the documentation of standard JSON input's "settings" field + // Required: Compiler settings. + // Reflects the settings in the JSON input during compilation, except: + // - Different format: "libraries" field + // - Added field in metadata.settings: "compilationTarget" + // - Not in metadata.settings: "stopAfter", "debug.debugInfo", "outputSelection" + // See the standard JSON input's "settings" field docs for the rest. "settings": { // Required for Solidity: File path and the name of the contract or library this - // metadata is created for. + // metadata is created for. This field is not present in the standard JSON input settings. "compilationTarget": { "myDirectory/myFile.sol": "MyContract" }, - // Required for Solidity. - "evmVersion": "london", - // Optional: Only present if not null. - "eofVersion": 1, // Required for Solidity: Addresses for libraries used. + // Note that metadata has a different format for "libraries" field than the standard JSON input. + // metadata format = { "MyLib.sol:MyLib": "0x123123..." } + // standard JSON input format = { "MyLib.sol": { "MyLib": "0x123123..." } } "libraries": { - "MyLib": "0x123123..." + "MyLib.sol:MyLib": "0x123123..." }, - "metadata": { - // Reflects the setting used in the input json, defaults to "true" - "appendCBOR": true, - // Reflects the setting used in the input json, defaults to "ipfs" - "bytecodeHash": "ipfs", - // Reflects the setting used in the input json, defaults to "false" - "useLiteralContent": true - }, - // Optional: Optimizer settings. The fields "enabled" and "runs" are deprecated - // and are only given for backward-compatibility. - "optimizer": { - "details": { - "constantOptimizer": false, - "cse": false, - "deduplicate": false, - // inliner defaults to "false" - "inliner": false, - // jumpdestRemover defaults to "true" - "jumpdestRemover": true, - "orderLiterals": false, - // peephole defaults to "true" - "peephole": true, - "yul": true, - // Optional: Only present if "yul" is "true" - "yulDetails": { - "optimizerSteps": "dhfoDgvulfnTUtnIf...", - "stackAllocation": false - } - }, - "enabled": true, - "runs": 500 - }, - // Required for Solidity: Sorted list of import remappings. - "remappings": [ ":g=/dir" ] + // ... + // ... + // ... + // The rest of the fields and their defaults same as in std JSON input. }, // Required: Compilation source files/source units, keys are file paths "sources": { diff --git a/docs/natspec-format.rst b/docs/natspec-format.rst index 2f0d1d6b40d9..40da3e5e3529 100644 --- a/docs/natspec-format.rst +++ b/docs/natspec-format.rst @@ -37,7 +37,7 @@ Documentation Example ===================== Documentation is inserted above each ``contract``, ``interface``, ``library``, -``function``, and ``event`` using the Doxygen notation format. +``function``, ``enum``, ``enum`` value and ``event`` using the Doxygen notation format. A ``public`` state variable is equivalent to a ``function`` for the purposes of NatSpec. @@ -116,13 +116,13 @@ in the same way as if it were tagged with ``@notice``. =============== ====================================================================================== ============================= Tag Context =============== ====================================================================================== ============================= -``@title`` A title that should describe the contract/interface contract, library, interface, struct, enum -``@author`` The name of the author contract, library, interface, struct, enum -``@notice`` Explain to an end user what this does contract, library, interface, function, public state variable, event, struct, enum, error -``@dev`` Explain to a developer any extra details contract, library, interface, function, state variable, event, struct, enum, error -``@param`` Documents a parameter just like in Doxygen (must be followed by parameter name) function, event, error -``@return`` Documents the return variables of a contract's function function, public state variable -``@inheritdoc`` Copies all missing tags from the base function (must be followed by the contract name) function, public state variable +``@title`` A title that should describe the contract/interface contract, library, interface, struct, enum, enum values +``@author`` The name of the author contract, library, interface, struct, enum, enum values +``@notice`` Explain to an end user what this does contract, library, interface, function, public state variable, event, struct, enum, enum values error +``@dev`` Explain to a developer any extra details contract, library, interface, function, state variable, event, struct, enum, enum values, error +``@param`` Documents a parameter just like in Doxygen (must be followed by parameter name) function, event, enum values, error +``@return`` Documents the return variables of a contract's function function, enum, enum values, public state variable +``@inheritdoc`` Copies all missing tags from the base function (must be followed by the contract name) function, enum, enum values, public state variable ``@custom:...`` Custom tag, semantics is application-defined everywhere =============== ====================================================================================== ============================= diff --git a/docs/requirements.txt b/docs/requirements.txt index b1b21a8691d3..f4c1aae61730 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,10 +1,13 @@ # Older versions of sphinx-rtd-theme do not work with never docutils but have a bug in the dependency # which could result in it being installed anyway and the style (especially bullet points) being broken. # See https://github.com/readthedocs/sphinx_rtd_theme/issues/1115 -sphinx_rtd_theme>=0.5.2 +# theme >=3.0.0 removes the display_version option in favor of version_selector and language_selector +sphinx_rtd_theme>=0.5.2, <3.0.0 pygments-lexer-solidity>=0.7.0 -sphinx-a4doc>=1.6.0 +sphinx-a4doc>=1.6.0; python_version < '3.13' +# todo remove this once there is a version > 1.6.0 +sphinx-a4doc @ git+https://github.com/taminomara/sphinx-a4doc@f63d3b2; python_version >= '3.13' # Sphinx 2.1.0 is the oldest version that accepts a lexer class in add_lexer() -sphinx>=2.1.0, <6.0 +sphinx>=2.1.0, <9.0 diff --git a/docs/using-the-compiler.rst b/docs/using-the-compiler.rst index 5e67533ba43c..91d975bcda0e 100644 --- a/docs/using-the-compiler.rst +++ b/docs/using-the-compiler.rst @@ -176,12 +176,12 @@ at each version. Backward compatibility is not guaranteed between each version. - Introduces ``prevrandao()`` and ``block.prevrandao``, and changes the semantics of the now deprecated ``block.difficulty``, disallowing ``difficulty()`` in inline assembly (see `EIP-4399 `_). - ``shanghai`` - Smaller code size and gas savings due to the introduction of ``push0`` (see `EIP-3855 `_). -- ``cancun`` (**default**) +- ``cancun`` - The block's blob base fee (`EIP-7516 `_ and `EIP-4844 `_) can be accessed via the global ``block.blobbasefee`` or ``blobbasefee()`` in inline assembly. - Introduces ``blobhash()`` in inline assembly and a corresponding global function to retrieve versioned hashes of blobs associated with the transaction (see `EIP-4844 `_). - Opcode ``mcopy`` is available in assembly (see `EIP-5656 `_). - Opcodes ``tstore`` and ``tload`` are available in assembly (see `EIP-1153 `_). -- ``prague`` (**experimental**) +- ``prague`` (**default**) - ``osaka`` (**experimental**) - Experimental compilation to EOF is available starting from this version. (`EIP-7692 `_) @@ -279,7 +279,7 @@ Input Description { // Optional: Stop compilation after the given stage. Currently only "parsing" is valid here "stopAfter": "parsing", - // Optional: Sorted list of remappings + // Optional: List of remappings "remappings": [ ":g=/dir" ], // Optional: Optimizer settings "optimizer": { @@ -356,8 +356,8 @@ Input Description // Version of the EVM to compile for (optional). // Affects type checking and code generation. Can be homestead, // tangerineWhistle, spuriousDragon, byzantium, constantinople, - // petersburg, istanbul, berlin, london, paris, shanghai, cancun (default), prague (experimental) or osaka (experimental). - "evmVersion": "cancun", + // petersburg, istanbul, berlin, london, paris, shanghai, cancun, prague (default) or osaka (experimental). + "evmVersion": "prague", // EVM Object Format version to compile for (optional, experimental). // Currently the only valid value is 1. If not specified, legacy non-EOF bytecode will be generated. "eofVersion": null, diff --git a/libevmasm/Assembly.cpp b/libevmasm/Assembly.cpp index a0711cd41756..9dd203a0f802 100644 --- a/libevmasm/Assembly.cpp +++ b/libevmasm/Assembly.cpp @@ -843,8 +843,7 @@ std::map const& Assembly::optimiseInternal( } } - // TODO: verify this for EOF. - if (_settings.runPeephole && !m_eofVersion.has_value()) + if (_settings.runPeephole) { for (auto& codeSection: m_codeSections) { diff --git a/libevmasm/AssemblyItem.h b/libevmasm/AssemblyItem.h index b053c5b27598..8386bf2dd4bc 100644 --- a/libevmasm/AssemblyItem.h +++ b/libevmasm/AssemblyItem.h @@ -85,7 +85,10 @@ class AssemblyItem m_type(Operation), m_instruction(_i), m_debugData(std::move(_debugData)) - {} + { + solAssert(_i != Instruction::SWAPN, "Construct via AssemblyItem::swapN"); + solAssert(_i != Instruction::DUPN, "Construct via AssemblyItem::dupN"); + } AssemblyItem(AssemblyItemType _type, u256 _data = 0, langutil::DebugData::ConstPtr _debugData = langutil::DebugData::create()): m_type(_type), m_debugData(std::move(_debugData)) @@ -105,7 +108,6 @@ class AssemblyItem explicit AssemblyItem(bytes _verbatimData, size_t _arguments, size_t _returnVariables): m_type(VerbatimBytecode), - m_instruction{}, m_verbatimBytecode{{_arguments, _returnVariables, std::move(_verbatimData)}}, m_debugData{langutil::DebugData::create()} {} @@ -195,7 +197,7 @@ class AssemblyItem /// @returns true if the item has m_instruction properly set. bool hasInstruction() const { - return + bool const shouldHaveInstruction = m_type == Operation || m_type == EOFCreate || m_type == ReturnContract || @@ -206,12 +208,14 @@ class AssemblyItem m_type == RetF || m_type == SwapN || m_type == DupN; + solAssert(shouldHaveInstruction == m_instruction.has_value()); + return shouldHaveInstruction; } /// @returns the instruction of this item (only valid if hasInstruction returns true) Instruction instruction() const { solAssert(hasInstruction()); - return m_instruction; + return *m_instruction; } /// @returns true if the type and data of the items are equal. @@ -243,7 +247,7 @@ class AssemblyItem /// Shortcut that avoids constructing an AssemblyItem just to perform the comparison. bool operator==(Instruction _instr) const { - return type() == Operation && instruction() == _instr; + return hasInstruction() && instruction() == _instr; } bool operator!=(Instruction _instr) const { return !operator==(_instr); } @@ -323,7 +327,7 @@ class AssemblyItem size_t opcodeCount() const noexcept; AssemblyItemType m_type; - Instruction m_instruction; ///< Only valid if m_type == Operation + std::optional m_instruction; ///< Only valid for item types that represent a specific opcode std::shared_ptr m_data; ///< Only valid if m_type != Operation std::optional m_functionSignature; ///< Only valid if m_type == CallF or JumpF /// If m_type == VerbatimBytecode, this holds number of arguments, number of diff --git a/libevmasm/EVMAssemblyStack.cpp b/libevmasm/EVMAssemblyStack.cpp index 7cb05bf8bf00..bed4ff744ec4 100644 --- a/libevmasm/EVMAssemblyStack.cpp +++ b/libevmasm/EVMAssemblyStack.cpp @@ -74,13 +74,13 @@ void EVMAssemblyStack::assemble() LinkerObject const& EVMAssemblyStack::object(std::string const& _contractName) const { solAssert(_contractName == m_name); - return m_object; + return object(); } LinkerObject const& EVMAssemblyStack::runtimeObject(std::string const& _contractName) const { solAssert(_contractName == m_name); - return m_runtimeObject; + return runtimeObject(); } std::map EVMAssemblyStack::sourceIndices() const @@ -95,13 +95,13 @@ std::map EVMAssemblyStack::sourceIndices() const std::string const* EVMAssemblyStack::sourceMapping(std::string const& _contractName) const { solAssert(_contractName == m_name); - return &m_sourceMapping; + return &sourceMapping(); } std::string const* EVMAssemblyStack::runtimeSourceMapping(std::string const& _contractName) const { solAssert(_contractName == m_name); - return &m_runtimeSourceMapping; + return &runtimeSourceMapping(); } Json EVMAssemblyStack::ethdebug(std::string const& _contractName) const @@ -123,20 +123,30 @@ Json EVMAssemblyStack::ethdebug() const return {}; } -Json EVMAssemblyStack::assemblyJSON(std::string const& _contractName) const +Json EVMAssemblyStack::assemblyJSON() const { - solAssert(_contractName == m_name); solAssert(m_evmAssembly); return m_evmAssembly->assemblyJSON(sourceIndices()); } -std::string EVMAssemblyStack::assemblyString(std::string const& _contractName, StringMap const& _sourceCodes) const +Json EVMAssemblyStack::assemblyJSON(std::string const& _contractName) const { solAssert(_contractName == m_name); + return assemblyJSON(); +} + +std::string EVMAssemblyStack::assemblyString(StringMap const& _sourceCodes) const +{ solAssert(m_evmAssembly); return m_evmAssembly->assemblyString(m_debugInfoSelection, _sourceCodes); } +std::string EVMAssemblyStack::assemblyString(std::string const& _contractName, StringMap const& _sourceCodes) const +{ + solAssert(_contractName == m_name); + return assemblyString(_sourceCodes); +} + std::string const EVMAssemblyStack::filesystemFriendlyName(std::string const& _contractName) const { solAssert(_contractName == m_name); diff --git a/libevmasm/EVMAssemblyStack.h b/libevmasm/EVMAssemblyStack.h index 2fe63c11c2ec..444d444ba9e2 100644 --- a/libevmasm/EVMAssemblyStack.h +++ b/libevmasm/EVMAssemblyStack.h @@ -58,20 +58,26 @@ class EVMAssemblyStack: public AbstractAssemblyStack std::string const& name() const { return m_name; } + LinkerObject const& object() const { return m_object; } LinkerObject const& object(std::string const& _contractName) const override; + LinkerObject const& runtimeObject() const { return m_runtimeObject; } LinkerObject const& runtimeObject(std::string const& _contractName) const override; std::shared_ptr const& evmAssembly() const { return m_evmAssembly; } std::shared_ptr const& evmRuntimeAssembly() const { return m_evmRuntimeAssembly; } + std::string const& sourceMapping() const { return m_sourceMapping; } std::string const* sourceMapping(std::string const& _contractName) const override; + std::string const& runtimeSourceMapping() const { return m_runtimeSourceMapping; } std::string const* runtimeSourceMapping(std::string const& _contractName) const override; Json ethdebug(std::string const& _contractName) const override; Json ethdebugRuntime(std::string const& _contractName) const override; Json ethdebug() const override; + Json assemblyJSON() const; Json assemblyJSON(std::string const& _contractName) const override; + std::string assemblyString(StringMap const& _sourceCodes) const; std::string assemblyString(std::string const& _contractName, StringMap const& _sourceCodes) const override; std::string const filesystemFriendlyName(std::string const& _contractName) const override; diff --git a/libevmasm/Instruction.cpp b/libevmasm/Instruction.cpp index 62c639aff117..fb1f72b44bdf 100644 --- a/libevmasm/Instruction.cpp +++ b/libevmasm/Instruction.cpp @@ -26,7 +26,7 @@ using namespace solidity; using namespace solidity::util; using namespace solidity::evmasm; -std::map const solidity::evmasm::c_instructions = +std::map> const solidity::evmasm::c_instructions = { { "STOP", Instruction::STOP }, { "ADD", Instruction::ADD }, diff --git a/libevmasm/Instruction.h b/libevmasm/Instruction.h index 22969c04e6b6..7cda8444ddc5 100644 --- a/libevmasm/Instruction.h +++ b/libevmasm/Instruction.h @@ -339,6 +339,6 @@ InstructionInfo instructionInfo(Instruction _inst, langutil::EVMVersion _evmVers bool isValidInstruction(Instruction _inst); /// Convert from string mnemonic to Instruction type. -extern const std::map c_instructions; +extern const std::map> c_instructions; } diff --git a/libevmasm/PeepholeOptimiser.cpp b/libevmasm/PeepholeOptimiser.cpp index 879f5b3272dc..267700e457cd 100644 --- a/libevmasm/PeepholeOptimiser.cpp +++ b/libevmasm/PeepholeOptimiser.cpp @@ -563,7 +563,9 @@ struct TruthyAnd: SimplePeepholeOptimizerMethod } }; -/// Removes everything after a JUMP (or similar) until the next JUMPDEST. +/// Removes everything after an non-continuing instruction until the next Tag. +/// Note: JUMPF can return but to the caller's parent call frame. +/// So it won't continue from the next to the JUMPF instruction struct UnreachableCode { static bool apply(OptimiserState& _state) @@ -572,14 +574,18 @@ struct UnreachableCode auto end = _state.items.end(); if (it == end) return false; + if ( it[0] != Instruction::JUMP && - it[0] != Instruction::RJUMP && it[0] != Instruction::RETURN && it[0] != Instruction::STOP && it[0] != Instruction::INVALID && it[0] != Instruction::SELFDESTRUCT && - it[0] != Instruction::REVERT + it[0] != Instruction::REVERT && + it[0] != Instruction::RJUMP && + it[0] != Instruction::JUMPF && + it[0] != Instruction::RETF && + it[0] != Instruction::RETURNCONTRACT ) return false; @@ -690,16 +696,12 @@ struct DeduplicateNextTagSize1 : SimplePeepholeOptimizerMethod +void applyMethods(OptimiserState& _state) { - assertThrow(false, OptimizerException, "Peephole optimizer failed to apply identity."); -} - -template -void applyMethods(OptimiserState& _state, Method, OtherMethods... _other) -{ - if (!Method::apply(_state)) - applyMethods(_state, _other...); + bool continueWithNextMethod = true; + ((continueWithNextMethod && (continueWithNextMethod &= !Method::apply(_state))), ...); + assertThrow(!continueWithNextMethod, OptimizerException, "Peephole optimizer failed to apply identity."); } size_t numberOfPops(AssemblyItems const& _items) @@ -721,33 +723,32 @@ bool PeepholeOptimiser::optimise() auto const approx = evmasm::Precision::Approximate; OptimiserState state {m_items, 0, back_inserter(m_optimisedItems), m_evmVersion}; while (state.i < m_items.size()) - applyMethods( - state, - PushPop(), - OpPop(), - OpStop(), - OpReturnRevert(), - DoublePush(), - DoubleSwap(), - CommutativeSwap(), - SwapComparison(), - DupSwap(), - IsZeroIsZeroJumpI(), - IsZeroIsZeroRJumpI(), // EOF specific - EqIsZeroJumpI(), - EqIsZeroRJumpI(), // EOF specific - DoubleJump(), - DoubleRJump(), // EOF specific - JumpToNext(), - RJumpToNext(), // EOF specific - UnreachableCode(), - DeduplicateNextTagSize3(), - DeduplicateNextTagSize2(), - DeduplicateNextTagSize1(), - TagConjunctions(), - TruthyAnd(), - Identity() - ); + applyMethods< + PushPop, + OpPop, + OpStop, + OpReturnRevert, + DoublePush, + DoubleSwap, + CommutativeSwap, + SwapComparison, + DupSwap, + IsZeroIsZeroJumpI, + IsZeroIsZeroRJumpI, // EOF specific + EqIsZeroJumpI, + EqIsZeroRJumpI, // EOF specific + DoubleJump, + DoubleRJump, // EOF specific + JumpToNext, + RJumpToNext, // EOF specific + UnreachableCode, + DeduplicateNextTagSize3, + DeduplicateNextTagSize2, + DeduplicateNextTagSize1, + TagConjunctions, + TruthyAnd, + Identity + >(state); if (m_optimisedItems.size() < m_items.size() || ( m_optimisedItems.size() == m_items.size() && ( evmasm::bytesRequired(m_optimisedItems, 3, m_evmVersion, approx) < evmasm::bytesRequired(m_items, 3, m_evmVersion, approx) || diff --git a/liblangutil/EVMVersion.h b/liblangutil/EVMVersion.h index a159f2e4bb2f..38580621a45e 100644 --- a/liblangutil/EVMVersion.h +++ b/liblangutil/EVMVersion.h @@ -167,7 +167,7 @@ class EVMVersion: EVMVersion(Version _version): m_version(_version) {} - Version m_version = Version::Cancun; + Version m_version = Version::Prague; }; } diff --git a/libsmtutil/CHCSmtLib2Interface.cpp b/libsmtutil/CHCSmtLib2Interface.cpp index 6b0534296f29..b81eeb4fe06b 100644 --- a/libsmtutil/CHCSmtLib2Interface.cpp +++ b/libsmtutil/CHCSmtLib2Interface.cpp @@ -102,21 +102,18 @@ CHCSolverInterface::QueryResult CHCSmtLib2Interface::query(Expression const& _bl // However, with CHC solvers, the meaning is flipped, UNSAT -> UNSAFE and SAT -> SAFE. // So we have to flip the answer. if (boost::starts_with(response, "sat")) - { - auto maybeInvariants = invariantsFromSolverResponse(response); - return {CheckResult::UNSATISFIABLE, maybeInvariants.value_or(Expression(true)), {}}; - } - else if (boost::starts_with(response, "unsat")) + return {CheckResult::UNSATISFIABLE, invariantsFromSolverResponse(response), {}}; + if (boost::starts_with(response, "unsat")) result = CheckResult::SATISFIABLE; else if (boost::starts_with(response, "unknown")) result = CheckResult::UNKNOWN; else result = CheckResult::ERROR; - return {result, Expression(true), {}}; + return {result, {}, {}}; } catch(smtutil::SMTSolverInteractionError const&) { - return {CheckResult::ERROR, Expression(true), {}}; + return {CheckResult::ERROR, {}, {}}; } } @@ -416,7 +413,7 @@ smtutil::Expression CHCSmtLib2Interface::ScopedParser::toSMTUtilExpression(SMTLi } -std::optional CHCSmtLib2Interface::invariantsFromSolverResponse(std::string const& _response) const +CHCSmtLib2Interface::Invariants CHCSmtLib2Interface::invariantsFromSolverResponse(std::string const& _response) const { std::stringstream ss(_response); std::string answer; @@ -438,7 +435,7 @@ std::optional CHCSmtLib2Interface::invariantsFromSolverResp smtSolverInteractionRequire(parser.isEOF(), "Error during parsing CHC model"); smtSolverInteractionRequire(!parsedOutput.empty(), "Error during parsing CHC model"); auto& commands = parsedOutput.size() == 1 ? asSubExpressions(parsedOutput[0]) : parsedOutput; - std::vector definitions; + Invariants definitions; for (auto& command: commands) { auto& args = asSubExpressions(command); @@ -456,7 +453,7 @@ std::optional CHCSmtLib2Interface::invariantsFromSolverResp inlineLetExpressions(interpretation); ScopedParser scopedParser(m_context); auto const& formalArguments = asSubExpressions(args[2]); - std::vector predicateArgs; + std::vector predicateArguments; for (auto const& formalArgument: formalArguments) { smtSolverInteractionRequire(!isAtom(formalArgument), "Invalid format of CHC model"); @@ -465,9 +462,7 @@ std::optional CHCSmtLib2Interface::invariantsFromSolverResp smtSolverInteractionRequire(isAtom(nameSortPair[0]), "Invalid format of CHC model"); SortPointer varSort = scopedParser.toSort(nameSortPair[1]); scopedParser.addVariableDeclaration(asAtom(nameSortPair[0]), varSort); - // FIXME: Why Expression here? - Expression arg = scopedParser.toSMTUtilExpression(nameSortPair[0]); - predicateArgs.push_back(arg); + predicateArguments.push_back(asAtom(nameSortPair[0])); } auto parsedInterpretation = scopedParser.toSMTUtilExpression(interpretation); @@ -478,10 +473,11 @@ std::optional CHCSmtLib2Interface::invariantsFromSolverResp return first.name < second.name; }); - Expression predicate(asAtom(args[1]), predicateArgs, SortProvider::boolSort); - definitions.push_back(predicate == parsedInterpretation); + std::string const& predicateName = asAtom(args[1]); + smtSolverInteractionRequire(!definitions.contains(predicateName), "Predicates must be unique"); + definitions.emplace(predicateName, InvariantInfo{parsedInterpretation, predicateArguments}); } - return Expression::mkAnd(std::move(definitions)); + return definitions; } namespace diff --git a/libsmtutil/CHCSmtLib2Interface.h b/libsmtutil/CHCSmtLib2Interface.h index 0f8fc061d3df..5b45f1638012 100644 --- a/libsmtutil/CHCSmtLib2Interface.h +++ b/libsmtutil/CHCSmtLib2Interface.h @@ -94,8 +94,8 @@ class CHCSmtLib2Interface: public CHCSolverInterface /// Communicates with the solver via the callback. Throws SMTSolverError on error. virtual std::string querySolver(std::string const& _input); - /// Translates CHC solver response with a model to our representation of invariants. Returns None on error. - std::optional invariantsFromSolverResponse(std::string const& _response) const; + /// Translates CHC solver response with a model to our representation of invariants. + Invariants invariantsFromSolverResponse(std::string const& _response) const; std::set collectVariableNames(Expression const& _expr) const; diff --git a/libsmtutil/CHCSolverInterface.h b/libsmtutil/CHCSolverInterface.h index 8feb18aa8245..641d54cfb440 100644 --- a/libsmtutil/CHCSolverInterface.h +++ b/libsmtutil/CHCSolverInterface.h @@ -25,6 +25,7 @@ #include #include +#include #include namespace solidity::smtutil @@ -49,10 +50,19 @@ class CHCSolverInterface : public SolverInterface std::map> edges; }; + struct InvariantInfo + { + /// Predicate definition as SMT expression + Expression expression; + /// Names of the formal arguments of the predicate definition + std::vector variableNames; + }; + /// Maps predicate to its definition as given by the solver and the formal arguments of the predicate + using Invariants = std::unordered_map; struct QueryResult { CheckResult answer; - Expression invariant; + Invariants invariants; CexGraph cex; }; /// Takes a function application _expr and checks for reachability. diff --git a/libsmtutil/SMTLib2Interface.cpp b/libsmtutil/SMTLib2Interface.cpp index 0430f0d21ea0..403989ca1aad 100644 --- a/libsmtutil/SMTLib2Interface.cpp +++ b/libsmtutil/SMTLib2Interface.cpp @@ -25,7 +25,8 @@ #include #include -#include +#include +#include #include #include diff --git a/libsmtutil/SMTPortfolio.cpp b/libsmtutil/SMTPortfolio.cpp index 94c92f390a53..fb82f3c69361 100644 --- a/libsmtutil/SMTPortfolio.cpp +++ b/libsmtutil/SMTPortfolio.cpp @@ -78,7 +78,7 @@ void SMTPortfolio::addAssertion(Expression const& _expr) * Ideally all solvers answer the query and agree on what the answer is * (all say SAT or all say UNSAT). * - * The actual logic as as follows: + * The actual logic is as follows: * 1) If at least one solver answers the query, all the non-answer results are ignored. * Here SAT/UNSAT is preferred over UNKNOWN since it's an actual answer, and over ERROR * because one buggy solver/integration shouldn't break the portfolio. diff --git a/libsmtutil/SMTPortfolio.h b/libsmtutil/SMTPortfolio.h index b445f40a2b69..59e0752a3471 100644 --- a/libsmtutil/SMTPortfolio.h +++ b/libsmtutil/SMTPortfolio.h @@ -20,10 +20,7 @@ #include -#include -#include -#include #include namespace solidity::smtutil diff --git a/libsmtutil/SolverInterface.h b/libsmtutil/SolverInterface.h index 2639ae024034..c434322d5d0f 100644 --- a/libsmtutil/SolverInterface.h +++ b/libsmtutil/SolverInterface.h @@ -26,7 +26,8 @@ #include #include -#include +#include +#include #include #include diff --git a/libsolidity/CMakeLists.txt b/libsolidity/CMakeLists.txt index 5925a50ac480..62f0576dc59f 100644 --- a/libsolidity/CMakeLists.txt +++ b/libsolidity/CMakeLists.txt @@ -117,8 +117,6 @@ set(sources formal/EncodingContext.h formal/ExpressionFormatter.cpp formal/ExpressionFormatter.h - formal/Invariants.cpp - formal/Invariants.h formal/ModelChecker.cpp formal/ModelChecker.h formal/ModelCheckerSettings.cpp @@ -139,8 +137,6 @@ set(sources formal/SymbolicTypes.h formal/SymbolicVariables.cpp formal/SymbolicVariables.h - formal/VariableUsage.cpp - formal/VariableUsage.h formal/Z3CHCSmtLib2Interface.cpp formal/Z3CHCSmtLib2Interface.h formal/Z3SMTLib2Interface.cpp diff --git a/libsolidity/ast/AST.h b/libsolidity/ast/AST.h index 0ca4ffcf927c..1012a705c128 100644 --- a/libsolidity/ast/AST.h +++ b/libsolidity/ast/AST.h @@ -823,11 +823,19 @@ class EnumDefinition: public Declaration, public StructurallyDocumented, public /** * Declaration of an Enum Value */ -class EnumValue: public Declaration +class EnumValue: public Declaration, public StructurallyDocumented { public: - EnumValue(int64_t _id, SourceLocation const& _location, ASTPointer const& _name): - Declaration(_id, _location, _name, _location) {} + EnumValue( + int64_t _id, + SourceLocation const& _location, + ASTPointer const& _name, + ASTPointer _documentation + ): + Declaration(_id, _location, _name, _location), + StructurallyDocumented(std::move(_documentation)) + { + } void accept(ASTVisitor& _visitor) override; void accept(ASTConstVisitor& _visitor) const override; diff --git a/libsolidity/ast/ASTJsonExporter.cpp b/libsolidity/ast/ASTJsonExporter.cpp index 42627b5f7f7c..4eaa558713a7 100644 --- a/libsolidity/ast/ASTJsonExporter.cpp +++ b/libsolidity/ast/ASTJsonExporter.cpp @@ -430,6 +430,7 @@ bool ASTJsonExporter::visit(EnumValue const& _node) setJsonNode(_node, "EnumValue", { std::make_pair("name", _node.name()), std::make_pair("nameLocation", sourceLocationToString(_node.nameLocation())), + std::make_pair("documentation", toJson(_node.documentation().get())), }); return false; } diff --git a/libsolidity/ast/ASTJsonImporter.cpp b/libsolidity/ast/ASTJsonImporter.cpp index a2617fcd08da..499b7df62a2a 100644 --- a/libsolidity/ast/ASTJsonImporter.cpp +++ b/libsolidity/ast/ASTJsonImporter.cpp @@ -489,7 +489,8 @@ ASTPointer ASTJsonImporter::createEnumValue(Json const& _node) { return createASTNode( _node, - memberAsASTString(_node, "name") + memberAsASTString(_node, "name"), + _node.contains("documentation") && !_node["documentation"].is_null() ? createDocumentation(member(_node, "documentation")) : nullptr ); } diff --git a/libsolidity/codegen/YulUtilFunctions.h b/libsolidity/codegen/YulUtilFunctions.h index 5ea99d603083..c28ba855c816 100644 --- a/libsolidity/codegen/YulUtilFunctions.h +++ b/libsolidity/codegen/YulUtilFunctions.h @@ -560,7 +560,7 @@ class YulUtilFunctions /// Signature: (address) -> mpos std::string externalCodeFunction(); - /// @return the name of a function that that checks if two external functions pointers are equal or not + /// @return the name of a function that checks if two external functions pointers are equal or not std::string externalFunctionPointersEqualFunction(); private: diff --git a/libsolidity/codegen/ir/IRGeneratorForStatements.cpp b/libsolidity/codegen/ir/IRGeneratorForStatements.cpp index 49f8989ef3ba..e55282137185 100644 --- a/libsolidity/codegen/ir/IRGeneratorForStatements.cpp +++ b/libsolidity/codegen/ir/IRGeneratorForStatements.cpp @@ -63,8 +63,8 @@ struct CopyTranslate: public yul::ASTCopier { using ExternalRefsMap = std::map; - CopyTranslate(yul::Dialect const& _dialect, IRGenerationContext& _context, ExternalRefsMap const& _references): - m_dialect(_dialect), m_context(_context), m_references(_references) {} + CopyTranslate(IRGenerationContext& _context, ExternalRefsMap const& _references): + m_context(_context), m_references(_references) {} using ASTCopier::operator(); @@ -80,14 +80,11 @@ struct CopyTranslate: public yul::ASTCopier yul::YulName translateIdentifier(yul::YulName _name) override { - // Strictly, the dialect used by inline assembly (m_dialect) could be different - // from the Yul dialect we are compiling to. So we are assuming here that the builtin - // functions are identical. This should not be a problem for now since everything - // is EVM anyway. - if (m_dialect.findBuiltin(_name.str())) - return _name; - else - return yul::YulName{"usr$" + _name.str()}; + // Strictly, the dialect used by inline assembly could be different + // from the Yul dialect we are compiling to. By only translating `YulName`s which correspond to Identifiers, + // we are implicitly excluding builtins together with the assumption, that numerical builtin handles + // stay identical. Special care has to be taken, that these numerical handles stay consistent. + return yul::YulName{"usr$" + _name.str()}; } yul::Identifier translate(yul::Identifier const& _identifier) override @@ -209,8 +206,6 @@ struct CopyTranslate: public yul::ASTCopier return yul::Identifier{_identifier.debugData, yul::YulName{value}}; } - - yul::Dialect const& m_dialect; IRGenerationContext& m_context; ExternalRefsMap const& m_references; }; @@ -2705,7 +2700,7 @@ bool IRGeneratorForStatements::visit(InlineAssembly const& _inlineAsm) setLocation(_inlineAsm); if (*_inlineAsm.annotation().hasMemoryEffects && !_inlineAsm.annotation().markedMemorySafe) m_context.setMemoryUnsafeInlineAssemblySeen(); - CopyTranslate bodyCopier{_inlineAsm.dialect(), m_context, _inlineAsm.annotation().externalReferences}; + CopyTranslate bodyCopier{m_context, _inlineAsm.annotation().externalReferences}; yul::Statement modified = bodyCopier(_inlineAsm.operations().root()); diff --git a/libsolidity/experimental/codegen/IRGeneratorForStatements.cpp b/libsolidity/experimental/codegen/IRGeneratorForStatements.cpp index 80c442b88146..14aef1107dd3 100644 --- a/libsolidity/experimental/codegen/IRGeneratorForStatements.cpp +++ b/libsolidity/experimental/codegen/IRGeneratorForStatements.cpp @@ -54,9 +54,8 @@ struct CopyTranslate: public yul::ASTCopier { CopyTranslate( IRGenerationContext const& _context, - yul::Dialect const& _dialect, std::map _references - ): m_context(_context), m_dialect(_dialect), m_references(std::move(_references)) {} + ): m_context(_context), m_references(std::move(_references)) {} using ASTCopier::operator(); @@ -72,10 +71,7 @@ struct CopyTranslate: public yul::ASTCopier yul::YulName translateIdentifier(yul::YulName _name) override { - if (m_dialect.findBuiltin(_name.str())) - return _name; - else - return yul::YulName{"usr$" + _name.str()}; + return yul::YulName{"usr$" + _name.str()}; } yul::Identifier translate(yul::Identifier const& _identifier) override @@ -106,7 +102,6 @@ struct CopyTranslate: public yul::ASTCopier } IRGenerationContext const& m_context; - yul::Dialect const& m_dialect; std::map m_references; }; @@ -129,7 +124,7 @@ bool IRGeneratorForStatements::visit(TupleExpression const& _tupleExpression) bool IRGeneratorForStatements::visit(InlineAssembly const& _assembly) { - CopyTranslate bodyCopier{m_context, _assembly.dialect(), _assembly.annotation().externalReferences}; + CopyTranslate bodyCopier{m_context, _assembly.annotation().externalReferences}; yul::Statement modified = bodyCopier(_assembly.operations().root()); solAssert(std::holds_alternative(modified)); m_code << yul::AsmPrinter(_assembly.dialect())(std::get(modified)) << "\n"; diff --git a/libsolidity/formal/ArraySlicePredicate.cpp b/libsolidity/formal/ArraySlicePredicate.cpp index 21d5fb1add29..67e635deb39c 100644 --- a/libsolidity/formal/ArraySlicePredicate.cpp +++ b/libsolidity/formal/ArraySlicePredicate.cpp @@ -18,6 +18,8 @@ #include +#include + #include using namespace solidity; diff --git a/libsolidity/formal/ArraySlicePredicate.h b/libsolidity/formal/ArraySlicePredicate.h index 180a9d1898ed..565dba657b9c 100644 --- a/libsolidity/formal/ArraySlicePredicate.h +++ b/libsolidity/formal/ArraySlicePredicate.h @@ -16,9 +16,9 @@ */ // SPDX-License-Identifier: GPL-3.0 -#include +#pragma once + #include -#include #include diff --git a/libsolidity/formal/BMC.cpp b/libsolidity/formal/BMC.cpp index e5521b816582..bcd88b6dac59 100644 --- a/libsolidity/formal/BMC.cpp +++ b/libsolidity/formal/BMC.cpp @@ -80,7 +80,6 @@ void BMC::analyze(SourceUnit const& _source, std::mapaccept(*this); // values in loop condition might change during loop iteration forCondition = expr(*_node.condition()); } - m_loopCheckpoints.emplace(); auto indicesAfterCondition = copyVariableIndices(); pushPathCondition(forCondition); @@ -455,8 +444,10 @@ bool BMC::visit(ForStatement const& _node) auto indices = copyVariableIndices(); if (_node.condition()) { + m_loopCheckpoints.emplace(); _node.condition()->accept(*this); forCondition = expr(*_node.condition()); + m_loopCheckpoints.pop(); } // assert that the loop is complete m_context.addAssertion(!forCondition || broke || !forConditionOnPreviousIterations); @@ -690,12 +681,7 @@ void BMC::visitRequire(FunctionCall const& _funCall) auto const& args = _funCall.arguments(); solAssert(args.size() >= 1, ""); solAssert(args.front()->annotation().type->category() == Type::Category::Bool, ""); - if (isRootFunction() && !isInsideLoop()) - addVerificationTarget( - VerificationTargetType::ConstantCondition, - expr(*args.front()), - args.front().get() - ); + checkIfConditionIsConstant(*args.front()); } void BMC::visitAddMulMod(FunctionCall const& _funCall) @@ -933,9 +919,6 @@ void BMC::checkVerificationTarget(BMCVerificationTarget& _target) switch (_target.type) { - case VerificationTargetType::ConstantCondition: - checkConstantCondition(_target); - break; case VerificationTargetType::Underflow: checkUnderflow(_target); break; @@ -951,19 +934,70 @@ void BMC::checkVerificationTarget(BMCVerificationTarget& _target) case VerificationTargetType::Assert: checkAssert(_target); break; + case VerificationTargetType::ConstantCondition: + smtAssert(false, "Checks for constant condition are handled separately"); default: - solAssert(false, ""); + smtAssert(false); } } -void BMC::checkConstantCondition(BMCVerificationTarget& _target) +void BMC::checkIfConditionIsConstant(Expression const& _condition) { - checkBooleanNotConstant( - *_target.expression, - _target.constraints, - _target.value, - _target.callStack - ); + if ( + !m_settings.targets.has(VerificationTargetType::ConstantCondition) || + (m_currentContract && !shouldEncode(*m_currentContract)) + ) + return; + + // We ignore called functions here because they have specific input values. + // Also, expressions inside loop can have different values in different iterations. + if (!isRootFunction() || isInsideLoop()) + return; + + // Do not check for const-ness if this is a literal. + if (dynamic_cast(&_condition)) + return; + + auto [canBeTrue, canBeFalse] = checkBooleanNotConstant(currentPathConditions() && m_context.assertions(), expr(_condition)); + + // Report based on the result of the checks + if (canBeTrue == CheckResult::ERROR || canBeFalse == CheckResult::ERROR) + m_errorReporter.warning(8592_error, _condition.location(), "BMC: Error trying to invoke SMT solver."); + else if (canBeTrue == CheckResult::CONFLICTING || canBeFalse == CheckResult::CONFLICTING) + m_errorReporter.warning(3356_error, _condition.location(), "BMC: At least two SMT solvers provided conflicting answers. Results might not be sound."); + else if (canBeTrue == CheckResult::UNKNOWN || canBeFalse == CheckResult::UNKNOWN) + { + // Not enough information to make definite claims. + } + else if (canBeTrue == CheckResult::SATISFIABLE && canBeFalse == CheckResult::SATISFIABLE) + { + // Condition can be both true and false for some program runs. + } + + else if (canBeTrue == CheckResult::UNSATISFIABLE && canBeFalse == CheckResult::UNSATISFIABLE) + m_errorReporter.warning(2512_error, _condition.location(), "BMC: Condition unreachable.", SMTEncoder::callStackMessage(m_callStack)); + else + { + std::string description; + if (canBeFalse == smtutil::CheckResult::UNSATISFIABLE) + { + smtAssert(canBeTrue == smtutil::CheckResult::SATISFIABLE); + description = "BMC: Condition is always true."; + } + else + { + smtAssert(canBeTrue == smtutil::CheckResult::UNSATISFIABLE); + smtAssert(canBeFalse == smtutil::CheckResult::SATISFIABLE); + description = "BMC: Condition is always false."; + } + m_errorReporter.warning( + 6838_error, + _condition.location(), + description, + SMTEncoder::callStackMessage(m_callStack) + ); + } + } void BMC::checkUnderflow(BMCVerificationTarget& _target) @@ -1068,7 +1102,8 @@ void BMC::addVerificationTarget( Expression const* _expression ) { - if (!m_settings.targets.has(_type) || (m_currentContract && !shouldAnalyze(*m_currentContract))) + smtAssert(_type != VerificationTargetType::ConstantCondition, "Checks for constant condition are handled separately"); + if (!m_settings.targets.has(_type) || (m_currentContract && !shouldAnalyzeVerificationTargetsFor(*m_currentContract))) return; BMCVerificationTarget target{ @@ -1081,10 +1116,7 @@ void BMC::addVerificationTarget( m_callStack, modelExpressions() }; - if (_type == VerificationTargetType::ConstantCondition) - checkVerificationTarget(target); - else - m_verificationTargets.emplace_back(std::move(target)); + m_verificationTargets.emplace_back(std::move(target)); } /// Solving. @@ -1188,62 +1220,22 @@ void BMC::checkCondition( m_interface->pop(); } -void BMC::checkBooleanNotConstant( - Expression const& _condition, +BMC::ConstantExpressionCheckResult BMC::checkBooleanNotConstant( smtutil::Expression const& _constraints, - smtutil::Expression const& _value, - std::vector const& _callStack + smtutil::Expression const& _condition ) { - // Do not check for const-ness if this is a constant. - if (dynamic_cast(&_condition)) - return; - m_interface->push(); - m_interface->addAssertion(_constraints && _value); + m_interface->addAssertion(_constraints && _condition); auto positiveResult = checkSatisfiable(); m_interface->pop(); m_interface->push(); - m_interface->addAssertion(_constraints && !_value); + m_interface->addAssertion(_constraints && !_condition); auto negatedResult = checkSatisfiable(); m_interface->pop(); - if (positiveResult == smtutil::CheckResult::ERROR || negatedResult == smtutil::CheckResult::ERROR) - m_errorReporter.warning(8592_error, _condition.location(), "BMC: Error trying to invoke SMT solver."); - else if (positiveResult == smtutil::CheckResult::CONFLICTING || negatedResult == smtutil::CheckResult::CONFLICTING) - m_errorReporter.warning(3356_error, _condition.location(), "BMC: At least two SMT solvers provided conflicting answers. Results might not be sound."); - else if (positiveResult == smtutil::CheckResult::SATISFIABLE && negatedResult == smtutil::CheckResult::SATISFIABLE) - { - // everything fine. - } - else if (positiveResult == smtutil::CheckResult::UNKNOWN || negatedResult == smtutil::CheckResult::UNKNOWN) - { - // can't do anything. - } - else if (positiveResult == smtutil::CheckResult::UNSATISFIABLE && negatedResult == smtutil::CheckResult::UNSATISFIABLE) - m_errorReporter.warning(2512_error, _condition.location(), "BMC: Condition unreachable.", SMTEncoder::callStackMessage(_callStack)); - else - { - std::string description; - if (positiveResult == smtutil::CheckResult::SATISFIABLE) - { - solAssert(negatedResult == smtutil::CheckResult::UNSATISFIABLE, ""); - description = "BMC: Condition is always true."; - } - else - { - solAssert(positiveResult == smtutil::CheckResult::UNSATISFIABLE, ""); - solAssert(negatedResult == smtutil::CheckResult::SATISFIABLE, ""); - description = "BMC: Condition is always false."; - } - m_errorReporter.warning( - 6838_error, - _condition.location(), - description, - SMTEncoder::callStackMessage(_callStack) - ); - } + return {.canBeTrue = positiveResult, .canBeFalse = negatedResult}; } std::pair> diff --git a/libsolidity/formal/BMC.h b/libsolidity/formal/BMC.h index a0ee9a3749c2..67d930c79194 100644 --- a/libsolidity/formal/BMC.h +++ b/libsolidity/formal/BMC.h @@ -161,7 +161,6 @@ class BMC: public SMTEncoder void checkVerificationTargets(); void checkVerificationTarget(BMCVerificationTarget& _target); - void checkConstantCondition(BMCVerificationTarget& _target); void checkUnderflow(BMCVerificationTarget& _target); void checkOverflow(BMCVerificationTarget& _target); void checkDivByZero(BMCVerificationTarget& _target); @@ -172,8 +171,13 @@ class BMC: public SMTEncoder smtutil::Expression const& _value, Expression const* _expression ); + /// Special handling of ConstantCondition verification target. + /// The target is checked immediately, unlike the other targets that are queued for checking at the end of analysis. + void checkIfConditionIsConstant(Expression const& _condition); //@} + + /// Solver related. //@{ /// Check that a condition can be satisfied. @@ -188,13 +192,18 @@ class BMC: public SMTEncoder std::string const& _additionalValueName = "", smtutil::Expression const* _additionalValue = nullptr ); - /// Checks that a boolean condition is not constant. Do not warn if the expression - /// is a literal constant. - void checkBooleanNotConstant( - Expression const& _condition, + + struct ConstantExpressionCheckResult + { + smtutil::CheckResult canBeTrue; + smtutil::CheckResult canBeFalse; + }; + + /// Checks whether the given boolean condition is either true or always false under given constraints. + /// Returns the results from the solver for these two checks. + ConstantExpressionCheckResult checkBooleanNotConstant( smtutil::Expression const& _constraints, - smtutil::Expression const& _value, - std::vector const& _callStack + smtutil::Expression const& _condition ); std::pair> checkSatisfiableAndGenerateModel(std::vector const& _expressionsToEvaluate); @@ -222,20 +231,23 @@ class BMC: public SMTEncoder /// Number of verification conditions that could not be proved. size_t m_unprovedAmt = 0; + /// Loop analysis + //@{ enum class LoopControlKind { Continue, Break }; - // Current path conditions and SSA indices for break or continue statement + /// Current path conditions and SSA indices for break or continue statement struct LoopControl { LoopControlKind kind; smtutil::Expression pathConditions; VariableIndices variableIndices; }; - // Loop control statements for every loop + /// Loop control statements for every loop std::stack> m_loopCheckpoints; + //@} }; } diff --git a/libsolidity/formal/CHC.cpp b/libsolidity/formal/CHC.cpp index c313ae54e1ae..fea13fde2360 100644 --- a/libsolidity/formal/CHC.cpp +++ b/libsolidity/formal/CHC.cpp @@ -19,8 +19,8 @@ #include #include +#include #include -#include #include #include #include @@ -34,9 +34,8 @@ #include #include -#include - #include +#include #include #include #include @@ -89,7 +88,7 @@ void CHC::analyze(SourceUnit const& _source) " If you wish to use Eldarica, please enable Eldarica only." ); - if (!shouldAnalyze(_source)) + if (!shouldAnalyzeVerificationTargetsFor(_source)) return; resetSourceAnalysis(); @@ -131,7 +130,7 @@ std::vector CHC::unhandledQueries() const bool CHC::visit(ContractDefinition const& _contract) { - if (!shouldAnalyze(_contract)) + if (!shouldEncode(_contract)) return false; // Raises UnimplementedFeatureError in the presence of transient storage variables @@ -152,7 +151,7 @@ bool CHC::visit(ContractDefinition const& _contract) void CHC::endVisit(ContractDefinition const& _contract) { - if (!shouldAnalyze(_contract)) + if (!shouldEncode(_contract)) return; for (auto base: _contract.annotation().linearizedBaseContracts) @@ -239,15 +238,14 @@ void CHC::endVisit(ContractDefinition const& _contract) setCurrentBlock(*m_constructorSummaries.at(&_contract)); solAssert(&_contract == m_currentContract, ""); - if (shouldAnalyze(_contract)) - { - auto constructor = _contract.constructor(); - auto txConstraints = state().txTypeConstraints(); - if (!constructor || !constructor->isPayable()) - txConstraints = txConstraints && state().txNonPayableConstraint(); + smtAssert(shouldEncode(_contract)); + auto constructor = _contract.constructor(); + auto txConstraints = state().txTypeConstraints(); + if (!constructor || !constructor->isPayable()) + txConstraints = txConstraints && state().txNonPayableConstraint(); + connectBlocks(m_currentBlock, interface(), txConstraints && errorFlag().currentValue() == 0); + if (shouldAnalyzeVerificationTargetsFor(_contract)) m_queryPlaceholders[&_contract].push_back({txConstraints, errorFlag().currentValue(), m_currentBlock}); - connectBlocks(m_currentBlock, interface(), txConstraints && errorFlag().currentValue() == 0); - } solAssert(m_scopes.back() == &_contract, ""); m_scopes.pop_back(); @@ -338,7 +336,7 @@ void CHC::endVisit(FunctionDefinition const& _function) !_function.isConstructor() && _function.isPublic() && contractFunctions(*m_currentContract).count(&_function) && - shouldAnalyze(*m_currentContract) + shouldEncode(*m_currentContract) ) { defineExternalFunctionInterface(_function, *m_currentContract); @@ -349,8 +347,9 @@ void CHC::endVisit(FunctionDefinition const& _function) auto ifacePre = smt::interfacePre(*m_interfaces.at(m_currentContract), *m_currentContract, m_context); auto sum = externalSummary(_function); - m_queryPlaceholders[&_function].push_back({sum, errorFlag().currentValue(), ifacePre}); connectBlocks(ifacePre, interface(), sum && errorFlag().currentValue() == 0); + if (shouldAnalyzeVerificationTargetsFor(*m_currentContract)) + m_queryPlaceholders[&_function].push_back({sum, errorFlag().currentValue(), ifacePre}); } m_currentFunction = nullptr; @@ -1895,7 +1894,7 @@ CHCSolverInterface::QueryResult CHC::query(smtutil::Expression const& _query, la 2339_error, "CHC: Requested query:\n" + smtLibCode ); - return {.answer = CheckResult::UNKNOWN, .invariant = smtutil::Expression(true), .cex = {}}; + return {.answer = CheckResult::UNKNOWN, .invariants = {}, .cex = {}}; } auto result = m_interface->query(_query); switch (result.answer) @@ -2134,6 +2133,43 @@ void CHC::checkVerificationTargets() m_safeTargets[m_verificationTargets.at(id).errorNode].insert(m_verificationTargets.at(id)); } +namespace +{ +std::map> collectInvariants( + CHCSmtLib2Interface::Invariants const& _invariants, + std::set const& _predicates, + ModelCheckerInvariants const& _invariantsSetting +) +{ + std::set targets; + if (_invariantsSetting.has(InvariantType::Contract)) + targets.insert("interface_"); + if (_invariantsSetting.has(InvariantType::Reentrancy)) + targets.insert("nondet_interface_"); + + std::map> invariants; + for (auto const* pred: _predicates) + { + smtAssert(pred); + auto const& predName = pred->functor().name; + if (!_invariants.contains(predName)) + continue; + if (ranges::none_of(targets, [&](auto const& _target) { return predName.starts_with(_target); })) + continue; + + smtAssert(pred->contextContract()); + + auto const& [definition, formalArguments] = _invariants.at(predName); + + auto r = substitute(definition, pred->expressionSubstitution(formalArguments)); + // No point in reporting true/false as invariants. + if (r.name != "true" && r.name != "false") + invariants[pred].insert(toSolidityStr(r)); + } + return invariants; +} +} // namespace + void CHC::checkAndReportTarget( CHCVerificationTarget const& _target, std::vector const& _placeholders, @@ -2153,7 +2189,7 @@ void CHC::checkAndReportTarget( placeholder.constraints && placeholder.errorExpression == _target.errorId ); auto const& location = _target.errorNode->location(); - auto [result, invariant, model] = query(error(), location); + auto [result, invariants, model] = query(error(), location); if (result == CheckResult::UNSATISFIABLE) { m_safeTargets[_target.errorNode].insert(_target); @@ -2162,9 +2198,9 @@ void CHC::checkAndReportTarget( predicates.insert(pred); for (auto const* pred: m_nondetInterfaces | ranges::views::values) predicates.insert(pred); - std::map> invariants = collectInvariants(invariant, predicates, m_settings.invariants); - for (auto pred: invariants | ranges::views::keys) - m_invariants[pred] += std::move(invariants.at(pred)); + std::map> invariantStrings = collectInvariants(invariants, predicates, m_settings.invariants); + for (auto pred: invariantStrings | ranges::views::keys) + m_invariants[pred] += std::move(invariantStrings.at(pred)); } else if (result == CheckResult::SATISFIABLE) { diff --git a/libsolidity/formal/EncodingContext.cpp b/libsolidity/formal/EncodingContext.cpp index e0a09bcf7b8f..cc046cf0337d 100644 --- a/libsolidity/formal/EncodingContext.cpp +++ b/libsolidity/formal/EncodingContext.cpp @@ -18,12 +18,19 @@ #include +#include + #include using namespace solidity; using namespace solidity::util; using namespace solidity::frontend::smt; +bool EncodingContext::IdCompare::operator()(ASTNode const* lhs, ASTNode const* rhs) const +{ + return lhs->id() < rhs->id(); +} + EncodingContext::EncodingContext(): m_state(*this) { diff --git a/libsolidity/formal/EncodingContext.h b/libsolidity/formal/EncodingContext.h index 5387184ee0c9..e7d577bbf52c 100644 --- a/libsolidity/formal/EncodingContext.h +++ b/libsolidity/formal/EncodingContext.h @@ -68,10 +68,7 @@ class EncodingContext struct IdCompare { - bool operator()(ASTNode const* lhs, ASTNode const* rhs) const - { - return lhs->id() < rhs->id(); - } + bool operator()(ASTNode const* lhs, ASTNode const* rhs) const; }; /// Variables. diff --git a/libsolidity/formal/ExpressionFormatter.cpp b/libsolidity/formal/ExpressionFormatter.cpp index 865a568f62da..dff84c860aab 100644 --- a/libsolidity/formal/ExpressionFormatter.cpp +++ b/libsolidity/formal/ExpressionFormatter.cpp @@ -20,6 +20,8 @@ #include +#include + #include #include diff --git a/libsolidity/formal/Invariants.cpp b/libsolidity/formal/Invariants.cpp deleted file mode 100644 index 017ab1e3aedb..000000000000 --- a/libsolidity/formal/Invariants.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/* - This file is part of solidity. - - solidity is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - solidity is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with solidity. If not, see . -*/ -// SPDX-License-Identifier: GPL-3.0 - -#include - -#include -#include - -#include - -#include - -using boost::algorithm::starts_with; -using namespace solidity; -using namespace solidity::smtutil; -using namespace solidity::frontend::smt; - -namespace solidity::frontend::smt -{ - -std::map> collectInvariants( - smtutil::Expression const& _proof, - std::set const& _predicates, - ModelCheckerInvariants const& _invariantsSetting -) -{ - std::set targets; - if (_invariantsSetting.has(InvariantType::Contract)) - targets.insert("interface_"); - if (_invariantsSetting.has(InvariantType::Reentrancy)) - targets.insert("nondet_interface_"); - - std::map> equalities; - // Collect equalities where one of the sides is a predicate we're interested in. - util::BreadthFirstSearch{{&_proof}}.run([&](auto&& _expr, auto&& _addChild) { - if (_expr->name == "=") - for (auto const& t: targets) - { - auto arg0 = _expr->arguments.at(0); - auto arg1 = _expr->arguments.at(1); - if (starts_with(arg0.name, t)) - equalities.insert({arg0.name, {arg0, std::move(arg1)}}); - else if (starts_with(arg1.name, t)) - equalities.insert({arg1.name, {arg1, std::move(arg0)}}); - } - for (auto const& arg: _expr->arguments) - _addChild(&arg); - }); - - std::map> invariants; - for (auto pred: _predicates) - { - auto predName = pred->functor().name; - if (!equalities.count(predName)) - continue; - - solAssert(pred->contextContract(), ""); - - auto const& [predExpr, invExpr] = equalities.at(predName); - - static std::set const ignore{"true", "false"}; - auto r = substitute(invExpr, pred->expressionSubstitution(predExpr)); - // No point in reporting true/false as invariants. - if (!ignore.count(r.name)) - invariants[pred].insert(toSolidityStr(r)); - } - return invariants; -} - -} diff --git a/libsolidity/formal/Invariants.h b/libsolidity/formal/Invariants.h deleted file mode 100644 index b6459fccd415..000000000000 --- a/libsolidity/formal/Invariants.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - This file is part of solidity. - - solidity is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - solidity is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with solidity. If not, see . -*/ -// SPDX-License-Identifier: GPL-3.0 - -#pragma once - -#include -#include - -#include -#include -#include - -namespace solidity::frontend::smt -{ - -std::map> collectInvariants( - smtutil::Expression const& _proof, - std::set const& _predicates, - ModelCheckerInvariants const& _invariantsSettings -); - -} diff --git a/libsolidity/formal/ModelChecker.cpp b/libsolidity/formal/ModelChecker.cpp index 04d96f06746c..2d52414127a6 100644 --- a/libsolidity/formal/ModelChecker.cpp +++ b/libsolidity/formal/ModelChecker.cpp @@ -18,7 +18,13 @@ #include +#include +#if (BOOST_VERSION < 108800) #include +#else +#define BOOST_PROCESS_VERSION 1 +#include +#endif #include #include diff --git a/libsolidity/formal/ModelCheckerSettings.cpp b/libsolidity/formal/ModelCheckerSettings.cpp index ed4d5ce204c0..ffeedfe3ace0 100644 --- a/libsolidity/formal/ModelCheckerSettings.cpp +++ b/libsolidity/formal/ModelCheckerSettings.cpp @@ -123,7 +123,7 @@ std::optional ModelCheckerContracts::fromString(std::stri { auto&& names = sourceContract | ranges::views::split(':') | ranges::to>(); if (names.size() != 2 || names.at(0).empty() || names.at(1).empty()) - return {}; + return std::nullopt; chosen[names.at(0)].insert(names.at(1)); } diff --git a/libsolidity/formal/Predicate.cpp b/libsolidity/formal/Predicate.cpp index 4b7ca8edb324..7f742ec18d0b 100644 --- a/libsolidity/formal/Predicate.cpp +++ b/libsolidity/formal/Predicate.cpp @@ -27,12 +27,10 @@ #include #include -#include -#include +#include #include -using boost::algorithm::starts_with; using namespace solidity; using namespace solidity::smtutil; using namespace solidity::frontend; @@ -434,15 +432,15 @@ std::pair>, std::vector Predicate::expressionSubstitution(smtutil::Expression const& _predExpr) const +std::map Predicate::expressionSubstitution(std::vector const& _predArgs) const { std::map subst; std::string predName = functor().name; - solAssert(contextContract(), ""); + smtAssert(contextContract()); auto const& stateVars = SMTEncoder::stateVariablesIncludingInheritedAndPrivate(*contextContract()); - auto nArgs = _predExpr.arguments.size(); + auto const nArgs = _predArgs.size(); // The signature of an interface predicate is // interface(this, abiFunctions, (optionally) bytesConcatFunctions, cryptoFunctions, blockchainState, stateVariables). @@ -450,12 +448,13 @@ std::map Predicate::expressionSubstitution(smtutil::Ex // invariant over its state, for example `x <= 0`. if (isInterface()) { + smtAssert(nArgs > 0); size_t shift = txValuesIndex(); - solAssert(starts_with(predName, "interface"), ""); - subst[_predExpr.arguments.at(0).name] = "address(this)"; - solAssert(nArgs == stateVars.size() + shift, ""); + smtAssert(predName.starts_with("interface")); + subst[_predArgs.at(0)] = "address(this)"; + smtAssert(nArgs == stateVars.size() + shift); for (size_t i = nArgs - stateVars.size(); i < nArgs; ++i) - subst[_predExpr.arguments.at(i).name] = stateVars.at(i - shift)->name(); + subst[_predArgs.at(i)] = stateVars.at(i - shift)->name(); } // The signature of a nondet interface predicate is // nondet_interface(error, this, abiFunctions, (optionally) bytesConcatFunctions, cryptoFunctions, blockchainState, stateVariables, blockchainState', stateVariables'). @@ -466,14 +465,15 @@ std::map Predicate::expressionSubstitution(smtutil::Ex // `(x <= 0) => (x' <= 100)`. else if (isNondetInterface()) { - solAssert(starts_with(predName, "nondet_interface"), ""); - subst[_predExpr.arguments.at(0).name] = ""; - subst[_predExpr.arguments.at(1).name] = "address(this)"; - solAssert(nArgs == stateVars.size() * 2 + firstArgIndex(), ""); + smtAssert(nArgs > 1); + smtAssert(predName.starts_with("nondet_interface")); + subst[_predArgs.at(0)] = ""; + subst[_predArgs.at(1)] = "address(this)"; + smtAssert(nArgs == stateVars.size() * 2 + firstArgIndex()); for (size_t i = nArgs - stateVars.size(), s = 0; i < nArgs; ++i, ++s) - subst[_predExpr.arguments.at(i).name] = stateVars.at(s)->name() + "'"; + subst[_predArgs.at(i)] = stateVars.at(s)->name() + "'"; for (size_t i = nArgs - (stateVars.size() * 2 + 1), s = 0; i < nArgs - (stateVars.size() + 1); ++i, ++s) - subst[_predExpr.arguments.at(i).name] = stateVars.at(s)->name(); + subst[_predArgs.at(i)] = stateVars.at(s)->name(); } return subst; diff --git a/libsolidity/formal/Predicate.h b/libsolidity/formal/Predicate.h index f389ab822111..d523f955404c 100644 --- a/libsolidity/formal/Predicate.h +++ b/libsolidity/formal/Predicate.h @@ -19,7 +19,8 @@ #pragma once -#include +#include +#include #include #include @@ -179,9 +180,9 @@ class Predicate /// @returns the values of the local variables used by this predicate. std::pair>, std::vector> localVariableValues(std::vector const& _args) const; - /// @returns a substitution map from the arguments of _predExpr + /// @returns a substitution map from the predicate arguments @p _predArgs /// to a Solidity-like expression. - std::map expressionSubstitution(smtutil::Expression const& _predExprs) const; + std::map expressionSubstitution(std::vector const& _predArgs) const; private: /// Recursively fills _array from _expr. diff --git a/libsolidity/formal/SMTEncoder.cpp b/libsolidity/formal/SMTEncoder.cpp index 801ad05a2056..95268032af0e 100644 --- a/libsolidity/formal/SMTEncoder.cpp +++ b/libsolidity/formal/SMTEncoder.cpp @@ -762,7 +762,6 @@ void SMTEncoder::initContract(ContractDefinition const& _contract) m_context.pushSolver(); createStateVariables(_contract); clearIndices(m_currentContract, nullptr); - m_variableUsage.setCurrentContract(_contract); m_checked = true; } @@ -935,8 +934,10 @@ void SMTEncoder::visitAddMulMod(FunctionCall const& _funCall) void SMTEncoder::visitWrapUnwrap(FunctionCall const& _funCall) { auto const& args = _funCall.arguments(); - solAssert(args.size() == 1, ""); - defineExpr(_funCall, expr(*args.front())); + smtAssert(args.size() == 1, "Expected exactly one argument to wrap/unwrap"); + auto const& funType = dynamic_cast(*_funCall.expression().annotation().type); + auto const* argType = funType.parameterTypes().front(); + defineExpr(_funCall, expr(*args.front(), argType)); } void SMTEncoder::visitObjectCreation(FunctionCall const& _funCall) @@ -1098,19 +1099,24 @@ void SMTEncoder::visitPublicGetter(FunctionCall const& _funCall) } } -bool SMTEncoder::shouldAnalyze(SourceUnit const& _source) const +bool SMTEncoder::shouldEncode(ContractDefinition const& _contract) const +{ + return _contract.canBeDeployed(); +} + +bool SMTEncoder::shouldAnalyzeVerificationTargetsFor(SourceUnit const& _source) const { return m_settings.contracts.isDefault() || m_settings.contracts.has(*_source.annotation().path); } -bool SMTEncoder::shouldAnalyze(ContractDefinition const& _contract) const +bool SMTEncoder::shouldAnalyzeVerificationTargetsFor(ContractDefinition const& _contract) const { - if (!_contract.canBeDeployed()) + if (!shouldEncode(_contract)) return false; return m_settings.contracts.isDefault() || - m_settings.contracts.has(_contract.sourceUnitName()); + m_settings.contracts.has(_contract.sourceUnitName(), _contract.name()); } void SMTEncoder::visitTypeConversion(FunctionCall const& _funCall) @@ -2812,14 +2818,6 @@ Expression const* SMTEncoder::cleanExpression(Expression const& _expr) return expr; } -std::set SMTEncoder::touchedVariables(ASTNode const& _node) -{ - std::vector callStack; - for (auto const& call: m_callStack) - callStack.push_back(call.first); - return m_variableUsage.touchedVariables(_node, callStack); -} - Declaration const* SMTEncoder::expressionToDeclaration(Expression const& _expr) const { if (auto const* identifier = dynamic_cast(&_expr)) diff --git a/libsolidity/formal/SMTEncoder.h b/libsolidity/formal/SMTEncoder.h index f926a0d0fc80..60cfb9cf90cd 100644 --- a/libsolidity/formal/SMTEncoder.h +++ b/libsolidity/formal/SMTEncoder.h @@ -27,7 +27,6 @@ #include #include #include -#include #include #include @@ -238,11 +237,12 @@ class SMTEncoder: public ASTConstVisitor void visitFunctionIdentifier(Identifier const& _identifier); virtual void visitPublicGetter(FunctionCall const& _funCall); - /// @returns true if @param _contract is set for analysis in the settings - /// and it is not abstract. - bool shouldAnalyze(ContractDefinition const& _contract) const; - /// @returns true if @param _source is set for analysis in the settings. - bool shouldAnalyze(SourceUnit const& _source) const; + /// @returns true if symbolic representation of @param _contract is required for verification + bool shouldEncode(ContractDefinition const& _contract) const; + /// @returns true if the verification targets of @param _contract are actually selected for verification + bool shouldAnalyzeVerificationTargetsFor(ContractDefinition const& _contract) const; + /// @returns true if we should descend into @param _source to look for contracts that should be verified + bool shouldAnalyzeVerificationTargetsFor(SourceUnit const& _source) const; /// @returns the state variable returned by a public getter if /// @a _expr is a call to a public getter, @@ -453,7 +453,6 @@ class SMTEncoder: public ASTConstVisitor smtutil::Expression constraints; }; - smt::VariableUsage m_variableUsage; bool m_arrayAssignmentHappened = false; /// Stores the instances of an Uninterpreted Function applied to arguments. diff --git a/libsolidity/formal/SymbolicTypes.cpp b/libsolidity/formal/SymbolicTypes.cpp index 738a48f706c3..11c92a83af40 100644 --- a/libsolidity/formal/SymbolicTypes.cpp +++ b/libsolidity/formal/SymbolicTypes.cpp @@ -20,6 +20,7 @@ #include +#include #include #include #include diff --git a/libsolidity/formal/SymbolicTypes.h b/libsolidity/formal/SymbolicTypes.h index d38dcc04514a..9259ff64a4c6 100644 --- a/libsolidity/formal/SymbolicTypes.h +++ b/libsolidity/formal/SymbolicTypes.h @@ -19,7 +19,6 @@ #pragma once #include -#include #include namespace solidity::frontend::smt diff --git a/libsolidity/formal/SymbolicVariables.cpp b/libsolidity/formal/SymbolicVariables.cpp index f0cebc46c291..29301d095ca4 100644 --- a/libsolidity/formal/SymbolicVariables.cpp +++ b/libsolidity/formal/SymbolicVariables.cpp @@ -18,6 +18,8 @@ #include +#include + #include #include diff --git a/libsolidity/formal/VariableUsage.cpp b/libsolidity/formal/VariableUsage.cpp deleted file mode 100644 index ab7c425ae46c..000000000000 --- a/libsolidity/formal/VariableUsage.cpp +++ /dev/null @@ -1,118 +0,0 @@ -/* - This file is part of solidity. - - solidity is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - solidity is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with solidity. If not, see . -*/ -// SPDX-License-Identifier: GPL-3.0 - -#include - -#include -#include - -#include - -#include - -using namespace solidity; -using namespace solidity::util; -using namespace solidity::frontend; -using namespace solidity::frontend::smt; - -std::set VariableUsage::touchedVariables(ASTNode const& _node, std::vector const& _outerCallstack) -{ - m_touchedVariables.clear(); - m_callStack.clear(); - m_callStack += _outerCallstack; - if (!m_callStack.empty()) - m_lastCall = m_callStack.back(); - _node.accept(*this); - return m_touchedVariables; -} - -void VariableUsage::endVisit(Identifier const& _identifier) -{ - if (_identifier.annotation().willBeWrittenTo) - checkIdentifier(_identifier); -} - -void VariableUsage::endVisit(IndexAccess const& _indexAccess) -{ - if (_indexAccess.annotation().willBeWrittenTo) - { - /// identifier.annotation().willBeWrittenTo == false, that's why we - /// need to check that before. - auto identifier = dynamic_cast(SMTEncoder::leftmostBase(_indexAccess)); - if (identifier) - checkIdentifier(*identifier); - } -} - -void VariableUsage::endVisit(FunctionCall const& _funCall) -{ - auto scopeContract = currentScopeContract(); - if (m_inlineFunctionCalls(_funCall, scopeContract, m_currentContract)) - if (auto funDef = SMTEncoder::functionCallToDefinition(_funCall, scopeContract, m_currentContract)) - if (find(m_callStack.begin(), m_callStack.end(), funDef) == m_callStack.end()) - funDef->accept(*this); -} - -bool VariableUsage::visit(FunctionDefinition const& _function) -{ - m_callStack.push_back(&_function); - return true; -} - -void VariableUsage::endVisit(FunctionDefinition const&) -{ - solAssert(!m_callStack.empty(), ""); - m_callStack.pop_back(); -} - -void VariableUsage::endVisit(ModifierInvocation const& _modifierInv) -{ - auto const& modifierDef = dynamic_cast(_modifierInv.name().annotation().referencedDeclaration); - if (modifierDef) - modifierDef->accept(*this); -} - -void VariableUsage::endVisit(PlaceholderStatement const&) -{ - solAssert(!m_callStack.empty(), ""); - FunctionDefinition const* funDef = nullptr; - for (auto it = m_callStack.rbegin(); it != m_callStack.rend() && !funDef; ++it) - funDef = dynamic_cast(*it); - solAssert(funDef, ""); - if (funDef->isImplemented()) - funDef->body().accept(*this); -} - -void VariableUsage::checkIdentifier(Identifier const& _identifier) -{ - Declaration const* declaration = _identifier.annotation().referencedDeclaration; - solAssert(declaration, ""); - if (VariableDeclaration const* varDecl = dynamic_cast(declaration)) - { - if (!varDecl->isLocalVariable() || (m_lastCall && varDecl->functionOrModifierDefinition() == m_lastCall)) - m_touchedVariables.insert(varDecl); - } -} - -ContractDefinition const* VariableUsage::currentScopeContract() -{ - for (auto&& f: m_callStack | ranges::views::reverse) - if (auto fun = dynamic_cast(f)) - return fun->annotation().contract; - return nullptr; -} diff --git a/libsolidity/formal/VariableUsage.h b/libsolidity/formal/VariableUsage.h deleted file mode 100644 index 4dc90f8c07a7..000000000000 --- a/libsolidity/formal/VariableUsage.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - This file is part of solidity. - - solidity is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - solidity is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with solidity. If not, see . -*/ -// SPDX-License-Identifier: GPL-3.0 - -#pragma once - -#include - -#include -#include - -namespace solidity::frontend::smt -{ - -/** - * This class computes information about which variables are modified in a certain subtree. - */ -class VariableUsage: private ASTConstVisitor -{ -public: - /// @param _outerCallstack the current callstack in the callers context. - std::set touchedVariables(ASTNode const& _node, std::vector const& _outerCallstack); - - /// Sets whether to inline function calls. - void setFunctionInlining(std::function _inlineFunctionCalls) { m_inlineFunctionCalls = _inlineFunctionCalls; } - - void setCurrentContract(ContractDefinition const& _contract) { m_currentContract = &_contract; } - -private: - void endVisit(Identifier const& _node) override; - void endVisit(IndexAccess const& _node) override; - void endVisit(FunctionCall const& _node) override; - bool visit(FunctionDefinition const& _node) override; - void endVisit(FunctionDefinition const& _node) override; - void endVisit(ModifierInvocation const& _node) override; - void endVisit(PlaceholderStatement const& _node) override; - - /// Checks whether an identifier should be added to touchedVariables. - void checkIdentifier(Identifier const& _identifier); - - ContractDefinition const* currentScopeContract(); - - std::set m_touchedVariables; - std::vector m_callStack; - CallableDeclaration const* m_lastCall = nullptr; - ContractDefinition const* m_currentContract = nullptr; - - std::function m_inlineFunctionCalls = [](FunctionCall const&, ContractDefinition const*, ContractDefinition const*) { return false; }; -}; - -} diff --git a/libsolidity/formal/Z3CHCSmtLib2Interface.cpp b/libsolidity/formal/Z3CHCSmtLib2Interface.cpp index 2ceecfcf9088..da6f14d963d3 100644 --- a/libsolidity/formal/Z3CHCSmtLib2Interface.cpp +++ b/libsolidity/formal/Z3CHCSmtLib2Interface.cpp @@ -90,26 +90,23 @@ CHCSolverInterface::QueryResult Z3CHCSmtLib2Interface::query(smtutil::Expression #endif setupSmtCallback(true); if (!boost::starts_with(response, "unsat")) - return {CheckResult::SATISFIABLE, Expression(true), {}}; - return {CheckResult::SATISFIABLE, Expression(true), graphFromZ3Answer(response)}; + return {CheckResult::SATISFIABLE, {}, {}}; + return {CheckResult::SATISFIABLE, {}, graphFromZ3Answer(response)}; } CheckResult result; if (boost::starts_with(response, "sat")) - { - auto maybeInvariants = invariantsFromSolverResponse(response); - return {CheckResult::UNSATISFIABLE, maybeInvariants.value_or(Expression(true)), {}}; - } - else if (boost::starts_with(response, "unknown")) + return {CheckResult::UNSATISFIABLE, invariantsFromSolverResponse(response), {}}; + if (boost::starts_with(response, "unknown")) result = CheckResult::UNKNOWN; else result = CheckResult::ERROR; - return {result, Expression(true), {}}; + return {result, {}, {}}; } catch(smtutil::SMTSolverInteractionError const&) { - return {CheckResult::ERROR, Expression(true), {}}; + return {CheckResult::ERROR, {}, {}}; } } diff --git a/libsolidity/interface/SMTSolverCommand.cpp b/libsolidity/interface/SMTSolverCommand.cpp index 66adfd0c5e17..e6e0ded6252d 100644 --- a/libsolidity/interface/SMTSolverCommand.cpp +++ b/libsolidity/interface/SMTSolverCommand.cpp @@ -20,7 +20,16 @@ #include #include +#include +#if (BOOST_VERSION < 108800) #include +#else +#define BOOST_PROCESS_VERSION 1 +#include +#include +#include +#include +#endif namespace solidity::frontend { diff --git a/libsolidity/lsp/DocumentHoverHandler.cpp b/libsolidity/lsp/DocumentHoverHandler.cpp index e5991b765a66..a4f3de25c014 100644 --- a/libsolidity/lsp/DocumentHoverHandler.cpp +++ b/libsolidity/lsp/DocumentHoverHandler.cpp @@ -59,6 +59,11 @@ void DocumentHoverHandler::operator()(MessageID _id, Json const& _args) { auto const [sourceUnitName, lineColumn] = HandlerBase(*this).extractSourceUnitNameAndLineColumn(_args); auto const [sourceNode, sourceOffset] = m_server.astNodeAndOffsetAtSourceLocation(sourceUnitName, lineColumn); + if (!sourceNode) + { + client().reply(_id, Json()); + return; + } MarkdownBuilder markdown; auto rangeToHighlight = toRange(sourceNode->location()); diff --git a/libsolidity/parsing/Parser.cpp b/libsolidity/parsing/Parser.cpp index 60a7a016bade..5e0f296b098a 100644 --- a/libsolidity/parsing/Parser.cpp +++ b/libsolidity/parsing/Parser.cpp @@ -824,8 +824,9 @@ ASTPointer Parser::parseEnumValue() { RecursionGuard recursionGuard(*this); ASTNodeFactory nodeFactory(*this); + ASTPointer documentation = parseStructuredDocumentation(); nodeFactory.markEndPosition(); - return nodeFactory.createNode(expectIdentifierToken()); + return nodeFactory.createNode(expectIdentifierToken(), documentation); } ASTPointer Parser::parseEnumDefinition() diff --git a/libyul/AsmAnalysis.cpp b/libyul/AsmAnalysis.cpp index b6ff862b3850..b36eb48b415e 100644 --- a/libyul/AsmAnalysis.cpp +++ b/libyul/AsmAnalysis.cpp @@ -94,19 +94,28 @@ bool AsmAnalyzer::analyze(Block const& _block) AsmAnalysisInfo AsmAnalyzer::analyzeStrictAssertCorrect(Object const& _object) { yulAssert(_object.dialect()); - return analyzeStrictAssertCorrect(*_object.dialect(), _object.code()->root(), _object.summarizeStructure()); + return analyzeStrictAssertCorrect(*_object.dialect(), *_object.code(), _object.summarizeStructure()); +} + +AsmAnalysisInfo AsmAnalyzer::analyzeStrictAssertCorrect( + Dialect const& _dialect, + AST const& _ast, + Object::Structure _objectStructure +) +{ + return analyzeStrictAssertCorrect(_dialect, _ast.root(), std::move(_objectStructure)); } AsmAnalysisInfo AsmAnalyzer::analyzeStrictAssertCorrect( Dialect const& _dialect, Block const& _astRoot, - Object::Structure const _objectStructure + Object::Structure _objectStructure ) { ErrorList errorList; langutil::ErrorReporter errors(errorList); AsmAnalysisInfo analysisInfo; - bool success = yul::AsmAnalyzer( + bool success = AsmAnalyzer( analysisInfo, errors, _dialect, @@ -155,7 +164,7 @@ size_t AsmAnalyzer::operator()(Literal const& _literal) m_errorReporter.typeError( 3069_error, nativeLocationOf(_literal), - "String literal too long (" + std::to_string(formatLiteral(_literal, false /* _validated */ ).size()) + " > 32)" + fmt::format("String literal too long ({} > 32)", formatLiteral(_literal, false /* _validated */ ).size()) ); } else if (_literal.kind == LiteralKind::Number && _literal.value.hint() && bigint(*_literal.value.hint()) > u256(-1)) @@ -170,7 +179,7 @@ size_t AsmAnalyzer::operator()(Literal const& _literal) size_t AsmAnalyzer::operator()(Identifier const& _identifier) { - yulAssert(!_identifier.name.empty(), ""); + yulAssert(!_identifier.name.empty()); auto watcher = m_errorReporter.errorWatcher(); if (m_currentScope->lookup(_identifier.name, GenericVisitor{ @@ -180,7 +189,7 @@ size_t AsmAnalyzer::operator()(Identifier const& _identifier) m_errorReporter.declarationError( 4990_error, nativeLocationOf(_identifier), - "Variable " + _identifier.name.str() + " used before it was declared." + fmt::format("Variable {} used before it was declared.", _identifier.name.str()) ); }, [&](Scope::Function const&) @@ -188,14 +197,15 @@ size_t AsmAnalyzer::operator()(Identifier const& _identifier) m_errorReporter.typeError( 6041_error, nativeLocationOf(_identifier), - "Function " + _identifier.name.str() + " used without being called." + fmt::format("Function {} used without being called.", _identifier.name.str()) ); } })) { if (m_resolver) // We found a local reference, make sure there is no external reference. - m_resolver( + // Used for side effects, e.g., error reporting in TypeChecker, hence ignoring return value + std::ignore = m_resolver( _identifier, yul::IdentifierContext::NonExternal, m_currentScope->insideFunction() @@ -213,7 +223,7 @@ size_t AsmAnalyzer::operator()(Identifier const& _identifier) m_errorReporter.declarationError( 8198_error, nativeLocationOf(_identifier), - "Identifier \"" + _identifier.name.str() + "\" not found." + fmt::format("Identifier \"{}\" not found.", _identifier.name.str()) ); } @@ -229,11 +239,12 @@ void AsmAnalyzer::operator()(ExpressionStatement const& _statement) m_errorReporter.typeError( 3083_error, nativeLocationOf(_statement), - "Top-level expressions are not supposed to return values (this expression returns " + - std::to_string(numReturns) + - " value" + - (numReturns == 1 ? "" : "s") + - "). Use ``pop()`` or assign them." + fmt::format( + "Top-level expressions are not supposed to return values (this expression returns {} value{}). " + "Use ``pop()`` or assign them.", + numReturns, + numReturns == 1 ? "" : "s" + ) ); } @@ -249,9 +260,10 @@ void AsmAnalyzer::operator()(Assignment const& _assignment) m_errorReporter.declarationError( 9005_error, nativeLocationOf(_assignment), - "Variable " + - _variableName.name.str() + - " occurs multiple times on the left-hand side of the assignment." + fmt::format( + "Variable {} occurs multiple times on the left-hand side of the assignment.", + _variableName.name.str() + ) ); size_t numRhsValues = std::visit(*this, *_assignment.value); @@ -260,13 +272,12 @@ void AsmAnalyzer::operator()(Assignment const& _assignment) m_errorReporter.declarationError( 8678_error, nativeLocationOf(_assignment), - "Variable count for assignment to \"" + - joinHumanReadable(applyMap(_assignment.variableNames, [](auto const& _identifier){ return _identifier.name.str(); })) + - "\" does not match number of values (" + - std::to_string(numVariables) + - " vs. " + - std::to_string(numRhsValues) + - ")" + fmt::format( + "Variable count for assignment to \"{}\" does not match number of values ({} vs. {})", + joinHumanReadable(applyMap(_assignment.variableNames, [](auto const& _identifier){ return _identifier.name.str(); })), + numVariables, + numRhsValues + ) ); for (size_t i = 0; i < numVariables; ++i) @@ -296,13 +307,12 @@ void AsmAnalyzer::operator()(VariableDeclaration const& _varDecl) m_errorReporter.declarationError( 3812_error, nativeLocationOf(_varDecl), - "Variable count mismatch for declaration of \"" + - joinHumanReadable(applyMap(_varDecl.variables, [](auto const& _identifier){ return _identifier.name.str(); })) + - + "\": " + - std::to_string(numVariables) + - " variables and " + - std::to_string(numValues) + - " values." + fmt::format( + "Variable count mismatch for declaration of \"{}\": {} variables and {} values.", + joinHumanReadable(applyMap(_varDecl.variables, [](auto const& _identifier){ return _identifier.name.str(); })), + numVariables, + numValues + ) ); } @@ -314,7 +324,7 @@ void AsmAnalyzer::operator()(VariableDeclaration const& _varDecl) void AsmAnalyzer::operator()(FunctionDefinition const& _funDef) { - yulAssert(!_funDef.name.empty(), ""); + yulAssert(!_funDef.name.empty()); expectValidIdentifier(_funDef.name, nativeLocationOf(_funDef)); Block const* virtualBlock = m_info.virtualBlocks.at(&_funDef).get(); yulAssert(virtualBlock, ""); @@ -352,77 +362,89 @@ size_t AsmAnalyzer::operator()(FunctionCall const& _funCall) std::optional numReturns; std::vector> const* literalArguments = nullptr; - if (BuiltinFunction const* builtin = resolveBuiltinFunction(_funCall.functionName, m_dialect)) - { - if (builtin->name == "selfdestruct") - m_errorReporter.warning( - 1699_error, - nativeLocationOf(_funCall.functionName), - "\"selfdestruct\" has been deprecated. " - "Note that, starting from the Cancun hard fork, the underlying opcode no longer deletes the code and " - "data associated with an account and only transfers its Ether to the beneficiary, " - "unless executed in the same transaction in which the contract was created (see EIP-6780). " - "Any use in newly deployed contracts is strongly discouraged even if the new behavior is taken into account. " - "Future changes to the EVM might further reduce the functionality of the opcode." - ); - else if ( - m_evmVersion.supportsTransientStorage() && - builtin->name == "tstore" && - !m_errorReporter.hasError({2394}) - ) - m_errorReporter.warning( - 2394_error, - nativeLocationOf(_funCall.functionName), - "Transient storage as defined by EIP-1153 can break the composability of smart contracts: " - "Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, " - "your contract may unintentionally misbehave when invoked multiple times in a complex transaction. " - "To avoid this, be sure to clear all transient storage at the end of any call to your contract. " - "The use of transient storage for reentrancy guards that are cleared at the end of the call is safe." - ); + std::visit( + GenericVisitor { + [&](BuiltinName const& _builtinName) + { + BuiltinFunction const& builtin = m_dialect.builtin(_builtinName.handle); + if (builtin.name == "selfdestruct") + m_errorReporter.warning( + 1699_error, + nativeLocationOf(_builtinName), + "\"selfdestruct\" has been deprecated. " + "Note that, starting from the Cancun hard fork, the underlying opcode no longer deletes the code and " + "data associated with an account and only transfers its Ether to the beneficiary, " + "unless executed in the same transaction in which the contract was created (see EIP-6780). " + "Any use in newly deployed contracts is strongly discouraged even if the new behavior is taken into account. " + "Future changes to the EVM might further reduce the functionality of the opcode." + ); + else if ( + builtin.name == "tstore" && + !m_errorReporter.hasError({2394}) + ) + { + yulAssert(m_evmVersion.supportsTransientStorage(), "tstore is only a builtin on EVMs that support transient storage"); + m_errorReporter.warning( + 2394_error, + nativeLocationOf(_builtinName), + "Transient storage as defined by EIP-1153 can break the composability of smart contracts: " + "Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, " + "your contract may unintentionally misbehave when invoked multiple times in a complex transaction. " + "To avoid this, be sure to clear all transient storage at the end of any call to your contract. " + "The use of transient storage for reentrancy guards that are cleared at the end of the call is safe." + ); + } - numParameters = builtin->numParameters; - numReturns = builtin->numReturns; - if (!builtin->literalArguments.empty()) - literalArguments = &builtin->literalArguments; + numParameters = builtin.numParameters; + numReturns = builtin.numReturns; + if (!builtin.literalArguments.empty()) + literalArguments = &builtin.literalArguments; - validateInstructions(_funCall); - m_sideEffects += builtin->sideEffects; - } - else if (m_currentScope->lookup(YulName{resolveFunctionName(_funCall.functionName, m_dialect)}, GenericVisitor{ - [&](Scope::Variable const&) - { - m_errorReporter.typeError( - 4202_error, - nativeLocationOf(_funCall.functionName), - "Attempt to call variable instead of function." - ); + validateInstructions(_funCall); + m_sideEffects += builtin.sideEffects; + }, + [&](Identifier const& _identifier) + { + bool const identifierInCurrentScope = m_currentScope->lookup(_identifier.name, GenericVisitor{ + [&](Scope::Variable const&) + { + m_errorReporter.typeError( + 4202_error, + nativeLocationOf(_identifier), + "Attempt to call variable instead of function." + ); + }, + [&](Scope::Function const& _fun) + { + numParameters = _fun.numArguments; + numReturns = _fun.numReturns; + } + }); + if (identifierInCurrentScope) + { + if (m_resolver) + // We found a local reference, make sure there is no external reference. + // Used for side effects, e.g., error reporting in TypeChecker, hence ignoring return value + std::ignore = m_resolver( + _identifier, + yul::IdentifierContext::NonExternal, + m_currentScope->insideFunction() + ); + } + else + { + if (!validateInstructions(_funCall)) + m_errorReporter.declarationError( + 4619_error, + nativeLocationOf(_identifier), + fmt::format("Function \"{}\" not found.", _identifier.name.str()) + ); + yulAssert(!watcher.ok(), "Expected a reported error."); + } + } }, - [&](Scope::Function const& _fun) - { - numParameters = _fun.numArguments; - numReturns = _fun.numReturns; - } - })) - { - yulAssert(std::holds_alternative(_funCall.functionName)); - if (m_resolver) - // We found a local reference, make sure there is no external reference. - m_resolver( - std::get(_funCall.functionName), - yul::IdentifierContext::NonExternal, - m_currentScope->insideFunction() - ); - } - else - { - if (!validateInstructions(_funCall)) - m_errorReporter.declarationError( - 4619_error, - nativeLocationOf(_funCall.functionName), - fmt::format("Function \"{}\" not found.", resolveFunctionName(_funCall.functionName, m_dialect)) - ); - yulAssert(!watcher.ok(), "Expected a reported error."); - } + _funCall.functionName + ); if (numParameters && _funCall.arguments.size() != *numParameters) m_errorReporter.typeError( @@ -455,7 +477,7 @@ size_t AsmAnalyzer::operator()(FunctionCall const& _funCall) m_errorReporter.typeError( 5859_error, nativeLocationOf(arg), - "Function expects " + to_string(*literalArgumentKind) + " literal." + fmt::format("Function expects {} literal.", to_string(*literalArgumentKind)) ); else if (*literalArgumentKind == LiteralKind::String) { @@ -467,7 +489,7 @@ size_t AsmAnalyzer::operator()(FunctionCall const& _funCall) m_errorReporter.typeError( 3517_error, nativeLocationOf(arg), - "Unknown data object \"" + formatLiteral(argumentAsLiteral) + "\"." + fmt::format("Unknown data object \"{}\".", formatLiteral(argumentAsLiteral)) ); } else if (functionName.substr(0, "verbatim_"s.size()) == "verbatim_") @@ -499,14 +521,17 @@ size_t AsmAnalyzer::operator()(FunctionCall const& _funCall) m_errorReporter.typeError( 7575_error, nativeLocationOf(arg), - "Data name \"" + formattedLiteral + "\" cannot be used as an argument of eofcreate/returncontract. " + - "An object name is only acceptable." + fmt::format( + "Data name \"{}\" cannot be used as an argument of eofcreate/returncontract. " + "Only an object name is acceptable.", + formattedLiteral + ) ); else m_errorReporter.typeError( 8970_error, nativeLocationOf(arg), - "Unknown object \"" + formattedLiteral + "\"." + fmt::format("Unknown object \"{}\".", formattedLiteral) ); } } @@ -579,9 +604,7 @@ void AsmAnalyzer::operator()(Switch const& _switch) m_errorReporter.declarationError( 6792_error, nativeLocationOf(_case), - "Duplicate case \"" + - formatLiteral(*_case.value) + - "\" defined." + fmt::format("Duplicate case \"{}\" defined.", formatLiteral(*_case.value)) ); } @@ -631,9 +654,10 @@ void AsmAnalyzer::expectExpression(Expression const& _expr) m_errorReporter.typeError( 3950_error, nativeLocationOf(_expr), - "Expected expression to evaluate to one value, but got " + - std::to_string(numValues) + - " values instead." + fmt::format( + "Expected expression to evaluate to one value, but got {} values instead.", + numValues + ) ); } @@ -645,7 +669,7 @@ void AsmAnalyzer::expectUnlimitedStringLiteral(Literal const& _literal) void AsmAnalyzer::checkAssignment(Identifier const& _variable) { - yulAssert(!_variable.name.empty(), ""); + yulAssert(!_variable.name.empty()); auto watcher = m_errorReporter.errorWatcher(); bool hasVariable = false; bool found = false; @@ -653,7 +677,8 @@ void AsmAnalyzer::checkAssignment(Identifier const& _variable) { if (m_resolver) // We found a local reference, make sure there is no external reference. - m_resolver( + // Used for side effects, e.g., error reporting in TypeChecker, hence ignoring return value + std::ignore = m_resolver( _variable, yul::IdentifierContext::NonExternal, m_currentScope->insideFunction() @@ -665,7 +690,7 @@ void AsmAnalyzer::checkAssignment(Identifier const& _variable) m_errorReporter.declarationError( 1133_error, nativeLocationOf(_variable), - "Variable " + _variable.name.str() + " used before it was declared." + fmt::format("Variable {} used before it was declared.", _variable.name.str()) ); else hasVariable = true; @@ -698,26 +723,27 @@ Scope& AsmAnalyzer::scope(Block const* _block) void AsmAnalyzer::expectValidIdentifier(YulName _identifier, SourceLocation const& _location) { + std::string_view const label = _identifier.str(); // NOTE: the leading dot case is handled by the parser not allowing it. - if (boost::ends_with(_identifier.str(), ".")) + if (label.ends_with('.')) m_errorReporter.syntaxError( 3384_error, _location, - "\"" + _identifier.str() + "\" is not a valid identifier (ends with a dot)." + fmt::format("\"{}\" is not a valid identifier (ends with a dot).", label) ); - if (_identifier.str().find("..") != std::string::npos) + if (label.find("..") != std::string::npos) m_errorReporter.syntaxError( 7771_error, _location, - "\"" + _identifier.str() + "\" is not a valid identifier (contains consecutive dots)." + fmt::format("\"{}\" is not a valid identifier (contains consecutive dots).", label) ); - if (m_dialect.reservedIdentifier(_identifier.str())) + if (m_dialect.reservedIdentifier(label)) m_errorReporter.declarationError( 5017_error, _location, - "The identifier \"" + _identifier.str() + "\" is reserved and can not be used." + fmt::format("The identifier \"{}\" is reserved and can not be used.", label) ); } @@ -744,7 +770,7 @@ bool AsmAnalyzer::validateInstructions(std::string_view _instructionIdentifier, 7223_error, _location, fmt::format( - "Builtin function \"{}\" is only available in EOF.", + "Builtin function \"{function}\" is only available in EOF.", fmt::arg("function", _instructionIdentifier) ) ); @@ -844,7 +870,7 @@ bool AsmAnalyzer::validateInstructions(evmasm::Instruction _instr, SourceLocatio 4328_error, _location, fmt::format( - "The \"{}\" instruction is only available in EOF.", + "The \"{instruction}\" instruction is only available in EOF.", fmt::arg("instruction", boost::to_lower_copy(instructionInfo(_instr, m_evmVersion).name)) ) ); @@ -899,7 +925,7 @@ bool AsmAnalyzer::validateInstructions(FunctionCall const& _functionCall) ); } -void AsmAnalyzer::validateObjectStructure(langutil::SourceLocation _astRootLocation) +void AsmAnalyzer::validateObjectStructure(langutil::SourceLocation const& _astRootLocation) { if (m_eofVersion.has_value()) { diff --git a/libyul/AsmAnalysis.h b/libyul/AsmAnalysis.h index e8c02fbec132..51b8cde2ba1f 100644 --- a/libyul/AsmAnalysis.h +++ b/libyul/AsmAnalysis.h @@ -62,7 +62,7 @@ class AsmAnalyzer langutil::ErrorReporter& _errorReporter, Dialect const& _dialect, ExternalIdentifierAccess::Resolver _resolver = ExternalIdentifierAccess::Resolver(), - Object::Structure const _objectStructure = {} + Object::Structure _objectStructure = {} ): m_resolver(std::move(_resolver)), m_info(_analysisInfo), @@ -85,7 +85,12 @@ class AsmAnalyzer static AsmAnalysisInfo analyzeStrictAssertCorrect( Dialect const& _dialect, Block const& _astRoot, - Object::Structure const _objectStructure + Object::Structure _objectStructure + ); + static AsmAnalysisInfo analyzeStrictAssertCorrect( + Dialect const& _dialect, + AST const& _ast, + Object::Structure _objectStructure ); size_t operator()(Literal const& _literal); @@ -98,9 +103,9 @@ class AsmAnalyzer void operator()(If const& _if); void operator()(Switch const& _switch); void operator()(ForLoop const& _forLoop); - void operator()(Break const&) { } - void operator()(Continue const&) { } - void operator()(Leave const&) { } + void operator()(Break const&) const { } + void operator()(Continue const&) const { } + void operator()(Leave const&) const { } void operator()(Block const& _block); /// @returns the worst side effects encountered during analysis (including within defined functions). @@ -109,7 +114,7 @@ class AsmAnalyzer /// Visits the expression, expects that it evaluates to exactly one value. /// Reports errors otherwise. void expectExpression(Expression const& _expr); - void expectUnlimitedStringLiteral(Literal const& _literal); + static void expectUnlimitedStringLiteral(Literal const& _literal); /// Verifies that a variable to be assigned to exists and can be assigned to. void checkAssignment(Identifier const& _variable); @@ -121,7 +126,7 @@ class AsmAnalyzer bool validateInstructions(std::string_view _instrIdentifier, langutil::SourceLocation const& _location); bool validateInstructions(FunctionCall const& _functionCall); - void validateObjectStructure(langutil::SourceLocation _astRootLocation); + void validateObjectStructure(langutil::SourceLocation const& _astRootLocation); yul::ExternalIdentifierAccess::Resolver m_resolver; Scope* m_currentScope = nullptr; diff --git a/libyul/CompilabilityChecker.cpp b/libyul/CompilabilityChecker.cpp index cc46ecb77000..2df14f211939 100644 --- a/libyul/CompilabilityChecker.cpp +++ b/libyul/CompilabilityChecker.cpp @@ -1,4 +1,4 @@ -/*( +/* This file is part of solidity. solidity is free software: you can redistribute it and/or modify diff --git a/libyul/YulString.h b/libyul/YulString.h index d6c13f0d3751..329825a4465b 100644 --- a/libyul/YulString.h +++ b/libyul/YulString.h @@ -165,7 +165,7 @@ class YulString inline YulString operator "" _yulname(char const* _string, std::size_t _size) { - return YulString(std::string(_string, _size)); + return YulString(std::string_view(_string, _size)); } } diff --git a/libyul/backends/evm/ControlFlowGraphBuilder.h b/libyul/backends/evm/ControlFlowGraphBuilder.h index 1d0227a56b71..4a2aae98c26f 100644 --- a/libyul/backends/evm/ControlFlowGraphBuilder.h +++ b/libyul/backends/evm/ControlFlowGraphBuilder.h @@ -33,7 +33,7 @@ class ControlFlowGraphBuilder ControlFlowGraphBuilder& operator=(ControlFlowGraphBuilder const&) = delete; static std::unique_ptr build(AsmAnalysisInfo const& _analysisInfo, Dialect const& _dialect, Block const& _block); - StackSlot operator()(Expression const& _literal); + StackSlot operator()(Expression const& _expression); StackSlot operator()(Literal const& _literal); StackSlot operator()(Identifier const& _identifier); StackSlot operator()(FunctionCall const&); diff --git a/libyul/backends/evm/SSAControlFlowGraphBuilder.cpp b/libyul/backends/evm/SSAControlFlowGraphBuilder.cpp index bf8cfd92a802..69e9e3052104 100644 --- a/libyul/backends/evm/SSAControlFlowGraphBuilder.cpp +++ b/libyul/backends/evm/SSAControlFlowGraphBuilder.cpp @@ -548,21 +548,22 @@ void SSAControlFlowGraphBuilder::assign(std::vector SSAControlFlowGraphBuilder::visitFunctionCall(FunctionCall const& _call) { bool canContinue = true; - SSACFG::Operation operation = [&](){ - if (BuiltinFunction const* builtin = resolveBuiltinFunction(_call.functionName, m_dialect)) + SSACFG::Operation operation = std::visit(util::GenericVisitor{ + [&](BuiltinName const& _builtinName) { - SSACFG::Operation result{{}, SSACFG::BuiltinCall{_call.debugData, *builtin, _call}, {}}; + auto const& builtin = m_dialect.builtin(_builtinName.handle); + SSACFG::Operation result{{}, SSACFG::BuiltinCall{_call.debugData, builtin, _call}, {}}; for (auto&& [idx, arg]: _call.arguments | ranges::views::enumerate | ranges::views::reverse) - if (!builtin->literalArgument(idx).has_value()) + if (!builtin.literalArgument(idx).has_value()) result.inputs.emplace_back(std::visit(*this, arg)); - for (size_t i = 0; i < builtin->numReturns; ++i) + for (size_t i = 0; i < builtin.numReturns; ++i) result.outputs.emplace_back(m_graph.newVariable(m_currentBlock)); - canContinue = builtin->controlFlowSideEffects.canContinue; + canContinue = builtin.controlFlowSideEffects.canContinue; return result; - } - else + }, + [&](Identifier const& _identifier) { - YulName const functionName{resolveFunctionName(_call.functionName, m_dialect)}; + YulName const& functionName = _identifier.name; Scope::Function const& function = lookupFunction(functionName); auto const* definition = findFunctionDefinition(&function); yulAssert(definition); @@ -574,7 +575,7 @@ std::vector SSAControlFlowGraphBuilder::visitFunctionCall(Funct result.outputs.emplace_back(m_graph.newVariable(m_currentBlock)); return result; } - }(); + }, _call.functionName); auto results = operation.outputs; currentBlock().operations.emplace_back(std::move(operation)); if (!canContinue) diff --git a/libyul/optimiser/CommonSubexpressionEliminator.cpp b/libyul/optimiser/CommonSubexpressionEliminator.cpp index 87a14d259070..1a6f3911a1bb 100644 --- a/libyul/optimiser/CommonSubexpressionEliminator.cpp +++ b/libyul/optimiser/CommonSubexpressionEliminator.cpp @@ -1,4 +1,4 @@ -/*( +/* This file is part of solidity. solidity is free software: you can redistribute it and/or modify diff --git a/libyul/optimiser/DataFlowAnalyzer.cpp b/libyul/optimiser/DataFlowAnalyzer.cpp index 2407781354d0..1aecd6bd4a91 100644 --- a/libyul/optimiser/DataFlowAnalyzer.cpp +++ b/libyul/optimiser/DataFlowAnalyzer.cpp @@ -1,4 +1,4 @@ -/*( +/* This file is part of solidity. solidity is free software: you can redistribute it and/or modify diff --git a/libyul/optimiser/Disambiguator.cpp b/libyul/optimiser/Disambiguator.cpp index 55219f6eae37..343feb0be379 100644 --- a/libyul/optimiser/Disambiguator.cpp +++ b/libyul/optimiser/Disambiguator.cpp @@ -30,15 +30,15 @@ using namespace solidity; using namespace solidity::yul; using namespace solidity::util; -YulName Disambiguator::translateIdentifier(YulName _originalName) +YulName Disambiguator::translateIdentifier(YulName const _originalName) { - if (m_dialect.findBuiltin(_originalName.str()) || m_externallyUsedIdentifiers.count(_originalName)) + if (m_externallyUsedIdentifiers.contains(_originalName)) return _originalName; assertThrow(!m_scopes.empty() && m_scopes.back(), OptimizerException, ""); Scope::Identifier const* id = m_scopes.back()->lookup(_originalName); assertThrow(id, OptimizerException, ""); - if (!m_translations.count(id)) + if (!m_translations.contains(id)) m_translations[id] = m_nameDispenser.newName(_originalName); return m_translations.at(id); } diff --git a/libyul/optimiser/Disambiguator.h b/libyul/optimiser/Disambiguator.h index 36d178b086c1..7ff186f0a8c7 100644 --- a/libyul/optimiser/Disambiguator.h +++ b/libyul/optimiser/Disambiguator.h @@ -56,7 +56,7 @@ class Disambiguator: public ASTCopier void leaveScope(Block const& _block) override; void enterFunction(FunctionDefinition const& _function) override; void leaveFunction(FunctionDefinition const& _function) override; - YulName translateIdentifier(YulName _name) override; + YulName translateIdentifier(YulName _originalName) override; void enterScopeInternal(Scope& _scope); void leaveScopeInternal(Scope& _scope); diff --git a/libyul/optimiser/Metrics.cpp b/libyul/optimiser/Metrics.cpp index 04bfe9a7a06d..5c3a624269d5 100644 --- a/libyul/optimiser/Metrics.cpp +++ b/libyul/optimiser/Metrics.cpp @@ -1,4 +1,4 @@ -/*( +/* This file is part of solidity. solidity is free software: you can redistribute it and/or modify diff --git a/libyul/optimiser/Rematerialiser.cpp b/libyul/optimiser/Rematerialiser.cpp index bfcd9d8f630f..1d3535fdae82 100644 --- a/libyul/optimiser/Rematerialiser.cpp +++ b/libyul/optimiser/Rematerialiser.cpp @@ -1,4 +1,4 @@ -/*( +/* This file is part of solidity. solidity is free software: you can redistribute it and/or modify diff --git a/libyul/optimiser/StackCompressor.cpp b/libyul/optimiser/StackCompressor.cpp index 97d2c054700d..b0be60d63442 100644 --- a/libyul/optimiser/StackCompressor.cpp +++ b/libyul/optimiser/StackCompressor.cpp @@ -1,4 +1,4 @@ -/*( +/* This file is part of solidity. solidity is free software: you can redistribute it and/or modify diff --git a/libyul/optimiser/SyntacticalEquality.cpp b/libyul/optimiser/SyntacticalEquality.cpp index e233b57e9e2d..a032e912be63 100644 --- a/libyul/optimiser/SyntacticalEquality.cpp +++ b/libyul/optimiser/SyntacticalEquality.cpp @@ -1,4 +1,4 @@ -/*( +/* This file is part of solidity. solidity is free software: you can redistribute it and/or modify diff --git a/libyul/optimiser/UnusedPruner.cpp b/libyul/optimiser/UnusedPruner.cpp index 5d50e4599bfd..2f982b164093 100644 --- a/libyul/optimiser/UnusedPruner.cpp +++ b/libyul/optimiser/UnusedPruner.cpp @@ -1,4 +1,4 @@ -/*( +/* This file is part of solidity. solidity is free software: you can redistribute it and/or modify diff --git a/scripts/deps-ppa/static_z3.sh b/scripts/deps-ppa/static_z3.sh deleted file mode 100755 index 140c40c6abb3..000000000000 --- a/scripts/deps-ppa/static_z3.sh +++ /dev/null @@ -1,267 +0,0 @@ -#!/usr/bin/env bash -############################################################################## -## This is used to package .deb packages and upload them to the launchpad -## ppa servers for building. -## -## It will clone the Z3 git from github on the specified version tag, -## create a source archive and push it to the ubuntu ppa servers. -## -## This requires the following entries in /etc/dput.cf: -## -## [cpp-build-deps] -## fqdn = ppa.launchpad.net -## method = ftp -## incoming = ~ethereum/cpp-build-deps -## login = anonymous -## -## To interact with launchpad, you need to set the variables $LAUNCHPAD_EMAIL -## and $LAUNCHPAD_KEYID in the file .release_ppa_auth in the root directory of -## the project to your launchpad email and pgp keyid. -## This could for example look like this: -## -## LAUNCHPAD_EMAIL=your-launchpad-email@ethereum.org -## LAUNCHPAD_KEYID=123ABCFFFFFFFF -## -############################################################################## - -set -e - -packagename=z3-static -version="$1" - -REPO_ROOT="$(dirname "$0")/../.." - -# shellcheck source=/dev/null -source "${REPO_ROOT}/scripts/common.sh" - -[[ $version != "" ]] || fail "Usage: $0 " - -sourcePPAConfig - -# Sanity check -checkDputEntries "\[cpp-build-deps\]" - -DISTRIBUTIONS="jammy noble oracular" - -for distribution in $DISTRIBUTIONS -do -cd /tmp/ -rm -rf "$distribution" -mkdir "$distribution" -cd "$distribution" - -pparepo=cpp-build-deps -ppafilesurl=https://launchpad.net/~ethereum/+archive/ubuntu/${pparepo}/+files - -# Fetch source -git clone --branch "z3-${version}" https://github.com/Z3Prover/z3.git -cd z3 - -debversion="${version}" - -CMAKE_OPTIONS="-DZ3_BUILD_LIBZ3_SHARED=OFF -DCMAKE_BUILD_TYPE=Release" - -# gzip will create different tars all the time and we are not allowed -# to upload the same file twice with different contents, so we only -# create it once. -if [ ! -e "/tmp/${packagename}_${debversion}.orig.tar.gz" ] -then - tar --exclude .git -czf "/tmp/${packagename}_${debversion}.orig.tar.gz" . -fi -cp "/tmp/${packagename}_${debversion}.orig.tar.gz" ../ - -# Create debian package information - -mkdir debian -echo 9 > debian/compat -# TODO: the Z3 packages have different build dependencies -cat < debian/control -Source: z3-static -Section: science -Priority: extra -Maintainer: Daniel Kirchner -Build-Depends: debhelper (>= 9.0.0), - cmake, - g++ (>= 5.0), - git, - libgmp-dev, - dh-python, - python3 -Standards-Version: 3.9.6 -Homepage: https://github.com/Z3Prover/z3 -Vcs-Git: https://github.com/Z3Prover/z3.git -Vcs-Browser: https://github.com/Z3Prover/z3 - -Package: z3-static -Architecture: any -Breaks: z3 -Replaces: z3 -Depends: \${misc:Depends}, \${shlibs:Depends} -Description: theorem prover from Microsoft Research - Z3 is a state-of-the art theorem prover from Microsoft Research. It can be - used to check the satisfiability of logical formulas over one or more - theories. Z3 offers a compelling match for software analysis and verification - tools, since several common software constructs map directly into supported - theories. - . - The Z3 input format is an extension of the one defined by the SMT-LIB 2.0 - standard. - - -Package: libz3-static-dev -Section: libdevel -Architecture: any-amd64 -Breaks: libz3-dev -Replaces: libz3-dev -Multi-Arch: same -Depends: \${shlibs:Depends}, \${misc:Depends} -Description: theorem prover from Microsoft Research - development files (static library) - Z3 is a state-of-the art theorem prover from Microsoft Research. It can be - used to check the satisfiability of logical formulas over one or more - theories. Z3 offers a compelling match for software analysis and verification - tools, since several common software constructs map directly into supported - theories. - . - This package can be used to invoke Z3 via its C++ API. -EOF -cat < debian/rules -#!/usr/bin/make -f -# -*- makefile -*- -# Sample debian/rules that uses debhelper. -# -# This file was originally written by Joey Hess and Craig Small. -# As a special exception, when this file is copied by dh-make into a -# dh-make output file, you may use that output file without restriction. -# This special exception was added by Craig Small in version 0.37 of dh-make. -# -# Modified to make a template file for a multi-binary package with separated -# build-arch and build-indep targets by Bill Allombert 2001 - -# Uncomment this to turn on verbose mode. -export DH_VERBOSE=1 - -# This has to be exported to make some magic below work. -export DH_OPTIONS - - -%: - dh \$@ --buildsystem=cmake - -override_dh_auto_test: - -override_dh_shlibdeps: - dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info - -override_dh_auto_configure: - dh_auto_configure -- ${CMAKE_OPTIONS} - -override_dh_auto_install: - dh_auto_install --destdir debian/tmp -EOF -cat < debian/libz3-static-dev.install -usr/include/* -usr/lib/*/libz3.a -usr/lib/*/cmake/z3/* -EOF -cat < debian/z3-static.install -usr/bin/z3 -EOF -cat < debian/copyright -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: z3 -Source: https://github.com/Z3Prover/z3 - -Files: * -Copyright: Microsoft Corporation -License: Expat - Permission is hereby granted, free of charge, to any person obtaining a copy of - this software and associated documentation files (the "Software"), to deal in - the Software without restriction, including without limitation the rights to - use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - of the Software, and to permit persons to whom the Software is furnished to do - so, subject to the following conditions: - . - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - . - THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - -Files: debian/* -Copyright: 2019 Ethereum -License: GPL-3.0+ -This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - . - This package is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - . - You should have received a copy of the GNU General Public License - along with this program. If not, see . - . - On Debian systems, the complete text of the GNU General - Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". -EOF -cat < debian/changelog -z3-static (0.0.1-1ubuntu0) saucy; urgency=low - - * Initial release. - - -- Daniel Mon, 03 Jun 2019 14:50:20 +0000 -EOF -mkdir debian/source -echo "3.0 (quilt)" > debian/source/format -chmod +x debian/rules - -versionsuffix=1ubuntu0~${distribution} -EMAIL="$LAUNCHPAD_EMAIL" dch -v "1:${debversion}-${versionsuffix}" "build of ${version}" - -# build source package -# If packages is rejected because original source is already present, add -# -sd to remove it from the .changes file -# -d disables the build dependencies check -debuild -S -d -sa -us -uc - -# prepare .changes file for Launchpad -sed -i -e "s/UNRELEASED/${distribution}/" -e s/urgency=medium/urgency=low/ ../*.changes - -# check if ubuntu already has the source tarball -( -cd .. -orig="${packagename}_${debversion}.orig.tar.gz" -# shellcheck disable=SC2012 -orig_size=$(ls -l "$orig" | cut -d ' ' -f 5) -orig_sha1=$(sha1sum "$orig" | cut -d ' ' -f 1) -orig_sha256=$(sha256sum "$orig" | cut -d ' ' -f 1) -orig_md5=$(md5sum "$orig" | cut -d ' ' -f 1) - -if wget --quiet -O "$orig-tmp" "$ppafilesurl/$orig" -then - echo "[WARN] Original tarball found in Ubuntu archive, using it instead" - mv "${orig}-tmp" "$orig" - # shellcheck disable=SC2012 - new_size=$(ls -l ./*.orig.tar.gz | cut -d ' ' -f 5) - new_sha1=$(sha1sum "$orig" | cut -d ' ' -f 1) - new_sha256=$(sha256sum "$orig" | cut -d ' ' -f 1) - new_md5=$(md5sum "$orig" | cut -d ' ' -f 1) - sed -i -e "s,$orig_sha1,$new_sha1,g" -e "s,$orig_sha256,$new_sha256,g" -e "s,$orig_size,$new_size,g" -e "s,$orig_md5,$new_md5,g" ./*.dsc - sed -i -e "s,$orig_sha1,$new_sha1,g" -e "s,$orig_sha256,$new_sha256,g" -e "s,$orig_size,$new_size,g" -e "s,$orig_md5,$new_md5,g" ./*.changes -fi -) - -# sign the package -debsign --re-sign -k "${LAUNCHPAD_KEYID}" "../${packagename}_${debversion}-${versionsuffix}_source.changes" - -# upload -dput "${pparepo}" "../${packagename}_${debversion}-${versionsuffix}_source.changes" - -done diff --git a/scripts/docker/buildpack-deps/README.md b/scripts/docker/buildpack-deps/README.md index 9cfcafd4bf27..6149165c8941 100644 --- a/scripts/docker/buildpack-deps/README.md +++ b/scripts/docker/buildpack-deps/README.md @@ -6,7 +6,7 @@ The `buildpack-deps` docker images are used to compile and test solidity within The creation of the images is triggered by a single workflow, defined in `.github/workflows/buildpack-deps.yml`. For each resulting `buildpack-deps` docker image a strategy is defined in the workflow file - the image variant. -The workflow gets triggered, if any Dockerfile defined in `scripts/docker/buildpack-deps/Dockerfile.*` were changed +The workflow gets triggered, if any Dockerfile defined in `scripts/docker/buildpack-deps/Dockerfile.*` was changed within the PR. ### Versioning diff --git a/scripts/externalTests/common.sh b/scripts/externalTests/common.sh index 2983b30c296a..26f27b07baca 100644 --- a/scripts/externalTests/common.sh +++ b/scripts/externalTests/common.sh @@ -22,7 +22,7 @@ set -e # Requires $REPO_ROOT to be defined and "${REPO_ROOT}/scripts/common.sh" to be included before. -CURRENT_EVM_VERSION=cancun +CURRENT_EVM_VERSION=prague AVAILABLE_PRESETS=( legacy-no-optimize diff --git a/scripts/externalTests/runners/base.py b/scripts/externalTests/runners/base.py index cd94fab6b80b..20ba67ddb4a4 100644 --- a/scripts/externalTests/runners/base.py +++ b/scripts/externalTests/runners/base.py @@ -41,7 +41,7 @@ from test_helpers import settings_from_preset from test_helpers import SettingsPreset -CURRENT_EVM_VERSION: str = "cancun" +CURRENT_EVM_VERSION: str = "prague" @dataclass class TestConfig: @@ -74,7 +74,7 @@ def __init__(self, argv, config: TestConfig): def setup_solc(self) -> str: if self.solc_binary_type == "solcjs": - # TODO: add support to solc-js + # TODO: add support for solc-js raise NotImplementedError() print("Setting up solc...") solc_version_output = subprocess.check_output( diff --git a/scripts/release_ppa.sh b/scripts/release_ppa.sh index cf8df3d6c47d..a8d89040f2dc 100755 --- a/scripts/release_ppa.sh +++ b/scripts/release_ppa.sh @@ -68,7 +68,7 @@ packagename=solc # This needs to be a still active release static_build_distribution=noble -DISTRIBUTIONS="jammy noble oracular" +DISTRIBUTIONS="jammy noble oracular plucky" if is_release then @@ -92,7 +92,6 @@ cd "$distribution" if [ "$distribution" = STATIC ] then pparepo=ethereum-static - SMTDEPENDENCY="" CMAKE_OPTIONS="-DSOLC_LINK_STATIC=On -DCMAKE_EXE_LINKER_FLAGS=-static" else if is_release @@ -101,20 +100,6 @@ else else pparepo=ethereum-dev fi - if [ "$distribution" = focal ] - then - SMTDEPENDENCY="libz3-static-dev, - libcvc4-dev, - " - elif [ "$distribution" = disco ] - then - SMTDEPENDENCY="libz3-static-dev, - libcvc4-dev, - " - else - SMTDEPENDENCY="libz3-static-dev, - " - fi CMAKE_OPTIONS="" fi ppafilesurl=https://launchpad.net/~ethereum/+archive/ubuntu/${pparepo}/+files @@ -156,7 +141,7 @@ Source: solc Section: science Priority: extra Maintainer: Christian (Buildserver key) -Build-Depends: ${SMTDEPENDENCY}debhelper (>= 9.0.0), +Build-Depends: debhelper (>= 9.0.0), cmake, g++ (>= 5.0), git, diff --git a/scripts/tests.sh b/scripts/tests.sh index 3d2849369eca..5ff962be6506 100755 --- a/scripts/tests.sh +++ b/scripts/tests.sh @@ -115,7 +115,7 @@ do for vm in $EVM_VERSIONS do FORCE_ABIV1_RUNS="no" - if [[ "$vm" == "cancun" ]] + if [[ "$vm" == "prague" ]] then FORCE_ABIV1_RUNS="no yes" # run both in paris fi diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 62ef14b30bfb..211606363bc4 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -51,8 +51,12 @@ detect_stray_source_files("${libsolutil_sources}" "libsolutil/") set(libevmasm_sources libevmasm/Assembler.cpp + libevmasm/EVMAssemblyTest.cpp + libevmasm/EVMAssemblyTest.h libevmasm/GasMeter.cpp libevmasm/Optimiser.cpp + libevmasm/PlainAssemblyParser.cpp + libevmasm/PlainAssemblyParser.h ) detect_stray_source_files("${libevmasm_sources}" "libevmasm/") diff --git a/test/Common.cpp b/test/Common.cpp index 296dcd704e6b..1d11d5a59d63 100644 --- a/test/Common.cpp +++ b/test/Common.cpp @@ -307,6 +307,13 @@ boost::unit_test::precondition::predicate_t nonEOF() }; } +boost::unit_test::precondition::predicate_t onEOF() +{ + return [](boost::unit_test::test_unit_id) { + return solidity::test::CommonOptions::get().eofVersion().has_value(); + }; +} + boost::unit_test::precondition::predicate_t minEVMVersionCheck(langutil::EVMVersion _minEVMVersion) { return [_minEVMVersion](boost::unit_test::test_unit_id) { diff --git a/test/Common.h b/test/Common.h index 27c2081346fc..e331c497a47f 100644 --- a/test/Common.h +++ b/test/Common.h @@ -116,6 +116,10 @@ boost::unit_test::precondition::predicate_t minEVMVersionCheck(langutil::EVMVers /// @return A predicate (function) that can be passed into @a boost::unit_test::precondition(). boost::unit_test::precondition::predicate_t nonEOF(); +/// Helper that can be used to skip tests when the legacy bytecode is not supported by the test case. +/// @return A predicate (function) that can be passed into @a boost::unit_test::precondition(). +boost::unit_test::precondition::predicate_t onEOF(); + bool loadVMs(CommonOptions const& _options); /** diff --git a/test/InteractiveTests.h b/test/InteractiveTests.h index e043fcdbe676..107a6aae0bef 100644 --- a/test/InteractiveTests.h +++ b/test/InteractiveTests.h @@ -42,6 +42,8 @@ #include #include +#include + #include namespace solidity::frontend::test @@ -64,6 +66,7 @@ struct Testsuite Testsuite const g_interactiveTestsuites[] = { /* Title Path Subpath SMT NeedsVM Creator function */ + {"EVM Assembly", "libevmasm", "evmAssemblyTests", false, false, &evmasm::test::EVMAssemblyTest::create}, {"Yul Optimizer", "libyul", "yulOptimizerTests", false, false, &yul::test::YulOptimizerTest::create}, {"Yul Interpreter", "libyul", "yulInterpreterTests", false, false, &yul::test::YulInterpreterTest::create}, {"Yul Object Compiler", "libyul", "objectCompiler", false, false, &yul::test::ObjectCompilerTest::create}, diff --git a/test/TestCase.cpp b/test/TestCase.cpp index da47c26fde90..efc455ff6ff1 100644 --- a/test/TestCase.cpp +++ b/test/TestCase.cpp @@ -51,9 +51,10 @@ void TestCase::printUpdatedSettings(std::ostream& _stream, std::string const& _l bool TestCase::isTestFilename(boost::filesystem::path const& _filename) { std::string extension = _filename.extension().string(); - return (extension == ".sol" || extension == ".yul" || extension == ".stack") && - !boost::starts_with(_filename.string(), "~") && - !boost::starts_with(_filename.string(), "."); + // NOTE: .asmjson rather than .json because JSON files that do not represent test cases exist in some test dirs. + return (extension == ".sol" || extension == ".yul" || extension == ".asm" || extension == ".asmjson" || extension == ".stack") && + !_filename.string().starts_with('~') && + !_filename.string().starts_with('.'); } bool TestCase::shouldRun() diff --git a/test/TestCaseReader.h b/test/TestCaseReader.h index d1ef95be3c2c..5830e97f3666 100644 --- a/test/TestCaseReader.h +++ b/test/TestCaseReader.h @@ -59,6 +59,7 @@ class TestCaseReader std::size_t lineNumber() const { return m_lineNumber; } std::map const& settings() const { return m_settings; } std::ifstream& stream() { return m_fileStream; } + boost::filesystem::path const& fileName() const { return m_fileName; } std::string simpleExpectations(); diff --git a/test/benchmarks/external.sh b/test/benchmarks/external.sh index b003f0ba18d2..7ad3279ae360 100755 --- a/test/benchmarks/external.sh +++ b/test/benchmarks/external.sh @@ -42,9 +42,10 @@ source "${repo_root}/scripts/common.sh" # shellcheck source=scripts/common_cmdline.sh source "${repo_root}/scripts/common_cmdline.sh" -(( $# <= 1 )) || fail "Too many arguments. Usage: external.sh []" +(( $# <= 2 )) || fail "Too many arguments. Usage: external.sh [] []" solc="${1:-${SOLIDITY_BUILD_DIR}/solc/solc}" +num_repeats="${2:-1}" command_available "$solc" --version command_available "$(type -P time)" --version @@ -65,10 +66,10 @@ function benchmark_project { > /dev/null \ 2> "../stderr-${project}-${pipeline}.log" || true - printf '| %-21s | %8s | %6d s | %9d MiB | %9d |\n' \ + printf '| %-21s | %8s | %6.2f s | %9d MiB | %9d |\n' \ "$project" \ "$pipeline" \ - "$(jq '(.user + .sys) | round' "$time_file")" \ + "$(jq '(.user + .sys) * 100 | round / 100' "$time_file")" \ "$(jq '.mem / 1024 | round' "$time_file")" \ "$(jq '.exit' "$time_file")" cd .. @@ -96,8 +97,12 @@ echo "| File | Pipeline | Time | Memory (peak) | Exit code echo "|-----------------------|----------|---------:|--------------:|----------:|" for project in "${benchmarks[@]}"; do - benchmark_project legacy "$project" - benchmark_project ir "$project" + for ((i=0; i /dev/null; then local temporary_file temporary_file=$(mktemp -t cmdline-ethdebug-XXXXXX.tmp) - if [[ -e ${tdir}/strip-ethdebug ]]; then + if [[ -e strip-ethdebug ]]; then jq --indent 4 ' (. | .. | objects | select(has("ethdebug"))) |= (.ethdebug = "") ' "$stdout_path" > "$temporary_file" @@ -350,9 +350,11 @@ test_solc_behaviour "${0}" "ctx:=/some/remapping/target" "" "" 1 "" "Error: Inva printTask "Running general commandline tests..." ( - cd "$REPO_ROOT"/test/cmdlineTests/ for tdir in "${selected_tests[@]}" do + # go back to the test root dir + cd "$REPO_ROOT"/test/cmdlineTests/ + if ! [[ -d $tdir ]] then fail "Test directory not found: $tdir" @@ -377,10 +379,13 @@ printTask "Running general commandline tests..." fi fi - scriptFiles="$(ls -1 "${tdir}/test."* 2> /dev/null || true)" + # jump into test dir + cd "${tdir}" + + scriptFiles="$(ls -1 "test."* 2> /dev/null || true)" scriptCount="$(echo "${scriptFiles}" | wc -w)" - inputFiles="$(ls -1 "${tdir}/input."* 2> /dev/null || true)" + inputFiles="$(ls -1 "input."* 2> /dev/null || true)" inputCount="$(echo "${inputFiles}" | wc -w)" (( inputCount <= 1 )) || fail "Ambiguous input. Found input files in multiple formats:"$'\n'"${inputFiles}" (( scriptCount <= 1 )) || fail "Ambiguous input. Found script files in multiple formats:"$'\n'"${scriptFiles}" @@ -388,7 +393,7 @@ printTask "Running general commandline tests..." if (( scriptCount == 1 )) then - if ! "$scriptFiles" + if ! "./$scriptFiles" then fail "Test script ${scriptFiles} failed." fi @@ -399,38 +404,38 @@ printTask "Running general commandline tests..." # Use printf to get rid of the trailing newline inputFile=$(printf "%s" "${inputFiles}") - if [ "${inputFile}" = "${tdir}/input.json" ] + if [ "${inputFile}" = "input.json" ] then - ! [ -e "${tdir}/stdin" ] || fail "Found a file called 'stdin' but redirecting standard input in JSON mode is not allowed." + ! [ -e "stdin" ] || fail "Found a file called 'stdin' but redirecting standard input in JSON mode is not allowed." stdin="${inputFile}" inputFile="" - stdout="$(cat "${tdir}/output.json" 2>/dev/null || true)" - stdoutExpectationFile="${tdir}/output.json" + stdout="$(cat "output.json" 2>/dev/null || true)" + stdoutExpectationFile="output.json" prettyPrintFlags="" - if [[ ! -f "${tdir}/no-pretty-print" ]] + if [[ ! -f "no-pretty-print" ]] then prettyPrintFlags="--pretty-json --json-indent 4" fi - command_args="--standard-json ${prettyPrintFlags} "$(cat "${tdir}/args" 2>/dev/null || true) + command_args="--standard-json ${prettyPrintFlags} "$(cat "args" 2>/dev/null || true) else - if [ -e "${tdir}/stdin" ] + if [ -e "stdin" ] then - stdin="${tdir}/stdin" - [ -f "${tdir}/stdin" ] || fail "'stdin' is not a regular file." + stdin="stdin" + [ -f "stdin" ] || fail "'stdin' is not a regular file." else stdin="" fi - stdout="$(cat "${tdir}/output" 2>/dev/null || true)" - stdoutExpectationFile="${tdir}/output" - command_args=$(cat "${tdir}/args" 2>/dev/null || true) + stdout="$(cat "output" 2>/dev/null || true)" + stdoutExpectationFile="output" + command_args=$(cat "args" 2>/dev/null || true) fi - exitCodeExpectationFile="${tdir}/exit" + exitCodeExpectationFile="exit" exitCode=$(cat "$exitCodeExpectationFile" 2>/dev/null || true) - err="$(cat "${tdir}/err" 2>/dev/null || true)" - stderrExpectationFile="${tdir}/err" + err="$(cat "err" 2>/dev/null || true)" + stderrExpectationFile="err" test_solc_behaviour "$inputFile" \ "$command_args" \ "$stdin" \ diff --git a/test/cmdlineTests/abi_via_ir/output b/test/cmdlineTests/abi_via_ir/output index 56ba01a4a248..3b3fec68d93b 100644 --- a/test/cmdlineTests/abi_via_ir/output +++ b/test/cmdlineTests/abi_via_ir/output @@ -1,5 +1,5 @@ -======= abi_via_ir/input.sol:C ======= +======= input.sol:C ======= Contract JSON ABI [ { @@ -101,7 +101,7 @@ Contract JSON ABI } ] -======= abi_via_ir/input.sol:L ======= +======= input.sol:L ======= Contract JSON ABI [ { diff --git a/test/cmdlineTests/abiencoderv2_no_warning/output b/test/cmdlineTests/abiencoderv2_no_warning/output index 33f8d2e1fa8f..5b99567cc0fb 100644 --- a/test/cmdlineTests/abiencoderv2_no_warning/output +++ b/test/cmdlineTests/abiencoderv2_no_warning/output @@ -1,4 +1,4 @@ -======= abiencoderv2_no_warning/input.sol:C ======= +======= input.sol:C ======= Function signatures: 3fc03eeb: f((uint256)) diff --git a/test/cmdlineTests/asm_json/output b/test/cmdlineTests/asm_json/output index 820eda6ec4a6..a148e42f0ca7 100644 --- a/test/cmdlineTests/asm_json/output +++ b/test/cmdlineTests/asm_json/output @@ -1,5 +1,5 @@ -======= asm_json/input.sol:C ======= +======= input.sol:C ======= EVM assembly: { ".code": [ @@ -1573,7 +1573,7 @@ EVM assembly: } }, "sourceList": [ - "asm_json/input.sol", + "input.sol", "#utility.yul" ] } diff --git a/test/cmdlineTests/asm_json_no_pretty_print/output b/test/cmdlineTests/asm_json_no_pretty_print/output index 8fce2f4827d9..b2382e1866b5 100644 --- a/test/cmdlineTests/asm_json_no_pretty_print/output +++ b/test/cmdlineTests/asm_json_no_pretty_print/output @@ -1,4 +1,4 @@ -======= asm_json_no_pretty_print/input.sol:C ======= +======= input.sol:C ======= EVM assembly: -{".code":[{"begin":60,"end":160,"name":"PUSH","source":0,"value":"80"},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"40"},{"begin":60,"end":160,"name":"MSTORE","source":0},{"begin":60,"end":160,"name":"CALLVALUE","source":0},{"begin":60,"end":160,"name":"DUP1","source":0},{"begin":60,"end":160,"name":"ISZERO","source":0},{"begin":60,"end":160,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":60,"end":160,"name":"JUMPI","source":0},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"0"},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"0"},{"begin":60,"end":160,"name":"REVERT","source":0},{"begin":60,"end":160,"name":"tag","source":0,"value":"1"},{"begin":60,"end":160,"name":"JUMPDEST","source":0},{"begin":60,"end":160,"name":"POP","source":0},{"begin":60,"end":160,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":60,"end":160,"name":"DUP1","source":0},{"begin":60,"end":160,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"0"},{"begin":60,"end":160,"name":"CODECOPY","source":0},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"0"},{"begin":60,"end":160,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"",".code":[{"begin":60,"end":160,"name":"PUSH","source":0,"value":"80"},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"40"},{"begin":60,"end":160,"name":"MSTORE","source":0},{"begin":60,"end":160,"name":"CALLVALUE","source":0},{"begin":60,"end":160,"name":"DUP1","source":0},{"begin":60,"end":160,"name":"ISZERO","source":0},{"begin":60,"end":160,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":60,"end":160,"name":"JUMPI","source":0},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"0"},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"0"},{"begin":60,"end":160,"name":"REVERT","source":0},{"begin":60,"end":160,"name":"tag","source":0,"value":"1"},{"begin":60,"end":160,"name":"JUMPDEST","source":0},{"begin":60,"end":160,"name":"POP","source":0},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"4"},{"begin":60,"end":160,"name":"CALLDATASIZE","source":0},{"begin":60,"end":160,"name":"LT","source":0},{"begin":60,"end":160,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":60,"end":160,"name":"JUMPI","source":0},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"0"},{"begin":60,"end":160,"name":"CALLDATALOAD","source":0},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"E0"},{"begin":60,"end":160,"name":"SHR","source":0},{"begin":60,"end":160,"name":"DUP1","source":0},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"B3DE648B"},{"begin":60,"end":160,"name":"EQ","source":0},{"begin":60,"end":160,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":60,"end":160,"name":"JUMPI","source":0},{"begin":60,"end":160,"name":"tag","source":0,"value":"2"},{"begin":60,"end":160,"name":"JUMPDEST","source":0},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"0"},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"0"},{"begin":60,"end":160,"name":"REVERT","source":0},{"begin":77,"end":158,"name":"tag","source":0,"value":"3"},{"begin":77,"end":158,"name":"JUMPDEST","source":0},{"begin":77,"end":158,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":77,"end":158,"name":"PUSH","source":0,"value":"4"},{"begin":77,"end":158,"name":"DUP1","source":0},{"begin":77,"end":158,"name":"CALLDATASIZE","source":0},{"begin":77,"end":158,"name":"SUB","source":0},{"begin":77,"end":158,"name":"DUP2","source":0},{"begin":77,"end":158,"name":"ADD","source":0},{"begin":77,"end":158,"name":"SWAP1","source":0},{"begin":77,"end":158,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":77,"end":158,"name":"SWAP2","source":0},{"begin":77,"end":158,"name":"SWAP1","source":0},{"begin":77,"end":158,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":77,"end":158,"jumpType":"[in]","name":"JUMP","source":0},{"begin":77,"end":158,"name":"tag","source":0,"value":"5"},{"begin":77,"end":158,"name":"JUMPDEST","source":0},{"begin":77,"end":158,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":77,"end":158,"jumpType":"[in]","name":"JUMP","source":0},{"begin":77,"end":158,"name":"tag","source":0,"value":"4"},{"begin":77,"end":158,"name":"JUMPDEST","source":0},{"begin":77,"end":158,"name":"STOP","source":0},{"begin":77,"end":158,"name":"tag","source":0,"value":"7"},{"begin":77,"end":158,"name":"JUMPDEST","source":0},{"begin":123,"end":125,"name":"PUSH","source":0,"value":"2A"},{"begin":118,"end":125,"name":"DUP2","source":0},{"begin":118,"end":125,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":118,"end":125,"name":"SWAP2","source":0},{"begin":118,"end":125,"name":"SWAP1","source":0},{"begin":118,"end":125,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":118,"end":125,"jumpType":"[in]","name":"JUMP","source":0},{"begin":118,"end":125,"name":"tag","source":0,"value":"9"},{"begin":118,"end":125,"name":"JUMPDEST","source":0},{"begin":118,"end":125,"name":"SWAP1","source":0},{"begin":118,"end":125,"name":"POP","source":0},{"begin":147,"end":150,"name":"PUSH","source":0,"value":"64"},{"begin":143,"end":144,"name":"DUP2","source":0},{"begin":143,"end":150,"name":"GT","source":0},{"begin":135,"end":151,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":135,"end":151,"name":"JUMPI","source":0},{"begin":135,"end":151,"name":"PUSH","source":0,"value":"0"},{"begin":135,"end":151,"name":"PUSH","source":0,"value":"0"},{"begin":135,"end":151,"name":"REVERT","source":0},{"begin":135,"end":151,"name":"tag","source":0,"value":"11"},{"begin":135,"end":151,"name":"JUMPDEST","source":0},{"begin":77,"end":158,"name":"POP","source":0},{"begin":77,"end":158,"jumpType":"[out]","name":"JUMP","source":0},{"begin":88,"end":205,"name":"tag","source":1,"value":"13"},{"begin":88,"end":205,"name":"JUMPDEST","source":1},{"begin":197,"end":198,"name":"PUSH","source":1,"value":"0"},{"begin":194,"end":195,"name":"PUSH","source":1,"value":"0"},{"begin":187,"end":199,"name":"REVERT","source":1},{"begin":334,"end":411,"name":"tag","source":1,"value":"15"},{"begin":334,"end":411,"name":"JUMPDEST","source":1},{"begin":371,"end":378,"name":"PUSH","source":1,"value":"0"},{"begin":400,"end":405,"name":"DUP2","source":1},{"begin":389,"end":405,"name":"SWAP1","source":1},{"begin":389,"end":405,"name":"POP","source":1},{"begin":334,"end":411,"name":"SWAP2","source":1},{"begin":334,"end":411,"name":"SWAP1","source":1},{"begin":334,"end":411,"name":"POP","source":1},{"begin":334,"end":411,"jumpType":"[out]","name":"JUMP","source":1},{"begin":417,"end":539,"name":"tag","source":1,"value":"16"},{"begin":417,"end":539,"name":"JUMPDEST","source":1},{"begin":490,"end":514,"name":"PUSH [tag]","source":1,"value":"25"},{"begin":508,"end":513,"name":"DUP2","source":1},{"begin":490,"end":514,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":490,"end":514,"jumpType":"[in]","name":"JUMP","source":1},{"begin":490,"end":514,"name":"tag","source":1,"value":"25"},{"begin":490,"end":514,"name":"JUMPDEST","source":1},{"begin":483,"end":488,"name":"DUP2","source":1},{"begin":480,"end":515,"name":"EQ","source":1},{"begin":470,"end":533,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":470,"end":533,"name":"JUMPI","source":1},{"begin":529,"end":530,"name":"PUSH","source":1,"value":"0"},{"begin":526,"end":527,"name":"PUSH","source":1,"value":"0"},{"begin":519,"end":531,"name":"REVERT","source":1},{"begin":470,"end":533,"name":"tag","source":1,"value":"26"},{"begin":470,"end":533,"name":"JUMPDEST","source":1},{"begin":417,"end":539,"name":"POP","source":1},{"begin":417,"end":539,"jumpType":"[out]","name":"JUMP","source":1},{"begin":545,"end":684,"name":"tag","source":1,"value":"17"},{"begin":545,"end":684,"name":"JUMPDEST","source":1},{"begin":591,"end":596,"name":"PUSH","source":1,"value":"0"},{"begin":629,"end":635,"name":"DUP2","source":1},{"begin":616,"end":636,"name":"CALLDATALOAD","source":1},{"begin":607,"end":636,"name":"SWAP1","source":1},{"begin":607,"end":636,"name":"POP","source":1},{"begin":645,"end":678,"name":"PUSH [tag]","source":1,"value":"28"},{"begin":672,"end":677,"name":"DUP2","source":1},{"begin":645,"end":678,"name":"PUSH [tag]","source":1,"value":"16"},{"begin":645,"end":678,"jumpType":"[in]","name":"JUMP","source":1},{"begin":645,"end":678,"name":"tag","source":1,"value":"28"},{"begin":645,"end":678,"name":"JUMPDEST","source":1},{"begin":545,"end":684,"name":"SWAP3","source":1},{"begin":545,"end":684,"name":"SWAP2","source":1},{"begin":545,"end":684,"name":"POP","source":1},{"begin":545,"end":684,"name":"POP","source":1},{"begin":545,"end":684,"jumpType":"[out]","name":"JUMP","source":1},{"begin":690,"end":1019,"name":"tag","source":1,"value":"6"},{"begin":690,"end":1019,"name":"JUMPDEST","source":1},{"begin":749,"end":755,"name":"PUSH","source":1,"value":"0"},{"begin":798,"end":800,"name":"PUSH","source":1,"value":"20"},{"begin":786,"end":795,"name":"DUP3","source":1},{"begin":777,"end":784,"name":"DUP5","source":1},{"begin":773,"end":796,"name":"SUB","source":1},{"begin":769,"end":801,"name":"SLT","source":1},{"begin":766,"end":885,"name":"ISZERO","source":1},{"begin":766,"end":885,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":766,"end":885,"name":"JUMPI","source":1},{"begin":804,"end":883,"name":"PUSH [tag]","source":1,"value":"31"},{"begin":804,"end":883,"name":"PUSH [tag]","source":1,"value":"13"},{"begin":804,"end":883,"jumpType":"[in]","name":"JUMP","source":1},{"begin":804,"end":883,"name":"tag","source":1,"value":"31"},{"begin":804,"end":883,"name":"JUMPDEST","source":1},{"begin":766,"end":885,"name":"tag","source":1,"value":"30"},{"begin":766,"end":885,"name":"JUMPDEST","source":1},{"begin":924,"end":925,"name":"PUSH","source":1,"value":"0"},{"begin":949,"end":1002,"name":"PUSH [tag]","source":1,"value":"32"},{"begin":994,"end":1001,"name":"DUP5","source":1},{"begin":985,"end":991,"name":"DUP3","source":1},{"begin":974,"end":983,"name":"DUP6","source":1},{"begin":970,"end":992,"name":"ADD","source":1},{"begin":949,"end":1002,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":949,"end":1002,"jumpType":"[in]","name":"JUMP","source":1},{"begin":949,"end":1002,"name":"tag","source":1,"value":"32"},{"begin":949,"end":1002,"name":"JUMPDEST","source":1},{"begin":939,"end":1002,"name":"SWAP2","source":1},{"begin":939,"end":1002,"name":"POP","source":1},{"begin":895,"end":1012,"name":"POP","source":1},{"begin":690,"end":1019,"name":"SWAP3","source":1},{"begin":690,"end":1019,"name":"SWAP2","source":1},{"begin":690,"end":1019,"name":"POP","source":1},{"begin":690,"end":1019,"name":"POP","source":1},{"begin":690,"end":1019,"jumpType":"[out]","name":"JUMP","source":1},{"begin":1025,"end":1205,"name":"tag","source":1,"value":"18"},{"begin":1025,"end":1205,"name":"JUMPDEST","source":1},{"begin":1073,"end":1150,"name":"PUSH","source":1,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":1070,"end":1071,"name":"PUSH","source":1,"value":"0"},{"begin":1063,"end":1151,"name":"MSTORE","source":1},{"begin":1170,"end":1174,"name":"PUSH","source":1,"value":"11"},{"begin":1167,"end":1168,"name":"PUSH","source":1,"value":"4"},{"begin":1160,"end":1175,"name":"MSTORE","source":1},{"begin":1194,"end":1198,"name":"PUSH","source":1,"value":"24"},{"begin":1191,"end":1192,"name":"PUSH","source":1,"value":"0"},{"begin":1184,"end":1199,"name":"REVERT","source":1},{"begin":1211,"end":1402,"name":"tag","source":1,"value":"10"},{"begin":1211,"end":1402,"name":"JUMPDEST","source":1},{"begin":1251,"end":1254,"name":"PUSH","source":1,"value":"0"},{"begin":1270,"end":1290,"name":"PUSH [tag]","source":1,"value":"35"},{"begin":1288,"end":1289,"name":"DUP3","source":1},{"begin":1270,"end":1290,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":1270,"end":1290,"jumpType":"[in]","name":"JUMP","source":1},{"begin":1270,"end":1290,"name":"tag","source":1,"value":"35"},{"begin":1270,"end":1290,"name":"JUMPDEST","source":1},{"begin":1265,"end":1290,"name":"SWAP2","source":1},{"begin":1265,"end":1290,"name":"POP","source":1},{"begin":1304,"end":1324,"name":"PUSH [tag]","source":1,"value":"36"},{"begin":1322,"end":1323,"name":"DUP4","source":1},{"begin":1304,"end":1324,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":1304,"end":1324,"jumpType":"[in]","name":"JUMP","source":1},{"begin":1304,"end":1324,"name":"tag","source":1,"value":"36"},{"begin":1304,"end":1324,"name":"JUMPDEST","source":1},{"begin":1299,"end":1324,"name":"SWAP3","source":1},{"begin":1299,"end":1324,"name":"POP","source":1},{"begin":1347,"end":1348,"name":"DUP3","source":1},{"begin":1344,"end":1345,"name":"DUP3","source":1},{"begin":1340,"end":1349,"name":"ADD","source":1},{"begin":1333,"end":1349,"name":"SWAP1","source":1},{"begin":1333,"end":1349,"name":"POP","source":1},{"begin":1368,"end":1371,"name":"DUP1","source":1},{"begin":1365,"end":1366,"name":"DUP3","source":1},{"begin":1362,"end":1372,"name":"GT","source":1},{"begin":1359,"end":1395,"name":"ISZERO","source":1},{"begin":1359,"end":1395,"name":"PUSH [tag]","source":1,"value":"37"},{"begin":1359,"end":1395,"name":"JUMPI","source":1},{"begin":1375,"end":1393,"name":"PUSH [tag]","source":1,"value":"38"},{"begin":1375,"end":1393,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":1375,"end":1393,"jumpType":"[in]","name":"JUMP","source":1},{"begin":1375,"end":1393,"name":"tag","source":1,"value":"38"},{"begin":1375,"end":1393,"name":"JUMPDEST","source":1},{"begin":1359,"end":1395,"name":"tag","source":1,"value":"37"},{"begin":1359,"end":1395,"name":"JUMPDEST","source":1},{"begin":1211,"end":1402,"name":"SWAP3","source":1},{"begin":1211,"end":1402,"name":"SWAP2","source":1},{"begin":1211,"end":1402,"name":"POP","source":1},{"begin":1211,"end":1402,"name":"POP","source":1},{"begin":1211,"end":1402,"jumpType":"[out]","name":"JUMP","source":1}]}},"sourceList":["asm_json_no_pretty_print/input.sol","#utility.yul"]} +{".code":[{"begin":60,"end":160,"name":"PUSH","source":0,"value":"80"},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"40"},{"begin":60,"end":160,"name":"MSTORE","source":0},{"begin":60,"end":160,"name":"CALLVALUE","source":0},{"begin":60,"end":160,"name":"DUP1","source":0},{"begin":60,"end":160,"name":"ISZERO","source":0},{"begin":60,"end":160,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":60,"end":160,"name":"JUMPI","source":0},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"0"},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"0"},{"begin":60,"end":160,"name":"REVERT","source":0},{"begin":60,"end":160,"name":"tag","source":0,"value":"1"},{"begin":60,"end":160,"name":"JUMPDEST","source":0},{"begin":60,"end":160,"name":"POP","source":0},{"begin":60,"end":160,"name":"PUSH #[$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":60,"end":160,"name":"DUP1","source":0},{"begin":60,"end":160,"name":"PUSH [$]","source":0,"value":"0000000000000000000000000000000000000000000000000000000000000000"},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"0"},{"begin":60,"end":160,"name":"CODECOPY","source":0},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"0"},{"begin":60,"end":160,"name":"RETURN","source":0}],".data":{"0":{".auxdata":"",".code":[{"begin":60,"end":160,"name":"PUSH","source":0,"value":"80"},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"40"},{"begin":60,"end":160,"name":"MSTORE","source":0},{"begin":60,"end":160,"name":"CALLVALUE","source":0},{"begin":60,"end":160,"name":"DUP1","source":0},{"begin":60,"end":160,"name":"ISZERO","source":0},{"begin":60,"end":160,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":60,"end":160,"name":"JUMPI","source":0},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"0"},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"0"},{"begin":60,"end":160,"name":"REVERT","source":0},{"begin":60,"end":160,"name":"tag","source":0,"value":"1"},{"begin":60,"end":160,"name":"JUMPDEST","source":0},{"begin":60,"end":160,"name":"POP","source":0},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"4"},{"begin":60,"end":160,"name":"CALLDATASIZE","source":0},{"begin":60,"end":160,"name":"LT","source":0},{"begin":60,"end":160,"name":"PUSH [tag]","source":0,"value":"2"},{"begin":60,"end":160,"name":"JUMPI","source":0},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"0"},{"begin":60,"end":160,"name":"CALLDATALOAD","source":0},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"E0"},{"begin":60,"end":160,"name":"SHR","source":0},{"begin":60,"end":160,"name":"DUP1","source":0},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"B3DE648B"},{"begin":60,"end":160,"name":"EQ","source":0},{"begin":60,"end":160,"name":"PUSH [tag]","source":0,"value":"3"},{"begin":60,"end":160,"name":"JUMPI","source":0},{"begin":60,"end":160,"name":"tag","source":0,"value":"2"},{"begin":60,"end":160,"name":"JUMPDEST","source":0},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"0"},{"begin":60,"end":160,"name":"PUSH","source":0,"value":"0"},{"begin":60,"end":160,"name":"REVERT","source":0},{"begin":77,"end":158,"name":"tag","source":0,"value":"3"},{"begin":77,"end":158,"name":"JUMPDEST","source":0},{"begin":77,"end":158,"name":"PUSH [tag]","source":0,"value":"4"},{"begin":77,"end":158,"name":"PUSH","source":0,"value":"4"},{"begin":77,"end":158,"name":"DUP1","source":0},{"begin":77,"end":158,"name":"CALLDATASIZE","source":0},{"begin":77,"end":158,"name":"SUB","source":0},{"begin":77,"end":158,"name":"DUP2","source":0},{"begin":77,"end":158,"name":"ADD","source":0},{"begin":77,"end":158,"name":"SWAP1","source":0},{"begin":77,"end":158,"name":"PUSH [tag]","source":0,"value":"5"},{"begin":77,"end":158,"name":"SWAP2","source":0},{"begin":77,"end":158,"name":"SWAP1","source":0},{"begin":77,"end":158,"name":"PUSH [tag]","source":0,"value":"6"},{"begin":77,"end":158,"jumpType":"[in]","name":"JUMP","source":0},{"begin":77,"end":158,"name":"tag","source":0,"value":"5"},{"begin":77,"end":158,"name":"JUMPDEST","source":0},{"begin":77,"end":158,"name":"PUSH [tag]","source":0,"value":"7"},{"begin":77,"end":158,"jumpType":"[in]","name":"JUMP","source":0},{"begin":77,"end":158,"name":"tag","source":0,"value":"4"},{"begin":77,"end":158,"name":"JUMPDEST","source":0},{"begin":77,"end":158,"name":"STOP","source":0},{"begin":77,"end":158,"name":"tag","source":0,"value":"7"},{"begin":77,"end":158,"name":"JUMPDEST","source":0},{"begin":123,"end":125,"name":"PUSH","source":0,"value":"2A"},{"begin":118,"end":125,"name":"DUP2","source":0},{"begin":118,"end":125,"name":"PUSH [tag]","source":0,"value":"9"},{"begin":118,"end":125,"name":"SWAP2","source":0},{"begin":118,"end":125,"name":"SWAP1","source":0},{"begin":118,"end":125,"name":"PUSH [tag]","source":0,"value":"10"},{"begin":118,"end":125,"jumpType":"[in]","name":"JUMP","source":0},{"begin":118,"end":125,"name":"tag","source":0,"value":"9"},{"begin":118,"end":125,"name":"JUMPDEST","source":0},{"begin":118,"end":125,"name":"SWAP1","source":0},{"begin":118,"end":125,"name":"POP","source":0},{"begin":147,"end":150,"name":"PUSH","source":0,"value":"64"},{"begin":143,"end":144,"name":"DUP2","source":0},{"begin":143,"end":150,"name":"GT","source":0},{"begin":135,"end":151,"name":"PUSH [tag]","source":0,"value":"11"},{"begin":135,"end":151,"name":"JUMPI","source":0},{"begin":135,"end":151,"name":"PUSH","source":0,"value":"0"},{"begin":135,"end":151,"name":"PUSH","source":0,"value":"0"},{"begin":135,"end":151,"name":"REVERT","source":0},{"begin":135,"end":151,"name":"tag","source":0,"value":"11"},{"begin":135,"end":151,"name":"JUMPDEST","source":0},{"begin":77,"end":158,"name":"POP","source":0},{"begin":77,"end":158,"jumpType":"[out]","name":"JUMP","source":0},{"begin":88,"end":205,"name":"tag","source":1,"value":"13"},{"begin":88,"end":205,"name":"JUMPDEST","source":1},{"begin":197,"end":198,"name":"PUSH","source":1,"value":"0"},{"begin":194,"end":195,"name":"PUSH","source":1,"value":"0"},{"begin":187,"end":199,"name":"REVERT","source":1},{"begin":334,"end":411,"name":"tag","source":1,"value":"15"},{"begin":334,"end":411,"name":"JUMPDEST","source":1},{"begin":371,"end":378,"name":"PUSH","source":1,"value":"0"},{"begin":400,"end":405,"name":"DUP2","source":1},{"begin":389,"end":405,"name":"SWAP1","source":1},{"begin":389,"end":405,"name":"POP","source":1},{"begin":334,"end":411,"name":"SWAP2","source":1},{"begin":334,"end":411,"name":"SWAP1","source":1},{"begin":334,"end":411,"name":"POP","source":1},{"begin":334,"end":411,"jumpType":"[out]","name":"JUMP","source":1},{"begin":417,"end":539,"name":"tag","source":1,"value":"16"},{"begin":417,"end":539,"name":"JUMPDEST","source":1},{"begin":490,"end":514,"name":"PUSH [tag]","source":1,"value":"25"},{"begin":508,"end":513,"name":"DUP2","source":1},{"begin":490,"end":514,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":490,"end":514,"jumpType":"[in]","name":"JUMP","source":1},{"begin":490,"end":514,"name":"tag","source":1,"value":"25"},{"begin":490,"end":514,"name":"JUMPDEST","source":1},{"begin":483,"end":488,"name":"DUP2","source":1},{"begin":480,"end":515,"name":"EQ","source":1},{"begin":470,"end":533,"name":"PUSH [tag]","source":1,"value":"26"},{"begin":470,"end":533,"name":"JUMPI","source":1},{"begin":529,"end":530,"name":"PUSH","source":1,"value":"0"},{"begin":526,"end":527,"name":"PUSH","source":1,"value":"0"},{"begin":519,"end":531,"name":"REVERT","source":1},{"begin":470,"end":533,"name":"tag","source":1,"value":"26"},{"begin":470,"end":533,"name":"JUMPDEST","source":1},{"begin":417,"end":539,"name":"POP","source":1},{"begin":417,"end":539,"jumpType":"[out]","name":"JUMP","source":1},{"begin":545,"end":684,"name":"tag","source":1,"value":"17"},{"begin":545,"end":684,"name":"JUMPDEST","source":1},{"begin":591,"end":596,"name":"PUSH","source":1,"value":"0"},{"begin":629,"end":635,"name":"DUP2","source":1},{"begin":616,"end":636,"name":"CALLDATALOAD","source":1},{"begin":607,"end":636,"name":"SWAP1","source":1},{"begin":607,"end":636,"name":"POP","source":1},{"begin":645,"end":678,"name":"PUSH [tag]","source":1,"value":"28"},{"begin":672,"end":677,"name":"DUP2","source":1},{"begin":645,"end":678,"name":"PUSH [tag]","source":1,"value":"16"},{"begin":645,"end":678,"jumpType":"[in]","name":"JUMP","source":1},{"begin":645,"end":678,"name":"tag","source":1,"value":"28"},{"begin":645,"end":678,"name":"JUMPDEST","source":1},{"begin":545,"end":684,"name":"SWAP3","source":1},{"begin":545,"end":684,"name":"SWAP2","source":1},{"begin":545,"end":684,"name":"POP","source":1},{"begin":545,"end":684,"name":"POP","source":1},{"begin":545,"end":684,"jumpType":"[out]","name":"JUMP","source":1},{"begin":690,"end":1019,"name":"tag","source":1,"value":"6"},{"begin":690,"end":1019,"name":"JUMPDEST","source":1},{"begin":749,"end":755,"name":"PUSH","source":1,"value":"0"},{"begin":798,"end":800,"name":"PUSH","source":1,"value":"20"},{"begin":786,"end":795,"name":"DUP3","source":1},{"begin":777,"end":784,"name":"DUP5","source":1},{"begin":773,"end":796,"name":"SUB","source":1},{"begin":769,"end":801,"name":"SLT","source":1},{"begin":766,"end":885,"name":"ISZERO","source":1},{"begin":766,"end":885,"name":"PUSH [tag]","source":1,"value":"30"},{"begin":766,"end":885,"name":"JUMPI","source":1},{"begin":804,"end":883,"name":"PUSH [tag]","source":1,"value":"31"},{"begin":804,"end":883,"name":"PUSH [tag]","source":1,"value":"13"},{"begin":804,"end":883,"jumpType":"[in]","name":"JUMP","source":1},{"begin":804,"end":883,"name":"tag","source":1,"value":"31"},{"begin":804,"end":883,"name":"JUMPDEST","source":1},{"begin":766,"end":885,"name":"tag","source":1,"value":"30"},{"begin":766,"end":885,"name":"JUMPDEST","source":1},{"begin":924,"end":925,"name":"PUSH","source":1,"value":"0"},{"begin":949,"end":1002,"name":"PUSH [tag]","source":1,"value":"32"},{"begin":994,"end":1001,"name":"DUP5","source":1},{"begin":985,"end":991,"name":"DUP3","source":1},{"begin":974,"end":983,"name":"DUP6","source":1},{"begin":970,"end":992,"name":"ADD","source":1},{"begin":949,"end":1002,"name":"PUSH [tag]","source":1,"value":"17"},{"begin":949,"end":1002,"jumpType":"[in]","name":"JUMP","source":1},{"begin":949,"end":1002,"name":"tag","source":1,"value":"32"},{"begin":949,"end":1002,"name":"JUMPDEST","source":1},{"begin":939,"end":1002,"name":"SWAP2","source":1},{"begin":939,"end":1002,"name":"POP","source":1},{"begin":895,"end":1012,"name":"POP","source":1},{"begin":690,"end":1019,"name":"SWAP3","source":1},{"begin":690,"end":1019,"name":"SWAP2","source":1},{"begin":690,"end":1019,"name":"POP","source":1},{"begin":690,"end":1019,"name":"POP","source":1},{"begin":690,"end":1019,"jumpType":"[out]","name":"JUMP","source":1},{"begin":1025,"end":1205,"name":"tag","source":1,"value":"18"},{"begin":1025,"end":1205,"name":"JUMPDEST","source":1},{"begin":1073,"end":1150,"name":"PUSH","source":1,"value":"4E487B7100000000000000000000000000000000000000000000000000000000"},{"begin":1070,"end":1071,"name":"PUSH","source":1,"value":"0"},{"begin":1063,"end":1151,"name":"MSTORE","source":1},{"begin":1170,"end":1174,"name":"PUSH","source":1,"value":"11"},{"begin":1167,"end":1168,"name":"PUSH","source":1,"value":"4"},{"begin":1160,"end":1175,"name":"MSTORE","source":1},{"begin":1194,"end":1198,"name":"PUSH","source":1,"value":"24"},{"begin":1191,"end":1192,"name":"PUSH","source":1,"value":"0"},{"begin":1184,"end":1199,"name":"REVERT","source":1},{"begin":1211,"end":1402,"name":"tag","source":1,"value":"10"},{"begin":1211,"end":1402,"name":"JUMPDEST","source":1},{"begin":1251,"end":1254,"name":"PUSH","source":1,"value":"0"},{"begin":1270,"end":1290,"name":"PUSH [tag]","source":1,"value":"35"},{"begin":1288,"end":1289,"name":"DUP3","source":1},{"begin":1270,"end":1290,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":1270,"end":1290,"jumpType":"[in]","name":"JUMP","source":1},{"begin":1270,"end":1290,"name":"tag","source":1,"value":"35"},{"begin":1270,"end":1290,"name":"JUMPDEST","source":1},{"begin":1265,"end":1290,"name":"SWAP2","source":1},{"begin":1265,"end":1290,"name":"POP","source":1},{"begin":1304,"end":1324,"name":"PUSH [tag]","source":1,"value":"36"},{"begin":1322,"end":1323,"name":"DUP4","source":1},{"begin":1304,"end":1324,"name":"PUSH [tag]","source":1,"value":"15"},{"begin":1304,"end":1324,"jumpType":"[in]","name":"JUMP","source":1},{"begin":1304,"end":1324,"name":"tag","source":1,"value":"36"},{"begin":1304,"end":1324,"name":"JUMPDEST","source":1},{"begin":1299,"end":1324,"name":"SWAP3","source":1},{"begin":1299,"end":1324,"name":"POP","source":1},{"begin":1347,"end":1348,"name":"DUP3","source":1},{"begin":1344,"end":1345,"name":"DUP3","source":1},{"begin":1340,"end":1349,"name":"ADD","source":1},{"begin":1333,"end":1349,"name":"SWAP1","source":1},{"begin":1333,"end":1349,"name":"POP","source":1},{"begin":1368,"end":1371,"name":"DUP1","source":1},{"begin":1365,"end":1366,"name":"DUP3","source":1},{"begin":1362,"end":1372,"name":"GT","source":1},{"begin":1359,"end":1395,"name":"ISZERO","source":1},{"begin":1359,"end":1395,"name":"PUSH [tag]","source":1,"value":"37"},{"begin":1359,"end":1395,"name":"JUMPI","source":1},{"begin":1375,"end":1393,"name":"PUSH [tag]","source":1,"value":"38"},{"begin":1375,"end":1393,"name":"PUSH [tag]","source":1,"value":"18"},{"begin":1375,"end":1393,"jumpType":"[in]","name":"JUMP","source":1},{"begin":1375,"end":1393,"name":"tag","source":1,"value":"38"},{"begin":1375,"end":1393,"name":"JUMPDEST","source":1},{"begin":1359,"end":1395,"name":"tag","source":1,"value":"37"},{"begin":1359,"end":1395,"name":"JUMPDEST","source":1},{"begin":1211,"end":1402,"name":"SWAP3","source":1},{"begin":1211,"end":1402,"name":"SWAP2","source":1},{"begin":1211,"end":1402,"name":"POP","source":1},{"begin":1211,"end":1402,"name":"POP","source":1},{"begin":1211,"end":1402,"jumpType":"[out]","name":"JUMP","source":1}]}},"sourceList":["input.sol","#utility.yul"]} diff --git a/test/cmdlineTests/ast_compact_json_no_pretty_json/output b/test/cmdlineTests/ast_compact_json_no_pretty_json/output index fb79fd524e24..43806c05506d 100644 --- a/test/cmdlineTests/ast_compact_json_no_pretty_json/output +++ b/test/cmdlineTests/ast_compact_json_no_pretty_json/output @@ -1,5 +1,5 @@ JSON AST (compact format): -======= ast_compact_json_no_pretty_json/input.sol ======= -{"absolutePath":"ast_compact_json_no_pretty_json/input.sol","exportedSymbols":{"C":[2]},"id":3,"license":"GPL-3.0","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity",">=","0.0"],"nodeType":"PragmaDirective","src":"36:22:0"},{"abstract":false,"baseContracts":[],"canonicalName":"C","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":2,"linearizedBaseContracts":[2],"name":"C","nameLocation":"69:1:0","nodeType":"ContractDefinition","nodes":[],"scope":3,"src":"60:13:0","usedErrors":[],"usedEvents":[]}],"src":"36:38:0"} +======= input.sol ======= +{"absolutePath":"input.sol","exportedSymbols":{"C":[2]},"id":3,"license":"GPL-3.0","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity",">=","0.0"],"nodeType":"PragmaDirective","src":"36:22:0"},{"abstract":false,"baseContracts":[],"canonicalName":"C","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":2,"linearizedBaseContracts":[2],"name":"C","nameLocation":"69:1:0","nodeType":"ContractDefinition","nodes":[],"scope":3,"src":"60:13:0","usedErrors":[],"usedEvents":[]}],"src":"36:38:0"} diff --git a/test/cmdlineTests/ast_compact_json_storage_layout_specifier/output b/test/cmdlineTests/ast_compact_json_storage_layout_specifier/output index 4fe5fe193be9..994286c3bbe4 100644 --- a/test/cmdlineTests/ast_compact_json_storage_layout_specifier/output +++ b/test/cmdlineTests/ast_compact_json_storage_layout_specifier/output @@ -1,9 +1,9 @@ JSON AST (compact format): -======= ast_compact_json_storage_layout_specifier/input.sol ======= +======= input.sol ======= { - "absolutePath": "ast_compact_json_storage_layout_specifier/input.sol", + "absolutePath": "input.sol", "exportedSymbols": { "C": [ 6 diff --git a/test/cmdlineTests/ast_compact_json_with_base_path/output b/test/cmdlineTests/ast_compact_json_with_base_path/output index c61502020765..93f7df2536b6 100644 --- a/test/cmdlineTests/ast_compact_json_with_base_path/output +++ b/test/cmdlineTests/ast_compact_json_with_base_path/output @@ -1,9 +1,9 @@ JSON AST (compact format): -======= ast_compact_json_with_base_path/c.sol ======= +======= c.sol ======= { - "absolutePath": "ast_compact_json_with_base_path/c.sol", + "absolutePath": "c.sol", "exportedSymbols": { "C": [ 5 @@ -46,9 +46,9 @@ JSON AST (compact format): ], "src": "36:38:0" } -======= ast_compact_json_with_base_path/input.sol ======= +======= input.sol ======= { - "absolutePath": "ast_compact_json_with_base_path/input.sol", + "absolutePath": "input.sol", "exportedSymbols": { "C": [ 5 @@ -69,7 +69,7 @@ JSON AST (compact format): "src": "36:22:1" }, { - "absolutePath": "ast_compact_json_with_base_path/c.sol", + "absolutePath": "c.sol", "file": "./c.sol", "id": 2, "nameLocation": "-1:-1:-1", diff --git a/test/cmdlineTests/ast_ir/output b/test/cmdlineTests/ast_ir/output index 76f111990870..88047ade02b3 100644 --- a/test/cmdlineTests/ast_ir/output +++ b/test/cmdlineTests/ast_ir/output @@ -2,7 +2,7 @@ IR AST: { "code": { "block": { - "nativeSrc": "59:790:0", + "nativeSrc": "52:790:0", "nodeType": "YulBlock", "src": "-1:-1:0", "statements": [ @@ -11,7 +11,7 @@ IR AST: "arguments": [ { "kind": "number", - "nativeSrc": "118:2:0", + "nativeSrc": "111:2:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -21,7 +21,7 @@ IR AST: "arguments": [ { "kind": "number", - "nativeSrc": "134:3:0", + "nativeSrc": "127:3:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -30,32 +30,32 @@ IR AST: ], "functionName": { "name": "memoryguard", - "nativeSrc": "122:11:0", + "nativeSrc": "115:11:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "122:16:0", + "nativeSrc": "115:16:0", "nodeType": "YulFunctionCall", "src": "60:13:0" } ], "functionName": { "name": "mstore", - "nativeSrc": "111:6:0", + "nativeSrc": "104:6:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "111:28:0", + "nativeSrc": "104:28:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, - "nativeSrc": "111:28:0", + "nativeSrc": "104:28:0", "nodeType": "YulExpressionStatement", "src": "60:13:0" }, { "body": { - "nativeSrc": "163:83:0", + "nativeSrc": "156:83:0", "nodeType": "YulBlock", "src": "60:13:0", "statements": [ @@ -64,15 +64,15 @@ IR AST: "arguments": [], "functionName": { "name": "revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb", - "nativeSrc": "165:77:0", + "nativeSrc": "158:77:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "165:79:0", + "nativeSrc": "158:79:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, - "nativeSrc": "165:79:0", + "nativeSrc": "158:79:0", "nodeType": "YulExpressionStatement", "src": "60:13:0" } @@ -82,15 +82,15 @@ IR AST: "arguments": [], "functionName": { "name": "callvalue", - "nativeSrc": "151:9:0", + "nativeSrc": "144:9:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "151:11:0", + "nativeSrc": "144:11:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, - "nativeSrc": "148:98:0", + "nativeSrc": "141:98:0", "nodeType": "YulIf", "src": "60:13:0" }, @@ -99,38 +99,38 @@ IR AST: "arguments": [], "functionName": { "name": "constructor_C_2", - "nativeSrc": "256:15:0", + "nativeSrc": "249:15:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "256:17:0", + "nativeSrc": "249:17:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, - "nativeSrc": "256:17:0", + "nativeSrc": "249:17:0", "nodeType": "YulExpressionStatement", "src": "60:13:0" }, { - "nativeSrc": "283:30:0", + "nativeSrc": "276:30:0", "nodeType": "YulVariableDeclaration", "src": "60:13:0", "value": { "arguments": [], "functionName": { "name": "allocate_unbounded", - "nativeSrc": "293:18:0", + "nativeSrc": "286:18:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "293:20:0", + "nativeSrc": "286:20:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, "variables": [ { "name": "_1", - "nativeSrc": "287:2:0", + "nativeSrc": "280:2:0", "nodeType": "YulTypedName", "src": "60:13:0", "type": "" @@ -142,7 +142,7 @@ IR AST: "arguments": [ { "name": "_1", - "nativeSrc": "331:2:0", + "nativeSrc": "324:2:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, @@ -151,7 +151,7 @@ IR AST: { "hexValue": "435f325f6465706c6f796564", "kind": "string", - "nativeSrc": "346:14:0", + "nativeSrc": "339:14:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -160,11 +160,11 @@ IR AST: ], "functionName": { "name": "dataoffset", - "nativeSrc": "335:10:0", + "nativeSrc": "328:10:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "335:26:0", + "nativeSrc": "328:26:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, @@ -173,7 +173,7 @@ IR AST: { "hexValue": "435f325f6465706c6f796564", "kind": "string", - "nativeSrc": "372:14:0", + "nativeSrc": "365:14:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -182,26 +182,26 @@ IR AST: ], "functionName": { "name": "datasize", - "nativeSrc": "363:8:0", + "nativeSrc": "356:8:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "363:24:0", + "nativeSrc": "356:24:0", "nodeType": "YulFunctionCall", "src": "60:13:0" } ], "functionName": { "name": "codecopy", - "nativeSrc": "322:8:0", + "nativeSrc": "315:8:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "322:66:0", + "nativeSrc": "315:66:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, - "nativeSrc": "322:66:0", + "nativeSrc": "315:66:0", "nodeType": "YulExpressionStatement", "src": "60:13:0" }, @@ -210,7 +210,7 @@ IR AST: "arguments": [ { "name": "_1", - "nativeSrc": "405:2:0", + "nativeSrc": "398:2:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, @@ -219,7 +219,7 @@ IR AST: { "hexValue": "435f325f6465706c6f796564", "kind": "string", - "nativeSrc": "418:14:0", + "nativeSrc": "411:14:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -228,44 +228,44 @@ IR AST: ], "functionName": { "name": "datasize", - "nativeSrc": "409:8:0", + "nativeSrc": "402:8:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "409:24:0", + "nativeSrc": "402:24:0", "nodeType": "YulFunctionCall", "src": "60:13:0" } ], "functionName": { "name": "return", - "nativeSrc": "398:6:0", + "nativeSrc": "391:6:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "398:36:0", + "nativeSrc": "391:36:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, - "nativeSrc": "398:36:0", + "nativeSrc": "391:36:0", "nodeType": "YulExpressionStatement", "src": "60:13:0" }, { "body": { - "nativeSrc": "484:43:0", + "nativeSrc": "477:43:0", "nodeType": "YulBlock", "src": "60:13:0", "statements": [ { - "nativeSrc": "498:19:0", + "nativeSrc": "491:19:0", "nodeType": "YulAssignment", "src": "60:13:0", "value": { "arguments": [ { "kind": "number", - "nativeSrc": "514:2:0", + "nativeSrc": "507:2:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -274,18 +274,18 @@ IR AST: ], "functionName": { "name": "mload", - "nativeSrc": "508:5:0", + "nativeSrc": "501:5:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "508:9:0", + "nativeSrc": "501:9:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, "variableNames": [ { "name": "memPtr", - "nativeSrc": "498:6:0", + "nativeSrc": "491:6:0", "nodeType": "YulIdentifier", "src": "60:13:0" } @@ -294,12 +294,12 @@ IR AST: ] }, "name": "allocate_unbounded", - "nativeSrc": "444:83:0", + "nativeSrc": "437:83:0", "nodeType": "YulFunctionDefinition", "returnVariables": [ { "name": "memPtr", - "nativeSrc": "477:6:0", + "nativeSrc": "470:6:0", "nodeType": "YulTypedName", "src": "60:13:0", "type": "" @@ -309,7 +309,7 @@ IR AST: }, { "body": { - "nativeSrc": "626:36:0", + "nativeSrc": "619:36:0", "nodeType": "YulBlock", "src": "60:13:0", "statements": [ @@ -318,7 +318,7 @@ IR AST: "arguments": [ { "kind": "number", - "nativeSrc": "647:1:0", + "nativeSrc": "640:1:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -326,7 +326,7 @@ IR AST: }, { "kind": "number", - "nativeSrc": "650:1:0", + "nativeSrc": "643:1:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -335,34 +335,34 @@ IR AST: ], "functionName": { "name": "revert", - "nativeSrc": "640:6:0", + "nativeSrc": "633:6:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "640:12:0", + "nativeSrc": "633:12:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, - "nativeSrc": "640:12:0", + "nativeSrc": "633:12:0", "nodeType": "YulExpressionStatement", "src": "60:13:0" } ] }, "name": "revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb", - "nativeSrc": "537:125:0", + "nativeSrc": "530:125:0", "nodeType": "YulFunctionDefinition", "src": "60:13:0" }, { "body": { - "nativeSrc": "741:59:0", + "nativeSrc": "734:59:0", "nodeType": "YulBlock", "src": "60:13:0", "statements": [] }, "name": "constructor_C_2", - "nativeSrc": "714:86:0", + "nativeSrc": "707:86:0", "nodeType": "YulFunctionDefinition", "src": "60:13:0" } @@ -376,7 +376,7 @@ IR AST: { "code": { "block": { - "nativeSrc": "929:588:0", + "nativeSrc": "915:588:0", "nodeType": "YulBlock", "src": "-1:-1:0", "statements": [ @@ -385,7 +385,7 @@ IR AST: "arguments": [ { "kind": "number", - "nativeSrc": "996:2:0", + "nativeSrc": "982:2:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -395,7 +395,7 @@ IR AST: "arguments": [ { "kind": "number", - "nativeSrc": "1012:3:0", + "nativeSrc": "998:3:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -404,26 +404,26 @@ IR AST: ], "functionName": { "name": "memoryguard", - "nativeSrc": "1000:11:0", + "nativeSrc": "986:11:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "1000:16:0", + "nativeSrc": "986:16:0", "nodeType": "YulFunctionCall", "src": "60:13:0" } ], "functionName": { "name": "mstore", - "nativeSrc": "989:6:0", + "nativeSrc": "975:6:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "989:28:0", + "nativeSrc": "975:28:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, - "nativeSrc": "989:28:0", + "nativeSrc": "975:28:0", "nodeType": "YulExpressionStatement", "src": "60:13:0" }, @@ -432,33 +432,33 @@ IR AST: "arguments": [], "functionName": { "name": "revert_error_42b3090547df1d2001c96683413b8cf91c1b902ef5e3cb8d9f6f304cf7446f74", - "nativeSrc": "1031:77:0", + "nativeSrc": "1017:77:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "1031:79:0", + "nativeSrc": "1017:79:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, - "nativeSrc": "1031:79:0", + "nativeSrc": "1017:79:0", "nodeType": "YulExpressionStatement", "src": "60:13:0" }, { "body": { - "nativeSrc": "1177:77:0", + "nativeSrc": "1163:77:0", "nodeType": "YulBlock", "src": "60:13:0", "statements": [ { - "nativeSrc": "1195:44:0", + "nativeSrc": "1181:44:0", "nodeType": "YulAssignment", "src": "60:13:0", "value": { "arguments": [ { "kind": "number", - "nativeSrc": "1228:3:0", + "nativeSrc": "1214:3:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -466,25 +466,25 @@ IR AST: }, { "name": "value", - "nativeSrc": "1233:5:0", + "nativeSrc": "1219:5:0", "nodeType": "YulIdentifier", "src": "60:13:0" } ], "functionName": { "name": "shr", - "nativeSrc": "1224:3:0", + "nativeSrc": "1210:3:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "1224:15:0", + "nativeSrc": "1210:15:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, "variableNames": [ { "name": "newValue", - "nativeSrc": "1195:8:0", + "nativeSrc": "1181:8:0", "nodeType": "YulIdentifier", "src": "60:13:0" } @@ -493,12 +493,12 @@ IR AST: ] }, "name": "shift_right_224_unsigned", - "nativeSrc": "1124:130:0", + "nativeSrc": "1110:130:0", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", - "nativeSrc": "1158:5:0", + "nativeSrc": "1144:5:0", "nodeType": "YulTypedName", "src": "60:13:0", "type": "" @@ -507,7 +507,7 @@ IR AST: "returnVariables": [ { "name": "newValue", - "nativeSrc": "1168:8:0", + "nativeSrc": "1154:8:0", "nodeType": "YulTypedName", "src": "60:13:0", "type": "" @@ -517,19 +517,19 @@ IR AST: }, { "body": { - "nativeSrc": "1308:51:0", + "nativeSrc": "1294:51:0", "nodeType": "YulBlock", "src": "60:13:0", "statements": [ { - "nativeSrc": "1326:19:0", + "nativeSrc": "1312:19:0", "nodeType": "YulAssignment", "src": "60:13:0", "value": { "arguments": [ { "kind": "number", - "nativeSrc": "1342:2:0", + "nativeSrc": "1328:2:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -538,18 +538,18 @@ IR AST: ], "functionName": { "name": "mload", - "nativeSrc": "1336:5:0", + "nativeSrc": "1322:5:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "1336:9:0", + "nativeSrc": "1322:9:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, "variableNames": [ { "name": "memPtr", - "nativeSrc": "1326:6:0", + "nativeSrc": "1312:6:0", "nodeType": "YulIdentifier", "src": "60:13:0" } @@ -558,12 +558,12 @@ IR AST: ] }, "name": "allocate_unbounded", - "nativeSrc": "1268:91:0", + "nativeSrc": "1254:91:0", "nodeType": "YulFunctionDefinition", "returnVariables": [ { "name": "memPtr", - "nativeSrc": "1301:6:0", + "nativeSrc": "1287:6:0", "nodeType": "YulTypedName", "src": "60:13:0", "type": "" @@ -573,7 +573,7 @@ IR AST: }, { "body": { - "nativeSrc": "1462:44:0", + "nativeSrc": "1448:44:0", "nodeType": "YulBlock", "src": "60:13:0", "statements": [ @@ -582,7 +582,7 @@ IR AST: "arguments": [ { "kind": "number", - "nativeSrc": "1487:1:0", + "nativeSrc": "1473:1:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -590,7 +590,7 @@ IR AST: }, { "kind": "number", - "nativeSrc": "1490:1:0", + "nativeSrc": "1476:1:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -599,22 +599,22 @@ IR AST: ], "functionName": { "name": "revert", - "nativeSrc": "1480:6:0", + "nativeSrc": "1466:6:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "1480:12:0", + "nativeSrc": "1466:12:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, - "nativeSrc": "1480:12:0", + "nativeSrc": "1466:12:0", "nodeType": "YulExpressionStatement", "src": "60:13:0" } ] }, "name": "revert_error_42b3090547df1d2001c96683413b8cf91c1b902ef5e3cb8d9f6f304cf7446f74", - "nativeSrc": "1373:133:0", + "nativeSrc": "1359:133:0", "nodeType": "YulFunctionDefinition", "src": "60:13:0" } @@ -637,24 +637,24 @@ Optimized IR AST: { "code": { "block": { - "nativeSrc": "58:315:0", + "nativeSrc": "51:315:0", "nodeType": "YulBlock", "src": "-1:-1:0", "statements": [ { - "nativeSrc": "68:299:0", + "nativeSrc": "61:299:0", "nodeType": "YulBlock", "src": "-1:-1:0", "statements": [ { - "nativeSrc": "128:27:0", + "nativeSrc": "121:27:0", "nodeType": "YulVariableDeclaration", "src": "60:13:0", "value": { "arguments": [ { "kind": "number", - "nativeSrc": "150:4:0", + "nativeSrc": "143:4:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -663,18 +663,18 @@ Optimized IR AST: ], "functionName": { "name": "memoryguard", - "nativeSrc": "138:11:0", + "nativeSrc": "131:11:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "138:17:0", + "nativeSrc": "131:17:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, "variables": [ { "name": "_1", - "nativeSrc": "132:2:0", + "nativeSrc": "125:2:0", "nodeType": "YulTypedName", "src": "60:13:0", "type": "" @@ -686,7 +686,7 @@ Optimized IR AST: "arguments": [ { "kind": "number", - "nativeSrc": "175:2:0", + "nativeSrc": "168:2:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -694,28 +694,28 @@ Optimized IR AST: }, { "name": "_1", - "nativeSrc": "179:2:0", + "nativeSrc": "172:2:0", "nodeType": "YulIdentifier", "src": "60:13:0" } ], "functionName": { "name": "mstore", - "nativeSrc": "168:6:0", + "nativeSrc": "161:6:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "168:14:0", + "nativeSrc": "161:14:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, - "nativeSrc": "168:14:0", + "nativeSrc": "161:14:0", "nodeType": "YulExpressionStatement", "src": "60:13:0" }, { "body": { - "nativeSrc": "210:16:0", + "nativeSrc": "203:16:0", "nodeType": "YulBlock", "src": "60:13:0", "statements": [ @@ -724,7 +724,7 @@ Optimized IR AST: "arguments": [ { "kind": "number", - "nativeSrc": "219:1:0", + "nativeSrc": "212:1:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -732,7 +732,7 @@ Optimized IR AST: }, { "kind": "number", - "nativeSrc": "222:1:0", + "nativeSrc": "215:1:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -741,15 +741,15 @@ Optimized IR AST: ], "functionName": { "name": "revert", - "nativeSrc": "212:6:0", + "nativeSrc": "205:6:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "212:12:0", + "nativeSrc": "205:12:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, - "nativeSrc": "212:12:0", + "nativeSrc": "205:12:0", "nodeType": "YulExpressionStatement", "src": "60:13:0" } @@ -759,20 +759,20 @@ Optimized IR AST: "arguments": [], "functionName": { "name": "callvalue", - "nativeSrc": "198:9:0", + "nativeSrc": "191:9:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "198:11:0", + "nativeSrc": "191:11:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, - "nativeSrc": "195:31:0", + "nativeSrc": "188:31:0", "nodeType": "YulIf", "src": "60:13:0" }, { - "nativeSrc": "239:34:0", + "nativeSrc": "232:34:0", "nodeType": "YulVariableDeclaration", "src": "60:13:0", "value": { @@ -780,7 +780,7 @@ Optimized IR AST: { "hexValue": "435f325f6465706c6f796564", "kind": "string", - "nativeSrc": "258:14:0", + "nativeSrc": "251:14:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -789,18 +789,18 @@ Optimized IR AST: ], "functionName": { "name": "datasize", - "nativeSrc": "249:8:0", + "nativeSrc": "242:8:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "249:24:0", + "nativeSrc": "242:24:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, "variables": [ { "name": "_2", - "nativeSrc": "243:2:0", + "nativeSrc": "236:2:0", "nodeType": "YulTypedName", "src": "60:13:0", "type": "" @@ -812,7 +812,7 @@ Optimized IR AST: "arguments": [ { "name": "_1", - "nativeSrc": "295:2:0", + "nativeSrc": "288:2:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, @@ -821,7 +821,7 @@ Optimized IR AST: { "hexValue": "435f325f6465706c6f796564", "kind": "string", - "nativeSrc": "310:14:0", + "nativeSrc": "303:14:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -830,32 +830,32 @@ Optimized IR AST: ], "functionName": { "name": "dataoffset", - "nativeSrc": "299:10:0", + "nativeSrc": "292:10:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "299:26:0", + "nativeSrc": "292:26:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, { "name": "_2", - "nativeSrc": "327:2:0", + "nativeSrc": "320:2:0", "nodeType": "YulIdentifier", "src": "60:13:0" } ], "functionName": { "name": "codecopy", - "nativeSrc": "286:8:0", + "nativeSrc": "279:8:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "286:44:0", + "nativeSrc": "279:44:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, - "nativeSrc": "286:44:0", + "nativeSrc": "279:44:0", "nodeType": "YulExpressionStatement", "src": "60:13:0" }, @@ -864,28 +864,28 @@ Optimized IR AST: "arguments": [ { "name": "_1", - "nativeSrc": "350:2:0", + "nativeSrc": "343:2:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, { "name": "_2", - "nativeSrc": "354:2:0", + "nativeSrc": "347:2:0", "nodeType": "YulIdentifier", "src": "60:13:0" } ], "functionName": { "name": "return", - "nativeSrc": "343:6:0", + "nativeSrc": "336:6:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "343:14:0", + "nativeSrc": "336:14:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, - "nativeSrc": "343:14:0", + "nativeSrc": "336:14:0", "nodeType": "YulExpressionStatement", "src": "60:13:0" } @@ -901,12 +901,12 @@ Optimized IR AST: { "code": { "block": { - "nativeSrc": "453:118:0", + "nativeSrc": "439:118:0", "nodeType": "YulBlock", "src": "-1:-1:0", "statements": [ { - "nativeSrc": "467:94:0", + "nativeSrc": "453:94:0", "nodeType": "YulBlock", "src": "-1:-1:0", "statements": [ @@ -915,7 +915,7 @@ Optimized IR AST: "arguments": [ { "kind": "number", - "nativeSrc": "542:1:0", + "nativeSrc": "528:1:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -923,7 +923,7 @@ Optimized IR AST: }, { "kind": "number", - "nativeSrc": "545:1:0", + "nativeSrc": "531:1:0", "nodeType": "YulLiteral", "src": "60:13:0", "type": "", @@ -932,15 +932,15 @@ Optimized IR AST: ], "functionName": { "name": "revert", - "nativeSrc": "535:6:0", + "nativeSrc": "521:6:0", "nodeType": "YulIdentifier", "src": "60:13:0" }, - "nativeSrc": "535:12:0", + "nativeSrc": "521:12:0", "nodeType": "YulFunctionCall", "src": "60:13:0" }, - "nativeSrc": "535:12:0", + "nativeSrc": "521:12:0", "nodeType": "YulExpressionStatement", "src": "60:13:0" } diff --git a/test/cmdlineTests/combined_json_abi/output b/test/cmdlineTests/combined_json_abi/output index 79b539db78d0..ee63ccb3ef6f 100644 --- a/test/cmdlineTests/combined_json_abi/output +++ b/test/cmdlineTests/combined_json_abi/output @@ -1,6 +1,6 @@ { "contracts": { - "combined_json_abi/input.sol:C": { + "input.sol:C": { "abi": [] } }, diff --git a/test/cmdlineTests/combined_json_generated_sources/output b/test/cmdlineTests/combined_json_generated_sources/output index db7c86ce13d7..d863bd73a726 100644 --- a/test/cmdlineTests/combined_json_generated_sources/output +++ b/test/cmdlineTests/combined_json_generated_sources/output @@ -1,6 +1,6 @@ { "contracts": { - "combined_json_generated_sources/input.sol:C": { + "input.sol:C": { "generated-sources": [], "generated-sources-runtime": [ { diff --git a/test/cmdlineTests/combined_json_no_pretty_print/output b/test/cmdlineTests/combined_json_no_pretty_print/output index 081dc4fa4eca..34c019b8f792 100644 --- a/test/cmdlineTests/combined_json_no_pretty_print/output +++ b/test/cmdlineTests/combined_json_no_pretty_print/output @@ -1 +1 @@ -{"contracts":{"combined_json_no_pretty_print/input.sol:C":{"abi":[]}},"version": ""} +{"contracts":{"input.sol:C":{"abi":[]}},"version": ""} diff --git a/test/cmdlineTests/combined_json_stop_after_parsing/output b/test/cmdlineTests/combined_json_stop_after_parsing/output index 64e66e3f1227..fa3707bf2488 100644 --- a/test/cmdlineTests/combined_json_stop_after_parsing/output +++ b/test/cmdlineTests/combined_json_stop_after_parsing/output @@ -1,14 +1,14 @@ { "contracts": { - "combined_json_stop_after_parsing/input.sol:C": {} + "input.sol:C": {} }, "sourceList": [ - "combined_json_stop_after_parsing/input.sol" + "input.sol" ], "sources": { - "combined_json_stop_after_parsing/input.sol": { + "input.sol": { "AST": { - "absolutePath": "combined_json_stop_after_parsing/input.sol", + "absolutePath": "input.sol", "id": 3, "license": "GPL-3.0", "nodeType": "SourceUnit", diff --git a/test/cmdlineTests/combined_json_with_base_path/output b/test/cmdlineTests/combined_json_with_base_path/output index 0a3add37e3b4..fe972a631a7a 100644 --- a/test/cmdlineTests/combined_json_with_base_path/output +++ b/test/cmdlineTests/combined_json_with_base_path/output @@ -1,15 +1,15 @@ { "contracts": { - "combined_json_with_base_path/c.sol:C": {} + "c.sol:C": {} }, "sourceList": [ - "combined_json_with_base_path/c.sol", - "combined_json_with_base_path/input.sol" + "c.sol", + "input.sol" ], "sources": { - "combined_json_with_base_path/c.sol": { + "c.sol": { "AST": { - "absolutePath": "combined_json_with_base_path/c.sol", + "absolutePath": "c.sol", "exportedSymbols": { "C": [ 5 @@ -54,9 +54,9 @@ }, "id": 0 }, - "combined_json_with_base_path/input.sol": { + "input.sol": { "AST": { - "absolutePath": "combined_json_with_base_path/input.sol", + "absolutePath": "input.sol", "exportedSymbols": { "C": [ 5 @@ -77,7 +77,7 @@ "src": "36:22:1" }, { - "absolutePath": "combined_json_with_base_path/c.sol", + "absolutePath": "c.sol", "file": "./c.sol", "id": 2, "nameLocation": "-1:-1:-1", diff --git a/test/cmdlineTests/combined_json_with_devdoc/output b/test/cmdlineTests/combined_json_with_devdoc/output index 817018ea6c58..482245fbc4b4 100644 --- a/test/cmdlineTests/combined_json_with_devdoc/output +++ b/test/cmdlineTests/combined_json_with_devdoc/output @@ -1,6 +1,6 @@ { "contracts": { - "combined_json_with_devdoc/input.sol:C": { + "input.sol:C": { "devdoc": { "details": "This is devdoc.", "kind": "dev", @@ -8,7 +8,7 @@ "version": 1 } }, - "combined_json_with_devdoc/input.sol:D": { + "input.sol:D": { "devdoc": { "kind": "dev", "methods": {}, diff --git a/test/cmdlineTests/combined_json_with_userdoc/output b/test/cmdlineTests/combined_json_with_userdoc/output index 4eb56fe24dd2..0e28af093c1c 100644 --- a/test/cmdlineTests/combined_json_with_userdoc/output +++ b/test/cmdlineTests/combined_json_with_userdoc/output @@ -1,6 +1,6 @@ { "contracts": { - "combined_json_with_userdoc/input.sol:C": { + "input.sol:C": { "userdoc": { "kind": "user", "methods": {}, @@ -8,7 +8,7 @@ "version": 1 } }, - "combined_json_with_userdoc/input.sol:D": { + "input.sol:D": { "userdoc": { "kind": "user", "methods": {}, diff --git a/test/cmdlineTests/constant_optimizer_yul/output b/test/cmdlineTests/constant_optimizer_yul/output index 9c7faa732272..c0d3ab934641 100644 --- a/test/cmdlineTests/constant_optimizer_yul/output +++ b/test/cmdlineTests/constant_optimizer_yul/output @@ -1,5 +1,5 @@ Optimized IR: -/// @use-src 0:"constant_optimizer_yul/input.sol" +/// @use-src 0:"input.sol" object "C_12" { code { { @@ -15,7 +15,7 @@ object "C_12" { return(_1, _2) } } - /// @use-src 0:"constant_optimizer_yul/input.sol" + /// @use-src 0:"input.sol" object "C_12_deployed" { code { { diff --git a/test/cmdlineTests/debug_info_in_yul_and_evm_asm_print_all/output b/test/cmdlineTests/debug_info_in_yul_and_evm_asm_print_all/output index 4833a9f620a7..7ad569ba1107 100644 --- a/test/cmdlineTests/debug_info_in_yul_and_evm_asm_print_all/output +++ b/test/cmdlineTests/debug_info_in_yul_and_evm_asm_print_all/output @@ -1,7 +1,7 @@ -======= debug_info_in_yul_and_evm_asm_print_all/input.sol:C ======= +======= input.sol:C ======= EVM assembly: - /* "debug_info_in_yul_and_evm_asm_print_all/input.sol":60:101 contract C {... */ + /* "input.sol":60:101 contract C {... */ mstore(0x40, 0x80) callvalue dup1 @@ -21,7 +21,7 @@ tag_1: stop sub_0: assembly { - /* "debug_info_in_yul_and_evm_asm_print_all/input.sol":60:101 contract C {... */ + /* "input.sol":60:101 contract C {... */ mstore(0x40, 0x80) callvalue dup1 @@ -40,7 +40,7 @@ sub_0: assembly { jumpi tag_2: revert(0x00, 0x00) - /* "debug_info_in_yul_and_evm_asm_print_all/input.sol":77:99 function f() public {} */ + /* "input.sol":77:99 function f() public {} */ tag_3: stop @@ -49,7 +49,7 @@ sub_0: assembly { IR: -/// @use-src 0:"debug_info_in_yul_and_evm_asm_print_all/input.sol" +/// @use-src 0:"input.sol" object "C_6" { code { /// @src 0:60:101 "contract C {..." @@ -80,7 +80,7 @@ object "C_6" { /// @src 0:60:101 "contract C {..." } - /// @use-src 0:"debug_info_in_yul_and_evm_asm_print_all/input.sol" + /// @use-src 0:"input.sol" object "C_6_deployed" { code { /// @src 0:60:101 "contract C {..." @@ -163,7 +163,7 @@ object "C_6" { Optimized IR: -/// @use-src 0:"debug_info_in_yul_and_evm_asm_print_all/input.sol" +/// @use-src 0:"input.sol" object "C_6" { code { { @@ -176,7 +176,7 @@ object "C_6" { return(_1, _2) } } - /// @use-src 0:"debug_info_in_yul_and_evm_asm_print_all/input.sol" + /// @use-src 0:"input.sol" object "C_6_deployed" { code { { diff --git a/test/cmdlineTests/debug_info_in_yul_and_evm_asm_print_location_only/output b/test/cmdlineTests/debug_info_in_yul_and_evm_asm_print_location_only/output index 00b04a01ad1f..36ef4d8294ab 100644 --- a/test/cmdlineTests/debug_info_in_yul_and_evm_asm_print_location_only/output +++ b/test/cmdlineTests/debug_info_in_yul_and_evm_asm_print_location_only/output @@ -1,7 +1,7 @@ -======= debug_info_in_yul_and_evm_asm_print_location_only/input.sol:C ======= +======= input.sol:C ======= EVM assembly: - /* "debug_info_in_yul_and_evm_asm_print_location_only/input.sol":60:101 */ + /* "input.sol":60:101 */ mstore(0x40, 0x80) callvalue dup1 @@ -21,7 +21,7 @@ tag_1: stop sub_0: assembly { - /* "debug_info_in_yul_and_evm_asm_print_location_only/input.sol":60:101 */ + /* "input.sol":60:101 */ mstore(0x40, 0x80) callvalue dup1 @@ -40,7 +40,7 @@ sub_0: assembly { jumpi tag_2: revert(0x00, 0x00) - /* "debug_info_in_yul_and_evm_asm_print_location_only/input.sol":77:99 */ + /* "input.sol":77:99 */ tag_3: stop @@ -49,7 +49,7 @@ sub_0: assembly { IR: -/// @use-src 0:"debug_info_in_yul_and_evm_asm_print_location_only/input.sol" +/// @use-src 0:"input.sol" object "C_6" { code { /// @src 0:60:101 @@ -80,7 +80,7 @@ object "C_6" { /// @src 0:60:101 } - /// @use-src 0:"debug_info_in_yul_and_evm_asm_print_location_only/input.sol" + /// @use-src 0:"input.sol" object "C_6_deployed" { code { /// @src 0:60:101 @@ -162,7 +162,7 @@ object "C_6" { Optimized IR: -/// @use-src 0:"debug_info_in_yul_and_evm_asm_print_location_only/input.sol" +/// @use-src 0:"input.sol" object "C_6" { code { { @@ -175,7 +175,7 @@ object "C_6" { return(_1, _2) } } - /// @use-src 0:"debug_info_in_yul_and_evm_asm_print_location_only/input.sol" + /// @use-src 0:"input.sol" object "C_6_deployed" { code { { diff --git a/test/cmdlineTests/debug_info_in_yul_and_evm_asm_print_none/output b/test/cmdlineTests/debug_info_in_yul_and_evm_asm_print_none/output index 9527edf769a4..ea3cb35a2849 100644 --- a/test/cmdlineTests/debug_info_in_yul_and_evm_asm_print_none/output +++ b/test/cmdlineTests/debug_info_in_yul_and_evm_asm_print_none/output @@ -1,5 +1,5 @@ -======= debug_info_in_yul_and_evm_asm_print_none/input.sol:C ======= +======= input.sol:C ======= EVM assembly: mstore(0x40, 0x80) callvalue @@ -46,7 +46,7 @@ sub_0: assembly { IR: -/// @use-src 0:"debug_info_in_yul_and_evm_asm_print_none/input.sol" +/// @use-src 0:"input.sol" object "C_6" { code { @@ -73,7 +73,7 @@ object "C_6" { } } - /// @use-src 0:"debug_info_in_yul_and_evm_asm_print_none/input.sol" + /// @use-src 0:"input.sol" object "C_6_deployed" { code { @@ -153,7 +153,7 @@ object "C_6" { Optimized IR: -/// @use-src 0:"debug_info_in_yul_and_evm_asm_print_none/input.sol" +/// @use-src 0:"input.sol" object "C_6" { code { { @@ -165,7 +165,7 @@ object "C_6" { return(_1, _2) } } - /// @use-src 0:"debug_info_in_yul_and_evm_asm_print_none/input.sol" + /// @use-src 0:"input.sol" object "C_6_deployed" { code { { diff --git a/test/cmdlineTests/debug_info_in_yul_snippet_escaping/output b/test/cmdlineTests/debug_info_in_yul_snippet_escaping/output index 975582f669ba..c29dfd89265d 100644 --- a/test/cmdlineTests/debug_info_in_yul_snippet_escaping/output +++ b/test/cmdlineTests/debug_info_in_yul_snippet_escaping/output @@ -1,6 +1,6 @@ IR: -/// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol" +/// @use-src 0:"input.sol" object "C_2" { code { /// @src 0:265:278 "contract C {}" @@ -31,7 +31,7 @@ object "C_2" { /// @src 0:265:278 "contract C {}" } - /// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol" + /// @use-src 0:"input.sol" object "C_2_deployed" { code { /// @src 0:265:278 "contract C {}" @@ -63,7 +63,7 @@ object "C_2" { Optimized IR: -/// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol" +/// @use-src 0:"input.sol" object "C_2" { code { { @@ -76,7 +76,7 @@ object "C_2" { return(_1, _2) } } - /// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol" + /// @use-src 0:"input.sol" object "C_2_deployed" { code { { @@ -90,7 +90,7 @@ object "C_2" { IR: -/// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol" +/// @use-src 0:"input.sol" object "D_27" { code { /// @src 0:279:599 "contract D /** @src 0:96:165 \"contract D {...\" *\/ {..." @@ -121,7 +121,7 @@ object "D_27" { /// @src 0:279:599 "contract D /** @src 0:96:165 \"contract D {...\" *\/ {..." } - /// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol" + /// @use-src 0:"input.sol" object "D_27_deployed" { code { /// @src 0:279:599 "contract D /** @src 0:96:165 \"contract D {...\" *\/ {..." @@ -342,7 +342,7 @@ object "D_27" { } - /// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol" + /// @use-src 0:"input.sol" object "C_2" { code { /// @src 0:265:278 "contract C {}" @@ -373,7 +373,7 @@ object "D_27" { /// @src 0:265:278 "contract C {}" } - /// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol" + /// @use-src 0:"input.sol" object "C_2_deployed" { code { /// @src 0:265:278 "contract C {}" @@ -410,7 +410,7 @@ object "D_27" { Optimized IR: -/// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol" +/// @use-src 0:"input.sol" object "D_27" { code { { @@ -423,7 +423,7 @@ object "D_27" { return(_1, _2) } } - /// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol" + /// @use-src 0:"input.sol" object "D_27_deployed" { code { { @@ -499,7 +499,7 @@ object "D_27" { revert(0, 0) } } - /// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol" + /// @use-src 0:"input.sol" object "C_2" { code { { @@ -512,7 +512,7 @@ object "D_27" { return(_1, _2) } } - /// @use-src 0:"debug_info_in_yul_snippet_escaping/input.sol" + /// @use-src 0:"input.sol" object "C_2_deployed" { code { { diff --git a/test/cmdlineTests/dup_opt_peephole/output b/test/cmdlineTests/dup_opt_peephole/output index a9e0203ed1ff..f53e9e2bdb17 100644 --- a/test/cmdlineTests/dup_opt_peephole/output +++ b/test/cmdlineTests/dup_opt_peephole/output @@ -1,7 +1,7 @@ -======= dup_opt_peephole/input.sol:C ======= +======= input.sol:C ======= EVM assembly: - /* "dup_opt_peephole/input.sol":60:171 contract C {... */ + /* "input.sol":60:171 contract C {... */ mstore(0x40, 0x80) callvalue dup1 @@ -21,7 +21,7 @@ tag_1: stop sub_0: assembly { - /* "dup_opt_peephole/input.sol":60:171 contract C {... */ + /* "input.sol":60:171 contract C {... */ mstore(0x40, 0x80) callvalue dup1 @@ -31,17 +31,17 @@ sub_0: assembly { revert(0x00, 0x00) tag_3: pop - /* "dup_opt_peephole/input.sol":134:135 0 */ + /* "input.sol":134:135 0 */ 0x00 - /* "dup_opt_peephole/input.sol":121:136 calldataload(0) */ + /* "input.sol":121:136 calldataload(0) */ calldataload - /* "dup_opt_peephole/input.sol":160:161 x */ + /* "input.sol":160:161 x */ dup1 - /* "dup_opt_peephole/input.sol":157:158 0 */ + /* "input.sol":157:158 0 */ 0x00 - /* "dup_opt_peephole/input.sol":150:162 sstore(0, x) */ + /* "input.sol":150:162 sstore(0, x) */ sstore - /* "dup_opt_peephole/input.sol":107:166 {... */ + /* "input.sol":107:166 {... */ stop auxdata: diff --git a/test/cmdlineTests/error_codes/err b/test/cmdlineTests/error_codes/err index a10362a863a8..f3f6fe33905c 100644 --- a/test/cmdlineTests/error_codes/err +++ b/test/cmdlineTests/error_codes/err @@ -1,29 +1,29 @@ Warning (1878): SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing "SPDX-License-Identifier: " to each source file. Use "SPDX-License-Identifier: UNLICENSED" for non-open-source code. Please see https://spdx.org for more information. ---> error_codes/input.sol +--> input.sol Error (4937): No visibility specified. Did you intend to add "public"? - --> error_codes/input.sol:2:5: + --> input.sol:2:5: | 2 | function f() { | ^ (Relevant source part starts here and spans across multiple lines). Warning (3420): Source file does not specify required compiler version! ---> error_codes/input.sol +--> input.sol Error (4247): Expression has to be an lvalue. - --> error_codes/input.sol:3:9: + --> input.sol:3:9: | 3 | 2=0; | ^ Error (7407): Type int_const 0 is not implicitly convertible to expected type int_const 2. - --> error_codes/input.sol:3:11: + --> input.sol:3:11: | 3 | 2=0; | ^ Error (2614): Indexed expression has to be a type, mapping or array (is literal_string "") - --> error_codes/input.sol:4:9: + --> input.sol:4:9: | 4 | ""[2]; | ^^ diff --git a/test/cmdlineTests/events_in_abi/output b/test/cmdlineTests/events_in_abi/output index ab246ef24a15..220e65ef4a9f 100644 --- a/test/cmdlineTests/events_in_abi/output +++ b/test/cmdlineTests/events_in_abi/output @@ -1,5 +1,5 @@ -======= events_in_abi/input.sol:C ======= +======= input.sol:C ======= Contract JSON ABI [ { @@ -37,7 +37,7 @@ Contract JSON ABI } ] -======= events_in_abi/input.sol:L ======= +======= input.sol:L ======= Contract JSON ABI [ { diff --git a/test/cmdlineTests/evm_version_byzantium/err b/test/cmdlineTests/evm_version_byzantium/err index accbb596cb25..6815a852460a 100644 --- a/test/cmdlineTests/evm_version_byzantium/err +++ b/test/cmdlineTests/evm_version_byzantium/err @@ -1,3 +1,3 @@ Warning: Support for EVM versions older than constantinople is deprecated and will be removed in the future. Warning: Source file does not specify required compiler version! ---> evm_version_byzantium/input.sol +--> input.sol diff --git a/test/cmdlineTests/evm_version_constantinople/err b/test/cmdlineTests/evm_version_constantinople/err index 69f328f54efd..e3815925acb9 100644 --- a/test/cmdlineTests/evm_version_constantinople/err +++ b/test/cmdlineTests/evm_version_constantinople/err @@ -1,2 +1,2 @@ Warning: Source file does not specify required compiler version! ---> evm_version_constantinople/input.sol +--> input.sol diff --git a/test/cmdlineTests/evmasm_difficulty_post_paris/err b/test/cmdlineTests/evmasm_difficulty_post_paris/err index d8210184e1b0..8498f4c460c7 100644 --- a/test/cmdlineTests/evmasm_difficulty_post_paris/err +++ b/test/cmdlineTests/evmasm_difficulty_post_paris/err @@ -1,5 +1,5 @@ Warning: Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain. - --> evmasm_difficulty_post_paris/input.sol:6:21: + --> input.sol:6:21: | 6 | uint256 x = block.difficulty; | ^^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/evmasm_difficulty_post_paris/output b/test/cmdlineTests/evmasm_difficulty_post_paris/output index f8c1611e0274..6ade453b9735 100644 --- a/test/cmdlineTests/evmasm_difficulty_post_paris/output +++ b/test/cmdlineTests/evmasm_difficulty_post_paris/output @@ -1,5 +1,5 @@ -======= evmasm_difficulty_post_paris/input.sol:C ======= +======= input.sol:C ======= EVM assembly: sstore(0x00, prevrandao) stop diff --git a/test/cmdlineTests/evmasm_difficulty_pre_paris/output b/test/cmdlineTests/evmasm_difficulty_pre_paris/output index ad75355f5bcb..26456f276fb7 100644 --- a/test/cmdlineTests/evmasm_difficulty_pre_paris/output +++ b/test/cmdlineTests/evmasm_difficulty_pre_paris/output @@ -1,5 +1,5 @@ -======= evmasm_difficulty_pre_paris/input.sol:C ======= +======= input.sol:C ======= EVM assembly: sstore(0x00, difficulty) stop diff --git a/test/cmdlineTests/evmasm_prevrandao_post_paris/output b/test/cmdlineTests/evmasm_prevrandao_post_paris/output index 47c85bb50fcd..6ade453b9735 100644 --- a/test/cmdlineTests/evmasm_prevrandao_post_paris/output +++ b/test/cmdlineTests/evmasm_prevrandao_post_paris/output @@ -1,5 +1,5 @@ -======= evmasm_prevrandao_post_paris/input.sol:C ======= +======= input.sol:C ======= EVM assembly: sstore(0x00, prevrandao) stop diff --git a/test/cmdlineTests/evmasm_prevrandao_pre_paris/err b/test/cmdlineTests/evmasm_prevrandao_pre_paris/err index 5970ec202066..429c06395086 100644 --- a/test/cmdlineTests/evmasm_prevrandao_pre_paris/err +++ b/test/cmdlineTests/evmasm_prevrandao_pre_paris/err @@ -1,5 +1,5 @@ Warning: "prevrandao" is not supported by the VM version and will be treated as "difficulty". - --> evmasm_prevrandao_pre_paris/input.sol:6:21: + --> input.sol:6:21: | 6 | uint256 x = block.prevrandao; | ^^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/evmasm_prevrandao_pre_paris/output b/test/cmdlineTests/evmasm_prevrandao_pre_paris/output index e41148a8331a..26456f276fb7 100644 --- a/test/cmdlineTests/evmasm_prevrandao_pre_paris/output +++ b/test/cmdlineTests/evmasm_prevrandao_pre_paris/output @@ -1,5 +1,5 @@ -======= evmasm_prevrandao_pre_paris/input.sol:C ======= +======= input.sol:C ======= EVM assembly: sstore(0x00, difficulty) stop diff --git a/test/cmdlineTests/evmasm_transient_storage_inline_assembly/err b/test/cmdlineTests/evmasm_transient_storage_inline_assembly/err index 2e52d9ced0c6..6b7f432f2c92 100644 --- a/test/cmdlineTests/evmasm_transient_storage_inline_assembly/err +++ b/test/cmdlineTests/evmasm_transient_storage_inline_assembly/err @@ -1,5 +1,5 @@ Warning: Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe. - --> evmasm_transient_storage_inline_assembly/input.sol:7:13: + --> input.sol:7:13: | 7 | tstore(0, 123) | ^^^^^^ diff --git a/test/cmdlineTests/evmasm_transient_storage_inline_assembly/output b/test/cmdlineTests/evmasm_transient_storage_inline_assembly/output index 0b4c516baef3..adeb0822c610 100644 --- a/test/cmdlineTests/evmasm_transient_storage_inline_assembly/output +++ b/test/cmdlineTests/evmasm_transient_storage_inline_assembly/output @@ -1,5 +1,5 @@ -======= evmasm_transient_storage_inline_assembly/input.sol:C ======= +======= input.sol:C ======= EVM assembly: mstore(0x40, 0x80) callvalue diff --git a/test/cmdlineTests/evmasm_transient_storage_inline_assembly_via_ir/err b/test/cmdlineTests/evmasm_transient_storage_inline_assembly_via_ir/err index 154da21b6577..6b7f432f2c92 100644 --- a/test/cmdlineTests/evmasm_transient_storage_inline_assembly_via_ir/err +++ b/test/cmdlineTests/evmasm_transient_storage_inline_assembly_via_ir/err @@ -1,5 +1,5 @@ Warning: Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe. - --> evmasm_transient_storage_inline_assembly_via_ir/input.sol:7:13: + --> input.sol:7:13: | 7 | tstore(0, 123) | ^^^^^^ diff --git a/test/cmdlineTests/evmasm_transient_storage_inline_assembly_via_ir/output b/test/cmdlineTests/evmasm_transient_storage_inline_assembly_via_ir/output index 673bdd0a052d..754bc9d455a7 100644 --- a/test/cmdlineTests/evmasm_transient_storage_inline_assembly_via_ir/output +++ b/test/cmdlineTests/evmasm_transient_storage_inline_assembly_via_ir/output @@ -1,5 +1,5 @@ -======= evmasm_transient_storage_inline_assembly_via_ir/input.sol:C ======= +======= input.sol:C ======= EVM assembly: 0x80 dup1 diff --git a/test/cmdlineTests/evmasm_transient_storage_state_variable/output b/test/cmdlineTests/evmasm_transient_storage_state_variable/output index e80eb3c57fc7..0f2580c80564 100644 --- a/test/cmdlineTests/evmasm_transient_storage_state_variable/output +++ b/test/cmdlineTests/evmasm_transient_storage_state_variable/output @@ -1,5 +1,5 @@ -======= evmasm_transient_storage_state_variable/input.sol:C ======= +======= input.sol:C ======= EVM assembly: mstore(0x40, 0x80) callvalue diff --git a/test/cmdlineTests/evmasm_transient_storage_state_variable_via_ir/output b/test/cmdlineTests/evmasm_transient_storage_state_variable_via_ir/output index 5959fad952f1..b2f55e1d5724 100644 --- a/test/cmdlineTests/evmasm_transient_storage_state_variable_via_ir/output +++ b/test/cmdlineTests/evmasm_transient_storage_state_variable_via_ir/output @@ -1,5 +1,5 @@ -======= evmasm_transient_storage_state_variable_via_ir/input.sol:C ======= +======= input.sol:C ======= EVM assembly: 0x80 dup1 diff --git a/test/cmdlineTests/exp_base_literal/output b/test/cmdlineTests/exp_base_literal/output index 24e5d29be756..fb5b35ed0fba 100644 --- a/test/cmdlineTests/exp_base_literal/output +++ b/test/cmdlineTests/exp_base_literal/output @@ -1,6 +1,6 @@ IR: -/// @use-src 0:"exp_base_literal/input.sol" +/// @use-src 0:"input.sol" object "C_81" { code { /// @src 0:82:370 "contract C {..." @@ -31,7 +31,7 @@ object "C_81" { /// @src 0:82:370 "contract C {..." } - /// @use-src 0:"exp_base_literal/input.sol" + /// @use-src 0:"input.sol" object "C_81_deployed" { code { /// @src 0:82:370 "contract C {..." diff --git a/test/cmdlineTests/function_debug_info/output b/test/cmdlineTests/function_debug_info/output index c1346e33ab0c..aa4512352623 100644 --- a/test/cmdlineTests/function_debug_info/output +++ b/test/cmdlineTests/function_debug_info/output @@ -1,6 +1,6 @@ { "contracts": { - "function_debug_info/input.sol:C": { + "input.sol:C": { "function-debug": { "@_34": { "id": 34, diff --git a/test/cmdlineTests/function_debug_info_via_yul/output b/test/cmdlineTests/function_debug_info_via_yul/output index 05c2da48c607..c3a828ab30f0 100644 --- a/test/cmdlineTests/function_debug_info_via_yul/output +++ b/test/cmdlineTests/function_debug_info_via_yul/output @@ -1,6 +1,6 @@ { "contracts": { - "function_debug_info_via_yul/input.sol:C": { + "input.sol:C": { "function-debug": {}, "function-debug-runtime": {} } diff --git a/test/cmdlineTests/hashes/output b/test/cmdlineTests/hashes/output index b010456d3901..45eb1835900a 100644 --- a/test/cmdlineTests/hashes/output +++ b/test/cmdlineTests/hashes/output @@ -1,5 +1,5 @@ -======= hashes/input.sol:C ======= +======= input.sol:C ======= Function signatures: 3fc03eeb: f((uint256)) @@ -12,7 +12,7 @@ Event signatures: 2d4dd5fe18ada5a020a9f5591539a8dc3010a5c074ba6a70e1c956659f02786a: ev(uint256) 81f3fb02f88d32d3bb08c80c9a622ca3b3223292f131c6ad049811f9a8a606dc: libraryEvent(uint256) -======= hashes/input.sol:L ======= +======= input.sol:L ======= Function signatures: Error signatures: diff --git a/test/cmdlineTests/inline_assembly_function_name_clash/err b/test/cmdlineTests/inline_assembly_function_name_clash/err index 5284ffe5ca89..892a312d0f26 100644 --- a/test/cmdlineTests/inline_assembly_function_name_clash/err +++ b/test/cmdlineTests/inline_assembly_function_name_clash/err @@ -1,5 +1,5 @@ Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing "SPDX-License-Identifier: " to each source file. Use "SPDX-License-Identifier: UNLICENSED" for non-open-source code. Please see https://spdx.org for more information. ---> inline_assembly_function_name_clash/input.sol +--> input.sol Warning: Source file does not specify required compiler version! ---> inline_assembly_function_name_clash/input.sol +--> input.sol diff --git a/test/cmdlineTests/inline_assembly_function_name_clash/output b/test/cmdlineTests/inline_assembly_function_name_clash/output index 2fd6ff1f5592..d21576ff0ba0 100644 --- a/test/cmdlineTests/inline_assembly_function_name_clash/output +++ b/test/cmdlineTests/inline_assembly_function_name_clash/output @@ -1,6 +1,6 @@ { "contracts": { - "inline_assembly_function_name_clash/input.sol:C": { + "input.sol:C": { "function-debug-runtime": { "abi_decode": { "entryPoint": 80, diff --git a/test/cmdlineTests/ir_compiler_inheritance_nosubobjects/output b/test/cmdlineTests/ir_compiler_inheritance_nosubobjects/output index 84fd9d0bc35f..2d715d0abaad 100644 --- a/test/cmdlineTests/ir_compiler_inheritance_nosubobjects/output +++ b/test/cmdlineTests/ir_compiler_inheritance_nosubobjects/output @@ -1,5 +1,5 @@ Optimized IR: -/// @use-src 0:"ir_compiler_inheritance_nosubobjects/input.sol" +/// @use-src 0:"input.sol" object "C_7" { code { { @@ -12,7 +12,7 @@ object "C_7" { return(_1, _2) } } - /// @use-src 0:"ir_compiler_inheritance_nosubobjects/input.sol" + /// @use-src 0:"input.sol" object "C_7_deployed" { code { { @@ -25,7 +25,7 @@ object "C_7" { } Optimized IR: -/// @use-src 0:"ir_compiler_inheritance_nosubobjects/input.sol" +/// @use-src 0:"input.sol" object "D_10" { code { { @@ -38,7 +38,7 @@ object "D_10" { return(_1, _2) } } - /// @use-src 0:"ir_compiler_inheritance_nosubobjects/input.sol" + /// @use-src 0:"input.sol" object "D_10_deployed" { code { { diff --git a/test/cmdlineTests/ir_compiler_subobjects/err b/test/cmdlineTests/ir_compiler_subobjects/err index b300ec124361..66ebf4229caf 100644 --- a/test/cmdlineTests/ir_compiler_subobjects/err +++ b/test/cmdlineTests/ir_compiler_subobjects/err @@ -1,5 +1,5 @@ Warning: Unused local variable. - --> ir_compiler_subobjects/input.sol:8:9: + --> input.sol:8:9: | 8 | C c = new C(); | ^^^ diff --git a/test/cmdlineTests/ir_compiler_subobjects/output b/test/cmdlineTests/ir_compiler_subobjects/output index 39ef53f5529b..08ee8bf5d0b5 100644 --- a/test/cmdlineTests/ir_compiler_subobjects/output +++ b/test/cmdlineTests/ir_compiler_subobjects/output @@ -1,5 +1,5 @@ Optimized IR: -/// @use-src 0:"ir_compiler_subobjects/input.sol" +/// @use-src 0:"input.sol" object "C_3" { code { { @@ -12,7 +12,7 @@ object "C_3" { return(_1, _2) } } - /// @use-src 0:"ir_compiler_subobjects/input.sol" + /// @use-src 0:"input.sol" object "C_3_deployed" { code { { @@ -25,7 +25,7 @@ object "C_3" { } Optimized IR: -/// @use-src 0:"ir_compiler_subobjects/input.sol" +/// @use-src 0:"input.sol" object "D_16" { code { { @@ -38,7 +38,7 @@ object "D_16" { return(_1, _2) } } - /// @use-src 0:"ir_compiler_subobjects/input.sol" + /// @use-src 0:"input.sol" object "D_16_deployed" { code { { @@ -76,7 +76,7 @@ object "D_16" { revert(0, 0) } } - /// @use-src 0:"ir_compiler_subobjects/input.sol" + /// @use-src 0:"input.sol" object "C_3" { code { { @@ -89,7 +89,7 @@ object "D_16" { return(_1, _2) } } - /// @use-src 0:"ir_compiler_subobjects/input.sol" + /// @use-src 0:"input.sol" object "C_3_deployed" { code { { diff --git a/test/cmdlineTests/ir_optimized_transient_storage_value_type/output b/test/cmdlineTests/ir_optimized_transient_storage_value_type/output index 61d289e3f9e0..2f6918cabb36 100644 --- a/test/cmdlineTests/ir_optimized_transient_storage_value_type/output +++ b/test/cmdlineTests/ir_optimized_transient_storage_value_type/output @@ -1,5 +1,5 @@ Optimized IR: -/// @use-src 0:"ir_optimized_transient_storage_value_type/input.sol" +/// @use-src 0:"input.sol" object "C_14" { code { { @@ -11,7 +11,7 @@ object "C_14" { return(_1, _2) } } - /// @use-src 0:"ir_optimized_transient_storage_value_type/input.sol" + /// @use-src 0:"input.sol" object "C_14_deployed" { code { { diff --git a/test/cmdlineTests/ir_optimized_with_optimize/output b/test/cmdlineTests/ir_optimized_with_optimize/output index 8790e45d353d..bae07ea4eb05 100644 --- a/test/cmdlineTests/ir_optimized_with_optimize/output +++ b/test/cmdlineTests/ir_optimized_with_optimize/output @@ -1,5 +1,5 @@ Optimized IR: -/// @use-src 0:"ir_optimized_with_optimize/input.sol" +/// @use-src 0:"input.sol" object "C_2" { code { { @@ -11,7 +11,7 @@ object "C_2" { return(_1, _2) } } - /// @use-src 0:"ir_optimized_with_optimize/input.sol" + /// @use-src 0:"input.sol" object "C_2_deployed" { code { { revert(0, 0) } } data ".metadata" hex"" diff --git a/test/cmdlineTests/ir_subobject_order/output b/test/cmdlineTests/ir_subobject_order/output index da4390fff055..d41b65bf9a62 100644 --- a/test/cmdlineTests/ir_subobject_order/output +++ b/test/cmdlineTests/ir_subobject_order/output @@ -1,8 +1,8 @@ Optimized IR: -/// @use-src 0:"ir_subobject_order/input.sol" +/// @use-src 0:"input.sol" object "A_13" { code { { revert(0, 0) } } - /// @use-src 0:"ir_subobject_order/input.sol" + /// @use-src 0:"input.sol" object "A_13_deployed" { code { { revert(0, 0) } } data ".metadata" hex"" @@ -10,10 +10,10 @@ object "A_13" { } Optimized IR: -/// @use-src 0:"ir_subobject_order/input.sol" +/// @use-src 0:"input.sol" object "B_7" { code { { revert(0, 0) } } - /// @use-src 0:"ir_subobject_order/input.sol" + /// @use-src 0:"input.sol" object "B_7_deployed" { code { { revert(0, 0) } } data ".metadata" hex"" @@ -21,7 +21,7 @@ object "B_7" { } Optimized IR: -/// @use-src 0:"ir_subobject_order/input.sol" +/// @use-src 0:"input.sol" object "C_33" { code { { @@ -69,24 +69,24 @@ object "C_33" { return(_7, _8) } } - /// @use-src 0:"ir_subobject_order/input.sol" + /// @use-src 0:"input.sol" object "C_33_deployed" { code { { revert(0, 0) } } data ".metadata" hex"" } - /// @use-src 0:"ir_subobject_order/input.sol" + /// @use-src 0:"input.sol" object "A_13" { code { { revert(0, 0) } } - /// @use-src 0:"ir_subobject_order/input.sol" + /// @use-src 0:"input.sol" object "A_13_deployed" { code { { revert(0, 0) } } data ".metadata" hex"" } } - /// @use-src 0:"ir_subobject_order/input.sol" + /// @use-src 0:"input.sol" object "B_7" { code { { revert(0, 0) } } - /// @use-src 0:"ir_subobject_order/input.sol" + /// @use-src 0:"input.sol" object "B_7_deployed" { code { { revert(0, 0) } } data ".metadata" hex"" diff --git a/test/cmdlineTests/ir_unoptimized_with_optimize/output b/test/cmdlineTests/ir_unoptimized_with_optimize/output index c5307123f0f5..b34558d2a49f 100644 --- a/test/cmdlineTests/ir_unoptimized_with_optimize/output +++ b/test/cmdlineTests/ir_unoptimized_with_optimize/output @@ -1,6 +1,6 @@ IR: -/// @use-src 0:"ir_unoptimized_with_optimize/input.sol" +/// @use-src 0:"input.sol" object "C_2" { code { @@ -27,7 +27,7 @@ object "C_2" { } } - /// @use-src 0:"ir_unoptimized_with_optimize/input.sol" + /// @use-src 0:"input.sol" object "C_2_deployed" { code { diff --git a/test/cmdlineTests/ir_unoptimized_with_optimize_via_ir/output b/test/cmdlineTests/ir_unoptimized_with_optimize_via_ir/output index f5ecdd8bf5f0..b34558d2a49f 100644 --- a/test/cmdlineTests/ir_unoptimized_with_optimize_via_ir/output +++ b/test/cmdlineTests/ir_unoptimized_with_optimize_via_ir/output @@ -1,6 +1,6 @@ IR: -/// @use-src 0:"ir_unoptimized_with_optimize_via_ir/input.sol" +/// @use-src 0:"input.sol" object "C_2" { code { @@ -27,7 +27,7 @@ object "C_2" { } } - /// @use-src 0:"ir_unoptimized_with_optimize_via_ir/input.sol" + /// @use-src 0:"input.sol" object "C_2_deployed" { code { diff --git a/test/cmdlineTests/ir_with_assembly_no_memoryguard_creation/output b/test/cmdlineTests/ir_with_assembly_no_memoryguard_creation/output index 5c822949a409..03f5564200bf 100644 --- a/test/cmdlineTests/ir_with_assembly_no_memoryguard_creation/output +++ b/test/cmdlineTests/ir_with_assembly_no_memoryguard_creation/output @@ -1,5 +1,5 @@ Optimized IR: -/// @use-src 0:"ir_with_assembly_no_memoryguard_creation/input.sol" +/// @use-src 0:"input.sol" object "D_12" { code { { @@ -10,7 +10,7 @@ object "D_12" { return(128, _1) } } - /// @use-src 0:"ir_with_assembly_no_memoryguard_creation/input.sol" + /// @use-src 0:"input.sol" object "D_12_deployed" { code { { diff --git a/test/cmdlineTests/ir_with_assembly_no_memoryguard_runtime/output b/test/cmdlineTests/ir_with_assembly_no_memoryguard_runtime/output index f6be1493ec79..9d07cd910e9f 100644 --- a/test/cmdlineTests/ir_with_assembly_no_memoryguard_runtime/output +++ b/test/cmdlineTests/ir_with_assembly_no_memoryguard_runtime/output @@ -1,5 +1,5 @@ Optimized IR: -/// @use-src 0:"ir_with_assembly_no_memoryguard_runtime/input.sol" +/// @use-src 0:"input.sol" object "D_8" { code { { @@ -12,7 +12,7 @@ object "D_8" { return(_1, _2) } } - /// @use-src 0:"ir_with_assembly_no_memoryguard_runtime/input.sol" + /// @use-src 0:"input.sol" object "D_8_deployed" { code { { diff --git a/test/cmdlineTests/keccak_optimization_deploy_code/output b/test/cmdlineTests/keccak_optimization_deploy_code/output index 8b89ea5b6329..839e675210e7 100644 --- a/test/cmdlineTests/keccak_optimization_deploy_code/output +++ b/test/cmdlineTests/keccak_optimization_deploy_code/output @@ -1,5 +1,5 @@ Optimized IR: -/// @use-src 0:"keccak_optimization_deploy_code/input.sol" +/// @use-src 0:"input.sol" object "C_12" { code { { @@ -14,7 +14,7 @@ object "C_12" { return(128, _1) } } - /// @use-src 0:"keccak_optimization_deploy_code/input.sol" + /// @use-src 0:"input.sol" object "C_12_deployed" { code { { diff --git a/test/cmdlineTests/keccak_optimization_low_runs/output b/test/cmdlineTests/keccak_optimization_low_runs/output index c308d737b2f5..328bdd59e621 100644 --- a/test/cmdlineTests/keccak_optimization_low_runs/output +++ b/test/cmdlineTests/keccak_optimization_low_runs/output @@ -1,5 +1,5 @@ Optimized IR: -/// @use-src 0:"keccak_optimization_low_runs/input.sol" +/// @use-src 0:"input.sol" object "C_7" { code { { @@ -12,7 +12,7 @@ object "C_7" { return(_1, _2) } } - /// @use-src 0:"keccak_optimization_low_runs/input.sol" + /// @use-src 0:"input.sol" object "C_7_deployed" { code { { diff --git a/test/cmdlineTests/linking_qualified_library_name/args b/test/cmdlineTests/linking_qualified_library_name/args index dc996f46e236..e8a29e815367 100644 --- a/test/cmdlineTests/linking_qualified_library_name/args +++ b/test/cmdlineTests/linking_qualified_library_name/args @@ -1 +1 @@ -linking_qualified_library_name/contract1.sol --bin --libraries linking_qualified_library_name/math.sol:Log:0x7777777777777777777777777777777777777777 +contract1.sol --bin --libraries math.sol:Log:0x7777777777777777777777777777777777777777 diff --git a/test/cmdlineTests/linking_qualified_library_name/contract1.sol b/test/cmdlineTests/linking_qualified_library_name/contract1.sol index aedea65faaa7..d59420962939 100644 --- a/test/cmdlineTests/linking_qualified_library_name/contract1.sol +++ b/test/cmdlineTests/linking_qualified_library_name/contract1.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.0; -import "linking_qualified_library_name/math.sol"; +import "math.sol"; contract C { function foo() public { diff --git a/test/cmdlineTests/linking_qualified_library_name/output b/test/cmdlineTests/linking_qualified_library_name/output index 834874bf8e87..63359661bcd4 100644 --- a/test/cmdlineTests/linking_qualified_library_name/output +++ b/test/cmdlineTests/linking_qualified_library_name/output @@ -1,8 +1,8 @@ -======= linking_qualified_library_name/contract1.sol:C ======= +======= contract1.sol:C ======= Binary: -======= linking_qualified_library_name/math.sol:Log ======= +======= math.sol:Log ======= Binary: diff --git a/test/cmdlineTests/linking_solidity/args b/test/cmdlineTests/linking_solidity/args index 9a958527fd71..7689b925ae10 100644 --- a/test/cmdlineTests/linking_solidity/args +++ b/test/cmdlineTests/linking_solidity/args @@ -1 +1 @@ ---bin --bin-runtime --libraries linking_solidity/input.sol:L=0x1234567890123456789012345678901234567890 +--bin --bin-runtime --libraries input.sol:L=0x1234567890123456789012345678901234567890 diff --git a/test/cmdlineTests/linking_solidity/output b/test/cmdlineTests/linking_solidity/output index 307b131b5af3..ed60e0ccfc9b 100644 --- a/test/cmdlineTests/linking_solidity/output +++ b/test/cmdlineTests/linking_solidity/output @@ -1,11 +1,11 @@ -======= linking_solidity/input.sol:C ======= +======= input.sol:C ======= Binary: Binary of the runtime part: -======= linking_solidity/input.sol:L ======= +======= input.sol:L ======= Binary: Binary of the runtime part: diff --git a/test/cmdlineTests/linking_solidity_unresolved_references/args b/test/cmdlineTests/linking_solidity_unresolved_references/args index 8909b2779174..fbbed9f870b7 100644 --- a/test/cmdlineTests/linking_solidity_unresolved_references/args +++ b/test/cmdlineTests/linking_solidity_unresolved_references/args @@ -1 +1 @@ ---bin --bin-runtime --libraries linking_solidity_unresolved_references/input.sol:L1=0x1234567890123456789012345678901234567890 +--bin --bin-runtime --libraries input.sol:L1=0x1234567890123456789012345678901234567890 diff --git a/test/cmdlineTests/linking_solidity_unresolved_references/output b/test/cmdlineTests/linking_solidity_unresolved_references/output index f42191f51e0b..5df6611de091 100644 --- a/test/cmdlineTests/linking_solidity_unresolved_references/output +++ b/test/cmdlineTests/linking_solidity_unresolved_references/output @@ -1,23 +1,23 @@ -======= linking_solidity_unresolved_references/input.sol:C ======= +======= input.sol:C ======= Binary: -__$8ef13d1c56d5343bf69cf9444272079aa5$____$8ef13d1c56d5343bf69cf9444272079aa5$__ +__$a7fb54ac3bf4ba657d4a55d066b3521d62$____$a7fb54ac3bf4ba657d4a55d066b3521d62$__ -// $8ef13d1c56d5343bf69cf9444272079aa5$ -> linking_solidity_unresolved_references/input.sol:L2 -// $8ef13d1c56d5343bf69cf9444272079aa5$ -> linking_solidity_unresolved_references/input.sol:L2 +// $a7fb54ac3bf4ba657d4a55d066b3521d62$ -> input.sol:L2 +// $a7fb54ac3bf4ba657d4a55d066b3521d62$ -> input.sol:L2 Binary of the runtime part: -__$8ef13d1c56d5343bf69cf9444272079aa5$____$8ef13d1c56d5343bf69cf9444272079aa5$__ +__$a7fb54ac3bf4ba657d4a55d066b3521d62$____$a7fb54ac3bf4ba657d4a55d066b3521d62$__ -// $8ef13d1c56d5343bf69cf9444272079aa5$ -> linking_solidity_unresolved_references/input.sol:L2 -// $8ef13d1c56d5343bf69cf9444272079aa5$ -> linking_solidity_unresolved_references/input.sol:L2 +// $a7fb54ac3bf4ba657d4a55d066b3521d62$ -> input.sol:L2 +// $a7fb54ac3bf4ba657d4a55d066b3521d62$ -> input.sol:L2 -======= linking_solidity_unresolved_references/input.sol:L1 ======= +======= input.sol:L1 ======= Binary: Binary of the runtime part: -======= linking_solidity_unresolved_references/input.sol:L2 ======= +======= input.sol:L2 ======= Binary: Binary of the runtime part: diff --git a/test/cmdlineTests/linking_strict_assembly/output b/test/cmdlineTests/linking_strict_assembly/output index 4fa6edc0c372..756cc2822d3d 100644 --- a/test/cmdlineTests/linking_strict_assembly/output +++ b/test/cmdlineTests/linking_strict_assembly/output @@ -1,5 +1,5 @@ -======= linking_strict_assembly/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "a" { @@ -16,11 +16,11 @@ Binary representation: 7312345678901234567890123456789012345678905f5500 Text representation: - /* "linking_strict_assembly/input.yul":58:93 */ + /* "input.yul":58:93 */ linkerSymbol("f919ba91ac99f96129544b80b9516b27a80e376b9dc693819d0b18b7e0395612") - /* "linking_strict_assembly/input.yul":113:114 */ + /* "input.yul":113:114 */ 0x00 - /* "linking_strict_assembly/input.yul":106:121 */ + /* "input.yul":106:121 */ sstore - /* "linking_strict_assembly/input.yul":22:137 */ + /* "input.yul":22:137 */ stop diff --git a/test/cmdlineTests/linking_strict_assembly_qualified_library_qualified_reference/output b/test/cmdlineTests/linking_strict_assembly_qualified_library_qualified_reference/output index e4fa4fcbd9ab..f347631001b9 100644 --- a/test/cmdlineTests/linking_strict_assembly_qualified_library_qualified_reference/output +++ b/test/cmdlineTests/linking_strict_assembly_qualified_library_qualified_reference/output @@ -1,5 +1,5 @@ -======= linking_strict_assembly_qualified_library_qualified_reference/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "a" { diff --git a/test/cmdlineTests/linking_strict_assembly_qualified_library_unqualified_reference/output b/test/cmdlineTests/linking_strict_assembly_qualified_library_unqualified_reference/output index ebf7f6542c52..d329296eb2c5 100644 --- a/test/cmdlineTests/linking_strict_assembly_qualified_library_unqualified_reference/output +++ b/test/cmdlineTests/linking_strict_assembly_qualified_library_unqualified_reference/output @@ -1,5 +1,5 @@ -======= linking_strict_assembly_qualified_library_unqualified_reference/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "a" { diff --git a/test/cmdlineTests/linking_strict_assembly_same_library_name_different_files/output b/test/cmdlineTests/linking_strict_assembly_same_library_name_different_files/output index 69c0a21f63c1..f4262400c815 100644 --- a/test/cmdlineTests/linking_strict_assembly_same_library_name_different_files/output +++ b/test/cmdlineTests/linking_strict_assembly_same_library_name_different_files/output @@ -1,5 +1,5 @@ -======= linking_strict_assembly_same_library_name_different_files/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "a" { @@ -18,19 +18,19 @@ Binary representation: 731111111111111111111111111111111111111111732222222222222222222222222222222222222222905f5560015500 Text representation: - /* "linking_strict_assembly_same_library_name_different_files/input.yul":59:89 */ + /* "input.yul":59:89 */ linkerSymbol("f3ffc10c396a7cc41ae954b050792839d20947bf73497d30c49a9fda1ea477ec") - /* "linking_strict_assembly_same_library_name_different_files/input.yul":115:145 */ + /* "input.yul":115:145 */ linkerSymbol("c3523432985587641d17c68161d2f700c57aaf4ed21cda4f25d76193c831f97f") - /* "linking_strict_assembly_same_library_name_different_files/input.yul":158:174 */ + /* "input.yul":158:174 */ swap1 - /* "linking_strict_assembly_same_library_name_different_files/input.yul":165:166 */ + /* "input.yul":165:166 */ 0x00 - /* "linking_strict_assembly_same_library_name_different_files/input.yul":158:174 */ + /* "input.yul":158:174 */ sstore - /* "linking_strict_assembly_same_library_name_different_files/input.yul":194:195 */ + /* "input.yul":194:195 */ 0x01 - /* "linking_strict_assembly_same_library_name_different_files/input.yul":187:203 */ + /* "input.yul":187:203 */ sstore - /* "linking_strict_assembly_same_library_name_different_files/input.yul":22:219 */ + /* "input.yul":22:219 */ stop diff --git a/test/cmdlineTests/linking_strict_assembly_same_library_name_different_files_in_link_references/output b/test/cmdlineTests/linking_strict_assembly_same_library_name_different_files_in_link_references/output index 14fafa4e4604..a6422d8fbce2 100644 --- a/test/cmdlineTests/linking_strict_assembly_same_library_name_different_files_in_link_references/output +++ b/test/cmdlineTests/linking_strict_assembly_same_library_name_different_files_in_link_references/output @@ -1,5 +1,5 @@ -======= linking_strict_assembly_same_library_name_different_files_in_link_references/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "a" { @@ -18,19 +18,19 @@ Binary representation: 73123456789012345678901234567890123456789073__$c3523432985587641d17c68161d2f700c5$__905f5560015500 Text representation: - /* "linking_strict_assembly_same_library_name_different_files_in_link_references/input.yul":59:89 */ + /* "input.yul":59:89 */ linkerSymbol("f3ffc10c396a7cc41ae954b050792839d20947bf73497d30c49a9fda1ea477ec") - /* "linking_strict_assembly_same_library_name_different_files_in_link_references/input.yul":115:145 */ + /* "input.yul":115:145 */ linkerSymbol("c3523432985587641d17c68161d2f700c57aaf4ed21cda4f25d76193c831f97f") - /* "linking_strict_assembly_same_library_name_different_files_in_link_references/input.yul":158:174 */ + /* "input.yul":158:174 */ swap1 - /* "linking_strict_assembly_same_library_name_different_files_in_link_references/input.yul":165:166 */ + /* "input.yul":165:166 */ 0x00 - /* "linking_strict_assembly_same_library_name_different_files_in_link_references/input.yul":158:174 */ + /* "input.yul":158:174 */ sstore - /* "linking_strict_assembly_same_library_name_different_files_in_link_references/input.yul":194:195 */ + /* "input.yul":194:195 */ 0x01 - /* "linking_strict_assembly_same_library_name_different_files_in_link_references/input.yul":187:203 */ + /* "input.yul":187:203 */ sstore - /* "linking_strict_assembly_same_library_name_different_files_in_link_references/input.yul":22:219 */ + /* "input.yul":22:219 */ stop diff --git a/test/cmdlineTests/linking_strict_assembly_unqualified_library_qualified_reference/output b/test/cmdlineTests/linking_strict_assembly_unqualified_library_qualified_reference/output index aaf03d0733b4..099b0ce54db3 100644 --- a/test/cmdlineTests/linking_strict_assembly_unqualified_library_qualified_reference/output +++ b/test/cmdlineTests/linking_strict_assembly_unqualified_library_qualified_reference/output @@ -1,5 +1,5 @@ -======= linking_strict_assembly_unqualified_library_qualified_reference/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "a" { diff --git a/test/cmdlineTests/linking_strict_assembly_unqualified_library_unqualified_reference/output b/test/cmdlineTests/linking_strict_assembly_unqualified_library_unqualified_reference/output index d91d89f5ca69..b4bb825435c3 100644 --- a/test/cmdlineTests/linking_strict_assembly_unqualified_library_unqualified_reference/output +++ b/test/cmdlineTests/linking_strict_assembly_unqualified_library_unqualified_reference/output @@ -1,5 +1,5 @@ -======= linking_strict_assembly_unqualified_library_unqualified_reference/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "a" { diff --git a/test/cmdlineTests/linking_strict_assembly_unresolved_references/output b/test/cmdlineTests/linking_strict_assembly_unresolved_references/output index 3b2d84ab3c6b..7b45cae6eb61 100644 --- a/test/cmdlineTests/linking_strict_assembly_unresolved_references/output +++ b/test/cmdlineTests/linking_strict_assembly_unresolved_references/output @@ -1,5 +1,5 @@ -======= linking_strict_assembly_unresolved_references/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "a" { @@ -18,19 +18,19 @@ Binary representation: 73123456789012345678901234567890123456789073__$fb58009a6b1ecea3b9d99bedd645df4ec3$__905f5560015500 Text representation: - /* "linking_strict_assembly_unresolved_references/input.yul":59:95 */ + /* "input.yul":59:95 */ linkerSymbol("05b0326038374a21e0895480a58bda0768cdcc04c8d18f154362d1ca5223d245") - /* "linking_strict_assembly_unresolved_references/input.yul":121:157 */ + /* "input.yul":121:157 */ linkerSymbol("fb58009a6b1ecea3b9d99bedd645df4ec308f17bc0087e5f39d078f77f809177") - /* "linking_strict_assembly_unresolved_references/input.yul":170:186 */ + /* "input.yul":170:186 */ swap1 - /* "linking_strict_assembly_unresolved_references/input.yul":177:178 */ + /* "input.yul":177:178 */ 0x00 - /* "linking_strict_assembly_unresolved_references/input.yul":170:186 */ + /* "input.yul":170:186 */ sstore - /* "linking_strict_assembly_unresolved_references/input.yul":206:207 */ + /* "input.yul":206:207 */ 0x01 - /* "linking_strict_assembly_unresolved_references/input.yul":199:215 */ + /* "input.yul":199:215 */ sstore - /* "linking_strict_assembly_unresolved_references/input.yul":22:231 */ + /* "input.yul":22:231 */ stop diff --git a/test/cmdlineTests/linking_unqualified_library_name/args b/test/cmdlineTests/linking_unqualified_library_name/args index 6118acf02caf..08f3b8cd1c06 100644 --- a/test/cmdlineTests/linking_unqualified_library_name/args +++ b/test/cmdlineTests/linking_unqualified_library_name/args @@ -1 +1 @@ -linking_unqualified_library_name/contract1.sol linking_unqualified_library_name/contract2.sol --bin --libraries Log:0x7777777777777777777777777777777777777777 +contract1.sol contract2.sol --bin --libraries Log:0x7777777777777777777777777777777777777777 diff --git a/test/cmdlineTests/linking_unqualified_library_name/contract1.sol b/test/cmdlineTests/linking_unqualified_library_name/contract1.sol index 38e43f9d493e..893c63af07be 100644 --- a/test/cmdlineTests/linking_unqualified_library_name/contract1.sol +++ b/test/cmdlineTests/linking_unqualified_library_name/contract1.sol @@ -2,7 +2,7 @@ pragma solidity >=0.0; -import "linking_unqualified_library_name/error.sol"; +import "error.sol"; contract C { function foo() public { diff --git a/test/cmdlineTests/linking_unqualified_library_name/contract2.sol b/test/cmdlineTests/linking_unqualified_library_name/contract2.sol index 6ddb8ad6e286..d59420962939 100644 --- a/test/cmdlineTests/linking_unqualified_library_name/contract2.sol +++ b/test/cmdlineTests/linking_unqualified_library_name/contract2.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.0; -import "linking_unqualified_library_name/math.sol"; +import "math.sol"; contract C { function foo() public { diff --git a/test/cmdlineTests/linking_unqualified_library_name/output b/test/cmdlineTests/linking_unqualified_library_name/output index be64a93c9bbc..68e254363fa1 100644 --- a/test/cmdlineTests/linking_unqualified_library_name/output +++ b/test/cmdlineTests/linking_unqualified_library_name/output @@ -1,20 +1,20 @@ -======= linking_unqualified_library_name/contract1.sol:C ======= +======= contract1.sol:C ======= Binary: -__$cdf6d5ab08a9335b02e7c2475aa27d04fa$__ +__$4a937a7d3d68a205b3b2520e23ccff31ea$__ -// $cdf6d5ab08a9335b02e7c2475aa27d04fa$ -> linking_unqualified_library_name/error.sol:Log +// $4a937a7d3d68a205b3b2520e23ccff31ea$ -> error.sol:Log -======= linking_unqualified_library_name/contract2.sol:C ======= +======= contract2.sol:C ======= Binary: -__$22584241c2fc4f2884d5222245463779a8$__ +__$b77e1024bb5d89efefbab5fb1f7cb8fde7$__ -// $22584241c2fc4f2884d5222245463779a8$ -> linking_unqualified_library_name/math.sol:Log +// $b77e1024bb5d89efefbab5fb1f7cb8fde7$ -> math.sol:Log -======= linking_unqualified_library_name/error.sol:Log ======= +======= error.sol:Log ======= Binary: -======= linking_unqualified_library_name/math.sol:Log ======= +======= math.sol:Log ======= Binary: diff --git a/test/cmdlineTests/mcopy_bytes_array_abi_decode/args b/test/cmdlineTests/mcopy_bytes_array_abi_decode/args index 4a03d8d932b9..a346a1eb7963 100644 --- a/test/cmdlineTests/mcopy_bytes_array_abi_decode/args +++ b/test/cmdlineTests/mcopy_bytes_array_abi_decode/args @@ -1 +1 @@ ---evm-version cancun --no-cbor-metadata --via-ir --ir --debug-info none +--no-cbor-metadata --via-ir --ir --debug-info none diff --git a/test/cmdlineTests/mcopy_bytes_array_abi_decode/err b/test/cmdlineTests/mcopy_bytes_array_abi_decode/err index de32e66295be..ead85d933e3a 100644 --- a/test/cmdlineTests/mcopy_bytes_array_abi_decode/err +++ b/test/cmdlineTests/mcopy_bytes_array_abi_decode/err @@ -1,5 +1,5 @@ Warning: Statement has no effect. - --> mcopy_bytes_array_abi_decode/input.sol:7:9: + --> input.sol:7:9: | 7 | abi.decode("abcd", (bytes)); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/mcopy_bytes_array_abi_decode/output b/test/cmdlineTests/mcopy_bytes_array_abi_decode/output index 2a24ec834fa1..806094f76a15 100644 --- a/test/cmdlineTests/mcopy_bytes_array_abi_decode/output +++ b/test/cmdlineTests/mcopy_bytes_array_abi_decode/output @@ -1,6 +1,6 @@ IR: -/// @use-src 0:"mcopy_bytes_array_abi_decode/input.sol" +/// @use-src 0:"input.sol" object "C_15" { code { @@ -27,7 +27,7 @@ object "C_15" { } } - /// @use-src 0:"mcopy_bytes_array_abi_decode/input.sol" + /// @use-src 0:"input.sol" object "C_15_deployed" { code { diff --git a/test/cmdlineTests/mcopy_bytes_array_returned_from_function/args b/test/cmdlineTests/mcopy_bytes_array_returned_from_function/args index c74711ba8aec..a582f88e9c3d 100644 --- a/test/cmdlineTests/mcopy_bytes_array_returned_from_function/args +++ b/test/cmdlineTests/mcopy_bytes_array_returned_from_function/args @@ -1 +1 @@ ---evm-version cancun --no-cbor-metadata --via-ir --optimize --ir-optimized --debug-info none +--no-cbor-metadata --via-ir --optimize --ir-optimized --debug-info none diff --git a/test/cmdlineTests/mcopy_bytes_array_returned_from_function/output b/test/cmdlineTests/mcopy_bytes_array_returned_from_function/output index 170cdf1a7a3a..f3cd766954c5 100644 --- a/test/cmdlineTests/mcopy_bytes_array_returned_from_function/output +++ b/test/cmdlineTests/mcopy_bytes_array_returned_from_function/output @@ -1,5 +1,5 @@ Optimized IR: -/// @use-src 0:"mcopy_bytes_array_returned_from_function/input.sol" +/// @use-src 0:"input.sol" object "C_14" { code { { @@ -11,7 +11,7 @@ object "C_14" { return(_1, _2) } } - /// @use-src 0:"mcopy_bytes_array_returned_from_function/input.sol" + /// @use-src 0:"input.sol" object "C_14_deployed" { code { { diff --git a/test/cmdlineTests/mcopy_string_literal_returned_from_function/args b/test/cmdlineTests/mcopy_string_literal_returned_from_function/args index c74711ba8aec..a582f88e9c3d 100644 --- a/test/cmdlineTests/mcopy_string_literal_returned_from_function/args +++ b/test/cmdlineTests/mcopy_string_literal_returned_from_function/args @@ -1 +1 @@ ---evm-version cancun --no-cbor-metadata --via-ir --optimize --ir-optimized --debug-info none +--no-cbor-metadata --via-ir --optimize --ir-optimized --debug-info none diff --git a/test/cmdlineTests/mcopy_string_literal_returned_from_function/output b/test/cmdlineTests/mcopy_string_literal_returned_from_function/output index 548c34de8628..3adeae0f58e6 100644 --- a/test/cmdlineTests/mcopy_string_literal_returned_from_function/output +++ b/test/cmdlineTests/mcopy_string_literal_returned_from_function/output @@ -1,5 +1,5 @@ Optimized IR: -/// @use-src 0:"mcopy_string_literal_returned_from_function/input.sol" +/// @use-src 0:"input.sol" object "C_10" { code { { @@ -11,7 +11,7 @@ object "C_10" { return(_1, _2) } } - /// @use-src 0:"mcopy_string_literal_returned_from_function/input.sol" + /// @use-src 0:"input.sol" object "C_10_deployed" { code { { diff --git a/test/cmdlineTests/memoryguard_shadowing_by_inline_assembly_identifiers/output b/test/cmdlineTests/memoryguard_shadowing_by_inline_assembly_identifiers/output index 842580597d12..1ea3bdf20209 100644 --- a/test/cmdlineTests/memoryguard_shadowing_by_inline_assembly_identifiers/output +++ b/test/cmdlineTests/memoryguard_shadowing_by_inline_assembly_identifiers/output @@ -1,6 +1,6 @@ IR: -/// @use-src 0:"memoryguard_shadowing_by_inline_assembly_identifiers/input.sol" +/// @use-src 0:"input.sol" object "C_10" { code { @@ -27,7 +27,7 @@ object "C_10" { } } - /// @use-src 0:"memoryguard_shadowing_by_inline_assembly_identifiers/input.sol" + /// @use-src 0:"input.sol" object "C_10_deployed" { code { diff --git a/test/cmdlineTests/message_format/err b/test/cmdlineTests/message_format/err index eee8267e25f3..1bb6a6469273 100644 --- a/test/cmdlineTests/message_format/err +++ b/test/cmdlineTests/message_format/err @@ -1,50 +1,50 @@ Warning: Source file does not specify required compiler version! ---> message_format/input.sol +--> input.sol Warning: Unused local variable. - --> message_format/input.sol:9:27: + --> input.sol:9:27: | 9 | function f() public { int x; } | ^^^^^ Warning: Unused local variable. - --> message_format/input.sol:10:27: + --> input.sol:10:27: | 10 | function g() public { int x; } | ^^^^^ Warning: Unused local variable. - --> message_format/input.sol:99:14: + --> input.sol:99:14: | 99 | /**/ int a; /**/ | ^^^^^ Warning: Unused local variable. - --> message_format/input.sol:100:14: + --> input.sol:100:14: | 100 | /**/ int b; /**/ | ^^^^^ Warning: Unused local variable. - --> message_format/input.sol:101:14: + --> input.sol:101:14: | 101 | /**/ int c; /**/ | ^^^^^ Warning: Function state mutability can be restricted to pure - --> message_format/input.sol:9:5: + --> input.sol:9:5: | 9 | function f() public { int x; } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Warning: Function state mutability can be restricted to pure - --> message_format/input.sol:10:5: + --> input.sol:10:5: | 10 | function g() public { int x; } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Warning: Function state mutability can be restricted to pure - --> message_format/input.sol:11:5: + --> input.sol:11:5: | 11 | function h() public { | ^ (Relevant source part starts here and spans across multiple lines). diff --git a/test/cmdlineTests/message_format_utf8/err b/test/cmdlineTests/message_format_utf8/err index 58d45127cb3d..e14a048fc54b 100644 --- a/test/cmdlineTests/message_format_utf8/err +++ b/test/cmdlineTests/message_format_utf8/err @@ -1,29 +1,29 @@ Warning: Statement has no effect. - --> message_format_utf8/input.sol:5:51: + --> input.sol:5:51: | 5 | /* ©©©©ᄅ©©©©© 2017 */ constructor () { unicode"©©©©ᄅ©©©©©" ; } | ^^^^^^^^^^^^^^^^^^^ Warning: Statement has no effect. - --> message_format_utf8/input.sol:9:25: + --> input.sol:9:25: | 9 | unicode"S = π × r²"; | ^^^^^^^^^^^^^^^^^^^ Warning: Statement has no effect. - --> message_format_utf8/input.sol:10:39: + --> input.sol:10:39: | 10 | /* ₀₁₂₃₄⁵⁶⁷⁸⁹ */ unicode"∑ 1/n! ≈ 2.7"; // tabs in-between | ^^^^^^^^^^^^^^^^^^^^^ Warning: Statement has no effect. - --> message_format_utf8/input.sol:11:30: + --> input.sol:11:30: | 11 | /* Ŀŏŗėɯ ïƥŝʉɱ */ unicode"μὴ χεῖρον βέλτιστον"; // tabs in-between and inside | ^^^^^^^^^^ ^^^^^^ ^^^^^^^^^^ Warning: Function state mutability can be restricted to pure - --> message_format_utf8/input.sol:15:2: + --> input.sol:15:2: | 15 | function selector() public returns(uint) { // starts with tab | ^ (Relevant source part starts here and spans across multiple lines). diff --git a/test/cmdlineTests/metadata/output b/test/cmdlineTests/metadata/output index b6a684b844f3..a62f2ed145f8 100644 --- a/test/cmdlineTests/metadata/output +++ b/test/cmdlineTests/metadata/output @@ -1,4 +1,4 @@ -======= metadata/input.sol:C ======= +======= input.sol:C ======= Metadata: -{"compiler":{"version": ""},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"compilationTarget":{"metadata/input.sol":"C"},"evmVersion":"cancun","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":false,"runs":200},"remappings":[]},"sources":{"metadata/input.sol":{"keccak256":"0x5cf617b1707a484e3c4bd59643013dec76ab7d75900b46855214729ae3e0ceb0","license":"GPL-3.0","urls":["bzz-raw://ac418a02dfadf87234150d3568f33269e3f49460345cb39300e017a6d755eff2","dweb:/ipfs/QmQq3owBu25x2WV46HB1WyKzJpxiAPecU7eMKqtXCF7eeS"]}},"version":1} +{"compiler":{"version": ""},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"compilationTarget":{"input.sol":"C"},"evmVersion":"prague","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":false,"runs":200},"remappings":[]},"sources":{"input.sol":{"keccak256":"0x5cf617b1707a484e3c4bd59643013dec76ab7d75900b46855214729ae3e0ceb0","license":"GPL-3.0","urls":["bzz-raw://ac418a02dfadf87234150d3568f33269e3f49460345cb39300e017a6d755eff2","dweb:/ipfs/QmQq3owBu25x2WV46HB1WyKzJpxiAPecU7eMKqtXCF7eeS"]}},"version":1} diff --git a/test/cmdlineTests/model_checker_bmc_loop_iterations/err b/test/cmdlineTests/model_checker_bmc_loop_iterations/err index cbb2b0f9daca..0ec7a09b6d3c 100644 --- a/test/cmdlineTests/model_checker_bmc_loop_iterations/err +++ b/test/cmdlineTests/model_checker_bmc_loop_iterations/err @@ -1,5 +1,5 @@ Warning: BMC: Assertion violation happens here. - --> model_checker_bmc_loop_iterations/input.sol:10:3: + --> input.sol:10:3: | 10 | assert(x == 3); | ^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_bmc_loop_iterations_no_argument/err b/test/cmdlineTests/model_checker_bmc_loop_iterations_no_argument/err index 1bd45b6c6f57..4b1a2ea3b1fd 100644 --- a/test/cmdlineTests/model_checker_bmc_loop_iterations_no_argument/err +++ b/test/cmdlineTests/model_checker_bmc_loop_iterations_no_argument/err @@ -1 +1 @@ -Error: the argument ('model_checker_bmc_loop_iterations_no_argument/input.sol') for option '--model-checker-bmc-loop-iterations' is invalid +Error: the argument ('input.sol') for option '--model-checker-bmc-loop-iterations' is invalid diff --git a/test/cmdlineTests/model_checker_contracts_all/err b/test/cmdlineTests/model_checker_contracts_all/err index 9135483d5f79..0d19af174c39 100644 --- a/test/cmdlineTests/model_checker_contracts_all/err +++ b/test/cmdlineTests/model_checker_contracts_all/err @@ -6,7 +6,7 @@ x = 0 Transaction trace: B.constructor() B.f(0) - --> model_checker_contracts_all/input.sol:5:9: + --> input.sol:5:9: | 5 | assert(x > 0); | ^^^^^^^^^^^^^ @@ -19,7 +19,7 @@ y = 0 Transaction trace: A.constructor() A.g(0) - --> model_checker_contracts_all/input.sol:10:9: + --> input.sol:10:9: | 10 | assert(y > 0); | ^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_contracts_all_explicit/args b/test/cmdlineTests/model_checker_contracts_all_explicit/args index 6e6bee97aed8..151a636fe265 100644 --- a/test/cmdlineTests/model_checker_contracts_all_explicit/args +++ b/test/cmdlineTests/model_checker_contracts_all_explicit/args @@ -1 +1 @@ ---model-checker-engine all --model-checker-contracts model_checker_contracts_all_explicit/input.sol:B,model_checker_contracts_all_explicit/input.sol:A +--model-checker-engine all --model-checker-contracts input.sol:B,input.sol:A diff --git a/test/cmdlineTests/model_checker_contracts_all_explicit/err b/test/cmdlineTests/model_checker_contracts_all_explicit/err index 003c0dffe018..25ce2e5e9947 100644 --- a/test/cmdlineTests/model_checker_contracts_all_explicit/err +++ b/test/cmdlineTests/model_checker_contracts_all_explicit/err @@ -6,7 +6,7 @@ x = 0 Transaction trace: B.constructor() B.f(0) - --> model_checker_contracts_all_explicit/input.sol:5:3: + --> input.sol:5:3: | 5 | assert(x > 0); | ^^^^^^^^^^^^^ @@ -19,7 +19,7 @@ y = 0 Transaction trace: A.constructor() A.g(0) - --> model_checker_contracts_all_explicit/input.sol:10:3: + --> input.sol:10:3: | 10 | assert(y > 0); | ^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_contracts_inexistent_contract/args b/test/cmdlineTests/model_checker_contracts_inexistent_contract/args index b3c44af85b87..1128064d8a59 100644 --- a/test/cmdlineTests/model_checker_contracts_inexistent_contract/args +++ b/test/cmdlineTests/model_checker_contracts_inexistent_contract/args @@ -1 +1 @@ ---model-checker-engine all --model-checker-contracts model_checker_contracts_inexistent_contract/input.sol:C +--model-checker-engine all --model-checker-contracts input.sol:C diff --git a/test/cmdlineTests/model_checker_contracts_inexistent_contract/err b/test/cmdlineTests/model_checker_contracts_inexistent_contract/err index 00b97763f340..72f613bf3ccd 100644 --- a/test/cmdlineTests/model_checker_contracts_inexistent_contract/err +++ b/test/cmdlineTests/model_checker_contracts_inexistent_contract/err @@ -1,27 +1 @@ -Warning: Requested contract "C" does not exist in source "model_checker_contracts_inexistent_contract/input.sol". - -Warning: CHC: Assertion violation happens here. -Counterexample: - -x = 0 - -Transaction trace: -B.constructor() -B.f(0) - --> model_checker_contracts_inexistent_contract/input.sol:5:3: - | -5 | assert(x > 0); - | ^^^^^^^^^^^^^ - -Warning: CHC: Assertion violation happens here. -Counterexample: - -y = 0 - -Transaction trace: -A.constructor() -A.g(0) - --> model_checker_contracts_inexistent_contract/input.sol:10:3: - | -10 | assert(y > 0); - | ^^^^^^^^^^^^^ +Warning: Requested contract "C" does not exist in source "input.sol". diff --git a/test/cmdlineTests/model_checker_contracts_inexistent_source/args b/test/cmdlineTests/model_checker_contracts_inexistent_source/args index 6d91ecc34355..b98256bf4e9b 100644 --- a/test/cmdlineTests/model_checker_contracts_inexistent_source/args +++ b/test/cmdlineTests/model_checker_contracts_inexistent_source/args @@ -1 +1 @@ ---model-checker-engine all --model-checker-contracts model_checker_contracts_inexistent_source/A.sol:A +--model-checker-engine all --model-checker-contracts A.sol:A diff --git a/test/cmdlineTests/model_checker_contracts_inexistent_source/err b/test/cmdlineTests/model_checker_contracts_inexistent_source/err index 218588ad83d2..3c93482595f5 100644 --- a/test/cmdlineTests/model_checker_contracts_inexistent_source/err +++ b/test/cmdlineTests/model_checker_contracts_inexistent_source/err @@ -1 +1 @@ -Warning: Requested source "model_checker_contracts_inexistent_source/A.sol" does not exist. +Warning: Requested source "A.sol" does not exist. diff --git a/test/cmdlineTests/model_checker_contracts_one_contract_missing/args b/test/cmdlineTests/model_checker_contracts_one_contract_missing/args index 7ea3d3f04610..8670db9b57a9 100644 --- a/test/cmdlineTests/model_checker_contracts_one_contract_missing/args +++ b/test/cmdlineTests/model_checker_contracts_one_contract_missing/args @@ -1 +1 @@ ---model-checker-engine all --model-checker-contracts model_checker_contracts_all_explicit/input.sol:,model_checker_contracts_all_explicit/input.sol:A +--model-checker-engine all --model-checker-contracts input.sol:,input.sol:A diff --git a/test/cmdlineTests/model_checker_contracts_one_contract_missing/err b/test/cmdlineTests/model_checker_contracts_one_contract_missing/err index d4e93bcd705e..88e675624e2f 100644 --- a/test/cmdlineTests/model_checker_contracts_one_contract_missing/err +++ b/test/cmdlineTests/model_checker_contracts_one_contract_missing/err @@ -1 +1 @@ -Error: Invalid option for --model-checker-contracts: model_checker_contracts_all_explicit/input.sol:,model_checker_contracts_all_explicit/input.sol:A +Error: Invalid option for --model-checker-contracts: input.sol:,input.sol:A diff --git a/test/cmdlineTests/model_checker_contracts_only_one/args b/test/cmdlineTests/model_checker_contracts_only_one/args index ae76a81d6735..ff3ad9e1d4fe 100644 --- a/test/cmdlineTests/model_checker_contracts_only_one/args +++ b/test/cmdlineTests/model_checker_contracts_only_one/args @@ -1 +1 @@ ---model-checker-engine all --model-checker-contracts model_checker_contracts_only_one/input.sol:A +--model-checker-engine all --model-checker-contracts input.sol:A diff --git a/test/cmdlineTests/model_checker_contracts_only_one/err b/test/cmdlineTests/model_checker_contracts_only_one/err index 2088e19c7a2f..4472abefaf32 100644 --- a/test/cmdlineTests/model_checker_contracts_only_one/err +++ b/test/cmdlineTests/model_checker_contracts_only_one/err @@ -4,9 +4,9 @@ Counterexample: x = 0 Transaction trace: -B.constructor() +A.constructor() B.f(0) - --> model_checker_contracts_only_one/input.sol:5:3: + --> input.sol:5:3: | 5 | assert(x > 0); | ^^^^^^^^^^^^^ @@ -19,7 +19,7 @@ y = 0 Transaction trace: A.constructor() A.g(0) - --> model_checker_contracts_only_one/input.sol:10:3: + --> input.sol:10:3: | 10 | assert(y > 0); | ^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_engine_all/err b/test/cmdlineTests/model_checker_engine_all/err index 12614fd55f82..18b8774650b9 100644 --- a/test/cmdlineTests/model_checker_engine_all/err +++ b/test/cmdlineTests/model_checker_engine_all/err @@ -6,7 +6,7 @@ x = 0 Transaction trace: test.constructor() test.f(0) - --> model_checker_engine_all/input.sol:5:3: + --> input.sol:5:3: | 5 | assert(x > 0); | ^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_engine_bmc/err b/test/cmdlineTests/model_checker_engine_bmc/err index ed46539d6510..dcedef48bf09 100644 --- a/test/cmdlineTests/model_checker_engine_bmc/err +++ b/test/cmdlineTests/model_checker_engine_bmc/err @@ -1,5 +1,5 @@ Warning: BMC: Assertion violation happens here. - --> model_checker_engine_bmc/input.sol:5:3: + --> input.sol:5:3: | 5 | assert(x > 0); | ^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_engine_chc/err b/test/cmdlineTests/model_checker_engine_chc/err index 95198fa2027a..18b8774650b9 100644 --- a/test/cmdlineTests/model_checker_engine_chc/err +++ b/test/cmdlineTests/model_checker_engine_chc/err @@ -6,7 +6,7 @@ x = 0 Transaction trace: test.constructor() test.f(0) - --> model_checker_engine_chc/input.sol:5:3: + --> input.sol:5:3: | 5 | assert(x > 0); | ^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_ext_calls_trusted_chc/err b/test/cmdlineTests/model_checker_ext_calls_trusted_chc/err index e9c2d70a9739..58be5002f2d1 100644 --- a/test/cmdlineTests/model_checker_ext_calls_trusted_chc/err +++ b/test/cmdlineTests/model_checker_ext_calls_trusted_chc/err @@ -1,5 +1,5 @@ Warning: Function state mutability can be restricted to pure - --> model_checker_ext_calls_trusted_chc/input.sol:5:2: + --> input.sol:5:2: | 5 | function f() public view returns (uint) { | ^ (Relevant source part starts here and spans across multiple lines). diff --git a/test/cmdlineTests/model_checker_ext_calls_untrusted_chc/err b/test/cmdlineTests/model_checker_ext_calls_untrusted_chc/err index b06333e43bd5..73b355510e2f 100644 --- a/test/cmdlineTests/model_checker_ext_calls_untrusted_chc/err +++ b/test/cmdlineTests/model_checker_ext_calls_untrusted_chc/err @@ -8,7 +8,7 @@ Transaction trace: test.constructor() test.g(0) e.f() -- untrusted external call - --> model_checker_ext_calls_untrusted_chc/input.sol:11:3: + --> input.sol:11:3: | 11 | assert(x == 0); | ^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_invariants_all/err b/test/cmdlineTests/model_checker_invariants_all/err index dcef00b5fd0e..b47334040b61 100644 --- a/test/cmdlineTests/model_checker_invariants_all/err +++ b/test/cmdlineTests/model_checker_invariants_all/err @@ -1,8 +1,8 @@ Info: CHC: 1 verification condition(s) proved safe! Enable the model checker option "show proved safe" to see all of them. -Info: Contract invariant(s) for model_checker_invariants_all/input.sol:test: +Info: Contract invariant(s) for input.sol:test: (true || !(x >= 1)) -Reentrancy property(ies) for model_checker_invariants_all/input.sol:test: +Reentrancy property(ies) for input.sol:test: ((( = 0) && (x!6 = x!4) && (x' = x)) || true || true || true || true) = 0 -> no errors = 1 -> Assertion failed at assert(x == 0) diff --git a/test/cmdlineTests/model_checker_invariants_contract/err b/test/cmdlineTests/model_checker_invariants_contract/err index 3ecad6b35d48..2ea993088670 100644 --- a/test/cmdlineTests/model_checker_invariants_contract/err +++ b/test/cmdlineTests/model_checker_invariants_contract/err @@ -1,4 +1,4 @@ Info: CHC: 1 verification condition(s) proved safe! Enable the model checker option "show proved safe" to see all of them. -Info: Contract invariant(s) for model_checker_invariants_contract/input.sol:test: +Info: Contract invariant(s) for input.sol:test: (true || !(x >= 1)) diff --git a/test/cmdlineTests/model_checker_invariants_contract_eld/err b/test/cmdlineTests/model_checker_invariants_contract_eld/err index 29c5a5bc8eae..4dc823ec8880 100644 --- a/test/cmdlineTests/model_checker_invariants_contract_eld/err +++ b/test/cmdlineTests/model_checker_invariants_contract_eld/err @@ -1,4 +1,4 @@ Info: CHC: 1 verification condition(s) proved safe! Enable the model checker option "show proved safe" to see all of them. -Info: Contract invariant(s) for model_checker_invariants_contract_eld/input.sol:test: +Info: Contract invariant(s) for input.sol:test: (x = 0) diff --git a/test/cmdlineTests/model_checker_invariants_contract_reentrancy/err b/test/cmdlineTests/model_checker_invariants_contract_reentrancy/err index 7764e89abc59..b47334040b61 100644 --- a/test/cmdlineTests/model_checker_invariants_contract_reentrancy/err +++ b/test/cmdlineTests/model_checker_invariants_contract_reentrancy/err @@ -1,8 +1,8 @@ Info: CHC: 1 verification condition(s) proved safe! Enable the model checker option "show proved safe" to see all of them. -Info: Contract invariant(s) for model_checker_invariants_contract_reentrancy/input.sol:test: +Info: Contract invariant(s) for input.sol:test: (true || !(x >= 1)) -Reentrancy property(ies) for model_checker_invariants_contract_reentrancy/input.sol:test: +Reentrancy property(ies) for input.sol:test: ((( = 0) && (x!6 = x!4) && (x' = x)) || true || true || true || true) = 0 -> no errors = 1 -> Assertion failed at assert(x == 0) diff --git a/test/cmdlineTests/model_checker_invariants_reentrancy/err b/test/cmdlineTests/model_checker_invariants_reentrancy/err index 8891b0e18c59..42ac3ca73311 100644 --- a/test/cmdlineTests/model_checker_invariants_reentrancy/err +++ b/test/cmdlineTests/model_checker_invariants_reentrancy/err @@ -1,6 +1,6 @@ Info: CHC: 1 verification condition(s) proved safe! Enable the model checker option "show proved safe" to see all of them. -Info: Reentrancy property(ies) for model_checker_invariants_reentrancy/input.sol:test: +Info: Reentrancy property(ies) for input.sol:test: ((( = 0) && (x!6 = x!4) && (x' = x)) || true || true || true || true) = 0 -> no errors = 1 -> Assertion failed at assert(x == 0) diff --git a/test/cmdlineTests/model_checker_show_proved_safe_default_all_engines/err b/test/cmdlineTests/model_checker_show_proved_safe_default_all_engines/err index b896b21bc7f9..730e43b9588e 100644 --- a/test/cmdlineTests/model_checker_show_proved_safe_default_all_engines/err +++ b/test/cmdlineTests/model_checker_show_proved_safe_default_all_engines/err @@ -1,5 +1,5 @@ Warning: Function state mutability can be restricted to pure - --> model_checker_show_proved_safe_default_all_engines/input.sol:4:5: + --> input.sol:4:5: | 4 | function f(uint8 x) public { | ^ (Relevant source part starts here and spans across multiple lines). diff --git a/test/cmdlineTests/model_checker_show_proved_safe_default_bmc/err b/test/cmdlineTests/model_checker_show_proved_safe_default_bmc/err index f4a2d33e053b..7146c519260c 100644 --- a/test/cmdlineTests/model_checker_show_proved_safe_default_bmc/err +++ b/test/cmdlineTests/model_checker_show_proved_safe_default_bmc/err @@ -1,5 +1,5 @@ Warning: Function state mutability can be restricted to pure - --> model_checker_show_proved_safe_default_bmc/input.sol:4:5: + --> input.sol:4:5: | 4 | function f(uint8 x) public { | ^ (Relevant source part starts here and spans across multiple lines). diff --git a/test/cmdlineTests/model_checker_show_proved_safe_default_chc/err b/test/cmdlineTests/model_checker_show_proved_safe_default_chc/err index ab73c6bf56cd..730e43b9588e 100644 --- a/test/cmdlineTests/model_checker_show_proved_safe_default_chc/err +++ b/test/cmdlineTests/model_checker_show_proved_safe_default_chc/err @@ -1,5 +1,5 @@ Warning: Function state mutability can be restricted to pure - --> model_checker_show_proved_safe_default_chc/input.sol:4:5: + --> input.sol:4:5: | 4 | function f(uint8 x) public { | ^ (Relevant source part starts here and spans across multiple lines). diff --git a/test/cmdlineTests/model_checker_show_proved_safe_true_all_engines/err b/test/cmdlineTests/model_checker_show_proved_safe_true_all_engines/err index 297eb497a34d..d45cd29d3f6d 100644 --- a/test/cmdlineTests/model_checker_show_proved_safe_true_all_engines/err +++ b/test/cmdlineTests/model_checker_show_proved_safe_true_all_engines/err @@ -1,17 +1,17 @@ Warning: Function state mutability can be restricted to pure - --> model_checker_show_proved_safe_true_all_engines/input.sol:4:5: + --> input.sol:4:5: | 4 | function f(uint8 x) public { | ^ (Relevant source part starts here and spans across multiple lines). Info: CHC: Assertion violation check is safe! - --> model_checker_show_proved_safe_true_all_engines/input.sol:5:9: + --> input.sol:5:9: | 5 | assert(x >= 0); | ^^^^^^^^^^^^^^ Info: CHC: Assertion violation check is safe! - --> model_checker_show_proved_safe_true_all_engines/input.sol:6:9: + --> input.sol:6:9: | 6 | assert(x < 1000); | ^^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_show_proved_safe_true_bmc/err b/test/cmdlineTests/model_checker_show_proved_safe_true_bmc/err index bcec557f61ae..6bcf720faef7 100644 --- a/test/cmdlineTests/model_checker_show_proved_safe_true_bmc/err +++ b/test/cmdlineTests/model_checker_show_proved_safe_true_bmc/err @@ -1,17 +1,17 @@ Warning: Function state mutability can be restricted to pure - --> model_checker_show_proved_safe_true_bmc/input.sol:4:5: + --> input.sol:4:5: | 4 | function f(uint8 x) public { | ^ (Relevant source part starts here and spans across multiple lines). Info: BMC: Assertion violation check is safe! - --> model_checker_show_proved_safe_true_bmc/input.sol:5:9: + --> input.sol:5:9: | 5 | assert(x >= 0); | ^^^^^^^^^^^^^^ Info: BMC: Assertion violation check is safe! - --> model_checker_show_proved_safe_true_bmc/input.sol:6:9: + --> input.sol:6:9: | 6 | assert(x < 1000); | ^^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_show_proved_safe_true_chc/err b/test/cmdlineTests/model_checker_show_proved_safe_true_chc/err index fc14f494676f..d45cd29d3f6d 100644 --- a/test/cmdlineTests/model_checker_show_proved_safe_true_chc/err +++ b/test/cmdlineTests/model_checker_show_proved_safe_true_chc/err @@ -1,17 +1,17 @@ Warning: Function state mutability can be restricted to pure - --> model_checker_show_proved_safe_true_chc/input.sol:4:5: + --> input.sol:4:5: | 4 | function f(uint8 x) public { | ^ (Relevant source part starts here and spans across multiple lines). Info: CHC: Assertion violation check is safe! - --> model_checker_show_proved_safe_true_chc/input.sol:5:9: + --> input.sol:5:9: | 5 | assert(x >= 0); | ^^^^^^^^^^^^^^ Info: CHC: Assertion violation check is safe! - --> model_checker_show_proved_safe_true_chc/input.sol:6:9: + --> input.sol:6:9: | 6 | assert(x < 1000); | ^^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_show_unproved_true_all_engines/err b/test/cmdlineTests/model_checker_show_unproved_true_all_engines/err index 7a338f614952..18f317ac8c85 100644 --- a/test/cmdlineTests/model_checker_show_unproved_true_all_engines/err +++ b/test/cmdlineTests/model_checker_show_unproved_true_all_engines/err @@ -1,5 +1,5 @@ Warning: CHC: Assertion violation might happen here. - --> model_checker_show_unproved_true_all_engines/input.sol:10:9: + --> input.sol:10:9: | 10 | assert(s.x > 0); | ^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_show_unproved_true_chc/err b/test/cmdlineTests/model_checker_show_unproved_true_chc/err index 8274f4b463f2..e68e08677316 100644 --- a/test/cmdlineTests/model_checker_show_unproved_true_chc/err +++ b/test/cmdlineTests/model_checker_show_unproved_true_chc/err @@ -1,5 +1,5 @@ Warning: CHC: Assertion violation might happen here. - --> model_checker_show_unproved_true_chc/input.sol:10:9: + --> input.sol:10:9: | 10 | assert(s.x > 0); | ^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_show_unsupported_true_all_engines/err b/test/cmdlineTests/model_checker_show_unsupported_true_all_engines/err index 53c664ffc764..681a5995649d 100644 --- a/test/cmdlineTests/model_checker_show_unsupported_true_all_engines/err +++ b/test/cmdlineTests/model_checker_show_unsupported_true_all_engines/err @@ -1,5 +1,5 @@ Warning: Inline assembly may cause SMTChecker to produce spurious warnings (false positives). - --> model_checker_show_unsupported_true_all_engines/input.sol:5:9: + --> input.sol:5:9: | 5 | assembly {} | ^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_show_unsupported_true_bmc/err b/test/cmdlineTests/model_checker_show_unsupported_true_bmc/err index 013a7b0f118c..681a5995649d 100644 --- a/test/cmdlineTests/model_checker_show_unsupported_true_bmc/err +++ b/test/cmdlineTests/model_checker_show_unsupported_true_bmc/err @@ -1,5 +1,5 @@ Warning: Inline assembly may cause SMTChecker to produce spurious warnings (false positives). - --> model_checker_show_unsupported_true_bmc/input.sol:5:9: + --> input.sol:5:9: | 5 | assembly {} | ^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_show_unsupported_true_chc/err b/test/cmdlineTests/model_checker_show_unsupported_true_chc/err index 8dad0cc65bce..681a5995649d 100644 --- a/test/cmdlineTests/model_checker_show_unsupported_true_chc/err +++ b/test/cmdlineTests/model_checker_show_unsupported_true_chc/err @@ -1,5 +1,5 @@ Warning: Inline assembly may cause SMTChecker to produce spurious warnings (false positives). - --> model_checker_show_unsupported_true_chc/input.sol:5:9: + --> input.sol:5:9: | 5 | assembly {} | ^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_solvers_cvc5/err b/test/cmdlineTests/model_checker_solvers_cvc5/err index 1c36b103a65d..dcedef48bf09 100644 --- a/test/cmdlineTests/model_checker_solvers_cvc5/err +++ b/test/cmdlineTests/model_checker_solvers_cvc5/err @@ -1,5 +1,5 @@ Warning: BMC: Assertion violation happens here. - --> model_checker_solvers_cvc5/input.sol:5:3: + --> input.sol:5:3: | 5 | assert(x > 0); | ^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_solvers_cvc5_eld/err b/test/cmdlineTests/model_checker_solvers_cvc5_eld/err index 81a9f3a56342..b2cb662706f2 100644 --- a/test/cmdlineTests/model_checker_solvers_cvc5_eld/err +++ b/test/cmdlineTests/model_checker_solvers_cvc5_eld/err @@ -1,7 +1,7 @@ Info: CHC: 1 verification condition(s) proved safe! Enable the model checker option "show proved safe" to see all of them. Warning: BMC: Condition is always false. - --> model_checker_solvers_cvc5_eld/input.sol:6:7: + --> input.sol:6:7: | 6 | if (y == 0) | ^^^^^^ diff --git a/test/cmdlineTests/model_checker_solvers_eld/err b/test/cmdlineTests/model_checker_solvers_eld/err index ff7ad37b313e..460764a0e997 100644 --- a/test/cmdlineTests/model_checker_solvers_eld/err +++ b/test/cmdlineTests/model_checker_solvers_eld/err @@ -1,5 +1,5 @@ Warning: CHC: Assertion violation happens here. - --> model_checker_solvers_eld/input.sol:5:3: + --> input.sol:5:3: | 5 | assert(x > 0); | ^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_solvers_z3/err b/test/cmdlineTests/model_checker_solvers_z3/err index 67349d8e17fe..18b8774650b9 100644 --- a/test/cmdlineTests/model_checker_solvers_z3/err +++ b/test/cmdlineTests/model_checker_solvers_z3/err @@ -6,7 +6,7 @@ x = 0 Transaction trace: test.constructor() test.f(0) - --> model_checker_solvers_z3/input.sol:5:3: + --> input.sol:5:3: | 5 | assert(x > 0); | ^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_solvers_z3_implicit/err b/test/cmdlineTests/model_checker_solvers_z3_implicit/err index 98d61828d9c1..18b8774650b9 100644 --- a/test/cmdlineTests/model_checker_solvers_z3_implicit/err +++ b/test/cmdlineTests/model_checker_solvers_z3_implicit/err @@ -6,7 +6,7 @@ x = 0 Transaction trace: test.constructor() test.f(0) - --> model_checker_solvers_z3_implicit/input.sol:5:3: + --> input.sol:5:3: | 5 | assert(x > 0); | ^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_solvers_z3_smtlib2/err b/test/cmdlineTests/model_checker_solvers_z3_smtlib2/err index 5699afcdeb3a..18b8774650b9 100644 --- a/test/cmdlineTests/model_checker_solvers_z3_smtlib2/err +++ b/test/cmdlineTests/model_checker_solvers_z3_smtlib2/err @@ -6,7 +6,7 @@ x = 0 Transaction trace: test.constructor() test.f(0) - --> model_checker_solvers_z3_smtlib2/input.sol:5:3: + --> input.sol:5:3: | 5 | assert(x > 0); | ^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_targets_all_all_engines/err b/test/cmdlineTests/model_checker_targets_all_all_engines/err index c67d97b61216..e095ba263c5a 100644 --- a/test/cmdlineTests/model_checker_targets_all_all_engines/err +++ b/test/cmdlineTests/model_checker_targets_all_all_engines/err @@ -8,7 +8,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 0) - --> model_checker_targets_all_all_engines/input.sol:7:3: + --> input.sol:7:3: | 7 | --x; | ^^^ @@ -23,7 +23,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 2) - --> model_checker_targets_all_all_engines/input.sol:8:3: + --> input.sol:8:3: | 8 | x + type(uint).max; | ^^^^^^^^^^^^^^^^^^ @@ -38,7 +38,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_all_all_engines/input.sol:9:3: + --> input.sol:9:3: | 9 | 2 / x; | ^^^^^ @@ -53,7 +53,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_all_all_engines/input.sol:11:3: + --> input.sol:11:3: | 11 | assert(x > 0); | ^^^^^^^^^^^^^ @@ -68,7 +68,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_all_all_engines/input.sol:12:3: + --> input.sol:12:3: | 12 | arr.pop(); | ^^^^^^^^^ @@ -83,7 +83,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_all_all_engines/input.sol:13:3: + --> input.sol:13:3: | 13 | arr[x]; | ^^^^^^ @@ -91,7 +91,7 @@ test.f(0x0, 1) Info: CHC: 1 verification condition(s) proved safe! Enable the model checker option "show proved safe" to see all of them. Warning: BMC: Condition is always true. - --> model_checker_targets_all_all_engines/input.sol:6:11: + --> input.sol:6:11: | 6 | require(x >= 0); | ^^^^^^ diff --git a/test/cmdlineTests/model_checker_targets_all_bmc/err b/test/cmdlineTests/model_checker_targets_all_bmc/err index 27a51a67bd63..3887cc6b2a7f 100644 --- a/test/cmdlineTests/model_checker_targets_all_bmc/err +++ b/test/cmdlineTests/model_checker_targets_all_bmc/err @@ -1,12 +1,12 @@ Warning: BMC: Condition is always true. - --> model_checker_targets_all_bmc/input.sol:6:11: + --> input.sol:6:11: | 6 | require(x >= 0); | ^^^^^^ Note: Callstack: Warning: BMC: Underflow (resulting value less than 0) happens here. - --> model_checker_targets_all_bmc/input.sol:7:3: + --> input.sol:7:3: | 7 | --x; | ^^^ @@ -19,7 +19,7 @@ Note: Callstack: Note: Warning: BMC: Overflow (resulting value larger than 2**256 - 1) happens here. - --> model_checker_targets_all_bmc/input.sol:8:3: + --> input.sol:8:3: | 8 | x + type(uint).max; | ^^^^^^^^^^^^^^^^^^ @@ -32,7 +32,7 @@ Note: Callstack: Note: Warning: BMC: Division by zero happens here. - --> model_checker_targets_all_bmc/input.sol:9:3: + --> input.sol:9:3: | 9 | 2 / x; | ^^^^^ @@ -45,7 +45,7 @@ Note: Callstack: Note: Warning: BMC: Insufficient funds happens here. - --> model_checker_targets_all_bmc/input.sol:10:3: + --> input.sol:10:3: | 10 | a.transfer(x); | ^^^^^^^^^^^^^ @@ -57,7 +57,7 @@ Note: Callstack: Note: Warning: BMC: Assertion violation happens here. - --> model_checker_targets_all_bmc/input.sol:11:3: + --> input.sol:11:3: | 11 | assert(x > 0); | ^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_targets_all_chc/err b/test/cmdlineTests/model_checker_targets_all_chc/err index 9c257cefe9eb..c3853983af72 100644 --- a/test/cmdlineTests/model_checker_targets_all_chc/err +++ b/test/cmdlineTests/model_checker_targets_all_chc/err @@ -8,7 +8,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 0) - --> model_checker_targets_all_chc/input.sol:7:3: + --> input.sol:7:3: | 7 | --x; | ^^^ @@ -23,7 +23,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 2) - --> model_checker_targets_all_chc/input.sol:8:3: + --> input.sol:8:3: | 8 | x + type(uint).max; | ^^^^^^^^^^^^^^^^^^ @@ -38,7 +38,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_all_chc/input.sol:9:3: + --> input.sol:9:3: | 9 | 2 / x; | ^^^^^ @@ -53,7 +53,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_all_chc/input.sol:11:3: + --> input.sol:11:3: | 11 | assert(x > 0); | ^^^^^^^^^^^^^ @@ -68,7 +68,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_all_chc/input.sol:12:3: + --> input.sol:12:3: | 12 | arr.pop(); | ^^^^^^^^^ @@ -83,7 +83,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_all_chc/input.sol:13:3: + --> input.sol:13:3: | 13 | arr[x]; | ^^^^^^ diff --git a/test/cmdlineTests/model_checker_targets_assert_bmc/err b/test/cmdlineTests/model_checker_targets_assert_bmc/err index 90486bf792d9..27395c9dc507 100644 --- a/test/cmdlineTests/model_checker_targets_assert_bmc/err +++ b/test/cmdlineTests/model_checker_targets_assert_bmc/err @@ -1,5 +1,5 @@ Warning: BMC: Assertion violation happens here. - --> model_checker_targets_assert_bmc/input.sol:11:3: + --> input.sol:11:3: | 11 | assert(x > 0); | ^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_targets_assert_chc/err b/test/cmdlineTests/model_checker_targets_assert_chc/err index 1bf48bfa9abb..ada7c3d3dc90 100644 --- a/test/cmdlineTests/model_checker_targets_assert_chc/err +++ b/test/cmdlineTests/model_checker_targets_assert_chc/err @@ -8,7 +8,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_assert_chc/input.sol:11:3: + --> input.sol:11:3: | 11 | assert(x > 0); | ^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_targets_balance_bmc/err b/test/cmdlineTests/model_checker_targets_balance_bmc/err index 39a8aac56df7..178bd66620bd 100644 --- a/test/cmdlineTests/model_checker_targets_balance_bmc/err +++ b/test/cmdlineTests/model_checker_targets_balance_bmc/err @@ -1,5 +1,5 @@ Warning: BMC: Insufficient funds happens here. - --> model_checker_targets_balance_bmc/input.sol:10:3: + --> input.sol:10:3: | 10 | a.transfer(x); | ^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_targets_constant_condition_bmc/err b/test/cmdlineTests/model_checker_targets_constant_condition_bmc/err index 6a376dd7ea5b..a7228dd768e8 100644 --- a/test/cmdlineTests/model_checker_targets_constant_condition_bmc/err +++ b/test/cmdlineTests/model_checker_targets_constant_condition_bmc/err @@ -1,5 +1,5 @@ Warning: BMC: Condition is always true. - --> model_checker_targets_constant_condition_bmc/input.sol:6:11: + --> input.sol:6:11: | 6 | require(x >= 0); | ^^^^^^ diff --git a/test/cmdlineTests/model_checker_targets_default_all_engines/err b/test/cmdlineTests/model_checker_targets_default_all_engines/err index 62d3b203cb9c..58cbc01f1436 100644 --- a/test/cmdlineTests/model_checker_targets_default_all_engines/err +++ b/test/cmdlineTests/model_checker_targets_default_all_engines/err @@ -8,7 +8,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_default_all_engines/input.sol:9:3: + --> input.sol:9:3: | 9 | 2 / x; | ^^^^^ @@ -23,7 +23,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_default_all_engines/input.sol:11:3: + --> input.sol:11:3: | 11 | assert(x > 0); | ^^^^^^^^^^^^^ @@ -38,7 +38,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_default_all_engines/input.sol:12:3: + --> input.sol:12:3: | 12 | arr.pop(); | ^^^^^^^^^ @@ -53,7 +53,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_default_all_engines/input.sol:13:3: + --> input.sol:13:3: | 13 | arr[x]; | ^^^^^^ @@ -61,7 +61,7 @@ test.f(0x0, 1) Info: CHC: 1 verification condition(s) proved safe! Enable the model checker option "show proved safe" to see all of them. Warning: BMC: Condition is always true. - --> model_checker_targets_default_all_engines/input.sol:6:11: + --> input.sol:6:11: | 6 | require(x >= 0); | ^^^^^^ diff --git a/test/cmdlineTests/model_checker_targets_default_bmc/err b/test/cmdlineTests/model_checker_targets_default_bmc/err index 1122be36b061..bc85e3cb4acc 100644 --- a/test/cmdlineTests/model_checker_targets_default_bmc/err +++ b/test/cmdlineTests/model_checker_targets_default_bmc/err @@ -1,12 +1,12 @@ Warning: BMC: Condition is always true. - --> model_checker_targets_default_bmc/input.sol:6:11: + --> input.sol:6:11: | 6 | require(x >= 0); | ^^^^^^ Note: Callstack: Warning: BMC: Division by zero happens here. - --> model_checker_targets_default_bmc/input.sol:9:3: + --> input.sol:9:3: | 9 | 2 / x; | ^^^^^ @@ -19,7 +19,7 @@ Note: Callstack: Note: Warning: BMC: Insufficient funds happens here. - --> model_checker_targets_default_bmc/input.sol:10:3: + --> input.sol:10:3: | 10 | a.transfer(x); | ^^^^^^^^^^^^^ @@ -31,7 +31,7 @@ Note: Callstack: Note: Warning: BMC: Assertion violation happens here. - --> model_checker_targets_default_bmc/input.sol:11:3: + --> input.sol:11:3: | 11 | assert(x > 0); | ^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_targets_default_chc/err b/test/cmdlineTests/model_checker_targets_default_chc/err index 70f3c5bc6072..e8b7382168ac 100644 --- a/test/cmdlineTests/model_checker_targets_default_chc/err +++ b/test/cmdlineTests/model_checker_targets_default_chc/err @@ -8,7 +8,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_default_chc/input.sol:9:3: + --> input.sol:9:3: | 9 | 2 / x; | ^^^^^ @@ -23,7 +23,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_default_chc/input.sol:11:3: + --> input.sol:11:3: | 11 | assert(x > 0); | ^^^^^^^^^^^^^ @@ -38,7 +38,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_default_chc/input.sol:12:3: + --> input.sol:12:3: | 12 | arr.pop(); | ^^^^^^^^^ @@ -53,7 +53,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_default_chc/input.sol:13:3: + --> input.sol:13:3: | 13 | arr[x]; | ^^^^^^ diff --git a/test/cmdlineTests/model_checker_targets_div_by_zero_bmc/err b/test/cmdlineTests/model_checker_targets_div_by_zero_bmc/err index bcf2c0c83a18..2d554ebceb7d 100644 --- a/test/cmdlineTests/model_checker_targets_div_by_zero_bmc/err +++ b/test/cmdlineTests/model_checker_targets_div_by_zero_bmc/err @@ -1,5 +1,5 @@ Warning: BMC: Division by zero happens here. - --> model_checker_targets_div_by_zero_bmc/input.sol:9:3: + --> input.sol:9:3: | 9 | 2 / x; | ^^^^^ diff --git a/test/cmdlineTests/model_checker_targets_div_by_zero_chc/err b/test/cmdlineTests/model_checker_targets_div_by_zero_chc/err index 3156dd90bd3f..81616b3bedab 100644 --- a/test/cmdlineTests/model_checker_targets_div_by_zero_chc/err +++ b/test/cmdlineTests/model_checker_targets_div_by_zero_chc/err @@ -8,7 +8,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_div_by_zero_chc/input.sol:9:3: + --> input.sol:9:3: | 9 | 2 / x; | ^^^^^ diff --git a/test/cmdlineTests/model_checker_targets_out_of_bounds_chc/err b/test/cmdlineTests/model_checker_targets_out_of_bounds_chc/err index b4426a80e351..907a19f1e11a 100644 --- a/test/cmdlineTests/model_checker_targets_out_of_bounds_chc/err +++ b/test/cmdlineTests/model_checker_targets_out_of_bounds_chc/err @@ -8,7 +8,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_out_of_bounds_chc/input.sol:13:3: + --> input.sol:13:3: | 13 | arr[x]; | ^^^^^^ diff --git a/test/cmdlineTests/model_checker_targets_overflow_bmc/err b/test/cmdlineTests/model_checker_targets_overflow_bmc/err index f2f475c304e8..a0f9ff1e07a9 100644 --- a/test/cmdlineTests/model_checker_targets_overflow_bmc/err +++ b/test/cmdlineTests/model_checker_targets_overflow_bmc/err @@ -1,5 +1,5 @@ Warning: BMC: Overflow (resulting value larger than 2**256 - 1) happens here. - --> model_checker_targets_overflow_bmc/input.sol:8:3: + --> input.sol:8:3: | 8 | x + type(uint).max; | ^^^^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_targets_overflow_chc/err b/test/cmdlineTests/model_checker_targets_overflow_chc/err index e7f98ff4dc7a..60298f02285a 100644 --- a/test/cmdlineTests/model_checker_targets_overflow_chc/err +++ b/test/cmdlineTests/model_checker_targets_overflow_chc/err @@ -8,7 +8,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 2) - --> model_checker_targets_overflow_chc/input.sol:8:3: + --> input.sol:8:3: | 8 | x + type(uint).max; | ^^^^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_targets_pop_empty_chc/err b/test/cmdlineTests/model_checker_targets_pop_empty_chc/err index d3478a700420..a01248775704 100644 --- a/test/cmdlineTests/model_checker_targets_pop_empty_chc/err +++ b/test/cmdlineTests/model_checker_targets_pop_empty_chc/err @@ -8,7 +8,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_pop_empty_chc/input.sol:12:3: + --> input.sol:12:3: | 12 | arr.pop(); | ^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_targets_underflow_bmc/err b/test/cmdlineTests/model_checker_targets_underflow_bmc/err index 2162bec3aac9..db14639238c6 100644 --- a/test/cmdlineTests/model_checker_targets_underflow_bmc/err +++ b/test/cmdlineTests/model_checker_targets_underflow_bmc/err @@ -1,5 +1,5 @@ Warning: BMC: Underflow (resulting value less than 0) happens here. - --> model_checker_targets_underflow_bmc/input.sol:7:3: + --> input.sol:7:3: | 7 | --x; | ^^^ diff --git a/test/cmdlineTests/model_checker_targets_underflow_chc/err b/test/cmdlineTests/model_checker_targets_underflow_chc/err index 448b0e25ca7c..57c6649a40f4 100644 --- a/test/cmdlineTests/model_checker_targets_underflow_chc/err +++ b/test/cmdlineTests/model_checker_targets_underflow_chc/err @@ -8,7 +8,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 0) - --> model_checker_targets_underflow_chc/input.sol:7:3: + --> input.sol:7:3: | 7 | --x; | ^^^ diff --git a/test/cmdlineTests/model_checker_targets_underflow_overflow_assert_bmc/err b/test/cmdlineTests/model_checker_targets_underflow_overflow_assert_bmc/err index 9712b8cb7614..670b064ce183 100644 --- a/test/cmdlineTests/model_checker_targets_underflow_overflow_assert_bmc/err +++ b/test/cmdlineTests/model_checker_targets_underflow_overflow_assert_bmc/err @@ -1,5 +1,5 @@ Warning: BMC: Underflow (resulting value less than 0) happens here. - --> model_checker_targets_underflow_overflow_assert_bmc/input.sol:7:3: + --> input.sol:7:3: | 7 | --x; | ^^^ @@ -12,7 +12,7 @@ Note: Callstack: Note: Warning: BMC: Overflow (resulting value larger than 2**256 - 1) happens here. - --> model_checker_targets_underflow_overflow_assert_bmc/input.sol:8:3: + --> input.sol:8:3: | 8 | x + type(uint).max; | ^^^^^^^^^^^^^^^^^^ @@ -25,7 +25,7 @@ Note: Callstack: Note: Warning: BMC: Assertion violation happens here. - --> model_checker_targets_underflow_overflow_assert_bmc/input.sol:11:3: + --> input.sol:11:3: | 11 | assert(x > 0); | ^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_targets_underflow_overflow_assert_chc/err b/test/cmdlineTests/model_checker_targets_underflow_overflow_assert_chc/err index a0fbbe61a543..4602e76006dc 100644 --- a/test/cmdlineTests/model_checker_targets_underflow_overflow_assert_chc/err +++ b/test/cmdlineTests/model_checker_targets_underflow_overflow_assert_chc/err @@ -8,7 +8,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 0) - --> model_checker_targets_underflow_overflow_assert_chc/input.sol:7:3: + --> input.sol:7:3: | 7 | --x; | ^^^ @@ -23,7 +23,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 2) - --> model_checker_targets_underflow_overflow_assert_chc/input.sol:8:3: + --> input.sol:8:3: | 8 | x + type(uint).max; | ^^^^^^^^^^^^^^^^^^ @@ -38,7 +38,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 1) - --> model_checker_targets_underflow_overflow_assert_chc/input.sol:11:3: + --> input.sol:11:3: | 11 | assert(x > 0); | ^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_targets_underflow_overflow_bmc/err b/test/cmdlineTests/model_checker_targets_underflow_overflow_bmc/err index f3675ac5acbe..ea6dfb99cb5d 100644 --- a/test/cmdlineTests/model_checker_targets_underflow_overflow_bmc/err +++ b/test/cmdlineTests/model_checker_targets_underflow_overflow_bmc/err @@ -1,5 +1,5 @@ Warning: BMC: Underflow (resulting value less than 0) happens here. - --> model_checker_targets_underflow_overflow_bmc/input.sol:7:3: + --> input.sol:7:3: | 7 | --x; | ^^^ @@ -12,7 +12,7 @@ Note: Callstack: Note: Warning: BMC: Overflow (resulting value larger than 2**256 - 1) happens here. - --> model_checker_targets_underflow_overflow_bmc/input.sol:8:3: + --> input.sol:8:3: | 8 | x + type(uint).max; | ^^^^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/model_checker_targets_underflow_overflow_chc/err b/test/cmdlineTests/model_checker_targets_underflow_overflow_chc/err index 0dcfb1c254a3..8eed85ac3de3 100644 --- a/test/cmdlineTests/model_checker_targets_underflow_overflow_chc/err +++ b/test/cmdlineTests/model_checker_targets_underflow_overflow_chc/err @@ -8,7 +8,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 0) - --> model_checker_targets_underflow_overflow_chc/input.sol:7:3: + --> input.sol:7:3: | 7 | --x; | ^^^ @@ -23,7 +23,7 @@ Transaction trace: test.constructor() State: arr = [] test.f(0x0, 2) - --> model_checker_targets_underflow_overflow_chc/input.sol:8:3: + --> input.sol:8:3: | 8 | x + type(uint).max; | ^^^^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/name_simplifier/output b/test/cmdlineTests/name_simplifier/output index 04abaf600103..8eeff65b91a6 100644 --- a/test/cmdlineTests/name_simplifier/output +++ b/test/cmdlineTests/name_simplifier/output @@ -1,5 +1,5 @@ Optimized IR: -/// @use-src 0:"name_simplifier/input.sol" +/// @use-src 0:"input.sol" object "C_59" { code { { @@ -12,7 +12,7 @@ object "C_59" { return(_1, _2) } } - /// @use-src 0:"name_simplifier/input.sol" + /// @use-src 0:"input.sol" object "C_59_deployed" { code { { diff --git a/test/cmdlineTests/no_cbor_metadata/output b/test/cmdlineTests/no_cbor_metadata/output index 0328ece3f27c..295bc228bf1e 100644 --- a/test/cmdlineTests/no_cbor_metadata/output +++ b/test/cmdlineTests/no_cbor_metadata/output @@ -1,4 +1,4 @@ -======= no_cbor_metadata/input.sol:C ======= +======= input.sol:C ======= Binary: 608080604052346013576003908160188239f35b5f80fdfe5f80fd diff --git a/test/cmdlineTests/no_contract_combined_json/output b/test/cmdlineTests/no_contract_combined_json/output index 8c454e341442..a408cbdbc957 100644 --- a/test/cmdlineTests/no_contract_combined_json/output +++ b/test/cmdlineTests/no_contract_combined_json/output @@ -1,11 +1,11 @@ { "sourceList": [ - "no_contract_combined_json/input.sol" + "input.sol" ], "sources": { - "no_contract_combined_json/input.sol": { + "input.sol": { "AST": { - "absolutePath": "no_contract_combined_json/input.sol", + "absolutePath": "input.sol", "exportedSymbols": {}, "id": 2, "license": "GPL-3.0", diff --git a/test/cmdlineTests/no_import_callback/args b/test/cmdlineTests/no_import_callback/args index e816120d0db6..7efc6a77b677 100644 --- a/test/cmdlineTests/no_import_callback/args +++ b/test/cmdlineTests/no_import_callback/args @@ -1 +1 @@ ---no-import-callback no_import_callback/contract_1.sol +--no-import-callback contract_1.sol diff --git a/test/cmdlineTests/no_import_callback/err b/test/cmdlineTests/no_import_callback/err index 45690e34c8f2..c4e6d5701e22 100644 --- a/test/cmdlineTests/no_import_callback/err +++ b/test/cmdlineTests/no_import_callback/err @@ -1,5 +1,5 @@ Error: Source "contract_2.sol" not found: No import callback. - --> no_import_callback/contract_1.sol:4:1: + --> contract_1.sol:4:1: | 4 | import "contract_2.sol"; | ^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/object_compiler/output b/test/cmdlineTests/object_compiler/output index a88851b96c71..b552b3f241d5 100644 --- a/test/cmdlineTests/object_compiler/output +++ b/test/cmdlineTests/object_compiler/output @@ -1,5 +1,5 @@ -======= object_compiler/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "MyContract" { @@ -26,40 +26,40 @@ Binary representation: 335f55600880600d5f395ff3fe5f545f5260205ff3 Text representation: - /* "object_compiler/input.yul":65:73 */ + /* "input.yul":65:73 */ caller - /* "object_compiler/input.yul":62:63 */ + /* "input.yul":62:63 */ 0x00 - /* "object_compiler/input.yul":55:74 */ + /* "input.yul":55:74 */ sstore - /* "object_compiler/input.yul":97:116 */ + /* "input.yul":97:116 */ dataSize(sub_0) - /* "object_compiler/input.yul":141:162 */ + /* "input.yul":141:162 */ dup1 dataOffset(sub_0) - /* "object_compiler/input.yul":138:139 */ + /* "input.yul":138:139 */ 0x00 - /* "object_compiler/input.yul":129:167 */ + /* "input.yul":129:167 */ codecopy - /* "object_compiler/input.yul":187:188 */ + /* "input.yul":187:188 */ 0x00 - /* "object_compiler/input.yul":180:193 */ + /* "input.yul":180:193 */ return stop sub_0: assembly { - /* "object_compiler/input.yul":294:295 */ + /* "input.yul":294:295 */ 0x00 - /* "object_compiler/input.yul":288:296 */ + /* "input.yul":288:296 */ sload - /* "object_compiler/input.yul":285:286 */ + /* "input.yul":285:286 */ 0x00 - /* "object_compiler/input.yul":278:297 */ + /* "input.yul":278:297 */ mstore - /* "object_compiler/input.yul":324:328 */ + /* "input.yul":324:328 */ 0x20 - /* "object_compiler/input.yul":321:322 */ + /* "input.yul":321:322 */ 0x00 - /* "object_compiler/input.yul":314:329 */ + /* "input.yul":314:329 */ return } diff --git a/test/cmdlineTests/optimize_full_storage_write/output b/test/cmdlineTests/optimize_full_storage_write/output index 9ebec71f0320..53e00008b08a 100644 --- a/test/cmdlineTests/optimize_full_storage_write/output +++ b/test/cmdlineTests/optimize_full_storage_write/output @@ -1,7 +1,7 @@ -======= optimize_full_storage_write/input.sol:OptimizeFullSlotWrite ======= +======= input.sol:OptimizeFullSlotWrite ======= EVM assembly: - /* "optimize_full_storage_write/input.sol":60:213 contract OptimizeFullSlotWrite {... */ + /* "input.sol":60:213 contract OptimizeFullSlotWrite {... */ mstore(0x40, 0x80) callvalue dup1 @@ -21,7 +21,7 @@ tag_1: stop sub_0: assembly { - /* "optimize_full_storage_write/input.sol":60:213 contract OptimizeFullSlotWrite {... */ + /* "input.sol":60:213 contract OptimizeFullSlotWrite {... */ mstore(0x40, 0x80) callvalue dup1 @@ -40,16 +40,16 @@ sub_0: assembly { jumpi tag_2: revert(0x00, 0x00) - /* "optimize_full_storage_write/input.sol":111:211 function f() public {... */ + /* "input.sol":111:211 function f() public {... */ tag_3: tag_4 - /* "optimize_full_storage_write/input.sol":192:207 nums[3] = 44444 */ + /* "input.sol":192:207 nums[3] = 44444 */ 0xad9c000000000000823500000000000056ce0000000000002b67 - /* "optimize_full_storage_write/input.sol":135:139 nums */ + /* "input.sol":135:139 nums */ 0x00 - /* "optimize_full_storage_write/input.sol":192:207 nums[3] = 44444 */ + /* "input.sol":192:207 nums[3] = 44444 */ sstore - /* "optimize_full_storage_write/input.sol":111:211 function f() public {... */ + /* "input.sol":111:211 function f() public {... */ jump tag_4: stop diff --git a/test/cmdlineTests/optimizer_BlockDeDuplicator/err b/test/cmdlineTests/optimizer_BlockDeDuplicator/err index e29fc4fc3fd7..9d851c2acd29 100644 --- a/test/cmdlineTests/optimizer_BlockDeDuplicator/err +++ b/test/cmdlineTests/optimizer_BlockDeDuplicator/err @@ -1,11 +1,11 @@ Warning: Statement has no effect. - --> optimizer_BlockDeDuplicator/input.sol:7:27: + --> input.sol:7:27: | 7 | function f() public { true ? 1 : 3;} | ^^^^^^^^^^^^ Warning: Function state mutability can be restricted to pure - --> optimizer_BlockDeDuplicator/input.sol:7:5: + --> input.sol:7:5: | 7 | function f() public { true ? 1 : 3;} | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/optimizer_BlockDeDuplicator/output b/test/cmdlineTests/optimizer_BlockDeDuplicator/output index fb72e4bc1ee8..b3a645be3569 100644 --- a/test/cmdlineTests/optimizer_BlockDeDuplicator/output +++ b/test/cmdlineTests/optimizer_BlockDeDuplicator/output @@ -1,23 +1,23 @@ -======= optimizer_BlockDeDuplicator/input.sol:C ======= +======= input.sol:C ======= EVM assembly: - /* "optimizer_BlockDeDuplicator/input.sol":60:213 contract C {... */ + /* "input.sol":60:213 contract C {... */ mstore(0x40, 0x80) - /* "optimizer_BlockDeDuplicator/input.sol":179:210 function() r = true ? fun_x : f */ + /* "input.sol":179:210 function() r = true ? fun_x : f */ 0x00 dup1 sload not(sub(shl(0x40, 0x01), 0x01)) and - /* "optimizer_BlockDeDuplicator/input.sol":201:206 fun_x */ + /* "input.sol":201:206 fun_x */ or(tag_0_7, shl(0x20, tag_2)) sub(shl(0x40, 0x01), 0x01) - /* "optimizer_BlockDeDuplicator/input.sol":179:210 function() r = true ? fun_x : f */ + /* "input.sol":179:210 function() r = true ? fun_x : f */ and or swap1 sstore - /* "optimizer_BlockDeDuplicator/input.sol":60:213 contract C {... */ + /* "input.sol":60:213 contract C {... */ callvalue dup1 iszero @@ -27,10 +27,10 @@ EVM assembly: tag_5: pop jump(tag_6) - /* "optimizer_BlockDeDuplicator/input.sol":138:174 function f() public { true ? 1 : 3;} */ + /* "input.sol":138:174 function f() public { true ? 1 : 3;} */ tag_2: jump // out - /* "optimizer_BlockDeDuplicator/input.sol":60:213 contract C {... */ + /* "input.sol":60:213 contract C {... */ tag_6: dataSize(sub_0) dup1 @@ -42,7 +42,7 @@ tag_6: stop sub_0: assembly { - /* "optimizer_BlockDeDuplicator/input.sol":60:213 contract C {... */ + /* "input.sol":60:213 contract C {... */ mstore(0x40, 0x80) callvalue dup1 @@ -71,7 +71,7 @@ sub_0: assembly { jumpi tag_2: revert(0x00, 0x00) - /* "optimizer_BlockDeDuplicator/input.sol":138:174 function f() public { true ? 1 : 3;} */ + /* "input.sol":138:174 function f() public { true ? 1 : 3;} */ tag_3: stop tag_7: diff --git a/test/cmdlineTests/optimizer_array_sload/output b/test/cmdlineTests/optimizer_array_sload/output index c1e0796f56fa..a16ac43a0fda 100644 --- a/test/cmdlineTests/optimizer_array_sload/output +++ b/test/cmdlineTests/optimizer_array_sload/output @@ -1,5 +1,5 @@ Optimized IR: -/// @use-src 0:"optimizer_array_sload/input.sol" +/// @use-src 0:"input.sol" object "Arraysum_34" { code { { @@ -12,7 +12,7 @@ object "Arraysum_34" { return(_1, _2) } } - /// @use-src 0:"optimizer_array_sload/input.sol" + /// @use-src 0:"input.sol" object "Arraysum_34_deployed" { code { { diff --git a/test/cmdlineTests/optimizer_inliner_add/output b/test/cmdlineTests/optimizer_inliner_add/output index 9ebc9977daab..e4076c2fbc62 100644 --- a/test/cmdlineTests/optimizer_inliner_add/output +++ b/test/cmdlineTests/optimizer_inliner_add/output @@ -1,7 +1,7 @@ -======= optimizer_inliner_add/input.sol:C ======= +======= input.sol:C ======= EVM assembly: - /* "optimizer_inliner_add/input.sol":165:305 contract C {... */ + /* "input.sol":165:305 contract C {... */ mstore(0x40, 0x80) callvalue dup1 @@ -21,7 +21,7 @@ tag_1: stop sub_0: assembly { - /* "optimizer_inliner_add/input.sol":165:305 contract C {... */ + /* "input.sol":165:305 contract C {... */ mstore(0x40, 0x80) callvalue dup1 @@ -40,7 +40,7 @@ sub_0: assembly { jumpi tag_2: revert(0x00, 0x00) - /* "optimizer_inliner_add/input.sol":182:303 function f() public pure {... */ + /* "input.sol":182:303 function f() public pure {... */ tag_3: tag_4 tag_5 @@ -48,32 +48,32 @@ sub_0: assembly { tag_4: stop tag_5: - /* "optimizer_inliner_add/input.sol":221:227 uint x */ + /* "input.sol":221:227 uint x */ 0x00 - /* "optimizer_inliner_add/input.sol":217:297 for(uint x = 0; x < 10; x = unsafe_add(x, unsafe_add(x, 1)))... */ + /* "input.sol":217:297 for(uint x = 0; x < 10; x = unsafe_add(x, unsafe_add(x, 1)))... */ tag_7: - /* "optimizer_inliner_add/input.sol":237:239 10 */ + /* "input.sol":237:239 10 */ 0x0a - /* "optimizer_inliner_add/input.sol":233:234 x */ + /* "input.sol":233:234 x */ dup2 - /* "optimizer_inliner_add/input.sol":233:239 x < 10 */ + /* "input.sol":233:239 x < 10 */ lt - /* "optimizer_inliner_add/input.sol":217:297 for(uint x = 0; x < 10; x = unsafe_add(x, unsafe_add(x, 1)))... */ + /* "input.sol":217:297 for(uint x = 0; x < 10; x = unsafe_add(x, unsafe_add(x, 1)))... */ iszero tag_8 jumpi - /* "optimizer_inliner_add/input.sol":149:154 x + y */ + /* "input.sol":149:154 x + y */ dup1 add - /* "optimizer_inliner_add/input.sol":273:274 1 */ + /* "input.sol":273:274 1 */ 0x01 - /* "optimizer_inliner_add/input.sol":149:154 x + y */ + /* "input.sol":149:154 x + y */ add - /* "optimizer_inliner_add/input.sol":217:297 for(uint x = 0; x < 10; x = unsafe_add(x, unsafe_add(x, 1)))... */ + /* "input.sol":217:297 for(uint x = 0; x < 10; x = unsafe_add(x, unsafe_add(x, 1)))... */ jump(tag_7) tag_8: pop - /* "optimizer_inliner_add/input.sol":182:303 function f() public pure {... */ + /* "input.sol":182:303 function f() public pure {... */ jump // out auxdata: diff --git a/test/cmdlineTests/optimizer_inliner_call_from_constructor/output b/test/cmdlineTests/optimizer_inliner_call_from_constructor/output index f42f9de094c6..8c7b544bbdd6 100644 --- a/test/cmdlineTests/optimizer_inliner_call_from_constructor/output +++ b/test/cmdlineTests/optimizer_inliner_call_from_constructor/output @@ -1,9 +1,9 @@ -======= optimizer_inliner_call_from_constructor/input.sol:C ======= +======= input.sol:C ======= EVM assembly: - /* "optimizer_inliner_call_from_constructor/input.sol":60:263 contract C {... */ + /* "input.sol":60:263 contract C {... */ mstore(0x40, 0x80) - /* "optimizer_inliner_call_from_constructor/input.sol":89:115 constructor() { x = a(); } */ + /* "input.sol":89:115 constructor() { x = a(); } */ callvalue dup1 iszero @@ -12,13 +12,13 @@ EVM assembly: revert(0x00, 0x00) tag_1: pop - /* "optimizer_inliner_call_from_constructor/input.sol":257:258 6 */ + /* "input.sol":257:258 6 */ 0x06 - /* "optimizer_inliner_call_from_constructor/input.sol":105:106 x */ + /* "input.sol":105:106 x */ 0x00 - /* "optimizer_inliner_call_from_constructor/input.sol":105:112 x = a() */ + /* "input.sol":105:112 x = a() */ sstore - /* "optimizer_inliner_call_from_constructor/input.sol":60:263 contract C {... */ + /* "input.sol":60:263 contract C {... */ dataSize(sub_0) dup1 dataOffset(sub_0) @@ -29,7 +29,7 @@ tag_1: stop sub_0: assembly { - /* "optimizer_inliner_call_from_constructor/input.sol":60:263 contract C {... */ + /* "input.sol":60:263 contract C {... */ mstore(0x40, 0x80) callvalue dup1 @@ -48,11 +48,11 @@ sub_0: assembly { jumpi tag_2: revert(0x00, 0x00) - /* "optimizer_inliner_call_from_constructor/input.sol":120:175 function a() public pure returns (uint) { return f(); } */ + /* "input.sol":120:175 function a() public pure returns (uint) { return f(); } */ tag_3: - /* "optimizer_inliner_call_from_constructor/input.sol":257:258 6 */ + /* "input.sol":257:258 6 */ 0x06 - /* "optimizer_inliner_call_from_constructor/input.sol":120:175 function a() public pure returns (uint) { return f(); } */ + /* "input.sol":120:175 function a() public pure returns (uint) { return f(); } */ mload(0x40) /* "#utility.yul":160:185 */ swap1 @@ -62,7 +62,7 @@ sub_0: assembly { 0x20 /* "#utility.yul":133:151 */ add - /* "optimizer_inliner_call_from_constructor/input.sol":120:175 function a() public pure returns (uint) { return f(); } */ + /* "input.sol":120:175 function a() public pure returns (uint) { return f(); } */ mload(0x40) dup1 swap2 diff --git a/test/cmdlineTests/optimizer_inliner_dynamic_reference/output b/test/cmdlineTests/optimizer_inliner_dynamic_reference/output index b1c5c74d9037..5313893fc735 100644 --- a/test/cmdlineTests/optimizer_inliner_dynamic_reference/output +++ b/test/cmdlineTests/optimizer_inliner_dynamic_reference/output @@ -1,7 +1,7 @@ -======= optimizer_inliner_dynamic_reference/input.sol:C ======= +======= input.sol:C ======= EVM assembly: - /* "optimizer_inliner_dynamic_reference/input.sol":60:367 contract C {... */ + /* "input.sol":60:367 contract C {... */ mstore(0x40, 0x80) callvalue dup1 @@ -21,7 +21,7 @@ tag_1: stop sub_0: assembly { - /* "optimizer_inliner_dynamic_reference/input.sol":60:367 contract C {... */ + /* "input.sol":60:367 contract C {... */ mstore(0x40, 0x80) callvalue dup1 @@ -50,11 +50,11 @@ sub_0: assembly { jumpi tag_2: revert(0x00, 0x00) - /* "optimizer_inliner_dynamic_reference/input.sol":160:215 function a() public pure returns (uint) { return f(); } */ + /* "input.sol":160:215 function a() public pure returns (uint) { return f(); } */ tag_3: - /* "optimizer_inliner_dynamic_reference/input.sol":361:362 6 */ + /* "input.sol":361:362 6 */ 0x06 - /* "optimizer_inliner_dynamic_reference/input.sol":160:215 function a() public pure returns (uint) { return f(); } */ + /* "input.sol":160:215 function a() public pure returns (uint) { return f(); } */ tag_6: mload(0x40) /* "#utility.yul":160:185 */ @@ -65,78 +65,78 @@ sub_0: assembly { 0x20 /* "#utility.yul":133:151 */ add - /* "optimizer_inliner_dynamic_reference/input.sol":160:215 function a() public pure returns (uint) { return f(); } */ + /* "input.sol":160:215 function a() public pure returns (uint) { return f(); } */ mload(0x40) dup1 swap2 sub swap1 return - /* "optimizer_inliner_dynamic_reference/input.sol":246:305 function h() public view returns (uint) { return x() + 1; } */ + /* "input.sol":246:305 function h() public view returns (uint) { return x() + 1; } */ tag_4: tag_6 tag_11 jump // in - /* "optimizer_inliner_dynamic_reference/input.sol":125:155 function g() public { x = f; } */ + /* "input.sol":125:155 function g() public { x = f; } */ tag_5: - /* "optimizer_inliner_dynamic_reference/input.sol":147:148 x */ + /* "input.sol":147:148 x */ 0x00 - /* "optimizer_inliner_dynamic_reference/input.sol":147:152 x = f */ + /* "input.sol":147:152 x = f */ dup1 sload not(0xffffffffffffffff) and - /* "optimizer_inliner_dynamic_reference/input.sol":151:152 f */ + /* "input.sol":151:152 f */ tag_17 - /* "optimizer_inliner_dynamic_reference/input.sol":147:152 x = f */ + /* "input.sol":147:152 x = f */ or swap1 sstore - /* "optimizer_inliner_dynamic_reference/input.sol":125:155 function g() public { x = f; } */ + /* "input.sol":125:155 function g() public { x = f; } */ stop - /* "optimizer_inliner_dynamic_reference/input.sol":209:212 f() */ + /* "input.sol":209:212 f() */ tag_16: - /* "optimizer_inliner_dynamic_reference/input.sol":202:212 return f() */ + /* "input.sol":202:212 return f() */ swap1 pop - /* "optimizer_inliner_dynamic_reference/input.sol":160:215 function a() public pure returns (uint) { return f(); } */ + /* "input.sol":160:215 function a() public pure returns (uint) { return f(); } */ swap1 jump // out - /* "optimizer_inliner_dynamic_reference/input.sol":246:305 function h() public view returns (uint) { return x() + 1; } */ + /* "input.sol":246:305 function h() public view returns (uint) { return x() + 1; } */ tag_11: - /* "optimizer_inliner_dynamic_reference/input.sol":280:284 uint */ + /* "input.sol":280:284 uint */ 0x00 - /* "optimizer_inliner_dynamic_reference/input.sol":295:296 x */ + /* "input.sol":295:296 x */ dup1 sload - /* "optimizer_inliner_dynamic_reference/input.sol":295:298 x() */ + /* "input.sol":295:298 x() */ tag_19 swap1 - /* "optimizer_inliner_dynamic_reference/input.sol":295:296 x */ + /* "input.sol":295:296 x */ dup1 iszero tag_20 mul or - /* "optimizer_inliner_dynamic_reference/input.sol":295:298 x() */ + /* "input.sol":295:298 x() */ 0xffffffff and jump // in tag_19: - /* "optimizer_inliner_dynamic_reference/input.sol":295:302 x() + 1 */ + /* "input.sol":295:302 x() + 1 */ tag_16 swap1 - /* "optimizer_inliner_dynamic_reference/input.sol":301:302 1 */ + /* "input.sol":301:302 1 */ 0x01 - /* "optimizer_inliner_dynamic_reference/input.sol":295:302 x() + 1 */ + /* "input.sol":295:302 x() + 1 */ tag_22 jump // in - /* "optimizer_inliner_dynamic_reference/input.sol":310:365 function f() internal pure returns (uint) { return 6; } */ + /* "input.sol":310:365 function f() internal pure returns (uint) { return 6; } */ tag_17: - /* "optimizer_inliner_dynamic_reference/input.sol":361:362 6 */ + /* "input.sol":361:362 6 */ 0x06 swap1 - /* "optimizer_inliner_dynamic_reference/input.sol":310:365 function f() internal pure returns (uint) { return 6; } */ + /* "input.sol":310:365 function f() internal pure returns (uint) { return 6; } */ jump // out tag_20: tag_25 diff --git a/test/cmdlineTests/optimizer_inliner_dynamic_reference_constructor/output b/test/cmdlineTests/optimizer_inliner_dynamic_reference_constructor/output index 24ecaede0787..5997bd1c7b60 100644 --- a/test/cmdlineTests/optimizer_inliner_dynamic_reference_constructor/output +++ b/test/cmdlineTests/optimizer_inliner_dynamic_reference_constructor/output @@ -1,9 +1,9 @@ -======= optimizer_inliner_dynamic_reference_constructor/input.sol:C ======= +======= input.sol:C ======= EVM assembly: - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":60:361 contract C {... */ + /* "input.sol":60:361 contract C {... */ mstore(0x40, 0x80) - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":77:101 constructor() { x = f; } */ + /* "input.sol":77:101 constructor() { x = f; } */ callvalue dup1 iszero @@ -12,31 +12,31 @@ EVM assembly: revert(0x00, 0x00) tag_1: pop - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":93:94 x */ + /* "input.sol":93:94 x */ 0x00 - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":93:98 x = f */ + /* "input.sol":93:98 x = f */ dup1 sload not(sub(shl(0x40, 0x01), 0x01)) and - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":97:98 f */ + /* "input.sol":97:98 f */ or(tag_0_12, shl(0x20, tag_4)) sub(shl(0x40, 0x01), 0x01) - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":93:98 x = f */ + /* "input.sol":93:98 x = f */ and or swap1 sstore - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":60:361 contract C {... */ + /* "input.sol":60:361 contract C {... */ jump(tag_5) - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":304:359 function f() internal pure returns (uint) { return 6; } */ + /* "input.sol":304:359 function f() internal pure returns (uint) { return 6; } */ tag_4: - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":355:356 6 */ + /* "input.sol":355:356 6 */ 0x06 swap1 - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":304:359 function f() internal pure returns (uint) { return 6; } */ + /* "input.sol":304:359 function f() internal pure returns (uint) { return 6; } */ jump // out - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":60:361 contract C {... */ + /* "input.sol":60:361 contract C {... */ tag_5: dataSize(sub_0) dup1 @@ -48,7 +48,7 @@ tag_5: stop sub_0: assembly { - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":60:361 contract C {... */ + /* "input.sol":60:361 contract C {... */ mstore(0x40, 0x80) callvalue dup1 @@ -72,11 +72,11 @@ sub_0: assembly { jumpi tag_2: revert(0x00, 0x00) - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":154:209 function a() public pure returns (uint) { return f(); } */ + /* "input.sol":154:209 function a() public pure returns (uint) { return f(); } */ tag_3: - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":355:356 6 */ + /* "input.sol":355:356 6 */ 0x06 - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":154:209 function a() public pure returns (uint) { return f(); } */ + /* "input.sol":154:209 function a() public pure returns (uint) { return f(); } */ tag_5: mload(0x40) /* "#utility.yul":160:185 */ @@ -87,61 +87,61 @@ sub_0: assembly { 0x20 /* "#utility.yul":133:151 */ add - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":154:209 function a() public pure returns (uint) { return f(); } */ + /* "input.sol":154:209 function a() public pure returns (uint) { return f(); } */ mload(0x40) dup1 swap2 sub swap1 return - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":240:299 function h() public view returns (uint) { return x() + 1; } */ + /* "input.sol":240:299 function h() public view returns (uint) { return x() + 1; } */ tag_4: tag_5 tag_10 jump // in - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":203:206 f() */ + /* "input.sol":203:206 f() */ tag_14: - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":196:206 return f() */ + /* "input.sol":196:206 return f() */ swap1 pop - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":154:209 function a() public pure returns (uint) { return f(); } */ + /* "input.sol":154:209 function a() public pure returns (uint) { return f(); } */ swap1 jump // out - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":240:299 function h() public view returns (uint) { return x() + 1; } */ + /* "input.sol":240:299 function h() public view returns (uint) { return x() + 1; } */ tag_10: - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":274:278 uint */ + /* "input.sol":274:278 uint */ 0x00 - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":289:290 x */ + /* "input.sol":289:290 x */ dup1 sload - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":289:292 x() */ + /* "input.sol":289:292 x() */ tag_16 swap1 - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":289:290 x */ + /* "input.sol":289:290 x */ dup1 iszero tag_17 mul or - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":289:292 x() */ + /* "input.sol":289:292 x() */ 0xffffffff and jump // in tag_16: - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":289:296 x() + 1 */ + /* "input.sol":289:296 x() + 1 */ tag_14 swap1 - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":295:296 1 */ + /* "input.sol":295:296 1 */ 0x01 - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":289:296 x() + 1 */ + /* "input.sol":289:296 x() + 1 */ tag_19 jump // in - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":304:359 function f() internal pure returns (uint) { return 6; } */ + /* "input.sol":304:359 function f() internal pure returns (uint) { return 6; } */ tag_12: - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":355:356 6 */ + /* "input.sol":355:356 6 */ 0x06 swap1 - /* "optimizer_inliner_dynamic_reference_constructor/input.sol":304:359 function f() internal pure returns (uint) { return 6; } */ + /* "input.sol":304:359 function f() internal pure returns (uint) { return 6; } */ jump // out tag_17: tag_21 diff --git a/test/cmdlineTests/optimizer_inliner_inc/output b/test/cmdlineTests/optimizer_inliner_inc/output index 3a3639e190a5..d634bf2d431b 100644 --- a/test/cmdlineTests/optimizer_inliner_inc/output +++ b/test/cmdlineTests/optimizer_inliner_inc/output @@ -1,7 +1,7 @@ -======= optimizer_inliner_inc/input.sol:C ======= +======= input.sol:C ======= EVM assembly: - /* "optimizer_inliner_inc/input.sol":157:279 contract C {... */ + /* "input.sol":157:279 contract C {... */ mstore(0x40, 0x80) callvalue dup1 @@ -21,7 +21,7 @@ tag_1: stop sub_0: assembly { - /* "optimizer_inliner_inc/input.sol":157:279 contract C {... */ + /* "input.sol":157:279 contract C {... */ mstore(0x40, 0x80) callvalue dup1 @@ -40,7 +40,7 @@ sub_0: assembly { jumpi tag_2: revert(0x00, 0x00) - /* "optimizer_inliner_inc/input.sol":174:277 function f() public pure {... */ + /* "input.sol":174:277 function f() public pure {... */ tag_3: tag_4 tag_5 @@ -48,29 +48,29 @@ sub_0: assembly { tag_4: stop tag_5: - /* "optimizer_inliner_inc/input.sol":213:219 uint x */ + /* "input.sol":213:219 uint x */ 0x00 - /* "optimizer_inliner_inc/input.sol":209:271 for(uint x = 0; x < 10; x = unsafe_inc(x))... */ + /* "input.sol":209:271 for(uint x = 0; x < 10; x = unsafe_inc(x))... */ tag_7: - /* "optimizer_inliner_inc/input.sol":229:231 10 */ + /* "input.sol":229:231 10 */ 0x0a - /* "optimizer_inliner_inc/input.sol":225:226 x */ + /* "input.sol":225:226 x */ dup2 - /* "optimizer_inliner_inc/input.sol":225:231 x < 10 */ + /* "input.sol":225:231 x < 10 */ lt - /* "optimizer_inliner_inc/input.sol":209:271 for(uint x = 0; x < 10; x = unsafe_inc(x))... */ + /* "input.sol":209:271 for(uint x = 0; x < 10; x = unsafe_inc(x))... */ iszero tag_8 jumpi - /* "optimizer_inliner_inc/input.sol":145:146 1 */ + /* "input.sol":145:146 1 */ 0x01 - /* "optimizer_inliner_inc/input.sol":141:146 x + 1 */ + /* "input.sol":141:146 x + 1 */ add - /* "optimizer_inliner_inc/input.sol":209:271 for(uint x = 0; x < 10; x = unsafe_inc(x))... */ + /* "input.sol":209:271 for(uint x = 0; x < 10; x = unsafe_inc(x))... */ jump(tag_7) tag_8: pop - /* "optimizer_inliner_inc/input.sol":174:277 function f() public pure {... */ + /* "input.sol":174:277 function f() public pure {... */ jump // out auxdata: diff --git a/test/cmdlineTests/optimizer_inliner_multireturn/output b/test/cmdlineTests/optimizer_inliner_multireturn/output index 46d74055a208..20de1c219961 100644 --- a/test/cmdlineTests/optimizer_inliner_multireturn/output +++ b/test/cmdlineTests/optimizer_inliner_multireturn/output @@ -1,7 +1,7 @@ -======= optimizer_inliner_multireturn/input.sol:C ======= +======= input.sol:C ======= EVM assembly: - /* "optimizer_inliner_multireturn/input.sol":162:298 contract C {... */ + /* "input.sol":162:298 contract C {... */ mstore(0x40, 0x80) callvalue dup1 @@ -21,7 +21,7 @@ tag_1: stop sub_0: assembly { - /* "optimizer_inliner_multireturn/input.sol":162:298 contract C {... */ + /* "input.sol":162:298 contract C {... */ mstore(0x40, 0x80) callvalue dup1 @@ -40,7 +40,7 @@ sub_0: assembly { jumpi tag_2: revert(0x00, 0x00) - /* "optimizer_inliner_multireturn/input.sol":179:296 function f() public pure {... */ + /* "input.sol":179:296 function f() public pure {... */ tag_3: tag_4 tag_5 @@ -48,35 +48,35 @@ sub_0: assembly { tag_4: stop tag_5: - /* "optimizer_inliner_multireturn/input.sol":219:225 uint x */ + /* "input.sol":219:225 uint x */ 0x00 - /* "optimizer_inliner_multireturn/input.sol":241:242 1 */ + /* "input.sol":241:242 1 */ 0x01 - /* "optimizer_inliner_multireturn/input.sol":214:290 for((uint x, uint y) = (0, 1); x < 10; (x, y) = test(x))... */ + /* "input.sol":214:290 for((uint x, uint y) = (0, 1); x < 10; (x, y) = test(x))... */ tag_7: - /* "optimizer_inliner_multireturn/input.sol":249:251 10 */ + /* "input.sol":249:251 10 */ 0x0a - /* "optimizer_inliner_multireturn/input.sol":245:246 x */ + /* "input.sol":245:246 x */ dup3 - /* "optimizer_inliner_multireturn/input.sol":245:251 x < 10 */ + /* "input.sol":245:251 x < 10 */ lt - /* "optimizer_inliner_multireturn/input.sol":214:290 for((uint x, uint y) = (0, 1); x < 10; (x, y) = test(x))... */ + /* "input.sol":214:290 for((uint x, uint y) = (0, 1); x < 10; (x, y) = test(x))... */ iszero tag_8 jumpi pop - /* "optimizer_inliner_multireturn/input.sol":146:147 1 */ + /* "input.sol":146:147 1 */ 0x01 - /* "optimizer_inliner_multireturn/input.sol":142:147 x + 1 */ + /* "input.sol":142:147 x + 1 */ dup2 add swap1 - /* "optimizer_inliner_multireturn/input.sol":214:290 for((uint x, uint y) = (0, 1); x < 10; (x, y) = test(x))... */ + /* "input.sol":214:290 for((uint x, uint y) = (0, 1); x < 10; (x, y) = test(x))... */ jump(tag_7) tag_8: pop pop - /* "optimizer_inliner_multireturn/input.sol":179:296 function f() public pure {... */ + /* "input.sol":179:296 function f() public pure {... */ jump // out auxdata: diff --git a/test/cmdlineTests/optimizer_user_yul/output b/test/cmdlineTests/optimizer_user_yul/output index c106c011b37c..b18e155bf947 100644 --- a/test/cmdlineTests/optimizer_user_yul/output +++ b/test/cmdlineTests/optimizer_user_yul/output @@ -1,71 +1,71 @@ -======= optimizer_user_yul/input.sol:C ======= +======= input.sol:C ======= EVM assembly: - /* "optimizer_user_yul/input.sol":60:518 contract C... */ + /* "input.sol":60:518 contract C... */ mstore(0x40, 0x80) - /* "optimizer_user_yul/input.sol":101:106 int a */ + /* "input.sol":101:106 int a */ 0x00 - /* "optimizer_user_yul/input.sol":181:190 let x,y,z */ + /* "input.sol":181:190 let x,y,z */ 0x00 0x00 0x00 - /* "optimizer_user_yul/input.sol":205:206 1 */ + /* "input.sol":205:206 1 */ 0x01 - /* "optimizer_user_yul/input.sol":202:203 0 */ + /* "input.sol":202:203 0 */ 0x00 - /* "optimizer_user_yul/input.sol":195:207 sstore(0, 1) */ + /* "input.sol":195:207 sstore(0, 1) */ sstore - /* "optimizer_user_yul/input.sol":212:258 for { } sload(4) { } {... */ + /* "input.sol":212:258 for { } sload(4) { } {... */ tag_3: - /* "optimizer_user_yul/input.sol":226:227 4 */ + /* "input.sol":226:227 4 */ 0x04 - /* "optimizer_user_yul/input.sol":220:228 sload(4) */ + /* "input.sol":220:228 sload(4) */ sload - /* "optimizer_user_yul/input.sol":212:258 for { } sload(4) { } {... */ + /* "input.sol":212:258 for { } sload(4) { } {... */ iszero tag_5 jumpi pop - /* "optimizer_user_yul/input.sol":244:253 exp(x, y) */ + /* "input.sol":244:253 exp(x, y) */ dup1 dup3 exp - /* "optimizer_user_yul/input.sol":212:258 for { } sload(4) { } {... */ + /* "input.sol":212:258 for { } sload(4) { } {... */ jump(tag_3) tag_5: - /* "optimizer_user_yul/input.sol":216:219 { } */ + /* "input.sol":216:219 { } */ pop pop pop - /* "optimizer_user_yul/input.sol":268:269 2 */ + /* "input.sol":268:269 2 */ 0x02 - /* "optimizer_user_yul/input.sol":263:269 a := 2 */ + /* "input.sol":263:269 a := 2 */ swap1 pop - /* "optimizer_user_yul/input.sol":369:370 3 */ + /* "input.sol":369:370 3 */ 0x03 - /* "optimizer_user_yul/input.sol":366:367 2 */ + /* "input.sol":366:367 2 */ 0x02 - /* "optimizer_user_yul/input.sol":359:371 sstore(2, 3) */ + /* "input.sol":359:371 sstore(2, 3) */ sstore - /* "optimizer_user_yul/input.sol":390:391 5 */ + /* "input.sol":390:391 5 */ 0x05 - /* "optimizer_user_yul/input.sol":384:392 sload(5) */ + /* "input.sol":384:392 sload(5) */ sload iszero - /* "optimizer_user_yul/input.sol":376:509 for { } sload(5) { } {... */ + /* "input.sol":376:509 for { } sload(5) { } {... */ tag_6: - /* "optimizer_user_yul/input.sol":384:392 sload(5) */ + /* "input.sol":384:392 sload(5) */ dup1 - /* "optimizer_user_yul/input.sol":376:509 for { } sload(5) { } {... */ + /* "input.sol":376:509 for { } sload(5) { } {... */ iszero tag_6 jumpi - /* "optimizer_user_yul/input.sol":380:383 { } */ + /* "input.sol":380:383 { } */ pop - /* "optimizer_user_yul/input.sol":340:513 {... */ + /* "input.sol":340:513 {... */ pop - /* "optimizer_user_yul/input.sol":60:518 contract C... */ + /* "input.sol":60:518 contract C... */ dataSize(sub_0) dup1 dataOffset(sub_0) @@ -76,7 +76,7 @@ tag_6: stop sub_0: assembly { - /* "optimizer_user_yul/input.sol":60:518 contract C... */ + /* "input.sol":60:518 contract C... */ mstore(0x40, 0x80) revert(0x00, 0x00) diff --git a/test/cmdlineTests/require_overload/err b/test/cmdlineTests/require_overload/err index 184c8c22bdd0..c267269fe43b 100644 --- a/test/cmdlineTests/require_overload/err +++ b/test/cmdlineTests/require_overload/err @@ -1,5 +1,5 @@ Error: No matching declaration found after argument-dependent lookup. - --> require_overload/input.sol:5:9: + --> input.sol:5:9: | 5 | require(this); | ^^^^^^^ diff --git a/test/cmdlineTests/require_with_error_ir/output b/test/cmdlineTests/require_with_error_ir/output index 09515f3cd82e..236931eea4cf 100644 --- a/test/cmdlineTests/require_with_error_ir/output +++ b/test/cmdlineTests/require_with_error_ir/output @@ -1,6 +1,6 @@ IR: -/// @use-src 0:"require_with_error_ir/input.sol" +/// @use-src 0:"input.sol" object "C_36" { code { @@ -27,7 +27,7 @@ object "C_36" { } } - /// @use-src 0:"require_with_error_ir/input.sol" + /// @use-src 0:"input.sol" object "C_36_deployed" { code { diff --git a/test/cmdlineTests/require_with_string_ir/output b/test/cmdlineTests/require_with_string_ir/output index 3a19db372796..9b0bd869fe3b 100644 --- a/test/cmdlineTests/require_with_string_ir/output +++ b/test/cmdlineTests/require_with_string_ir/output @@ -1,6 +1,6 @@ IR: -/// @use-src 0:"require_with_string_ir/input.sol" +/// @use-src 0:"input.sol" object "C_28" { code { @@ -27,7 +27,7 @@ object "C_28" { } } - /// @use-src 0:"require_with_string_ir/input.sol" + /// @use-src 0:"input.sol" object "C_28_deployed" { code { diff --git a/test/cmdlineTests/revert_strings/output b/test/cmdlineTests/revert_strings/output index 0f16ff9d0f8f..1fdb4b884c2d 100644 --- a/test/cmdlineTests/revert_strings/output +++ b/test/cmdlineTests/revert_strings/output @@ -1,6 +1,6 @@ IR: -/// @use-src 0:"revert_strings/input.sol" +/// @use-src 0:"input.sol" object "C_15" { code { /// @src 0:59:147 "contract C {..." @@ -46,7 +46,7 @@ object "C_15" { /// @src 0:59:147 "contract C {..." } - /// @use-src 0:"revert_strings/input.sol" + /// @use-src 0:"input.sol" object "C_15_deployed" { code { /// @src 0:59:147 "contract C {..." diff --git a/test/cmdlineTests/stack_too_deep_from_code_transform/err b/test/cmdlineTests/stack_too_deep_from_code_transform/err index 588f4d437945..8820cce05aff 100644 --- a/test/cmdlineTests/stack_too_deep_from_code_transform/err +++ b/test/cmdlineTests/stack_too_deep_from_code_transform/err @@ -1,6 +1,6 @@ Error: Cannot swap Variable value23 with Slot 0x20: too deep in the stack by 9 slots in [ RET value23 value22 value21 value20 value19 value18 value17 value16 value15 value14 value13 value12 value11 value10 value9 value8 value7 value6 value5 value4 value3 value2 value1 value0 pos 0x20 ] memoryguard was present. - --> stack_too_deep_from_code_transform/input.sol:1:1: + --> input.sol:1:1: | 1 | contract C { | ^ (Relevant source part starts here and spans across multiple lines). diff --git a/test/cmdlineTests/standard_debug_info_in_yul_and_evm_asm_print_all/input.json b/test/cmdlineTests/standard_debug_info_in_yul_and_evm_asm_print_all/input.json index 3059e1ecd3e3..14dec3178f24 100644 --- a/test/cmdlineTests/standard_debug_info_in_yul_and_evm_asm_print_all/input.json +++ b/test/cmdlineTests/standard_debug_info_in_yul_and_evm_asm_print_all/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "C": {"urls": ["standard_debug_info_in_yul_and_evm_asm_print_all/in.sol"]} + "C": {"urls": ["in.sol"]} }, "settings": { "debug": {"debugInfo": ["*"]}, diff --git a/test/cmdlineTests/standard_debug_info_in_yul_and_evm_asm_print_location_only/input.json b/test/cmdlineTests/standard_debug_info_in_yul_and_evm_asm_print_location_only/input.json index 8e338322b0c7..f2311603a09f 100644 --- a/test/cmdlineTests/standard_debug_info_in_yul_and_evm_asm_print_location_only/input.json +++ b/test/cmdlineTests/standard_debug_info_in_yul_and_evm_asm_print_location_only/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "C": {"urls": ["standard_debug_info_in_yul_and_evm_asm_print_location_only/in.sol"]} + "C": {"urls": ["in.sol"]} }, "settings": { "debug": {"debugInfo": ["location"]}, diff --git a/test/cmdlineTests/standard_debug_info_in_yul_and_evm_asm_print_none/input.json b/test/cmdlineTests/standard_debug_info_in_yul_and_evm_asm_print_none/input.json index c9184d944bfd..09386f2bef3d 100644 --- a/test/cmdlineTests/standard_debug_info_in_yul_and_evm_asm_print_none/input.json +++ b/test/cmdlineTests/standard_debug_info_in_yul_and_evm_asm_print_none/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "C": {"urls": ["standard_debug_info_in_yul_and_evm_asm_print_none/in.sol"]} + "C": {"urls": ["in.sol"]} }, "settings": { "debug": {"debugInfo": []}, diff --git a/test/cmdlineTests/standard_debug_info_in_yul_and_evm_asm_print_snippet_only/input.json b/test/cmdlineTests/standard_debug_info_in_yul_and_evm_asm_print_snippet_only/input.json index 962688913096..cb6ac84463ee 100644 --- a/test/cmdlineTests/standard_debug_info_in_yul_and_evm_asm_print_snippet_only/input.json +++ b/test/cmdlineTests/standard_debug_info_in_yul_and_evm_asm_print_snippet_only/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "C": {"urls": ["standard_debug_info_in_yul_and_evm_asm_print_snippet_only/in.sol"]} + "C": {"urls": ["in.sol"]} }, "settings": { "debug": {"debugInfo": ["snippet"]}, diff --git a/test/cmdlineTests/standard_irOptimized_ast_requested/input.json b/test/cmdlineTests/standard_irOptimized_ast_requested/input.json index fd16983068aa..23f17f4ae40d 100644 --- a/test/cmdlineTests/standard_irOptimized_ast_requested/input.json +++ b/test/cmdlineTests/standard_irOptimized_ast_requested/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "C": {"urls": ["standard_irOptimized_ast_requested/in.sol"]} + "C": {"urls": ["in.sol"]} }, "settings": { "outputSelection": {"*": {"*": ["irOptimizedAst"]}} diff --git a/test/cmdlineTests/standard_ir_ast_requested/input.json b/test/cmdlineTests/standard_ir_ast_requested/input.json index 1cb1083a2ef6..07cfc13edee7 100644 --- a/test/cmdlineTests/standard_ir_ast_requested/input.json +++ b/test/cmdlineTests/standard_ir_ast_requested/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "C": {"urls": ["standard_ir_ast_requested/in.sol"]} + "C": {"urls": ["in.sol"]} }, "settings": { "outputSelection": {"*": {"*": ["irAst"]}} diff --git a/test/cmdlineTests/standard_metadata/input.json b/test/cmdlineTests/standard_metadata/input.json index ae4bfe8f5965..8ca8da20a260 100644 --- a/test/cmdlineTests/standard_metadata/input.json +++ b/test/cmdlineTests/standard_metadata/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "C": {"urls": ["standard_metadata/in.sol"]} + "C": {"urls": ["in.sol"]} }, "settings": { "outputSelection": { diff --git a/test/cmdlineTests/standard_metadata/output.json b/test/cmdlineTests/standard_metadata/output.json index 5b9c8504f386..155e15db1761 100644 --- a/test/cmdlineTests/standard_metadata/output.json +++ b/test/cmdlineTests/standard_metadata/output.json @@ -2,7 +2,7 @@ "contracts": { "C": { "C": { - "metadata": "{\"compiler\":{\"version\":\"\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"C\":\"C\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"C\":{\"keccak256\":\"0x5cf617b1707a484e3c4bd59643013dec76ab7d75900b46855214729ae3e0ceb0\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://ac418a02dfadf87234150d3568f33269e3f49460345cb39300e017a6d755eff2\",\"dweb:/ipfs/QmQq3owBu25x2WV46HB1WyKzJpxiAPecU7eMKqtXCF7eeS\"]}},\"version\":1}" + "metadata": "{\"compiler\":{\"version\":\"\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"C\":\"C\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"C\":{\"keccak256\":\"0x5cf617b1707a484e3c4bd59643013dec76ab7d75900b46855214729ae3e0ceb0\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://ac418a02dfadf87234150d3568f33269e3f49460345cb39300e017a6d755eff2\",\"dweb:/ipfs/QmQq3owBu25x2WV46HB1WyKzJpxiAPecU7eMKqtXCF7eeS\"]}},\"version\":1}" } } }, diff --git a/test/cmdlineTests/standard_model_checker_contracts_inexistent_contract/output.json b/test/cmdlineTests/standard_model_checker_contracts_inexistent_contract/output.json index 22d5f32de32b..c6bde90dfbaa 100644 --- a/test/cmdlineTests/standard_model_checker_contracts_inexistent_contract/output.json +++ b/test/cmdlineTests/standard_model_checker_contracts_inexistent_contract/output.json @@ -9,72 +9,6 @@ "message": "Requested contract \"C\" does not exist in source \"Source\".", "severity": "warning", "type": "Warning" - }, - { - "component": "general", - "errorCode": "6328", - "formattedMessage": "Warning: CHC: Assertion violation happens here. -Counterexample: - -y = 0 - -Transaction trace: -B.constructor() -B.g(0) - --> Source:5:7: - | -5 | \t\t\t\t\t\tassert(y > 0); - | \t\t\t\t\t\t^^^^^^^^^^^^^ - -", - "message": "CHC: Assertion violation happens here. -Counterexample: - -y = 0 - -Transaction trace: -B.constructor() -B.g(0)", - "severity": "warning", - "sourceLocation": { - "end": 137, - "file": "Source", - "start": 124 - }, - "type": "Warning" - }, - { - "component": "general", - "errorCode": "6328", - "formattedMessage": "Warning: CHC: Assertion violation happens here. -Counterexample: - -x = 0 - -Transaction trace: -A.constructor() -A.f(0) - --> Source:10:7: - | -10 | \t\t\t\t\t\tassert(x > 0); - | \t\t\t\t\t\t^^^^^^^^^^^^^ - -", - "message": "CHC: Assertion violation happens here. -Counterexample: - -x = 0 - -Transaction trace: -A.constructor() -A.f(0)", - "severity": "warning", - "sourceLocation": { - "end": 231, - "file": "Source", - "start": 218 - }, - "type": "Warning" } ], "sources": { diff --git a/test/cmdlineTests/standard_model_checker_contracts_multi_source/output.json b/test/cmdlineTests/standard_model_checker_contracts_multi_source/output.json index fe287f833637..f568de16044b 100644 --- a/test/cmdlineTests/standard_model_checker_contracts_multi_source/output.json +++ b/test/cmdlineTests/standard_model_checker_contracts_multi_source/output.json @@ -9,7 +9,7 @@ Counterexample: y = 0 Transaction trace: -B.constructor() +A.constructor() B.g(0) --> Source:5:7: | @@ -23,7 +23,7 @@ Counterexample: y = 0 Transaction trace: -B.constructor() +A.constructor() B.g(0)", "severity": "warning", "sourceLocation": { diff --git a/test/cmdlineTests/standard_model_checker_contracts_only_one/output.json b/test/cmdlineTests/standard_model_checker_contracts_only_one/output.json index e9fc1b4cf6b5..a7ca17b4f5b4 100644 --- a/test/cmdlineTests/standard_model_checker_contracts_only_one/output.json +++ b/test/cmdlineTests/standard_model_checker_contracts_only_one/output.json @@ -9,7 +9,7 @@ Counterexample: y = 0 Transaction trace: -B.constructor() +A.constructor() B.g(0) --> Source:5:7: | @@ -23,7 +23,7 @@ Counterexample: y = 0 Transaction trace: -B.constructor() +A.constructor() B.g(0)", "severity": "warning", "sourceLocation": { diff --git a/test/cmdlineTests/standard_optimizer_invalid_detail_type/input.json b/test/cmdlineTests/standard_optimizer_invalid_detail_type/input.json index 5d65bb2e2269..52c0b9c7ac82 100644 --- a/test/cmdlineTests/standard_optimizer_invalid_detail_type/input.json +++ b/test/cmdlineTests/standard_optimizer_invalid_detail_type/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_invalid_detail_type/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": {"details": {"peephole": 7}} diff --git a/test/cmdlineTests/standard_optimizer_invalid_details/input.json b/test/cmdlineTests/standard_optimizer_invalid_details/input.json index dbab578d6175..b6c590b5e87a 100644 --- a/test/cmdlineTests/standard_optimizer_invalid_details/input.json +++ b/test/cmdlineTests/standard_optimizer_invalid_details/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_invalid_details/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": {"details": {"notThere": true}} diff --git a/test/cmdlineTests/standard_optimizer_no_yul/input.json b/test/cmdlineTests/standard_optimizer_no_yul/input.json index 42ab767be632..ad1199dcf318 100644 --- a/test/cmdlineTests/standard_optimizer_no_yul/input.json +++ b/test/cmdlineTests/standard_optimizer_no_yul/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_no_yul/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_optimizer_yul/input.json b/test/cmdlineTests/standard_optimizer_yul/input.json index cf40ef970bbb..7d27780e54c1 100644 --- a/test/cmdlineTests/standard_optimizer_yul/input.json +++ b/test/cmdlineTests/standard_optimizer_yul/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_yul/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_optimizer_yulDetails/input.json b/test/cmdlineTests/standard_optimizer_yulDetails/input.json index 6cdf504fd854..53f1981d492a 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails/input.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_yulDetails/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_optimizer_yulDetails_no_object/input.json b/test/cmdlineTests/standard_optimizer_yulDetails_no_object/input.json index 4aba68350fb6..d132a4797ed2 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails_no_object/input.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails_no_object/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_yulDetails_no_object/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps/input.json b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps/input.json index 584b8bf83e42..dca784c63fd6 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps/input.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_yulDetails_optimiserSteps/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_empty_sequence_metadata/output.json b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_empty_sequence_metadata/output.json index c461a1485bda..07087b30fdb3 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_empty_sequence_metadata/output.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_empty_sequence_metadata/output.json @@ -2,7 +2,7 @@ "contracts": { "A": { "C": { - "metadata": "{\"compiler\":{\"version\":\"\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"A\":\"C\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":false,\"deduplicate\":false,\"inliner\":false,\"jumpdestRemover\":true,\"orderLiterals\":false,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false,\"yulDetails\":{\"optimizerSteps\":\":\"}},\"runs\":200},\"remappings\":[]},\"sources\":{\"A\":{\"keccak256\":\"0xb284c39999cb85b80be315a6e9e322adf67a783c66e91ba4439168694580a66d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://098cee915fad095b8a996813768bd7d5e8c9e40c405e8c43d0572bb7bbc17334\",\"dweb:/ipfs/QmZmUzvSryrrD7pJ9S32iQnEWn4QBL4J1NdbQqL2Xc3yTr\"]}},\"version\":1}" + "metadata": "{\"compiler\":{\"version\":\"\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"A\":\"C\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":false,\"deduplicate\":false,\"inliner\":false,\"jumpdestRemover\":true,\"orderLiterals\":false,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false,\"yulDetails\":{\"optimizerSteps\":\":\"}},\"runs\":200},\"remappings\":[]},\"sources\":{\"A\":{\"keccak256\":\"0xb284c39999cb85b80be315a6e9e322adf67a783c66e91ba4439168694580a66d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://098cee915fad095b8a996813768bd7d5e8c9e40c405e8c43d0572bb7bbc17334\",\"dweb:/ipfs/QmZmUzvSryrrD7pJ9S32iQnEWn4QBL4J1NdbQqL2Xc3yTr\"]}},\"version\":1}" } } }, diff --git a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_empty_sequence_whitespaces_metadata/output.json b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_empty_sequence_whitespaces_metadata/output.json index c461a1485bda..07087b30fdb3 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_empty_sequence_whitespaces_metadata/output.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_empty_sequence_whitespaces_metadata/output.json @@ -2,7 +2,7 @@ "contracts": { "A": { "C": { - "metadata": "{\"compiler\":{\"version\":\"\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"A\":\"C\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":false,\"deduplicate\":false,\"inliner\":false,\"jumpdestRemover\":true,\"orderLiterals\":false,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false,\"yulDetails\":{\"optimizerSteps\":\":\"}},\"runs\":200},\"remappings\":[]},\"sources\":{\"A\":{\"keccak256\":\"0xb284c39999cb85b80be315a6e9e322adf67a783c66e91ba4439168694580a66d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://098cee915fad095b8a996813768bd7d5e8c9e40c405e8c43d0572bb7bbc17334\",\"dweb:/ipfs/QmZmUzvSryrrD7pJ9S32iQnEWn4QBL4J1NdbQqL2Xc3yTr\"]}},\"version\":1}" + "metadata": "{\"compiler\":{\"version\":\"\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"A\":\"C\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":false,\"deduplicate\":false,\"inliner\":false,\"jumpdestRemover\":true,\"orderLiterals\":false,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":false,\"yulDetails\":{\"optimizerSteps\":\":\"}},\"runs\":200},\"remappings\":[]},\"sources\":{\"A\":{\"keccak256\":\"0xb284c39999cb85b80be315a6e9e322adf67a783c66e91ba4439168694580a66d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://098cee915fad095b8a996813768bd7d5e8c9e40c405e8c43d0572bb7bbc17334\",\"dweb:/ipfs/QmZmUzvSryrrD7pJ9S32iQnEWn4QBL4J1NdbQqL2Xc3yTr\"]}},\"version\":1}" } } }, diff --git a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_invalid_abbreviation/input.json b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_invalid_abbreviation/input.json index 48de0cce3f51..ebdf48e3a478 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_invalid_abbreviation/input.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_invalid_abbreviation/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_yulDetails_optimiserSteps_invalid_abbreviation/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_invalid_nested_delimiter/input.json b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_invalid_nested_delimiter/input.json index 5be769f7676a..a93f21739315 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_invalid_nested_delimiter/input.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_invalid_nested_delimiter/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_yulDetails_optimiserSteps_invalid_nested_delimiter/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_mutliple_delimiters/input.json b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_mutliple_delimiters/input.json index 0bddd9d9dc23..4caee0761778 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_mutliple_delimiters/input.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_mutliple_delimiters/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_yulDetails_optimiserSteps_mutliple_delimiters/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_nested_brackets/input.json b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_nested_brackets/input.json index 2baf7a7235fc..bddd8d531ff4 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_nested_brackets/input.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_nested_brackets/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_yulDetails_optimiserSteps_nested_brackets/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_nesting_too_deep/input.json b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_nesting_too_deep/input.json index 1c055d91545e..08aba5ccc7f0 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_nesting_too_deep/input.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_nesting_too_deep/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_yulDetails_optimiserSteps_nesting_too_deep/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_no_yul/input.json b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_no_yul/input.json index 511860250476..586560917fa0 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_no_yul/input.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_no_yul/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_yulDetails_optimiserSteps_no_yul/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_type/input.json b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_type/input.json index e6f2abaa2847..0166a4248ee3 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_type/input.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_type/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_yulDetails_optimiserSteps_type/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_unbalanced_closing_bracket/input.json b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_unbalanced_closing_bracket/input.json index e3cd50027b17..554bfe2e5797 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_unbalanced_closing_bracket/input.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_unbalanced_closing_bracket/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_yulDetails_optimiserSteps_unbalanced_closing_bracket/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_unbalanced_opening_bracket/input.json b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_unbalanced_opening_bracket/input.json index 6cf7a233479c..aa4b172bbd0d 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_unbalanced_opening_bracket/input.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_unbalanced_opening_bracket/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_yulDetails_optimiserSteps_unbalanced_opening_bracket/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_cleanup_sequence/input.json b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_cleanup_sequence/input.json index b557a9662d8e..c3dde4dd3bbe 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_cleanup_sequence/input.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_cleanup_sequence/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_yulDetails_optimiserSteps_with_cleanup_sequence/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_empty_cleanup_sequence/input.json b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_empty_cleanup_sequence/input.json index 7d2f529ccf7f..c293911639f2 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_empty_cleanup_sequence/input.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_empty_cleanup_sequence/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_yulDetails_optimiserSteps_with_empty_cleanup_sequence/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_empty_optimisation_sequence/input.json b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_empty_optimisation_sequence/input.json index 9c603d6f7f0b..8c4801da597a 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_empty_optimisation_sequence/input.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_empty_optimisation_sequence/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_yulDetails_optimiserSteps_with_empty_optimisation_sequence/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_empty_sequence/input.json b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_empty_sequence/input.json index 5780bea83aa8..9d126b88ee4f 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_empty_sequence/input.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_empty_sequence/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_yulDetails_optimiserSteps_with_empty_sequence/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_empty_sequence_no_yul/input.json b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_empty_sequence_no_yul/input.json index 8e6add377cac..aecf8d9d5c1e 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_empty_sequence_no_yul/input.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_empty_sequence_no_yul/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_yulDetails_optimiserSteps_with_empty_sequence_no_yul/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_whitespace_newline_sequence_no_yul/input.json b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_whitespace_newline_sequence_no_yul/input.json index 321ac8e99ab8..1396b4269ab5 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_whitespace_newline_sequence_no_yul/input.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails_optimiserSteps_with_whitespace_newline_sequence_no_yul/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_yulDetails_optimiserSteps_with_whitespace_newline_sequence_no_yul/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_optimizer_yulDetails_without_yul/input.json b/test/cmdlineTests/standard_optimizer_yulDetails_without_yul/input.json index abd8cc0c8bac..8ccf21992999 100644 --- a/test/cmdlineTests/standard_optimizer_yulDetails_without_yul/input.json +++ b/test/cmdlineTests/standard_optimizer_yulDetails_without_yul/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "A": {"urls": ["standard_optimizer_yulDetails_optimiserSteps_without_yul/in.sol"]} + "A": {"urls": ["in.sol"]} }, "settings": { "optimizer": {"details": {"yulDetails": 7} diff --git a/test/cmdlineTests/standard_outputs_on_analysis_error_fatal/input.json b/test/cmdlineTests/standard_outputs_on_analysis_error_fatal/input.json index b640f033dc46..c157a2724884 100644 --- a/test/cmdlineTests/standard_outputs_on_analysis_error_fatal/input.json +++ b/test/cmdlineTests/standard_outputs_on_analysis_error_fatal/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "C": {"urls": ["standard_outputs_on_analysis_error_fatal/in.sol"]} + "C": {"urls": ["in.sol"]} }, "settings": { "outputSelection": { diff --git a/test/cmdlineTests/standard_outputs_on_analysis_error_fatal_after_current_step/input.json b/test/cmdlineTests/standard_outputs_on_analysis_error_fatal_after_current_step/input.json index 0214e00e8406..c157a2724884 100644 --- a/test/cmdlineTests/standard_outputs_on_analysis_error_fatal_after_current_step/input.json +++ b/test/cmdlineTests/standard_outputs_on_analysis_error_fatal_after_current_step/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "C": {"urls": ["standard_outputs_on_analysis_error_fatal_after_current_step/in.sol"]} + "C": {"urls": ["in.sol"]} }, "settings": { "outputSelection": { diff --git a/test/cmdlineTests/standard_outputs_on_analysis_error_non_fatal/input.json b/test/cmdlineTests/standard_outputs_on_analysis_error_non_fatal/input.json index 904ebc5bf287..c157a2724884 100644 --- a/test/cmdlineTests/standard_outputs_on_analysis_error_non_fatal/input.json +++ b/test/cmdlineTests/standard_outputs_on_analysis_error_non_fatal/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "C": {"urls": ["standard_outputs_on_analysis_error_non_fatal/in.sol"]} + "C": {"urls": ["in.sol"]} }, "settings": { "outputSelection": { diff --git a/test/cmdlineTests/standard_outputs_on_compilation_error/input.json b/test/cmdlineTests/standard_outputs_on_compilation_error/input.json index 855f007689b8..0555ba5e93f9 100644 --- a/test/cmdlineTests/standard_outputs_on_compilation_error/input.json +++ b/test/cmdlineTests/standard_outputs_on_compilation_error/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "C": {"urls": ["standard_outputs_on_compilation_error/in.sol"]} + "C": {"urls": ["in.sol"]} }, "settings": { "optimizer": {"enabled": true}, diff --git a/test/cmdlineTests/standard_outputs_on_compilation_error/output.json b/test/cmdlineTests/standard_outputs_on_compilation_error/output.json index 0fa7fcff3cda..eae7a321f05b 100644 --- a/test/cmdlineTests/standard_outputs_on_compilation_error/output.json +++ b/test/cmdlineTests/standard_outputs_on_compilation_error/output.json @@ -32,7 +32,7 @@ "x()": "0c55699c" } }, - "metadata": "{\"compiler\":{\"version\":\"\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"x\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"C\":\"C\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"C\":{\"keccak256\":\"0x67a13ebd685e4c6f792e71eb747dac57edb99e94d04d841ee6c979ae517934ce\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://665b000da768823654f680d02686c1e59d682a0b3882e43a77fed9f80ce64ae8\",\"dweb:/ipfs/QmVnKvuidH6KiCdNQpoAQUtDbB8hXkafVLXWMNitUcxnqC\"]}},\"version\":1}", + "metadata": "{\"compiler\":{\"version\":\"\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"x\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"C\":\"C\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"C\":{\"keccak256\":\"0x67a13ebd685e4c6f792e71eb747dac57edb99e94d04d841ee6c979ae517934ce\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://665b000da768823654f680d02686c1e59d682a0b3882e43a77fed9f80ce64ae8\",\"dweb:/ipfs/QmVnKvuidH6KiCdNQpoAQUtDbB8hXkafVLXWMNitUcxnqC\"]}},\"version\":1}", "storageLayout": { "storage": [], "types": null diff --git a/test/cmdlineTests/standard_outputs_on_parsing_error/input.json b/test/cmdlineTests/standard_outputs_on_parsing_error/input.json index a0d00c4e9e39..c157a2724884 100644 --- a/test/cmdlineTests/standard_outputs_on_parsing_error/input.json +++ b/test/cmdlineTests/standard_outputs_on_parsing_error/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "C": {"urls": ["standard_outputs_on_parsing_error/in.sol"]} + "C": {"urls": ["in.sol"]} }, "settings": { "outputSelection": { diff --git a/test/cmdlineTests/standard_stack_too_deep_from_code_transform/input.json b/test/cmdlineTests/standard_stack_too_deep_from_code_transform/input.json index a01e842b384d..dc86ac68494e 100644 --- a/test/cmdlineTests/standard_stack_too_deep_from_code_transform/input.json +++ b/test/cmdlineTests/standard_stack_too_deep_from_code_transform/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "in.sol": {"urls": ["standard_stack_too_deep_from_code_transform/in.sol"]} + "in.sol": {"urls": ["in.sol"]} }, "settings": { "viaIR": true, diff --git a/test/cmdlineTests/standard_stop_after_parsing_ast_requested/input.json b/test/cmdlineTests/standard_stop_after_parsing_ast_requested/input.json index 34f157495034..c09db6a6ed84 100644 --- a/test/cmdlineTests/standard_stop_after_parsing_ast_requested/input.json +++ b/test/cmdlineTests/standard_stop_after_parsing_ast_requested/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "C": {"urls": ["standard_stop_after_parsing_ast_requested/in.sol"]} + "C": {"urls": ["in.sol"]} }, "settings": { "stopAfter": "parsing", diff --git a/test/cmdlineTests/standard_stop_after_parsing_bytecode_requested/input.json b/test/cmdlineTests/standard_stop_after_parsing_bytecode_requested/input.json index 7ef3d37fd305..274ca87c44e4 100644 --- a/test/cmdlineTests/standard_stop_after_parsing_bytecode_requested/input.json +++ b/test/cmdlineTests/standard_stop_after_parsing_bytecode_requested/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "C": {"urls": ["standard_stop_after_parsing_bytecode_requested/in.sol"]} + "C": {"urls": ["in.sol"]} }, "settings": { "stopAfter": "parsing", diff --git a/test/cmdlineTests/standard_stop_after_parsing_non_binary_output_requested/input.json b/test/cmdlineTests/standard_stop_after_parsing_non_binary_output_requested/input.json index ac4d623c7103..597468e20432 100644 --- a/test/cmdlineTests/standard_stop_after_parsing_non_binary_output_requested/input.json +++ b/test/cmdlineTests/standard_stop_after_parsing_non_binary_output_requested/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "C": {"urls": ["standard_stop_after_parsing_non_binary_output_requested/in.sol"]} + "C": {"urls": ["in.sol"]} }, "settings": { "stopAfter": "parsing", diff --git a/test/cmdlineTests/standard_undeployable_contract_all_outputs/input.json b/test/cmdlineTests/standard_undeployable_contract_all_outputs/input.json index 4d2aea1f147a..ecb97bef2c3a 100644 --- a/test/cmdlineTests/standard_undeployable_contract_all_outputs/input.json +++ b/test/cmdlineTests/standard_undeployable_contract_all_outputs/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "C": {"urls": ["standard_undeployable_contract_all_outputs/in.sol"]} + "C": {"urls": ["in.sol"]} }, "settings": { "outputSelection": { diff --git a/test/cmdlineTests/standard_undeployable_contract_all_outputs/output.json b/test/cmdlineTests/standard_undeployable_contract_all_outputs/output.json index 3869f7c652bd..be87a5176d06 100644 --- a/test/cmdlineTests/standard_undeployable_contract_all_outputs/output.json +++ b/test/cmdlineTests/standard_undeployable_contract_all_outputs/output.json @@ -35,7 +35,7 @@ "irAst": null, "irOptimized": "", "irOptimizedAst": null, - "metadata": "{\"compiler\":{\"version\":\"\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"C\":\"C\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"C\":{\"keccak256\":\"0xa8b7bfe5eff9112e6573d2860721faef28e8920ee251acb458303a05c1ec7df2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://a2333e25b5034de4f98729e0a737309ba8e0db4371016f312e8f991f6f01613f\",\"dweb:/ipfs/QmVLwS2grVYV6qiDvNmeEYWzb6WDne9Ze47NXERSLPM4fJ\"]}},\"version\":1}", + "metadata": "{\"compiler\":{\"version\":\"\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"C\":\"C\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"C\":{\"keccak256\":\"0xa8b7bfe5eff9112e6573d2860721faef28e8920ee251acb458303a05c1ec7df2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://a2333e25b5034de4f98729e0a737309ba8e0db4371016f312e8f991f6f01613f\",\"dweb:/ipfs/QmVLwS2grVYV6qiDvNmeEYWzb6WDne9Ze47NXERSLPM4fJ\"]}},\"version\":1}", "storageLayout": { "storage": [], "types": null @@ -84,7 +84,7 @@ "irAst": null, "irOptimized": "", "irOptimizedAst": null, - "metadata": "{\"compiler\":{\"version\":\"\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"C\":\"I\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"C\":{\"keccak256\":\"0xa8b7bfe5eff9112e6573d2860721faef28e8920ee251acb458303a05c1ec7df2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://a2333e25b5034de4f98729e0a737309ba8e0db4371016f312e8f991f6f01613f\",\"dweb:/ipfs/QmVLwS2grVYV6qiDvNmeEYWzb6WDne9Ze47NXERSLPM4fJ\"]}},\"version\":1}", + "metadata": "{\"compiler\":{\"version\":\"\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"C\":\"I\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"C\":{\"keccak256\":\"0xa8b7bfe5eff9112e6573d2860721faef28e8920ee251acb458303a05c1ec7df2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://a2333e25b5034de4f98729e0a737309ba8e0db4371016f312e8f991f6f01613f\",\"dweb:/ipfs/QmVLwS2grVYV6qiDvNmeEYWzb6WDne9Ze47NXERSLPM4fJ\"]}},\"version\":1}", "storageLayout": { "storage": [], "types": null diff --git a/test/cmdlineTests/standard_urls_existing_and_missing/input.json b/test/cmdlineTests/standard_urls_existing_and_missing/input.json index 686e8128eca2..575145836b39 100644 --- a/test/cmdlineTests/standard_urls_existing_and_missing/input.json +++ b/test/cmdlineTests/standard_urls_existing_and_missing/input.json @@ -3,9 +3,9 @@ "sources": { "url_not_found.sol": { "urls": [ - "standard_urls_existing_and_missing/non-existent-contract-1.sol", - "standard_urls_existing_and_missing/contract.sol", - "standard_urls_existing_and_missing/non-existent-contract-2.sol" + "non-existent-contract-1.sol", + "contract.sol", + "non-existent-contract-2.sol" ] } }, diff --git a/test/cmdlineTests/standard_urls_existing_and_missing/output.json b/test/cmdlineTests/standard_urls_existing_and_missing/output.json index e9db1135d764..4204cdb45b99 100644 --- a/test/cmdlineTests/standard_urls_existing_and_missing/output.json +++ b/test/cmdlineTests/standard_urls_existing_and_missing/output.json @@ -2,8 +2,8 @@ "errors": [ { "component": "general", - "formattedMessage": "Cannot import url (\"standard_urls_existing_and_missing/non-existent-contract-1.sol\"): File not found. Searched the following locations: \"\".", - "message": "Cannot import url (\"standard_urls_existing_and_missing/non-existent-contract-1.sol\"): File not found. Searched the following locations: \"\".", + "formattedMessage": "Cannot import url (\"non-existent-contract-1.sol\"): File not found. Searched the following locations: \"\".", + "message": "Cannot import url (\"non-existent-contract-1.sol\"): File not found. Searched the following locations: \"\".", "severity": "warning", "type": "Warning" } diff --git a/test/cmdlineTests/standard_urls_missing/input.json b/test/cmdlineTests/standard_urls_missing/input.json index fecc50eb03a6..5ba6e71619c6 100644 --- a/test/cmdlineTests/standard_urls_missing/input.json +++ b/test/cmdlineTests/standard_urls_missing/input.json @@ -3,9 +3,9 @@ "sources": { "url_not_found.sol": { "urls": [ - "standard_urls_missing/non-existent-contract-1.sol", - "standard_urls_missing/non-existent-contract.sol", - "standard_urls_missing/non-existent-contract-2.sol" + "non-existent-contract-1.sol", + "non-existent-contract.sol", + "non-existent-contract-2.sol" ] } }, diff --git a/test/cmdlineTests/standard_urls_missing/output.json b/test/cmdlineTests/standard_urls_missing/output.json index 7e2bb3dd59c2..8f766b055718 100644 --- a/test/cmdlineTests/standard_urls_missing/output.json +++ b/test/cmdlineTests/standard_urls_missing/output.json @@ -2,22 +2,22 @@ "errors": [ { "component": "general", - "formattedMessage": "Cannot import url (\"standard_urls_missing/non-existent-contract-1.sol\"): File not found. Searched the following locations: \"\".", - "message": "Cannot import url (\"standard_urls_missing/non-existent-contract-1.sol\"): File not found. Searched the following locations: \"\".", + "formattedMessage": "Cannot import url (\"non-existent-contract-1.sol\"): File not found. Searched the following locations: \"\".", + "message": "Cannot import url (\"non-existent-contract-1.sol\"): File not found. Searched the following locations: \"\".", "severity": "error", "type": "IOError" }, { "component": "general", - "formattedMessage": "Cannot import url (\"standard_urls_missing/non-existent-contract.sol\"): File not found. Searched the following locations: \"\".", - "message": "Cannot import url (\"standard_urls_missing/non-existent-contract.sol\"): File not found. Searched the following locations: \"\".", + "formattedMessage": "Cannot import url (\"non-existent-contract.sol\"): File not found. Searched the following locations: \"\".", + "message": "Cannot import url (\"non-existent-contract.sol\"): File not found. Searched the following locations: \"\".", "severity": "error", "type": "IOError" }, { "component": "general", - "formattedMessage": "Cannot import url (\"standard_urls_missing/non-existent-contract-2.sol\"): File not found. Searched the following locations: \"\".", - "message": "Cannot import url (\"standard_urls_missing/non-existent-contract-2.sol\"): File not found. Searched the following locations: \"\".", + "formattedMessage": "Cannot import url (\"non-existent-contract-2.sol\"): File not found. Searched the following locations: \"\".", + "message": "Cannot import url (\"non-existent-contract-2.sol\"): File not found. Searched the following locations: \"\".", "severity": "error", "type": "IOError" } diff --git a/test/cmdlineTests/standard_yul_cfg_json_export/input.json b/test/cmdlineTests/standard_yul_cfg_json_export/input.json index aee56abf8600..b5353721ee09 100644 --- a/test/cmdlineTests/standard_yul_cfg_json_export/input.json +++ b/test/cmdlineTests/standard_yul_cfg_json_export/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "C": {"urls": ["standard_yul_cfg_json_export/in.sol"]} + "C": {"urls": ["in.sol"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_yul_code_generation_error/input.json b/test/cmdlineTests/standard_yul_code_generation_error/input.json index 905eef6c758a..0f4da43fc66d 100644 --- a/test/cmdlineTests/standard_yul_code_generation_error/input.json +++ b/test/cmdlineTests/standard_yul_code_generation_error/input.json @@ -1,6 +1,6 @@ { "language": "Yul", "sources": { - "C": {"urls": ["standard_yul_code_generation_error/in.yul"]} + "C": {"urls": ["in.yul"]} } } diff --git a/test/cmdlineTests/standard_yul_debug_info_ethdebug_compatible_output/input.json b/test/cmdlineTests/standard_yul_debug_info_ethdebug_compatible_output/input.json index 3e5b81c5ef69..e52867fa329d 100644 --- a/test/cmdlineTests/standard_yul_debug_info_ethdebug_compatible_output/input.json +++ b/test/cmdlineTests/standard_yul_debug_info_ethdebug_compatible_output/input.json @@ -3,7 +3,7 @@ "sources": { "C": { "urls": [ - "standard_yul_debug_info_ethdebug_compatible_output/in.yul" + "in.yul" ] } }, diff --git a/test/cmdlineTests/standard_yul_debug_info_ethdebug_incompatible_output/input.json b/test/cmdlineTests/standard_yul_debug_info_ethdebug_incompatible_output/input.json index f05e6f361aca..c2c501c96616 100644 --- a/test/cmdlineTests/standard_yul_debug_info_ethdebug_incompatible_output/input.json +++ b/test/cmdlineTests/standard_yul_debug_info_ethdebug_incompatible_output/input.json @@ -3,7 +3,7 @@ "sources": { "C": { "urls": [ - "standard_yul_debug_info_ethdebug_incompatible_output/in.yul" + "in.yul" ] } }, diff --git a/test/cmdlineTests/standard_yul_debug_info_ethdebug_verbatim_unimplemented/input.json b/test/cmdlineTests/standard_yul_debug_info_ethdebug_verbatim_unimplemented/input.json index be4fbb64fce3..16ef6ef33f74 100644 --- a/test/cmdlineTests/standard_yul_debug_info_ethdebug_verbatim_unimplemented/input.json +++ b/test/cmdlineTests/standard_yul_debug_info_ethdebug_verbatim_unimplemented/input.json @@ -3,7 +3,7 @@ "sources": { "C": { "urls": [ - "standard_yul_debug_info_ethdebug_verbatim_unimplemented/in.yul" + "in.yul" ] } }, diff --git a/test/cmdlineTests/standard_yul_debug_info_print_all/input.json b/test/cmdlineTests/standard_yul_debug_info_print_all/input.json index 1e6ed81a43a5..705c9ba7cc41 100644 --- a/test/cmdlineTests/standard_yul_debug_info_print_all/input.json +++ b/test/cmdlineTests/standard_yul_debug_info_print_all/input.json @@ -1,7 +1,7 @@ { "language": "Yul", "sources": { - "C": {"urls": ["standard_yul_debug_info_print_all/in.yul"]} + "C": {"urls": ["in.yul"]} }, "settings": { "debug": {"debugInfo": ["*"]}, diff --git a/test/cmdlineTests/standard_yul_debug_info_print_location_only/input.json b/test/cmdlineTests/standard_yul_debug_info_print_location_only/input.json index 867bc6e705ff..84ad0edadf18 100644 --- a/test/cmdlineTests/standard_yul_debug_info_print_location_only/input.json +++ b/test/cmdlineTests/standard_yul_debug_info_print_location_only/input.json @@ -1,7 +1,7 @@ { "language": "Yul", "sources": { - "C": {"urls": ["standard_yul_debug_info_print_location_only/in.yul"]} + "C": {"urls": ["in.yul"]} }, "settings": { "debug": {"debugInfo": ["location"]}, diff --git a/test/cmdlineTests/standard_yul_debug_info_print_none/input.json b/test/cmdlineTests/standard_yul_debug_info_print_none/input.json index 705cf3879e4e..13681dd8b114 100644 --- a/test/cmdlineTests/standard_yul_debug_info_print_none/input.json +++ b/test/cmdlineTests/standard_yul_debug_info_print_none/input.json @@ -1,7 +1,7 @@ { "language": "Yul", "sources": { - "C": {"urls": ["standard_yul_debug_info_print_none/in.yul"]} + "C": {"urls": ["in.yul"]} }, "settings": { "debug": {"debugInfo": []}, diff --git a/test/cmdlineTests/standard_yul_debug_info_print_snippet_only/input.json b/test/cmdlineTests/standard_yul_debug_info_print_snippet_only/input.json index ee247218f33e..ed74c075288f 100644 --- a/test/cmdlineTests/standard_yul_debug_info_print_snippet_only/input.json +++ b/test/cmdlineTests/standard_yul_debug_info_print_snippet_only/input.json @@ -1,7 +1,7 @@ { "language": "Yul", "sources": { - "C": {"urls": ["standard_yul_debug_info_print_snippet_only/in.yul"]} + "C": {"urls": ["in.yul"]} }, "settings": { "debug": {"debugInfo": ["snippet"]}, diff --git a/test/cmdlineTests/standard_yul_ethdebug_assign_immutable/input.json b/test/cmdlineTests/standard_yul_ethdebug_assign_immutable/input.json index 83acd4c42085..652620bedd51 100644 --- a/test/cmdlineTests/standard_yul_ethdebug_assign_immutable/input.json +++ b/test/cmdlineTests/standard_yul_ethdebug_assign_immutable/input.json @@ -1,7 +1,7 @@ { "language": "Yul", "sources": { - "C": {"urls": ["standard_yul_ethdebug_assign_immutable/in.yul"]} + "C": {"urls": ["in.yul"]} }, "settings": { "outputSelection": { diff --git a/test/cmdlineTests/standard_yul_ethdebug_bytecode_ir/input.json b/test/cmdlineTests/standard_yul_ethdebug_bytecode_ir/input.json index abfb7ee863af..67c5fedc7fd0 100644 --- a/test/cmdlineTests/standard_yul_ethdebug_bytecode_ir/input.json +++ b/test/cmdlineTests/standard_yul_ethdebug_bytecode_ir/input.json @@ -1,7 +1,7 @@ { "language": "Yul", "sources": { - "C": {"urls": ["standard_yul_ethdebug_bytecode_ir/in.yul"]} + "C": {"urls": ["in.yul"]} }, "settings": { "outputSelection": { diff --git a/test/cmdlineTests/standard_yul_ethdebug_bytecode_iroptimized/input.json b/test/cmdlineTests/standard_yul_ethdebug_bytecode_iroptimized/input.json index 54094c67305f..17949761f0f2 100644 --- a/test/cmdlineTests/standard_yul_ethdebug_bytecode_iroptimized/input.json +++ b/test/cmdlineTests/standard_yul_ethdebug_bytecode_iroptimized/input.json @@ -1,7 +1,7 @@ { "language": "Yul", "sources": { - "C": {"urls": ["standard_yul_ethdebug_bytecode_iroptimized/in.yul"]} + "C": {"urls": ["in.yul"]} }, "settings": { "outputSelection": { diff --git a/test/cmdlineTests/standard_yul_ethdebug_deployed_bytecode/input.json b/test/cmdlineTests/standard_yul_ethdebug_deployed_bytecode/input.json index e222dfeda8c2..5c5e9c5f76e1 100644 --- a/test/cmdlineTests/standard_yul_ethdebug_deployed_bytecode/input.json +++ b/test/cmdlineTests/standard_yul_ethdebug_deployed_bytecode/input.json @@ -1,7 +1,7 @@ { "language": "Yul", "sources": { - "C": {"urls": ["standard_yul_ethdebug_deployed_bytecode/in.yul"]} + "C": {"urls": ["in.yul"]} }, "settings": { "outputSelection": { diff --git a/test/cmdlineTests/standard_yul_ethdebug_deployed_bytecode_and_bytecode/input.json b/test/cmdlineTests/standard_yul_ethdebug_deployed_bytecode_and_bytecode/input.json index 20779012030d..655def5c1abf 100644 --- a/test/cmdlineTests/standard_yul_ethdebug_deployed_bytecode_and_bytecode/input.json +++ b/test/cmdlineTests/standard_yul_ethdebug_deployed_bytecode_and_bytecode/input.json @@ -1,7 +1,7 @@ { "language": "Yul", "sources": { - "C": {"urls": ["standard_yul_ethdebug_deployed_bytecode/in.yul"]} + "C": {"urls": ["in.yul"]} }, "settings": { "outputSelection": { diff --git a/test/cmdlineTests/standard_yul_ethdebug_ir/input.json b/test/cmdlineTests/standard_yul_ethdebug_ir/input.json index 3153a378db84..67c5fedc7fd0 100644 --- a/test/cmdlineTests/standard_yul_ethdebug_ir/input.json +++ b/test/cmdlineTests/standard_yul_ethdebug_ir/input.json @@ -1,7 +1,7 @@ { "language": "Yul", "sources": { - "C": {"urls": ["standard_yul_ethdebug_ir/in.yul"]} + "C": {"urls": ["in.yul"]} }, "settings": { "outputSelection": { diff --git a/test/cmdlineTests/standard_yul_ethdebug_iroptimize/input.json b/test/cmdlineTests/standard_yul_ethdebug_iroptimize/input.json index 180abcf31f8d..b08c9dcd7286 100644 --- a/test/cmdlineTests/standard_yul_ethdebug_iroptimize/input.json +++ b/test/cmdlineTests/standard_yul_ethdebug_iroptimize/input.json @@ -1,7 +1,7 @@ { "language": "Yul", "sources": { - "C": {"urls": ["standard_yul_ethdebug_iroptimize/in.yul"]} + "C": {"urls": ["in.yul"]} }, "settings": { "outputSelection": { diff --git a/test/cmdlineTests/standard_yul_ethdebug_optimize_ir/input.json b/test/cmdlineTests/standard_yul_ethdebug_optimize_ir/input.json index 9f0c8b0d5cef..d7aec1f0889c 100644 --- a/test/cmdlineTests/standard_yul_ethdebug_optimize_ir/input.json +++ b/test/cmdlineTests/standard_yul_ethdebug_optimize_ir/input.json @@ -1,7 +1,7 @@ { "language": "Yul", "sources": { - "C": {"urls": ["standard_yul_ethdebug_optimize_ir/in.yul"]} + "C": {"urls": ["in.yul"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/standard_yul_ethdebug_optimize_iroptimized/input.json b/test/cmdlineTests/standard_yul_ethdebug_optimize_iroptimized/input.json index 81b637abd5b5..eeabdbcb9845 100644 --- a/test/cmdlineTests/standard_yul_ethdebug_optimize_iroptimized/input.json +++ b/test/cmdlineTests/standard_yul_ethdebug_optimize_iroptimized/input.json @@ -1,7 +1,7 @@ { "language": "Yul", "sources": { - "C": {"urls": ["standard_yul_ethdebug_optimize_iroptimized/in.yul"]} + "C": {"urls": ["in.yul"]} }, "settings": { "optimizer": { diff --git a/test/cmdlineTests/stop_after_parsing_ast/output b/test/cmdlineTests/stop_after_parsing_ast/output index 6cca9557da1b..e6d54c42615c 100644 --- a/test/cmdlineTests/stop_after_parsing_ast/output +++ b/test/cmdlineTests/stop_after_parsing_ast/output @@ -1,9 +1,9 @@ JSON AST (compact format): -======= stop_after_parsing_ast/input.sol ======= +======= input.sol ======= { - "absolutePath": "stop_after_parsing_ast/input.sol", + "absolutePath": "input.sol", "id": 4, "license": "GPL-3.0", "nodeType": "SourceUnit", diff --git a/test/cmdlineTests/storage_layout_transient_value_types/input.json b/test/cmdlineTests/storage_layout_transient_value_types/input.json index 8c90a7dde233..7a12ca85c985 100644 --- a/test/cmdlineTests/storage_layout_transient_value_types/input.json +++ b/test/cmdlineTests/storage_layout_transient_value_types/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "fileA": {"urls": ["storage_layout_transient_value_types/in.sol"]} + "fileA": {"urls": ["in.sol"]} }, "settings": { "outputSelection": { diff --git a/test/cmdlineTests/storage_layout_user_defined/err b/test/cmdlineTests/storage_layout_user_defined/err index a9b5f07b19a0..e3815925acb9 100644 --- a/test/cmdlineTests/storage_layout_user_defined/err +++ b/test/cmdlineTests/storage_layout_user_defined/err @@ -1,2 +1,2 @@ Warning: Source file does not specify required compiler version! ---> storage_layout_user_defined/input.sol +--> input.sol diff --git a/test/cmdlineTests/storage_layout_user_defined/output b/test/cmdlineTests/storage_layout_user_defined/output index bb7819c66f12..d5be033ffe45 100644 --- a/test/cmdlineTests/storage_layout_user_defined/output +++ b/test/cmdlineTests/storage_layout_user_defined/output @@ -1,11 +1,11 @@ -======= storage_layout_user_defined/input.sol:C ======= +======= input.sol:C ======= Contract Storage Layout: { "storage": [ { "astId": 7, - "contract": "storage_layout_user_defined/input.sol:C", + "contract": "input.sol:C", "label": "a", "offset": 0, "slot": "0", @@ -13,7 +13,7 @@ Contract Storage Layout: }, { "astId": 10, - "contract": "storage_layout_user_defined/input.sol:C", + "contract": "input.sol:C", "label": "b", "offset": 16, "slot": "0", @@ -21,7 +21,7 @@ Contract Storage Layout: }, { "astId": 13, - "contract": "storage_layout_user_defined/input.sol:C", + "contract": "input.sol:C", "label": "c", "offset": 0, "slot": "1", @@ -29,7 +29,7 @@ Contract Storage Layout: }, { "astId": 16, - "contract": "storage_layout_user_defined/input.sol:C", + "contract": "input.sol:C", "label": "d", "offset": 16, "slot": "1", @@ -37,7 +37,7 @@ Contract Storage Layout: }, { "astId": 19, - "contract": "storage_layout_user_defined/input.sol:C", + "contract": "input.sol:C", "label": "e", "offset": 17, "slot": "1", @@ -45,7 +45,7 @@ Contract Storage Layout: }, { "astId": 22, - "contract": "storage_layout_user_defined/input.sol:C", + "contract": "input.sol:C", "label": "f", "offset": 18, "slot": "1", @@ -53,7 +53,7 @@ Contract Storage Layout: }, { "astId": 25, - "contract": "storage_layout_user_defined/input.sol:C", + "contract": "input.sol:C", "label": "g", "offset": 19, "slot": "1", @@ -61,7 +61,7 @@ Contract Storage Layout: }, { "astId": 28, - "contract": "storage_layout_user_defined/input.sol:C", + "contract": "input.sol:C", "label": "h", "offset": 20, "slot": "1", diff --git a/test/cmdlineTests/storage_layout_user_defined_no_pretty_print/output b/test/cmdlineTests/storage_layout_user_defined_no_pretty_print/output index 1be4da0b6ee9..54276e472651 100644 --- a/test/cmdlineTests/storage_layout_user_defined_no_pretty_print/output +++ b/test/cmdlineTests/storage_layout_user_defined_no_pretty_print/output @@ -1,4 +1,4 @@ -======= storage_layout_user_defined_no_pretty_print/input.sol:C ======= +======= input.sol:C ======= Contract Storage Layout: {"storage":[]} diff --git a/test/cmdlineTests/strict_asm_ast_compact_json/output b/test/cmdlineTests/strict_asm_ast_compact_json/output index b2271c36cb05..1099f0c12a37 100644 --- a/test/cmdlineTests/strict_asm_ast_compact_json/output +++ b/test/cmdlineTests/strict_asm_ast_compact_json/output @@ -1,5 +1,5 @@ -======= strict_asm_ast_compact_json/input.yul (EVM) ======= +======= input.yul (EVM) ======= AST: { diff --git a/test/cmdlineTests/strict_asm_debug_info_print_all/output b/test/cmdlineTests/strict_asm_debug_info_print_all/output index 0e58baf578e6..ea8afb6a2f06 100644 --- a/test/cmdlineTests/strict_asm_debug_info_print_all/output +++ b/test/cmdlineTests/strict_asm_debug_info_print_all/output @@ -1,5 +1,5 @@ -======= strict_asm_debug_info_print_all/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: /// @use-src 0:"input.sol" diff --git a/test/cmdlineTests/strict_asm_debug_info_print_location_only/output b/test/cmdlineTests/strict_asm_debug_info_print_location_only/output index 17d2f50e2e15..06448d25ab42 100644 --- a/test/cmdlineTests/strict_asm_debug_info_print_location_only/output +++ b/test/cmdlineTests/strict_asm_debug_info_print_location_only/output @@ -1,5 +1,5 @@ -======= strict_asm_debug_info_print_location_only/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: /// @use-src 0:"input.sol" diff --git a/test/cmdlineTests/strict_asm_debug_info_print_none/output b/test/cmdlineTests/strict_asm_debug_info_print_none/output index 51f779490ab7..93fc5c73e53b 100644 --- a/test/cmdlineTests/strict_asm_debug_info_print_none/output +++ b/test/cmdlineTests/strict_asm_debug_info_print_none/output @@ -1,5 +1,5 @@ -======= strict_asm_debug_info_print_none/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: /// @use-src 0:"input.sol" diff --git a/test/cmdlineTests/strict_asm_evm_version_byzantium/output b/test/cmdlineTests/strict_asm_evm_version_byzantium/output index 2840e1d2b697..a43e6e47c34c 100644 --- a/test/cmdlineTests/strict_asm_evm_version_byzantium/output +++ b/test/cmdlineTests/strict_asm_evm_version_byzantium/output @@ -1,5 +1,5 @@ -======= strict_asm_evm_version_byzantium/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "object" { @@ -11,5 +11,5 @@ Binary representation: 00 Text representation: - /* "strict_asm_evm_version_byzantium/input.yul":27:34 */ + /* "input.yul":27:34 */ stop diff --git a/test/cmdlineTests/strict_asm_evm_version_constantinople/output b/test/cmdlineTests/strict_asm_evm_version_constantinople/output index 9362866b43dc..a43e6e47c34c 100644 --- a/test/cmdlineTests/strict_asm_evm_version_constantinople/output +++ b/test/cmdlineTests/strict_asm_evm_version_constantinople/output @@ -1,5 +1,5 @@ -======= strict_asm_evm_version_constantinople/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "object" { @@ -11,5 +11,5 @@ Binary representation: 00 Text representation: - /* "strict_asm_evm_version_constantinople/input.yul":27:34 */ + /* "input.yul":27:34 */ stop diff --git a/test/cmdlineTests/strict_asm_jump/err b/test/cmdlineTests/strict_asm_jump/err index c0001f382533..419701b46660 100644 --- a/test/cmdlineTests/strict_asm_jump/err +++ b/test/cmdlineTests/strict_asm_jump/err @@ -1,5 +1,5 @@ Error: Function "jump" not found. - --> strict_asm_jump/input.yul:1:3: + --> input.yul:1:3: | 1 | { jump(1) } | ^^^^ diff --git a/test/cmdlineTests/strict_asm_msize_with_optimizer/output b/test/cmdlineTests/strict_asm_msize_with_optimizer/output index fbc1e69fac24..7f170e22f699 100644 --- a/test/cmdlineTests/strict_asm_msize_with_optimizer/output +++ b/test/cmdlineTests/strict_asm_msize_with_optimizer/output @@ -1,5 +1,5 @@ -======= strict_asm_msize_with_optimizer/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "object" { diff --git a/test/cmdlineTests/strict_asm_msize_without_optimizer/output b/test/cmdlineTests/strict_asm_msize_without_optimizer/output index ac19efbcbc78..2ba00372efca 100644 --- a/test/cmdlineTests/strict_asm_msize_without_optimizer/output +++ b/test/cmdlineTests/strict_asm_msize_without_optimizer/output @@ -1,5 +1,5 @@ -======= strict_asm_msize_without_optimizer/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "object" { diff --git a/test/cmdlineTests/strict_asm_only_cr/err b/test/cmdlineTests/strict_asm_only_cr/err index 0879e4f212db..334ade78f75e 100644 --- a/test/cmdlineTests/strict_asm_only_cr/err +++ b/test/cmdlineTests/strict_asm_only_cr/err @@ -1,5 +1,5 @@ Error: Expected keyword "object". - --> strict_asm_only_cr/input.yul:1:2: + --> input.yul:1:2: | 1 | | ^ diff --git a/test/cmdlineTests/strict_asm_optimizer_steps/output b/test/cmdlineTests/strict_asm_optimizer_steps/output index 58c91976185c..4e20c6218f87 100644 --- a/test/cmdlineTests/strict_asm_optimizer_steps/output +++ b/test/cmdlineTests/strict_asm_optimizer_steps/output @@ -1,5 +1,5 @@ -======= strict_asm_optimizer_steps/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "C_6" { @@ -27,58 +27,58 @@ Binary representation: 608060405234601357600c60185f39600c5ff35b5f80fdfe608060405236155f555f80fd Text representation: - /* "strict_asm_optimizer_steps/input.yul":59:62 */ + /* "input.yul":59:62 */ 0x80 - /* "strict_asm_optimizer_steps/input.yul":55:57 */ + /* "input.yul":55:57 */ 0x40 - /* "strict_asm_optimizer_steps/input.yul":48:63 */ + /* "input.yul":48:63 */ mstore - /* "strict_asm_optimizer_steps/input.yul":79:90 */ + /* "input.yul":79:90 */ callvalue - /* "strict_asm_optimizer_steps/input.yul":76:107 */ + /* "input.yul":76:107 */ tag_1 jumpi - /* "strict_asm_optimizer_steps/input.yul":160:184 */ + /* "input.yul":160:184 */ dataSize(sub_0) - /* "strict_asm_optimizer_steps/input.yul":132:158 */ + /* "input.yul":132:158 */ dataOffset(sub_0) - /* "strict_asm_optimizer_steps/input.yul":129:130 */ + /* "input.yul":129:130 */ 0x00 - /* "strict_asm_optimizer_steps/input.yul":120:185 */ + /* "input.yul":120:185 */ codecopy - /* "strict_asm_optimizer_steps/input.yul":208:232 */ + /* "input.yul":208:232 */ dataSize(sub_0) - /* "strict_asm_optimizer_steps/input.yul":205:206 */ + /* "input.yul":205:206 */ 0x00 - /* "strict_asm_optimizer_steps/input.yul":198:233 */ + /* "input.yul":198:233 */ return - /* "strict_asm_optimizer_steps/input.yul":91:107 */ + /* "input.yul":91:107 */ tag_1: - /* "strict_asm_optimizer_steps/input.yul":103:104 */ + /* "input.yul":103:104 */ 0x00 - /* "strict_asm_optimizer_steps/input.yul":93:105 */ + /* "input.yul":93:105 */ dup1 revert stop sub_0: assembly { - /* "strict_asm_optimizer_steps/input.yul":334:337 */ + /* "input.yul":334:337 */ 0x80 - /* "strict_asm_optimizer_steps/input.yul":330:332 */ + /* "input.yul":330:332 */ 0x40 - /* "strict_asm_optimizer_steps/input.yul":323:338 */ + /* "input.yul":323:338 */ mstore - /* "strict_asm_optimizer_steps/input.yul":372:386 */ + /* "input.yul":372:386 */ calldatasize - /* "strict_asm_optimizer_steps/input.yul":365:387 */ + /* "input.yul":365:387 */ iszero - /* "strict_asm_optimizer_steps/input.yul":362:363 */ + /* "input.yul":362:363 */ 0x00 - /* "strict_asm_optimizer_steps/input.yul":355:388 */ + /* "input.yul":355:388 */ sstore - /* "strict_asm_optimizer_steps/input.yul":415:416 */ + /* "input.yul":415:416 */ 0x00 - /* "strict_asm_optimizer_steps/input.yul":405:417 */ + /* "input.yul":405:417 */ dup1 revert } diff --git a/test/cmdlineTests/strict_asm_output_selection_asm_only/output b/test/cmdlineTests/strict_asm_output_selection_asm_only/output index 317c9a9ae2fd..08932887f114 100644 --- a/test/cmdlineTests/strict_asm_output_selection_asm_only/output +++ b/test/cmdlineTests/strict_asm_output_selection_asm_only/output @@ -1,12 +1,12 @@ -======= strict_asm_output_selection_asm_only/input.yul (EVM) ======= +======= input.yul (EVM) ======= Text representation: - /* "strict_asm_output_selection_asm_only/input.yul":41:43 */ + /* "input.yul":41:43 */ 0x2a - /* "strict_asm_output_selection_asm_only/input.yul":38:39 */ + /* "input.yul":38:39 */ 0x00 - /* "strict_asm_output_selection_asm_only/input.yul":31:44 */ + /* "input.yul":31:44 */ sstore - /* "strict_asm_output_selection_asm_only/input.yul":27:48 */ + /* "input.yul":27:48 */ stop diff --git a/test/cmdlineTests/strict_asm_output_selection_bin_only/output b/test/cmdlineTests/strict_asm_output_selection_bin_only/output index 86d249576805..4edd88b33146 100644 --- a/test/cmdlineTests/strict_asm_output_selection_bin_only/output +++ b/test/cmdlineTests/strict_asm_output_selection_bin_only/output @@ -1,5 +1,5 @@ -======= strict_asm_output_selection_bin_only/input.yul (EVM) ======= +======= input.yul (EVM) ======= Binary representation: 602a5f5500 diff --git a/test/cmdlineTests/strict_asm_output_selection_ir_optimized_only/output b/test/cmdlineTests/strict_asm_output_selection_ir_optimized_only/output index 1fa4b72c7e2b..15174c71c8d3 100644 --- a/test/cmdlineTests/strict_asm_output_selection_ir_optimized_only/output +++ b/test/cmdlineTests/strict_asm_output_selection_ir_optimized_only/output @@ -1,5 +1,5 @@ -======= strict_asm_output_selection_ir_optimized_only/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "object" { diff --git a/test/cmdlineTests/strict_asm_warning/err b/test/cmdlineTests/strict_asm_warning/err index 0661ae1ffec2..be47fb6ad90d 100644 --- a/test/cmdlineTests/strict_asm_warning/err +++ b/test/cmdlineTests/strict_asm_warning/err @@ -1,5 +1,5 @@ Warning: "selfdestruct" has been deprecated. Note that, starting from the Cancun hard fork, the underlying opcode no longer deletes the code and data associated with an account and only transfers its Ether to the beneficiary, unless executed in the same transaction in which the contract was created (see EIP-6780). Any use in newly deployed contracts is strongly discouraged even if the new behavior is taken into account. Future changes to the EVM might further reduce the functionality of the opcode. - --> strict_asm_warning/input.yul:4:5: + --> input.yul:4:5: | 4 | selfdestruct(0) | ^^^^^^^^^^^^ diff --git a/test/cmdlineTests/strict_asm_warning/output b/test/cmdlineTests/strict_asm_warning/output index 71cb2ce69a09..b71411dae89d 100644 --- a/test/cmdlineTests/strict_asm_warning/output +++ b/test/cmdlineTests/strict_asm_warning/output @@ -1,5 +1,5 @@ -======= strict_asm_warning/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "object" { diff --git a/test/cmdlineTests/strict_asm_warning_and_error_optimize/err b/test/cmdlineTests/strict_asm_warning_and_error_optimize/err index 22366e3e7bf3..b008c021a832 100644 --- a/test/cmdlineTests/strict_asm_warning_and_error_optimize/err +++ b/test/cmdlineTests/strict_asm_warning_and_error_optimize/err @@ -1,11 +1,11 @@ Warning: "selfdestruct" has been deprecated. Note that, starting from the Cancun hard fork, the underlying opcode no longer deletes the code and data associated with an account and only transfers its Ether to the beneficiary, unless executed in the same transaction in which the contract was created (see EIP-6780). Any use in newly deployed contracts is strongly discouraged even if the new behavior is taken into account. Future changes to the EVM might further reduce the functionality of the opcode. - --> strict_asm_warning_and_error_optimize/input.yul:4:5: + --> input.yul:4:5: | 4 | selfdestruct() | ^^^^^^^^^^^^ Error: Function "selfdestruct" expects 1 arguments but got 0. - --> strict_asm_warning_and_error_optimize/input.yul:4:5: + --> input.yul:4:5: | 4 | selfdestruct() | ^^^^^^^^^^^^ diff --git a/test/cmdlineTests/strict_asm_warning_optimize/err b/test/cmdlineTests/strict_asm_warning_optimize/err index 098aa00baf69..be47fb6ad90d 100644 --- a/test/cmdlineTests/strict_asm_warning_optimize/err +++ b/test/cmdlineTests/strict_asm_warning_optimize/err @@ -1,5 +1,5 @@ Warning: "selfdestruct" has been deprecated. Note that, starting from the Cancun hard fork, the underlying opcode no longer deletes the code and data associated with an account and only transfers its Ether to the beneficiary, unless executed in the same transaction in which the contract was created (see EIP-6780). Any use in newly deployed contracts is strongly discouraged even if the new behavior is taken into account. Future changes to the EVM might further reduce the functionality of the opcode. - --> strict_asm_warning_optimize/input.yul:4:5: + --> input.yul:4:5: | 4 | selfdestruct(0) | ^^^^^^^^^^^^ diff --git a/test/cmdlineTests/strict_asm_warning_optimize/output b/test/cmdlineTests/strict_asm_warning_optimize/output index d933dcb05525..b71411dae89d 100644 --- a/test/cmdlineTests/strict_asm_warning_optimize/output +++ b/test/cmdlineTests/strict_asm_warning_optimize/output @@ -1,5 +1,5 @@ -======= strict_asm_warning_optimize/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "object" { diff --git a/test/cmdlineTests/strict_asm_warning_optimize_unreachable/err b/test/cmdlineTests/strict_asm_warning_optimize_unreachable/err index 4535680baa59..4465b2c242d9 100644 --- a/test/cmdlineTests/strict_asm_warning_optimize_unreachable/err +++ b/test/cmdlineTests/strict_asm_warning_optimize_unreachable/err @@ -1,5 +1,5 @@ Warning: "selfdestruct" has been deprecated. Note that, starting from the Cancun hard fork, the underlying opcode no longer deletes the code and data associated with an account and only transfers its Ether to the beneficiary, unless executed in the same transaction in which the contract was created (see EIP-6780). Any use in newly deployed contracts is strongly discouraged even if the new behavior is taken into account. Future changes to the EVM might further reduce the functionality of the opcode. - --> strict_asm_warning_optimize_unreachable/input.yul:7:5: + --> input.yul:7:5: | 7 | selfdestruct(0) | ^^^^^^^^^^^^ diff --git a/test/cmdlineTests/strict_asm_warning_optimize_unreachable/output b/test/cmdlineTests/strict_asm_warning_optimize_unreachable/output index 508e9d8ed4ef..a2c2516af78d 100644 --- a/test/cmdlineTests/strict_asm_warning_optimize_unreachable/output +++ b/test/cmdlineTests/strict_asm_warning_optimize_unreachable/output @@ -1,5 +1,5 @@ -======= strict_asm_warning_optimize_unreachable/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "object" { diff --git a/test/cmdlineTests/strict_asm_yul_cfg_json_export/output b/test/cmdlineTests/strict_asm_yul_cfg_json_export/output index c79692c3c035..e0bb1af40952 100644 --- a/test/cmdlineTests/strict_asm_yul_cfg_json_export/output +++ b/test/cmdlineTests/strict_asm_yul_cfg_json_export/output @@ -1,5 +1,5 @@ -======= strict_asm_yul_cfg_json_export/input.yul (EVM) ======= +======= input.yul (EVM) ======= Yul Control Flow Graph: { diff --git a/test/cmdlineTests/structured_documentation_source_location/err b/test/cmdlineTests/structured_documentation_source_location/err index 1f69adf4f63d..51d3a652ee77 100644 --- a/test/cmdlineTests/structured_documentation_source_location/err +++ b/test/cmdlineTests/structured_documentation_source_location/err @@ -1,11 +1,11 @@ Error: Documentation tag "@return No value returned" does not contain the name of its return parameter. - --> structured_documentation_source_location/input.sol:4:5: + --> input.sol:4:5: | 4 | /// @param id Some identifier | ^ (Relevant source part starts here and spans across multiple lines). Error: Documentation tag "@return No value returned" does not contain the name of its return parameter. - --> structured_documentation_source_location/input.sol:8:5: + --> input.sol:8:5: | 8 | /// @return No value returned | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/too_long_line/err b/test/cmdlineTests/too_long_line/err index 25620bd4c5e2..626812e5f7bd 100644 --- a/test/cmdlineTests/too_long_line/err +++ b/test/cmdlineTests/too_long_line/err @@ -1,5 +1,5 @@ Error: Identifier not found or not unique. - --> too_long_line/input.sol:5:164: + --> input.sol:5:164: | 5 | ... ffffffffffffffffffffffffffffffffff(announcementType Type, string Announcement, string ... | ^^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/too_long_line_both_sides_short/err b/test/cmdlineTests/too_long_line_both_sides_short/err index 5992d6ea9387..194047c580b4 100644 --- a/test/cmdlineTests/too_long_line_both_sides_short/err +++ b/test/cmdlineTests/too_long_line_both_sides_short/err @@ -1,5 +1,5 @@ Error: Identifier not found or not unique. - --> too_long_line_both_sides_short/input.sol:5:15: + --> input.sol:5:15: | 5 | function f(announcementTypeXXXXXXXXXXXXXXXXXXX ... XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Type, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/too_long_line_edge_in/err b/test/cmdlineTests/too_long_line_edge_in/err index 1d96ea4cdc03..161e3a20bc93 100644 --- a/test/cmdlineTests/too_long_line_edge_in/err +++ b/test/cmdlineTests/too_long_line_edge_in/err @@ -1,5 +1,5 @@ Error: Identifier not found or not unique. - --> too_long_line_edge_in/input.sol:5:36: + --> input.sol:5:36: | 5 | function ffffffffffffffffffffff(announcementTypeTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT Ty, string A) onlyOwner external { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/too_long_line_edge_out/err b/test/cmdlineTests/too_long_line_edge_out/err index 3b3b4ee490b9..6aa17fc0335f 100644 --- a/test/cmdlineTests/too_long_line_edge_out/err +++ b/test/cmdlineTests/too_long_line_edge_out/err @@ -1,5 +1,5 @@ Error: Identifier not found or not unique. - --> too_long_line_edge_out/input.sol:5:37: + --> input.sol:5:37: | 5 | ... function fffffffffffffffffffffff(announcementTypeTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT Typ, string A) onlyOwner external ... | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/too_long_line_left_short/err b/test/cmdlineTests/too_long_line_left_short/err index 4f2359739076..25c35177d344 100644 --- a/test/cmdlineTests/too_long_line_left_short/err +++ b/test/cmdlineTests/too_long_line_left_short/err @@ -1,5 +1,5 @@ Error: Identifier not found or not unique. - --> too_long_line_left_short/input.sol:5:15: + --> input.sol:5:15: | 5 | function f(announcementType Type, string Announcement, string ... | ^^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/too_long_line_multiline/err b/test/cmdlineTests/too_long_line_multiline/err index 4523938c6ee7..bfa99eed3c8b 100644 --- a/test/cmdlineTests/too_long_line_multiline/err +++ b/test/cmdlineTests/too_long_line_multiline/err @@ -1,5 +1,5 @@ Error: No visibility specified. Did you intend to add "public"? - --> too_long_line_multiline/input.sol:5:5: + --> input.sol:5:5: | 5 | function f() returns (bytes1 _b, by ... _b7, bytes22 _b22, bytes32 _b32) { | ^ (Relevant source part starts here and spans across multiple lines). diff --git a/test/cmdlineTests/too_long_line_right_short/err b/test/cmdlineTests/too_long_line_right_short/err index 7aa26ff074c5..f17f273b1c4e 100644 --- a/test/cmdlineTests/too_long_line_right_short/err +++ b/test/cmdlineTests/too_long_line_right_short/err @@ -1,5 +1,5 @@ Error: Identifier not found or not unique. - --> too_long_line_right_short/input.sol:5:164: + --> input.sol:5:164: | 5 | ... ffffffffffffffffffffffffffffffffff(announcementType Type, | ^^^^^^^^^^^^^^^^ diff --git a/test/cmdlineTests/transient_storage_layout/output b/test/cmdlineTests/transient_storage_layout/output index 0736271b44ad..846cb947d885 100644 --- a/test/cmdlineTests/transient_storage_layout/output +++ b/test/cmdlineTests/transient_storage_layout/output @@ -1,11 +1,11 @@ -======= transient_storage_layout/input.sol:C ======= +======= input.sol:C ======= Contract Transient Storage Layout: { "storage": [ { "astId": 4, - "contract": "transient_storage_layout/input.sol:C", + "contract": "input.sol:C", "label": "x", "offset": 0, "slot": "0", @@ -13,7 +13,7 @@ Contract Transient Storage Layout: }, { "astId": 8, - "contract": "transient_storage_layout/input.sol:C", + "contract": "input.sol:C", "label": "w", "offset": 0, "slot": "1", @@ -21,7 +21,7 @@ Contract Transient Storage Layout: }, { "astId": 12, - "contract": "transient_storage_layout/input.sol:C", + "contract": "input.sol:C", "label": "b", "offset": 20, "slot": "1", @@ -29,7 +29,7 @@ Contract Transient Storage Layout: }, { "astId": 15, - "contract": "transient_storage_layout/input.sol:C", + "contract": "input.sol:C", "label": "d", "offset": 0, "slot": "2", @@ -60,7 +60,7 @@ Contract Transient Storage Layout: } } -======= transient_storage_layout/input.sol:D ======= +======= input.sol:D ======= Contract Transient Storage Layout: { "storage": [] diff --git a/test/cmdlineTests/transient_storage_layout_value_types/input.json b/test/cmdlineTests/transient_storage_layout_value_types/input.json index 65d9a2231b90..2b903a2aea0d 100644 --- a/test/cmdlineTests/transient_storage_layout_value_types/input.json +++ b/test/cmdlineTests/transient_storage_layout_value_types/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "fileA": {"urls": ["transient_storage_layout_value_types/in.sol"]} + "fileA": {"urls": ["in.sol"]} }, "settings": { "outputSelection": { diff --git a/test/cmdlineTests/transient_storage_layout_value_types_interleaved_with_storage/input.json b/test/cmdlineTests/transient_storage_layout_value_types_interleaved_with_storage/input.json index e649fc838b82..7a12ca85c985 100644 --- a/test/cmdlineTests/transient_storage_layout_value_types_interleaved_with_storage/input.json +++ b/test/cmdlineTests/transient_storage_layout_value_types_interleaved_with_storage/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "fileA": {"urls": ["transient_storage_layout_value_types_interleaved_with_storage/in.sol"]} + "fileA": {"urls": ["in.sol"]} }, "settings": { "outputSelection": { diff --git a/test/cmdlineTests/transient_storage_layout_value_types_packed/input.json b/test/cmdlineTests/transient_storage_layout_value_types_packed/input.json index ee7fb0dec3b7..2b903a2aea0d 100644 --- a/test/cmdlineTests/transient_storage_layout_value_types_packed/input.json +++ b/test/cmdlineTests/transient_storage_layout_value_types_packed/input.json @@ -1,7 +1,7 @@ { "language": "Solidity", "sources": { - "fileA": {"urls": ["transient_storage_layout_value_types_packed/in.sol"]} + "fileA": {"urls": ["in.sol"]} }, "settings": { "outputSelection": { diff --git a/test/cmdlineTests/undeployable_contract_empty_outputs/output b/test/cmdlineTests/undeployable_contract_empty_outputs/output index 123edc75ddd6..71059f17f1d5 100644 --- a/test/cmdlineTests/undeployable_contract_empty_outputs/output +++ b/test/cmdlineTests/undeployable_contract_empty_outputs/output @@ -1,5 +1,5 @@ -======= undeployable_contract_empty_outputs/input.sol:C ======= +======= input.sol:C ======= EVM assembly: null Gas estimation: @@ -21,7 +21,7 @@ Function signatures: Contract JSON ABI [] -======= undeployable_contract_empty_outputs/input.sol:I ======= +======= input.sol:I ======= EVM assembly: null Gas estimation: diff --git a/test/cmdlineTests/viair_abicoder_v1/err b/test/cmdlineTests/viair_abicoder_v1/err index 55f8ba4b91b3..29fa2acd04a0 100644 --- a/test/cmdlineTests/viair_abicoder_v1/err +++ b/test/cmdlineTests/viair_abicoder_v1/err @@ -1,5 +1,5 @@ Warning (2066): Contract requests the ABI coder v1, which is incompatible with the IR. Using ABI coder v2 instead. - --> viair_abicoder_v1/input.sol:4:1: + --> input.sol:4:1: | 4 | contract test { | ^ (Relevant source part starts here and spans across multiple lines). diff --git a/test/cmdlineTests/viair_abicoder_v1/output b/test/cmdlineTests/viair_abicoder_v1/output index 1c4d6c90e260..3d6a582889df 100644 --- a/test/cmdlineTests/viair_abicoder_v1/output +++ b/test/cmdlineTests/viair_abicoder_v1/output @@ -1,6 +1,6 @@ IR: -/// @use-src 0:"viair_abicoder_v1/input.sol" +/// @use-src 0:"input.sol" object "test_11" { code { /// @src 0:79:169 "contract test {..." @@ -31,7 +31,7 @@ object "test_11" { /// @src 0:79:169 "contract test {..." } - /// @use-src 0:"viair_abicoder_v1/input.sol" + /// @use-src 0:"input.sol" object "test_11_deployed" { code { /// @src 0:79:169 "contract test {..." diff --git a/test/cmdlineTests/viair_msize_without_optimizer/output b/test/cmdlineTests/viair_msize_without_optimizer/output index f94c973bff3a..90c18ef947a1 100644 --- a/test/cmdlineTests/viair_msize_without_optimizer/output +++ b/test/cmdlineTests/viair_msize_without_optimizer/output @@ -1,5 +1,5 @@ -======= viair_msize_without_optimizer/input.sol:C ======= +======= input.sol:C ======= EVM assembly: mstore(0x40, 0x80) jumpi(tag_4, iszero(callvalue)) @@ -173,7 +173,7 @@ sub_0: assembly { } Optimized IR: -/// @use-src 0:"viair_msize_without_optimizer/input.sol" +/// @use-src 0:"input.sol" object "C_7" { code { mstore(64, memoryguard(128)) @@ -192,7 +192,7 @@ object "C_7" { function constructor_C_7() { } } - /// @use-src 0:"viair_msize_without_optimizer/input.sol" + /// @use-src 0:"input.sol" object "C_7_deployed" { code { mstore(64, memoryguard(128)) diff --git a/test/cmdlineTests/viair_subobject_optimization/output b/test/cmdlineTests/viair_subobject_optimization/output index dafba2771c5d..523cff79e0fa 100644 --- a/test/cmdlineTests/viair_subobject_optimization/output +++ b/test/cmdlineTests/viair_subobject_optimization/output @@ -1,7 +1,7 @@ -======= viair_subobject_optimization/input.sol:C ======= +======= input.sol:C ======= EVM assembly: - /* "viair_subobject_optimization/input.sol":61:668 contract C {... */ + /* "input.sol":61:668 contract C {... */ 0x80 jumpi(tag_7, callvalue) 0x1f @@ -44,12 +44,12 @@ EVM assembly: jumpi mload sub(shl(0x48, 0x01), 0xbe) - /* "viair_subobject_optimization/input.sol":620:645 x == 0xFFFFFFFFFFFFFFFF42 */ + /* "input.sol":620:645 x == 0xFFFFFFFFFFFFFFFF42 */ eq - /* "viair_subobject_optimization/input.sol":616:661 if (x == 0xFFFFFFFFFFFFFFFF42)... */ + /* "input.sol":616:661 if (x == 0xFFFFFFFFFFFFFFFF42)... */ tag_7 jumpi - /* "viair_subobject_optimization/input.sol":61:668 contract C {... */ + /* "input.sol":61:668 contract C {... */ mload(0x40) dataSize(sub_0) swap1 @@ -58,13 +58,13 @@ EVM assembly: dup3 codecopy return - /* "viair_subobject_optimization/input.sol":616:661 if (x == 0xFFFFFFFFFFFFFFFF42)... */ + /* "input.sol":616:661 if (x == 0xFFFFFFFFFFFFFFFF42)... */ tag_7: 0x00 - /* "viair_subobject_optimization/input.sol":653:661 revert() */ + /* "input.sol":653:661 revert() */ dup1 revert - /* "viair_subobject_optimization/input.sol":61:668 contract C {... */ + /* "input.sol":61:668 contract C {... */ tag_3: mstore(0x00, shl(0xe0, 0x4e487b71)) mstore(0x04, 0x41) @@ -72,7 +72,7 @@ tag_3: stop sub_0: assembly { - /* "viair_subobject_optimization/input.sol":61:668 contract C {... */ + /* "input.sol":61:668 contract C {... */ 0x00 dup1 revert @@ -81,9 +81,9 @@ sub_0: assembly { } -======= viair_subobject_optimization/input.sol:D ======= +======= input.sol:D ======= EVM assembly: - /* "viair_subobject_optimization/input.sol":669:772 contract D {... */ + /* "input.sol":669:772 contract D {... */ 0x80 dup1 0x40 @@ -103,7 +103,7 @@ tag_1: stop sub_0: assembly { - /* "viair_subobject_optimization/input.sol":669:772 contract D {... */ + /* "input.sol":669:772 contract D {... */ 0x80 jumpi(tag_1, iszero(lt(calldatasize, 0x04))) 0x00 @@ -117,10 +117,10 @@ sub_0: assembly { tag_3: jumpi(tag_7, callvalue) jumpi(tag_7, slt(add(not(0x03), calldatasize), 0x00)) - /* "viair_subobject_optimization/input.sol":745:765 type(C).creationCode */ + /* "input.sol":745:765 type(C).creationCode */ dataSize(sub_0) swap1 - /* "viair_subobject_optimization/input.sol":669:772 contract D {... */ + /* "input.sol":669:772 contract D {... */ 0x3f dup3 add @@ -142,7 +142,7 @@ sub_0: assembly { swap2 dup3 mstore - /* "viair_subobject_optimization/input.sol":745:765 type(C).creationCode */ + /* "input.sol":745:765 type(C).creationCode */ dup3 dup2 mstore @@ -153,24 +153,24 @@ sub_0: assembly { dataOffset(sub_0) dup5 codecopy - /* "viair_subobject_optimization/input.sol":669:772 contract D {... */ + /* "input.sol":669:772 contract D {... */ dup2 mload swap3 dup4 swap2 - /* "viair_subobject_optimization/input.sol":745:765 type(C).creationCode */ + /* "input.sol":745:765 type(C).creationCode */ 0x20 - /* "viair_subobject_optimization/input.sol":669:772 contract D {... */ + /* "input.sol":669:772 contract D {... */ dup4 mstore mload dup1 swap2 dup2 - /* "viair_subobject_optimization/input.sol":745:765 type(C).creationCode */ + /* "input.sol":745:765 type(C).creationCode */ 0x20 - /* "viair_subobject_optimization/input.sol":669:772 contract D {... */ + /* "input.sol":669:772 contract D {... */ dup6 add mstore @@ -206,7 +206,7 @@ sub_0: assembly { stop sub_0: assembly { - /* "viair_subobject_optimization/input.sol":61:668 contract C {... */ + /* "input.sol":61:668 contract C {... */ 0x80 jumpi(tag_7, callvalue) 0x1f @@ -249,12 +249,12 @@ sub_0: assembly { jumpi mload sub(shl(0x48, 0x01), 0xbe) - /* "viair_subobject_optimization/input.sol":620:645 x == 0xFFFFFFFFFFFFFFFF42 */ + /* "input.sol":620:645 x == 0xFFFFFFFFFFFFFFFF42 */ eq - /* "viair_subobject_optimization/input.sol":616:661 if (x == 0xFFFFFFFFFFFFFFFF42)... */ + /* "input.sol":616:661 if (x == 0xFFFFFFFFFFFFFFFF42)... */ tag_7 jumpi - /* "viair_subobject_optimization/input.sol":61:668 contract C {... */ + /* "input.sol":61:668 contract C {... */ mload(0x40) dataSize(sub_0) swap1 @@ -263,13 +263,13 @@ sub_0: assembly { dup3 codecopy return - /* "viair_subobject_optimization/input.sol":616:661 if (x == 0xFFFFFFFFFFFFFFFF42)... */ + /* "input.sol":616:661 if (x == 0xFFFFFFFFFFFFFFFF42)... */ tag_7: 0x00 - /* "viair_subobject_optimization/input.sol":653:661 revert() */ + /* "input.sol":653:661 revert() */ dup1 revert - /* "viair_subobject_optimization/input.sol":61:668 contract C {... */ + /* "input.sol":61:668 contract C {... */ tag_3: mstore(0x00, shl(0xe0, 0x4e487b71)) mstore(0x04, 0x41) @@ -277,7 +277,7 @@ sub_0: assembly { stop sub_0: assembly { - /* "viair_subobject_optimization/input.sol":61:668 contract C {... */ + /* "input.sol":61:668 contract C {... */ 0x00 dup1 revert diff --git a/test/cmdlineTests/viair_subobjects/err b/test/cmdlineTests/viair_subobjects/err index 5046525bef7a..66ebf4229caf 100644 --- a/test/cmdlineTests/viair_subobjects/err +++ b/test/cmdlineTests/viair_subobjects/err @@ -1,5 +1,5 @@ Warning: Unused local variable. - --> viair_subobjects/input.sol:8:9: + --> input.sol:8:9: | 8 | C c = new C(); | ^^^ diff --git a/test/cmdlineTests/viair_subobjects/output b/test/cmdlineTests/viair_subobjects/output index 7a6bc8e6570b..783756e67681 100644 --- a/test/cmdlineTests/viair_subobjects/output +++ b/test/cmdlineTests/viair_subobjects/output @@ -1,11 +1,11 @@ -======= viair_subobjects/input.sol:C ======= +======= input.sol:C ======= Binary: Binary of the runtime part: Optimized IR: -/// @use-src 0:"viair_subobjects/input.sol" +/// @use-src 0:"input.sol" object "C_3" { code { { @@ -18,7 +18,7 @@ object "C_3" { return(_1, _2) } } - /// @use-src 0:"viair_subobjects/input.sol" + /// @use-src 0:"input.sol" object "C_3_deployed" { code { { @@ -31,13 +31,13 @@ object "C_3" { } -======= viair_subobjects/input.sol:D ======= +======= input.sol:D ======= Binary: Binary of the runtime part: Optimized IR: -/// @use-src 0:"viair_subobjects/input.sol" +/// @use-src 0:"input.sol" object "D_16" { code { { @@ -50,7 +50,7 @@ object "D_16" { return(_1, _2) } } - /// @use-src 0:"viair_subobjects/input.sol" + /// @use-src 0:"input.sol" object "D_16_deployed" { code { { @@ -88,7 +88,7 @@ object "D_16" { revert(0, 0) } } - /// @use-src 0:"viair_subobjects/input.sol" + /// @use-src 0:"input.sol" object "C_3" { code { { @@ -101,7 +101,7 @@ object "D_16" { return(_1, _2) } } - /// @use-src 0:"viair_subobjects/input.sol" + /// @use-src 0:"input.sol" object "C_3_deployed" { code { { diff --git a/test/cmdlineTests/yul_cfg_json_export/output b/test/cmdlineTests/yul_cfg_json_export/output index 0508769d7cb0..9affc4206939 100644 --- a/test/cmdlineTests/yul_cfg_json_export/output +++ b/test/cmdlineTests/yul_cfg_json_export/output @@ -1,5 +1,5 @@ -======= yul_cfg_json_export/input.sol:C ======= +======= input.sol:C ======= Yul Control Flow Graph: { "C_19": { @@ -447,7 +447,7 @@ Yul Control Flow Graph: "type": "Object" } -======= yul_cfg_json_export/input.sol:D ======= +======= input.sol:D ======= Yul Control Flow Graph: { "D_38": { @@ -2127,6 +2127,6 @@ Yul Control Flow Graph: "type": "Object" } -======= yul_cfg_json_export/input.sol:I ======= +======= input.sol:I ======= Yul Control Flow Graph: null diff --git a/test/cmdlineTests/yul_function_name_clashes/output b/test/cmdlineTests/yul_function_name_clashes/output index 2c54b6f50893..1d319d284e5b 100644 --- a/test/cmdlineTests/yul_function_name_clashes/output +++ b/test/cmdlineTests/yul_function_name_clashes/output @@ -1,5 +1,5 @@ -======= yul_function_name_clashes/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "object" { diff --git a/test/cmdlineTests/yul_function_name_clashes_different_params/output b/test/cmdlineTests/yul_function_name_clashes_different_params/output index 85884a6a0ede..fdffb0c31270 100644 --- a/test/cmdlineTests/yul_function_name_clashes_different_params/output +++ b/test/cmdlineTests/yul_function_name_clashes_different_params/output @@ -1,5 +1,5 @@ -======= yul_function_name_clashes_different_params/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "object" { @@ -23,37 +23,37 @@ Binary representation: 60056011565b600d60706016565b9055005b5f3590565b359056 Text representation: - /* "yul_function_name_clashes_different_params/input.yul":92:95 */ + /* "input.yul":92:95 */ tag_3 tag_1 jump // in tag_3: - /* "yul_function_name_clashes_different_params/input.yul":113:122 */ + /* "input.yul":113:122 */ tag_4 - /* "yul_function_name_clashes_different_params/input.yul":117:121 */ + /* "input.yul":117:121 */ 0x70 - /* "yul_function_name_clashes_different_params/input.yul":113:122 */ + /* "input.yul":113:122 */ tag_2 jump // in tag_4: - /* "yul_function_name_clashes_different_params/input.yul":135:147 */ + /* "input.yul":135:147 */ swap1 sstore - /* "yul_function_name_clashes_different_params/input.yul":27:284 */ + /* "input.yul":27:284 */ stop - /* "yul_function_name_clashes_different_params/input.yul":166:216 */ + /* "input.yul":166:216 */ tag_1: - /* "yul_function_name_clashes_different_params/input.yul":212:213 */ + /* "input.yul":212:213 */ 0x00 - /* "yul_function_name_clashes_different_params/input.yul":199:214 */ + /* "input.yul":199:214 */ calldataload - /* "yul_function_name_clashes_different_params/input.yul":166:216 */ + /* "input.yul":166:216 */ swap1 jump // out - /* "yul_function_name_clashes_different_params/input.yul":225:278 */ + /* "input.yul":225:278 */ tag_2: - /* "yul_function_name_clashes_different_params/input.yul":261:276 */ + /* "input.yul":261:276 */ calldataload - /* "yul_function_name_clashes_different_params/input.yul":225:278 */ + /* "input.yul":225:278 */ swap1 jump // out diff --git a/test/cmdlineTests/yul_optimize_runs/output b/test/cmdlineTests/yul_optimize_runs/output index 589f8ce1a12c..ec3dab457213 100644 --- a/test/cmdlineTests/yul_optimize_runs/output +++ b/test/cmdlineTests/yul_optimize_runs/output @@ -1,5 +1,5 @@ -======= yul_optimize_runs/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "RunsTest1" { @@ -24,28 +24,28 @@ Binary representation: 602480600a5f395ff3fe7fabc12345000000000000000000000000000000000000000000000000000000005f5500 Text representation: - /* "yul_optimize_runs/input.yul":64:92 */ + /* "input.yul":64:92 */ dataSize(sub_0) - /* "yul_optimize_runs/input.yul":117:147 */ + /* "input.yul":117:147 */ dup1 dataOffset(sub_0) - /* "yul_optimize_runs/input.yul":114:115 */ + /* "input.yul":114:115 */ 0x00 - /* "yul_optimize_runs/input.yul":105:152 */ + /* "input.yul":105:152 */ codecopy - /* "yul_optimize_runs/input.yul":172:173 */ + /* "input.yul":172:173 */ 0x00 - /* "yul_optimize_runs/input.yul":165:178 */ + /* "input.yul":165:178 */ return stop sub_0: assembly { - /* "yul_optimize_runs/input.yul":282:348 */ + /* "input.yul":282:348 */ 0xabc1234500000000000000000000000000000000000000000000000000000000 - /* "yul_optimize_runs/input.yul":279:280 */ + /* "input.yul":279:280 */ 0x00 - /* "yul_optimize_runs/input.yul":272:349 */ + /* "input.yul":272:349 */ sstore - /* "yul_optimize_runs/input.yul":240:373 */ + /* "input.yul":240:373 */ stop } diff --git a/test/cmdlineTests/yul_optimizer_disabled_sequence_empty/output b/test/cmdlineTests/yul_optimizer_disabled_sequence_empty/output index 7b948303ee43..de60e7d1dcd8 100644 --- a/test/cmdlineTests/yul_optimizer_disabled_sequence_empty/output +++ b/test/cmdlineTests/yul_optimizer_disabled_sequence_empty/output @@ -1,4 +1,4 @@ -======= yul_optimizer_disabled_sequence_empty/input.sol:C ======= +======= input.sol:C ======= Metadata: -{"compiler":{"version": ""},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"compilationTarget":{"yul_optimizer_disabled_sequence_empty/input.sol":"C"},"evmVersion":"cancun","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"details":{"constantOptimizer":false,"cse":false,"deduplicate":false,"inliner":false,"jumpdestRemover":true,"orderLiterals":false,"peephole":true,"simpleCounterForLoopUncheckedIncrement":true,"yul":false,"yulDetails":{"optimizerSteps":":"}},"runs":200},"remappings":[]},"sources":{"yul_optimizer_disabled_sequence_empty/input.sol":{"keccak256":"0xc2db3500808896ce1e69de2fe20cecab7ae2ffbb47cdf6ba8321296d95f49fc5","license":"GPL-3.0","urls":["bzz-raw://fde21393c068cd9f2d2b10ba4782db54f6f1c9a725074b17fa742531076be8a4","dweb:/ipfs/QmeTD6mR7YrWNyRowKRS7xs6cJNeMF3T49GAHzGM1bquyM"]}},"version":1} +{"compiler":{"version": ""},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"compilationTarget":{"input.sol":"C"},"evmVersion":"prague","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"details":{"constantOptimizer":false,"cse":false,"deduplicate":false,"inliner":false,"jumpdestRemover":true,"orderLiterals":false,"peephole":true,"simpleCounterForLoopUncheckedIncrement":true,"yul":false,"yulDetails":{"optimizerSteps":":"}},"runs":200},"remappings":[]},"sources":{"input.sol":{"keccak256":"0xc2db3500808896ce1e69de2fe20cecab7ae2ffbb47cdf6ba8321296d95f49fc5","license":"GPL-3.0","urls":["bzz-raw://fde21393c068cd9f2d2b10ba4782db54f6f1c9a725074b17fa742531076be8a4","dweb:/ipfs/QmeTD6mR7YrWNyRowKRS7xs6cJNeMF3T49GAHzGM1bquyM"]}},"version":1} diff --git a/test/cmdlineTests/yul_optimizer_steps/output b/test/cmdlineTests/yul_optimizer_steps/output index bb68a48fa809..f9484d2b4491 100644 --- a/test/cmdlineTests/yul_optimizer_steps/output +++ b/test/cmdlineTests/yul_optimizer_steps/output @@ -1,5 +1,5 @@ Optimized IR: -/// @use-src 0:"yul_optimizer_steps/input.sol" +/// @use-src 0:"input.sol" object "C_7" { code { { @@ -18,7 +18,7 @@ object "C_7" { function revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb() { revert(0, 0) } } - /// @use-src 0:"yul_optimizer_steps/input.sol" + /// @use-src 0:"input.sol" object "C_7_deployed" { code { { diff --git a/test/cmdlineTests/yul_optimizer_steps_nested_brackets/output b/test/cmdlineTests/yul_optimizer_steps_nested_brackets/output index 9687abf643b3..26be9469862a 100644 --- a/test/cmdlineTests/yul_optimizer_steps_nested_brackets/output +++ b/test/cmdlineTests/yul_optimizer_steps_nested_brackets/output @@ -1,5 +1,5 @@ Optimized IR: -/// @use-src 0:"yul_optimizer_steps_nested_brackets/input.sol" +/// @use-src 0:"input.sol" object "C_6" { code { { @@ -21,7 +21,7 @@ object "C_6" { function revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb() { revert(0, 0) } } - /// @use-src 0:"yul_optimizer_steps_nested_brackets/input.sol" + /// @use-src 0:"input.sol" object "C_6_deployed" { code { { diff --git a/test/cmdlineTests/yul_optimizer_steps_short_sequence/output b/test/cmdlineTests/yul_optimizer_steps_short_sequence/output index dc77ce3c53e7..e93958a5d619 100644 --- a/test/cmdlineTests/yul_optimizer_steps_short_sequence/output +++ b/test/cmdlineTests/yul_optimizer_steps_short_sequence/output @@ -1,5 +1,5 @@ Optimized IR: -/// @use-src 0:"yul_optimizer_steps_short_sequence/input.sol" +/// @use-src 0:"input.sol" object "C_8" { code { { @@ -9,7 +9,7 @@ object "C_8" { revert(0, 0) } } - /// @use-src 0:"yul_optimizer_steps_short_sequence/input.sol" + /// @use-src 0:"input.sol" object "C_8_deployed" { code { { diff --git a/test/cmdlineTests/yul_optimizer_steps_with_empty_cleanup_sequence/output b/test/cmdlineTests/yul_optimizer_steps_with_empty_cleanup_sequence/output index 01641c53bc30..bbfd22e9bdfe 100644 --- a/test/cmdlineTests/yul_optimizer_steps_with_empty_cleanup_sequence/output +++ b/test/cmdlineTests/yul_optimizer_steps_with_empty_cleanup_sequence/output @@ -1,5 +1,5 @@ Optimized IR: -/// @use-src 0:"yul_optimizer_steps_with_empty_cleanup_sequence/input.sol" +/// @use-src 0:"input.sol" object "C_8" { code { { @@ -10,7 +10,7 @@ object "C_8" { revert(0, usr$a) } } - /// @use-src 0:"yul_optimizer_steps_with_empty_cleanup_sequence/input.sol" + /// @use-src 0:"input.sol" object "C_8_deployed" { code { { diff --git a/test/cmdlineTests/yul_optimizer_steps_with_empty_optimization_sequence/output b/test/cmdlineTests/yul_optimizer_steps_with_empty_optimization_sequence/output index b13e6e2823ff..bbfd22e9bdfe 100644 --- a/test/cmdlineTests/yul_optimizer_steps_with_empty_optimization_sequence/output +++ b/test/cmdlineTests/yul_optimizer_steps_with_empty_optimization_sequence/output @@ -1,5 +1,5 @@ Optimized IR: -/// @use-src 0:"yul_optimizer_steps_with_empty_optimization_sequence/input.sol" +/// @use-src 0:"input.sol" object "C_8" { code { { @@ -10,7 +10,7 @@ object "C_8" { revert(0, usr$a) } } - /// @use-src 0:"yul_optimizer_steps_with_empty_optimization_sequence/input.sol" + /// @use-src 0:"input.sol" object "C_8_deployed" { code { { diff --git a/test/cmdlineTests/yul_optimizer_steps_without_optimize_empty_sequence/err b/test/cmdlineTests/yul_optimizer_steps_without_optimize_empty_sequence/err index 95e30df2e83d..d87be1839ccb 100644 --- a/test/cmdlineTests/yul_optimizer_steps_without_optimize_empty_sequence/err +++ b/test/cmdlineTests/yul_optimizer_steps_without_optimize_empty_sequence/err @@ -1,11 +1,11 @@ Warning: Unused local variable. - --> yul_optimizer_steps_without_optimize_empty_sequence/input.sol:13:9: + --> input.sol:13:9: | 13 | uint b = a; | ^^^^^^ Warning: Unused local variable. - --> yul_optimizer_steps_without_optimize_empty_sequence/input.sol:14:9: + --> input.sol:14:9: | 14 | uint c = a; | ^^^^^^ diff --git a/test/cmdlineTests/yul_optimizer_steps_without_optimize_empty_sequence/output b/test/cmdlineTests/yul_optimizer_steps_without_optimize_empty_sequence/output index 6873abe60e47..2b32c23ee319 100644 --- a/test/cmdlineTests/yul_optimizer_steps_without_optimize_empty_sequence/output +++ b/test/cmdlineTests/yul_optimizer_steps_without_optimize_empty_sequence/output @@ -1,7 +1,7 @@ -======= yul_optimizer_steps_without_optimize_empty_sequence/input.sol:C ======= +======= input.sol:C ======= Optimized IR: -/// @use-src 0:"yul_optimizer_steps_without_optimize_empty_sequence/input.sol" +/// @use-src 0:"input.sol" object "C_28" { code { { @@ -24,7 +24,7 @@ object "C_28" { function constructor_C() { } } - /// @use-src 0:"yul_optimizer_steps_without_optimize_empty_sequence/input.sol" + /// @use-src 0:"input.sol" object "C_28_deployed" { code { { @@ -130,4 +130,4 @@ object "C_28" { } Metadata: -{"compiler":{"version": ""},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"foo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"compilationTarget":{"yul_optimizer_steps_without_optimize_empty_sequence/input.sol":"C"},"evmVersion":"cancun","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"details":{"constantOptimizer":false,"cse":false,"deduplicate":false,"inliner":false,"jumpdestRemover":true,"orderLiterals":false,"peephole":true,"simpleCounterForLoopUncheckedIncrement":true,"yul":false,"yulDetails":{"optimizerSteps":":"}},"runs":200},"remappings":[]},"sources":{"yul_optimizer_steps_without_optimize_empty_sequence/input.sol":{"keccak256":"0x3fc910e345ce1ee62bfa6b0f66931ee632c08265b25b6139cfbbfe4d2f8d5dd8","license":"GPL-3.0","urls":["bzz-raw://e557e9ad2c2e420a669c06ae456b0b790d77d2d6d492cd8540e6b244388a5140","dweb:/ipfs/QmaNiZmC2Mo3YxGiehs1n3dVTjZwD7FguX7EUtpeshMVuR"]}},"version":1} +{"compiler":{"version": ""},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"foo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"compilationTarget":{"input.sol":"C"},"evmVersion":"prague","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"details":{"constantOptimizer":false,"cse":false,"deduplicate":false,"inliner":false,"jumpdestRemover":true,"orderLiterals":false,"peephole":true,"simpleCounterForLoopUncheckedIncrement":true,"yul":false,"yulDetails":{"optimizerSteps":":"}},"runs":200},"remappings":[]},"sources":{"input.sol":{"keccak256":"0x3fc910e345ce1ee62bfa6b0f66931ee632c08265b25b6139cfbbfe4d2f8d5dd8","license":"GPL-3.0","urls":["bzz-raw://e557e9ad2c2e420a669c06ae456b0b790d77d2d6d492cd8540e6b244388a5140","dweb:/ipfs/QmaNiZmC2Mo3YxGiehs1n3dVTjZwD7FguX7EUtpeshMVuR"]}},"version":1} diff --git a/test/cmdlineTests/yul_verbatim/output b/test/cmdlineTests/yul_verbatim/output index 60fc7e6d1f46..33f86b2992be 100644 --- a/test/cmdlineTests/yul_verbatim/output +++ b/test/cmdlineTests/yul_verbatim/output @@ -1,5 +1,5 @@ -======= yul_verbatim/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "object" { @@ -20,38 +20,38 @@ Binary representation: 6002808103808261626382815564656678797a010203040506070900010203040506070900010203040506070900010201020304050607090001020304050607090001020304050607090001026009905050505050 Text representation: - /* "yul_verbatim/input.yul":15:16 */ + /* "input.yul":15:16 */ 0x02 - /* "yul_verbatim/input.yul":37:38 */ + /* "input.yul":37:38 */ dup1 - /* "yul_verbatim/input.yul":34:35 */ + /* "input.yul":34:35 */ dup2 - /* "yul_verbatim/input.yul":30:39 */ + /* "input.yul":30:39 */ sub - /* "yul_verbatim/input.yul":78:79 */ + /* "input.yul":78:79 */ dup1 - /* "yul_verbatim/input.yul":75:76 */ + /* "input.yul":75:76 */ dup3 - /* "yul_verbatim/input.yul":53:80 */ + /* "input.yul":53:80 */ verbatimbytecode_616263 - /* "yul_verbatim/input.yul":95:96 */ + /* "input.yul":95:96 */ dup3 - /* "yul_verbatim/input.yul":92:93 */ + /* "input.yul":92:93 */ dup2 - /* "yul_verbatim/input.yul":85:97 */ + /* "input.yul":85:97 */ sstore - /* "yul_verbatim/input.yul":111:132 */ + /* "input.yul":111:132 */ verbatimbytecode_646566 - /* "yul_verbatim/input.yul":137:158 */ + /* "input.yul":137:158 */ verbatimbytecode_78797a - /* "yul_verbatim/input.yul":189:326 */ + /* "input.yul":189:326 */ verbatimbytecode_01020304050607090001020304050607090001020304050607090001020102030405060709000102030405060709000102030405060709000102 - /* "yul_verbatim/input.yul":336:337 */ + /* "input.yul":336:337 */ 0x09 - /* "yul_verbatim/input.yul":331:337 */ + /* "input.yul":331:337 */ swap1 pop - /* "yul_verbatim/input.yul":0:339 */ + /* "input.yul":0:339 */ pop pop pop diff --git a/test/cmdlineTests/yul_verbatim_msize/output b/test/cmdlineTests/yul_verbatim_msize/output index f684bac21752..b0acd819d8d1 100644 --- a/test/cmdlineTests/yul_verbatim_msize/output +++ b/test/cmdlineTests/yul_verbatim_msize/output @@ -1,5 +1,5 @@ -======= yul_verbatim_msize/input.yul (EVM) ======= +======= input.yul (EVM) ======= Pretty printed source: object "object" { @@ -17,19 +17,19 @@ Binary representation: 6120005150616160025f5500 Text representation: - /* "yul_verbatim_msize/input.yul":61:67 */ + /* "input.yul":61:67 */ 0x2000 - /* "yul_verbatim_msize/input.yul":55:68 */ + /* "input.yul":55:68 */ mload - /* "yul_verbatim_msize/input.yul":51:69 */ + /* "input.yul":51:69 */ pop - /* "yul_verbatim_msize/input.yul":82:102 */ + /* "input.yul":82:102 */ verbatimbytecode_6161 - /* "yul_verbatim_msize/input.yul":125:126 */ + /* "input.yul":125:126 */ 0x02 - /* "yul_verbatim_msize/input.yul":122:123 */ + /* "input.yul":122:123 */ 0x00 - /* "yul_verbatim_msize/input.yul":115:127 */ + /* "input.yul":115:127 */ sstore - /* "yul_verbatim_msize/input.yul":27:143 */ + /* "input.yul":27:143 */ stop diff --git a/test/cmdlineTests/~name_dependent_cse_bug/test.sh b/test/cmdlineTests/~name_dependent_cse_bug/test.sh index 96c3ac23ed97..710e82b1e7a0 100755 --- a/test/cmdlineTests/~name_dependent_cse_bug/test.sh +++ b/test/cmdlineTests/~name_dependent_cse_bug/test.sh @@ -19,7 +19,7 @@ function assemble_with_variable_name { local variable_name="$2" sed -e "s|__placeholder__|${variable_name}|g" "$input_file" | msg_on_error --no-stderr \ - "$SOLC" --strict-assembly - --optimize --debug-info none | + "$SOLC" --strict-assembly - --optimize --debug-info none --asm | stripCLIDecorations } diff --git a/test/compilationTests/corion/premium.sol b/test/compilationTests/corion/premium.sol index 646ab00e1594..2702aa5bb815 100644 --- a/test/compilationTests/corion/premium.sol +++ b/test/compilationTests/corion/premium.sol @@ -229,7 +229,7 @@ contract premium is module, safeMath { function transfer(address to, uint256 amount, bytes calldata extraData) isReady external returns (bool success) { /* Launch a transaction where we transfer from a given address to another one. - After thetransaction the approvedCorionPremiumToken function of the receiver’s address is going to be called with the given data. + After the transaction the approvedCorionPremiumToken function of the receiver’s address is going to be called with the given data. @to For who? @amount Amount diff --git a/test/compilationTests/corion/publisher.sol b/test/compilationTests/corion/publisher.sol index 311e8d92e725..27d90a27e89b 100644 --- a/test/compilationTests/corion/publisher.sol +++ b/test/compilationTests/corion/publisher.sol @@ -205,8 +205,8 @@ contract publisher is announcementTypes, module, safeMath { If announcement is opposable, anyone owning a token can oppose it Opposition is automatically with the total amount of tokens If the quantity of his tokens changes, the purport of his opposition changes automatically - The prime time is the windup of the announcement, because this is the moment when the number of tokens in opposition are counted. - One address is entitled to be in oppositon only once. An opposition cannot be withdrawn. + The prime time is the windup of the announcement, because this is the moment when the number of tokens in opposition are counted. + One address is entitled to be in opposition only once. An opposition cannot be withdrawn. Running announcements can be opposed only. @id Announcement identification diff --git a/test/externalTests/brink.sh b/test/externalTests/brink.sh index 02e5fe971c65..e541481b43ae 100755 --- a/test/externalTests/brink.sh +++ b/test/externalTests/brink.sh @@ -61,7 +61,7 @@ function brink_test setup_solc "$DIR" "$BINARY_TYPE" "$BINARY_PATH" download_project "$repo" "$ref" "$DIR" - # TODO: Remove this when Brink merges https://github.com/brinktrade/brink-core/pull/52 + # TODO: Remove this once Brink merges PR #52 (https://github.com/brinktrade/brink-core/pull/52). sed -i "s|\(function isValidSignature(bytes \)calldata\( _data, bytes \)calldata\( _signature)\)|\1memory\2memory\3|g" src/Test/MockEIP1271Validator.sol neutralize_package_lock diff --git a/test/externalTests/elementfi.sh b/test/externalTests/elementfi.sh index f34a169e9512..aa73ea768740 100755 --- a/test/externalTests/elementfi.sh +++ b/test/externalTests/elementfi.sh @@ -93,8 +93,8 @@ function elementfi_test sed -i 's|it(\("should prevent withdrawal of Principal Tokens and Interest Tokens before the tranche expires "\)|it.skip(\1|g' test/trancheTest.ts sed -i 's|it(\("should prevent withdrawal of more Principal Tokens and Interest Tokens than the user has"\)|it.skip(\1|g' test/trancheTest.ts - # This test file is very flaky. There's one particular cases that fails randomly (see - # https://github.com/element-fi/elf-contracts/issues/240) but some others also depends on an external + # This test file is very flaky. There's one particular case that fails randomly (see + # https://github.com/element-fi/elf-contracts/issues/240) but some others also depend on an external # service which makes tests time out when that service is down. # "ProviderError: Too Many Requests error received from eth-mainnet.alchemyapi.io" rm test/mockERC20YearnVaultTest.ts diff --git a/test/externalTests/gp2.sh b/test/externalTests/gp2.sh index 20ea586f5f09..d648de592058 100755 --- a/test/externalTests/gp2.sh +++ b/test/externalTests/gp2.sh @@ -66,10 +66,7 @@ function gp2_test force_hardhat_compiler_settings "$config_file" "$(first_word "$SELECTED_PRESETS")" "$config_var" force_hardhat_unlimited_contract_size "$config_file" "$config_var" yarn - # We require to install hardhat 2.20.0 due to support for evm version cancun, otherwise we get the following error: - # Invalid value {"blockGasLimit":12500000,"hardfork":"cancun","allowUnlimitedContractSize":true} for HardhatConfig.networks.hardhat - Expected a value of type HardhatNetworkConfig. - # See: https://github.com/NomicFoundation/hardhat/issues/4176 - yarn add hardhat@2.20.0 + yarn add hardhat # Ignore bench directory which fails to compile with current hardhat and ethers versions. # bench/trace/gas.ts:123:19 - error TS2339: Property 'equals' does not exist on type 'Uint8Array'. diff --git a/test/externalTests/pool-together.sh b/test/externalTests/pool-together.sh index 0fc8aafbd69d..2eb47912c8b1 100755 --- a/test/externalTests/pool-together.sh +++ b/test/externalTests/pool-together.sh @@ -66,9 +66,7 @@ function pool_together_test force_hardhat_compiler_binary "$config_file" "$BINARY_TYPE" "$BINARY_PATH" force_hardhat_compiler_settings "$config_file" "$(first_word "$SELECTED_PRESETS")" "$config_var" yarn install - # Hardhat 2.20.0 is the last version that works. Newer versions throw this error: - # Unexpected config HardhatConfig.networks.hardhat.initialBaseFeePerGas found - This field is only valid for networks with EIP-1559. Try a newer hardfork or remove it. - yarn add hardhat@2.20.0 + yarn add hardhat # These come with already compiled artifacts. We want them recompiled with latest compiler. rm -r node_modules/@pooltogether/yield-source-interface/artifacts/ diff --git a/test/externalTests/uniswap.sh b/test/externalTests/uniswap.sh index f3d78e6e3397..575fcf309cd2 100755 --- a/test/externalTests/uniswap.sh +++ b/test/externalTests/uniswap.sh @@ -90,10 +90,7 @@ function uniswap_test # TODO: Remove when https://github.com/ethers-io/ethers.js/discussions/2849 is resolved. pnpm install ethers@5.6.1 - # We set hardhat version to 2.20.0 since version 2.21.0 has issues with solidity-coverage plugin - # that often causes out-of-memory errors. - # See hardhat note about the issue here: https://github.com/NomicFoundation/hardhat/releases/tag/hardhat@2.21.0 - pnpm install hardhat@2.20.0 + pnpm install hardhat replace_version_pragmas diff --git a/test/externalTests/zeppelin.sh b/test/externalTests/zeppelin.sh index b9e65562e08f..9bc3e29132aa 100755 --- a/test/externalTests/zeppelin.sh +++ b/test/externalTests/zeppelin.sh @@ -101,14 +101,15 @@ function zeppelin_test # Here only the testToInt(248) and testToInt(256) cases fail so change the loop range to skip them sed -i "s|range(8, 256, 8)\(.forEach(bits => testToInt(bits));\)|range(8, 240, 8)\1|" test/utils/math/SafeCast.test.js + # TODO: Remove when next hardhat version releases, the fix is already merged: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5663 + # Fails with ProviderError: Invalid transaction: GasFloorMoreThanGasLimit + sed -i "177s|+ 2_000n|+ 10_000n|" test/metatx/ERC2771Forwarder.test.js + neutralize_package_json_hooks force_hardhat_compiler_binary "$config_file" "$BINARY_TYPE" "$BINARY_PATH" force_hardhat_compiler_settings "$config_file" "$(first_word "$SELECTED_PRESETS")" npm install - # We require to install hardhat 2.20.0 due to support for evm version cancun, otherwise we get the following error: - # Invalid value {"blockGasLimit":10000000,"allowUnlimitedContractSize":true,"hardfork":"cancun"} for HardhatConfig.networks.hardhat - Expected a value of type HardhatNetworkConfig. - # See: https://github.com/NomicFoundation/hardhat/issues/4176 - npm install hardhat@2.20.0 + npm install hardhat replace_version_pragmas for preset in $SELECTED_PRESETS; do diff --git a/test/libevmasm/EVMAssemblyTest.cpp b/test/libevmasm/EVMAssemblyTest.cpp new file mode 100644 index 000000000000..0c1dbb07ed7c --- /dev/null +++ b/test/libevmasm/EVMAssemblyTest.cpp @@ -0,0 +1,181 @@ +/* + This file is part of solidity. + + solidity is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + solidity is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with solidity. If not, see . +*/ + +#include + +#include + +#include + +#include +#include + +#include +#include +#include + +#include + +using namespace std::string_literals; +using namespace solidity; +using namespace solidity::test; +using namespace solidity::evmasm; +using namespace solidity::evmasm::test; +using namespace solidity::frontend; +using namespace solidity::frontend::test; +using namespace solidity::langutil; +using namespace solidity::util; + +std::vector const EVMAssemblyTest::c_outputLabels = { + "InputAssemblyJSON", + "Assembly", + "Bytecode", + "Opcodes", + "SourceMappings", +}; + +std::unique_ptr EVMAssemblyTest::create(Config const& _config) +{ + return std::make_unique(_config.filename); +} + +EVMAssemblyTest::EVMAssemblyTest(std::string const& _filename): + EVMVersionRestrictedTestCase(_filename) +{ + m_source = m_reader.source(); + m_expectation = m_reader.simpleExpectations(); + + if (_filename.ends_with(".asmjson")) + m_assemblyFormat = AssemblyFormat::JSON; + else if (_filename.ends_with(".asm")) + m_assemblyFormat = AssemblyFormat::Plain; + else + BOOST_THROW_EXCEPTION(std::runtime_error("Not an assembly test: \"" + _filename + "\". Allowed extensions: .asm, .asmjson.")); + + m_selectedOutputs = m_reader.stringSetting("outputs", "Assembly,Bytecode,Opcodes,SourceMappings"); + OptimisationPreset optimizationPreset = m_reader.enumSetting( + "optimizationPreset", + { + {"none", OptimisationPreset::None}, + {"minimal", OptimisationPreset::Minimal}, + {"standard", OptimisationPreset::Standard}, + {"full", OptimisationPreset::Full}, + }, + "none" + ); + m_optimizerSettings = Assembly::OptimiserSettings::translateSettings(OptimiserSettings::preset(optimizationPreset)); + m_optimizerSettings.expectedExecutionsPerDeployment = m_reader.sizetSetting( + "optimizer.expectedExecutionsPerDeployment", + m_optimizerSettings.expectedExecutionsPerDeployment + ); + + auto const optimizerComponentSetting = [&](std::string const& _component, bool& _setting) { + _setting = m_reader.boolSetting("optimizer." + _component, _setting); + }; + optimizerComponentSetting("inliner", m_optimizerSettings.runInliner); + optimizerComponentSetting("jumpdestRemover", m_optimizerSettings.runJumpdestRemover); + optimizerComponentSetting("peephole", m_optimizerSettings.runPeephole); + optimizerComponentSetting("deduplicate", m_optimizerSettings.runDeduplicate); + optimizerComponentSetting("cse", m_optimizerSettings.runCSE); + optimizerComponentSetting("constantOptimizer", m_optimizerSettings.runConstantOptimiser); + + // TODO: Enable when assembly import for EOF is implemented. + if (CommonOptions::get().eofVersion().has_value()) + m_shouldRun = false; +} + +TestCase::TestResult EVMAssemblyTest::run(std::ostream& _stream, std::string const& _linePrefix, bool const _formatted) +{ + EVMAssemblyStack evmAssemblyStack( + CommonOptions::get().evmVersion(), + CommonOptions::get().eofVersion(), + m_optimizerSettings + ); + + evmAssemblyStack.selectDebugInfo(DebugInfoSelection::AllExceptExperimental()); + + std::string assemblyJSON; + switch (m_assemblyFormat) + { + case AssemblyFormat::JSON: + assemblyJSON = m_source; + break; + case AssemblyFormat::Plain: + assemblyJSON = jsonPrint( + PlainAssemblyParser{}.parse(m_reader.fileName().filename().string(), m_source), + {JsonFormat::Pretty, 4} + ); + break; + } + + try + { + evmAssemblyStack.parseAndAnalyze(m_reader.fileName().filename().string(), assemblyJSON); + } + catch (AssemblyImportException const& _exception) + { + m_obtainedResult = "AssemblyImportException: "s + _exception.what() + "\n"; + return checkResult(_stream, _linePrefix, _formatted); + } + + try + { + evmAssemblyStack.assemble(); + } + catch (Error const& _error) + { + // TODO: EVMAssemblyStack should catch these on its own and provide an error reporter. + soltestAssert(_error.comment(), "Errors must include a message for the user."); + m_obtainedResult = Error::formatErrorType(_error.type()) + ": " + *_error.comment() + "\n"; + return checkResult(_stream, _linePrefix, _formatted); + } + soltestAssert(evmAssemblyStack.compilationSuccessful()); + + auto const produceOutput = [&](std::string const& _output) { + if (_output == "InputAssemblyJSON") + return assemblyJSON; + if (_output == "Assembly") + return evmAssemblyStack.assemblyString({{m_reader.fileName().filename().string(), m_source}}); + if (_output == "Bytecode") + return util::toHex(evmAssemblyStack.object().bytecode); + if (_output == "Opcodes") + return disassemble(evmAssemblyStack.object().bytecode, CommonOptions::get().evmVersion()); + if (_output == "SourceMappings") + return evmAssemblyStack.sourceMapping(); + soltestAssert(false); + unreachable(); + }; + + std::set selectedOutputSet; + boost::split(selectedOutputSet, m_selectedOutputs, boost::is_any_of(",")); + for (std::string const& output: c_outputLabels) + if (selectedOutputSet.contains(output)) + { + if (!m_obtainedResult.empty() && m_obtainedResult.back() != '\n') + m_obtainedResult += "\n"; + + // Don't trim on the left to avoid stripping indentation. + std::string content = produceOutput(output); + boost::trim_right(content); + std::string separator = (content.empty() ? "" : (output == "Assembly" ? "\n" : " ")); + m_obtainedResult += output + ":" + separator + content; + } + if (!m_obtainedResult.empty() && m_obtainedResult.back() != '\n') + m_obtainedResult += "\n"; + + return checkResult(_stream, _linePrefix, _formatted); +} diff --git a/test/libevmasm/EVMAssemblyTest.h b/test/libevmasm/EVMAssemblyTest.h new file mode 100644 index 000000000000..9059fd716d81 --- /dev/null +++ b/test/libevmasm/EVMAssemblyTest.h @@ -0,0 +1,80 @@ +/* + This file is part of solidity. + + solidity is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + solidity is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with solidity. If not, see . +*/ +// SPDX-License-Identifier: GPL-3.0 + +#pragma once + +#include + +#include + +#include +#include +#include +#include + +namespace solidity::evmasm::test +{ + +/// Custom test case that runs the final part of the compiler pipeline (assembling into bytecode). +/// Supports two kinds of input (depending on file extension): +/// - .asmjson: assembly JSON format produced by --asm-json. +/// - .asm: plain assembly, a more limited but human-readable format that is internally converted +/// to assembly JSON. +/// +/// Available settings: +/// - EVMVersion: The range of EVM versions to run the test for. Inherited from EVMVersionRestrictedTestCase. +/// - bytecodeFormat: The range of bytecode formats (EOF/legacy) to run the test for. Inherited from EVMVersionRestrictedTestCase. +/// - outputs: List of outputs to include in the test. The order of values does NOT determine the order +/// in which the outputs are printed. Supported outputs: InputAssemblyJSON, Assembly, Bytecode, Opcodes, SourceMappings. +/// The default is to print all outputs except InputAssemblyJSON. +/// - optimizationPreset: Preset to load as the base optimizer settings. +/// One of: none, minimal, standard, full. The default is none. +/// - optimizer.*: A set of detailed optimizer settings applied on top of the base preset. +/// Each one corresponds to a field in Assembly::OptimiserSettings and uses the value from the +/// preset as its default. Available settings: +/// - optimizer.expectedExecutionsPerDeployment (integer) +/// - optimizer.inliner (bool) +/// - optimizer.jumpdestRemover (bool) +/// - optimizer.peephole (bool) +/// - optimizer.deduplicate (bool) +/// - optimizer.cse (bool) +/// - optimizer.constantOptimizer (bool) +class EVMAssemblyTest: public frontend::test::EVMVersionRestrictedTestCase +{ +public: + static std::unique_ptr create(Config const& _config); + + EVMAssemblyTest(std::string const& _filename); + + TestResult run(std::ostream& _stream, std::string const& _linePrefix = "", bool const _formatted = false) override; + +private: + enum class AssemblyFormat + { + JSON, + Plain, + }; + + static std::vector const c_outputLabels; + + AssemblyFormat m_assemblyFormat{}; + std::string m_selectedOutputs; + evmasm::Assembly::OptimiserSettings m_optimizerSettings; +}; + +} diff --git a/test/libevmasm/Optimiser.cpp b/test/libevmasm/Optimiser.cpp index f4b7034de544..b53205e959e5 100644 --- a/test/libevmasm/Optimiser.cpp +++ b/test/libevmasm/Optimiser.cpp @@ -1009,6 +1009,182 @@ BOOST_AUTO_TEST_CASE(clear_unreachable_code) ); } +BOOST_AUTO_TEST_CASE(clear_unreachable_code_eof, *boost::unit_test::precondition(onEOF())) +{ + for (auto const& blockTerminatingItem: + { + AssemblyItem::relativeJumpTo(AssemblyItem(Tag, 1)), + AssemblyItem::jumpToFunction(1, 0, 0), + AssemblyItem::functionReturn(), + AssemblyItem::returnContract(0), + } + ) + { + AssemblyItems items{ + blockTerminatingItem, + u256(0), + Instruction::SLOAD, + AssemblyItem(Tag, 2), + u256(5), + u256(6), + Instruction::SSTORE, + blockTerminatingItem, + u256(5), + u256(6) + }; + AssemblyItems expectation{ + blockTerminatingItem, + AssemblyItem(Tag, 2), + u256(5), + u256(6), + Instruction::SSTORE, + blockTerminatingItem, + }; + PeepholeOptimiser peepOpt(items, solidity::test::CommonOptions::get().evmVersion()); + BOOST_REQUIRE(peepOpt.optimise()); + BOOST_CHECK_EQUAL_COLLECTIONS( + items.begin(), items.end(), + expectation.begin(), expectation.end() + ); + } +} + +BOOST_AUTO_TEST_CASE(is_zero_is_zero_rjumpi, *boost::unit_test::precondition(onEOF())) +{ + AssemblyItems items{ + u256(1), + Instruction::ISZERO, + Instruction::ISZERO, + AssemblyItem::conditionalRelativeJumpTo(AssemblyItem(Tag, 1)), + u256(0), + Instruction::SLOAD, + AssemblyItem(Tag, 1), + }; + + AssemblyItems expectation{ + u256(1), + AssemblyItem::conditionalRelativeJumpTo(AssemblyItem(Tag, 1)), + u256(0), + Instruction::SLOAD, + AssemblyItem(Tag, 1), + }; + + PeepholeOptimiser peepOpt(items, solidity::test::CommonOptions::get().evmVersion()); + BOOST_REQUIRE(peepOpt.optimise()); + BOOST_CHECK_EQUAL_COLLECTIONS( + items.begin(), items.end(), + expectation.begin(), expectation.end() + ); +} + +BOOST_AUTO_TEST_CASE(equal_is_zero_rjumpi, *boost::unit_test::precondition(onEOF())) +{ + AssemblyItems items{ + u256(1), + u256(2), + Instruction::EQ, + Instruction::ISZERO, + AssemblyItem::conditionalRelativeJumpTo(AssemblyItem(Tag, 1)), + u256(0), + Instruction::SLOAD, + AssemblyItem(Tag, 1), + }; + + AssemblyItems expectation{ + u256(1), + u256(2), + Instruction::SUB, + AssemblyItem::conditionalRelativeJumpTo(AssemblyItem(Tag, 1)), + u256(0), + Instruction::SLOAD, + AssemblyItem(Tag, 1), + }; + + PeepholeOptimiser peepOpt(items, solidity::test::CommonOptions::get().evmVersion()); + BOOST_REQUIRE(peepOpt.optimise()); + BOOST_CHECK_EQUAL_COLLECTIONS( + items.begin(), items.end(), + expectation.begin(), expectation.end() + ); +} + +BOOST_AUTO_TEST_CASE(double_rjump, *boost::unit_test::precondition(onEOF())) +{ + AssemblyItems items{ + u256(1), + AssemblyItem::conditionalRelativeJumpTo(AssemblyItem(Tag, 1)), + AssemblyItem::relativeJumpTo(AssemblyItem(Tag, 2)), + AssemblyItem(Tag, 1), + u256(0), + Instruction::SLOAD, + AssemblyItem(Tag, 2), + }; + + AssemblyItems expectation{ + u256(1), + Instruction::ISZERO, + AssemblyItem::conditionalRelativeJumpTo(AssemblyItem(Tag, 2)), + AssemblyItem(Tag, 1), + u256(0), + Instruction::SLOAD, + AssemblyItem(Tag, 2), + }; + + PeepholeOptimiser peepOpt(items, solidity::test::CommonOptions::get().evmVersion()); + BOOST_REQUIRE(peepOpt.optimise()); + BOOST_CHECK_EQUAL_COLLECTIONS( + items.begin(), items.end(), + expectation.begin(), expectation.end() + ); +} + +BOOST_AUTO_TEST_CASE(rjump_to_next, *boost::unit_test::precondition(onEOF())) +{ + AssemblyItems items{ + AssemblyItem::relativeJumpTo(AssemblyItem(Tag, 1)), + AssemblyItem(Tag, 1), + u256(0), + Instruction::SLOAD, + }; + + AssemblyItems expectation{ + AssemblyItem(Tag, 1), + u256(0), + Instruction::SLOAD, + }; + + PeepholeOptimiser peepOpt(items, solidity::test::CommonOptions::get().evmVersion()); + BOOST_REQUIRE(peepOpt.optimise()); + BOOST_CHECK_EQUAL_COLLECTIONS( + items.begin(), items.end(), + expectation.begin(), expectation.end() + ); +} + +BOOST_AUTO_TEST_CASE(rjumpi_to_next, *boost::unit_test::precondition(onEOF())) +{ + AssemblyItems items{ + AssemblyItem::conditionalRelativeJumpTo(AssemblyItem(Tag, 1)), + AssemblyItem(Tag, 1), + u256(0), + Instruction::SLOAD, + }; + + AssemblyItems expectation{ + Instruction::POP, + AssemblyItem(Tag, 1), + u256(0), + Instruction::SLOAD, + }; + + PeepholeOptimiser peepOpt(items, solidity::test::CommonOptions::get().evmVersion()); + BOOST_REQUIRE(peepOpt.optimise()); + BOOST_CHECK_EQUAL_COLLECTIONS( + items.begin(), items.end(), + expectation.begin(), expectation.end() + ); +} + BOOST_AUTO_TEST_CASE(deduplicateNextTagBlockSize3) { AssemblyItems items{ diff --git a/test/libevmasm/PlainAssemblyParser.cpp b/test/libevmasm/PlainAssemblyParser.cpp new file mode 100644 index 000000000000..07b680474cb9 --- /dev/null +++ b/test/libevmasm/PlainAssemblyParser.cpp @@ -0,0 +1,258 @@ +/* + This file is part of solidity. + + solidity is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + solidity is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with solidity. If not, see . +*/ + +#include + +#include +#include + +#include + +#include + +#include + +#include + +using namespace std::string_literals; +using namespace solidity; +using namespace solidity::test; +using namespace solidity::evmasm; +using namespace solidity::evmasm::test; +using namespace solidity::langutil; + +Json PlainAssemblyParser::parse(std::string _sourceName, std::string const& _source) +{ + m_sourceStream = std::istringstream(_source); + m_sourceName = std::move(_sourceName); + m_lineNumber = 0; + + advanceLine(); + return parseAssembly(0); +} + +Json PlainAssemblyParser::parseAssembly(size_t _nestingLevel) +{ + Json assemblyJSON = {{".code", Json::array()}}; + Json& codeJSON = assemblyJSON[".code"]; + + while (m_line.has_value()) + { + if (m_lineTokens.empty()) + { + advanceLine(); + continue; + } + + size_t newLevel = parseNestingLevel(); + if (newLevel > _nestingLevel) + BOOST_THROW_EXCEPTION(std::runtime_error(formatError("Indentation does not match the current subassembly nesting level."))); + + if (newLevel < _nestingLevel) + return assemblyJSON; + + if (currentToken().value == ".sub") + { + advanceLine(); + + std::string nextDataIndex = std::to_string(assemblyJSON[".data"].size()); + assemblyJSON[".data"][nextDataIndex] = parseAssembly(_nestingLevel + 1); + continue; + } + else if (assemblyJSON.contains(".data")) + BOOST_THROW_EXCEPTION(std::runtime_error(formatError("The code of an assembly must be specified before its subassemblies."))); + + if (c_instructions.contains(currentToken().value) || currentToken().value == "PUSHSIZE") + { + expectNoMoreArguments(); + codeJSON.push_back({{"name", currentToken().value}}); + } + else if (currentToken().value == "PUSH") + { + if (hasMoreTokens() && nextToken().value == "[tag]") + { + advanceToken(); + std::string_view tagID = expectArgument(); + expectNoMoreArguments(); + codeJSON.push_back({{"name", "PUSH [tag]"}, {"value", tagID}}); + } + else if (hasMoreTokens() && (nextToken().value == "[$]" || nextToken().value == "#[$]")) + { + std::string pushType = std::string(nextToken().value); + advanceToken(); + std::string_view subassemblyID = expectArgument(); + expectNoMoreArguments(); + + if (!subassemblyID.starts_with("0x")) + BOOST_THROW_EXCEPTION(std::runtime_error(formatError("The subassembly ID must be a hex number prefixed with '0x'."))); + + subassemblyID.remove_prefix("0x"s.size()); + codeJSON.push_back({{"name", "PUSH " + pushType}, {"value", subassemblyID}}); + } + else + { + std::string_view immediateArgument = expectArgument(); + expectNoMoreArguments(); + + if (!immediateArgument.starts_with("0x")) + BOOST_THROW_EXCEPTION(std::runtime_error(formatError("The immediate argument to PUSH must be a hex number prefixed with '0x'."))); + + immediateArgument.remove_prefix("0x"s.size()); + codeJSON.push_back({{"name", "PUSH"}, {"value", immediateArgument}}); + } + } + else if (currentToken().value == "tag") + { + std::string_view tagID = expectArgument(); + expectNoMoreArguments(); + + codeJSON.push_back({{"name", "tag"}, {"value", tagID}}); + codeJSON.push_back({{"name", "JUMPDEST"}}); + } + else + BOOST_THROW_EXCEPTION(std::runtime_error(formatError("Unknown instruction."))); + + advanceLine(); + } + + return assemblyJSON; +} + +size_t PlainAssemblyParser::parseNestingLevel() const +{ + std::string_view indentationString = indentation(); + + if (indentationString != std::string(indentationString.size(), ' ')) + BOOST_THROW_EXCEPTION(std::runtime_error(formatError("Non-space characters used for indentation."))); + + if (indentationString.size() % 4 != 0) + BOOST_THROW_EXCEPTION(std::runtime_error(formatError("Each indentation level must consist of 4 spaces."))); + + return indentationString.size() / 4; +} + +PlainAssemblyParser::Token const& PlainAssemblyParser::currentToken() const +{ + soltestAssert(m_tokenIndex < m_lineTokens.size()); + return m_lineTokens[m_tokenIndex]; +} + +PlainAssemblyParser::Token const& PlainAssemblyParser::nextToken() const +{ + soltestAssert(m_tokenIndex + 1 < m_lineTokens.size()); + return m_lineTokens[m_tokenIndex + 1]; +} + +std::string_view PlainAssemblyParser::indentation() const +{ + soltestAssert(m_line.has_value()); + + if (m_lineTokens.empty()) + return *m_line; + + return std::string_view(*m_line).substr(0, m_lineTokens.at(0).position); +} + +bool PlainAssemblyParser::advanceToken() +{ + if (!hasMoreTokens()) + return false; + + ++m_tokenIndex; + return true; +} + +std::string_view PlainAssemblyParser::expectArgument() +{ + bool hasArgument = advanceToken(); + if (!hasArgument) + BOOST_THROW_EXCEPTION(std::runtime_error(formatError("Missing argument(s)."))); + + return currentToken().value; +} + +void PlainAssemblyParser::expectNoMoreArguments() +{ + bool hasArgument = advanceToken(); + if (hasArgument) + BOOST_THROW_EXCEPTION(std::runtime_error(formatError("Too many arguments."))); +} + +bool PlainAssemblyParser::advanceLine() +{ + std::string line; + if (!getline(m_sourceStream, line)) + { + m_line = std::nullopt; + return false; + } + + ++m_lineNumber; + m_line = std::move(line); + m_lineTokens = tokenizeLine(*m_line); + m_tokenIndex = 0; + return true; +} + +std::vector PlainAssemblyParser::tokenizeLine(std::string_view _line) +{ + auto const notWhiteSpace = [](char _c) { return !isWhiteSpace(_c); }; + + std::vector tokens; + auto tokenLocation = boost::find_token(_line, notWhiteSpace, boost::token_compress_on); + while (!tokenLocation.empty()) + { + std::string_view value{tokenLocation.begin(), tokenLocation.end()}; + if (value.starts_with("//")) + break; + + tokens.push_back({ + .value = value, + .position = static_cast(std::distance(_line.begin(), tokenLocation.begin())), + }); + soltestAssert(!value.empty()); + soltestAssert(tokens.back().position < _line.size()); + soltestAssert(tokens.back().position + value.size() <= _line.size()); + + std::string_view tail{tokenLocation.end(), _line.end()}; + tokenLocation = boost::find_token(tail, notWhiteSpace, boost::token_compress_on); + } + + return tokens; +} + +std::string PlainAssemblyParser::formatError(std::string_view _message) const +{ + soltestAssert(m_line.has_value()); + soltestAssert(!m_lineTokens.empty()); + + std::string lineNumberString = std::to_string(m_lineNumber); + std::string padding(lineNumberString.size(), ' '); + std::string underline = std::string(currentToken().position, ' ') + std::string(currentToken().value.size(), '^'); + return fmt::format( + "Error while parsing plain assembly: {}\n" + "{}--> {}\n" + "{} | \n" + "{} | {}\n" + "{} | {}\n", + _message, + padding, m_sourceName, + padding, + m_lineNumber, *m_line, + padding, underline + ); +} diff --git a/test/libevmasm/PlainAssemblyParser.h b/test/libevmasm/PlainAssemblyParser.h new file mode 100644 index 000000000000..9318d1662389 --- /dev/null +++ b/test/libevmasm/PlainAssemblyParser.h @@ -0,0 +1,94 @@ +/* + This file is part of solidity. + + solidity is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + solidity is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with solidity. If not, see . +*/ +// SPDX-License-Identifier: GPL-3.0 + +#pragma once + +#include + +#include +#include +#include +#include + +namespace solidity::evmasm::test +{ + +/// Parser for the plain assembly format. The format is meant to be good enough for humans to read +/// while being straightforward to map to the assembly JSON format that solc can import. +/// +/// Syntax: +/// - Every line consists of zero or more whitespace-separated tokens. +/// - A token that begins with `//` starts a comment, which extends to the end of the line. +/// - A non-empty line represents a single assembly item. +/// - The name of the item is the first thing on the line and may consist of one or more tokens. +/// - One or more arguments follow the name. +/// - Indentation determines assembly nesting level (4 spaces per level). +/// - A new subassembly starts with '.sub' and contains all subsequent lines at a higher nesting level. +/// The first line at the same or lower nesting level ends the subassembly. +/// - Subassemblies can be nested to arbitrary depth. +/// - The code of an assembly must be specified before its subassemblies. +/// +/// Supported items: +/// - All instruction names. +/// - PUSH +/// - PUSH [tag] +/// - tag +/// - PUSH [$] +/// - PUSH #[$] +/// - .sub +class PlainAssemblyParser +{ +public: + /// Parses plain assembly format and returns the equivalent assembly JSON. + /// Errors are reported by throwing runtime_error. + Json parse(std::string _sourceName, std::string const& _source); + +protected: + struct Token + { + std::string_view value; ///< Substring of m_line that represents a complete token. + size_t position; ///< Position of the first character of the token within m_line. + }; + + Json parseAssembly(size_t _nestingLevel); + size_t parseNestingLevel() const; + + Token const& currentToken() const; + Token const& nextToken() const; + bool hasMoreTokens() const { return m_tokenIndex + 1 < m_lineTokens.size(); } + + std::string_view indentation() const; + + bool advanceToken(); + std::string_view expectArgument(); + void expectNoMoreArguments(); + bool advanceLine(); + + static std::vector tokenizeLine(std::string_view _line); + std::string formatError(std::string_view _message) const; + +private: + std::istringstream m_sourceStream; ///< The source code being parsed. + std::string m_sourceName; ///< Name of the file the source comes from. + size_t m_lineNumber = 0; ///< The number of the current line within the source, 1-based. + std::optional m_line; ///< The current line, unparsed. + std::vector m_lineTokens; ///< Decomposition of the current line into tokens (does not include comments). + size_t m_tokenIndex = 0; ///< Points at a token within m_lineTokens. +}; + +} diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/code_generation_error.asmjson b/test/libevmasm/evmAssemblyTests/isoltestTesting/code_generation_error.asmjson new file mode 100644 index 000000000000..4297c5f35b80 --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/code_generation_error.asmjson @@ -0,0 +1,14 @@ +{ + ".code": [ + {"name": "PUSH [$]", "value": "0"} + ], + ".data": { + "0": { + ".code": [ + {"name": "PUSHIMMUTABLE", "value": "x"} + ] + } + } +} +// ---- +// CodeGenerationError: Some immutables were read from but never assigned, possibly because of optimization. diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/comments.asm b/test/libevmasm/evmAssemblyTests/isoltestTesting/comments.asm new file mode 100644 index 000000000000..13dca3ad1b2f --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/comments.asm @@ -0,0 +1,34 @@ +// +//// comment + // comment +CALLVALUE // 0xff +CALLVALUE //0xff + +PUSH 0xff // comment // //0xff +// + +// +// ==== +// outputs: InputAssemblyJSON,Assembly,Bytecode,Opcodes,SourceMappings +// ---- +// InputAssemblyJSON: { +// ".code": [ +// { +// "name": "CALLVALUE" +// }, +// { +// "name": "CALLVALUE" +// }, +// { +// "name": "PUSH", +// "value": "ff" +// } +// ] +// } +// Assembly: +// callvalue +// callvalue +// 0xff +// Bytecode: 343460ff +// Opcodes: CALLVALUE CALLVALUE PUSH1 0xFF +// SourceMappings: :::-:0;; diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/empty.asm b/test/libevmasm/evmAssemblyTests/isoltestTesting/empty.asm new file mode 100644 index 000000000000..a3c0ef5396a1 --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/empty.asm @@ -0,0 +1,10 @@ +// ==== +// outputs: InputAssemblyJSON,Assembly,Bytecode,Opcodes,SourceMappings +// ---- +// InputAssemblyJSON: { +// ".code": [] +// } +// Assembly: +// Bytecode: +// Opcodes: +// SourceMappings: diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/invalid_json.asmjson b/test/libevmasm/evmAssemblyTests/isoltestTesting/invalid_json.asmjson new file mode 100644 index 000000000000..a834108d1ad7 --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/invalid_json.asmjson @@ -0,0 +1,3 @@ +{ +// ---- +// AssemblyImportException: Could not parse JSON file. diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/jumps.asm b/test/libevmasm/evmAssemblyTests/isoltestTesting/jumps.asm new file mode 100644 index 000000000000..be92671d8141 --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/jumps.asm @@ -0,0 +1,56 @@ +PUSH [tag] 1 +JUMP +tag 1 +PUSH 0x01 +JUMPI +PUSH [tag] 0x012AB +tag 0x012AB +// ==== +// outputs: InputAssemblyJSON,Assembly,Bytecode,Opcodes,SourceMappings +// ---- +// InputAssemblyJSON: { +// ".code": [ +// { +// "name": "PUSH [tag]", +// "value": "1" +// }, +// { +// "name": "JUMP" +// }, +// { +// "name": "tag", +// "value": "1" +// }, +// { +// "name": "JUMPDEST" +// }, +// { +// "name": "PUSH", +// "value": "01" +// }, +// { +// "name": "JUMPI" +// }, +// { +// "name": "PUSH [tag]", +// "value": "0x012AB" +// }, +// { +// "name": "tag", +// "value": "0x012AB" +// }, +// { +// "name": "JUMPDEST" +// } +// ] +// } +// Assembly: +// jump(tag_1) +// tag_1: +// 0x01 +// jumpi +// tag_4779 +// tag_4779: +// Bytecode: 6003565b60015760095b +// Opcodes: PUSH1 0x3 JUMP JUMPDEST PUSH1 0x1 JUMPI PUSH1 0x9 JUMPDEST +// SourceMappings: :::-:0;;;;;; diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/operations.asm b/test/libevmasm/evmAssemblyTests/isoltestTesting/operations.asm new file mode 100644 index 000000000000..923b0a6b1f37 --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/operations.asm @@ -0,0 +1,53 @@ +NUMBER +SLOAD +ADDRESS +ORIGIN +ADD +DUP1 +SWAP1 +MSTORE8 +STOP +// ==== +// outputs: InputAssemblyJSON,Assembly,Bytecode,Opcodes,SourceMappings +// ---- +// InputAssemblyJSON: { +// ".code": [ +// { +// "name": "NUMBER" +// }, +// { +// "name": "SLOAD" +// }, +// { +// "name": "ADDRESS" +// }, +// { +// "name": "ORIGIN" +// }, +// { +// "name": "ADD" +// }, +// { +// "name": "DUP1" +// }, +// { +// "name": "SWAP1" +// }, +// { +// "name": "MSTORE8" +// }, +// { +// "name": "STOP" +// } +// ] +// } +// Assembly: +// sload(number) +// add(origin, address) +// dup1 +// swap1 +// mstore8 +// stop +// Bytecode: 435430320180905300 +// Opcodes: NUMBER SLOAD ADDRESS ORIGIN ADD DUP1 SWAP1 MSTORE8 STOP +// SourceMappings: :::-:0;;;;;;;; diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/push.asm b/test/libevmasm/evmAssemblyTests/isoltestTesting/push.asm new file mode 100644 index 000000000000..51bc160507c7 --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/push.asm @@ -0,0 +1,35 @@ +PUSH 0x0 +PUSH 0x1 +PUSH 0x0123456789ABCDEF +PUSH 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +// ==== +// outputs: InputAssemblyJSON,Assembly,Bytecode,Opcodes,SourceMappings +// ---- +// InputAssemblyJSON: { +// ".code": [ +// { +// "name": "PUSH", +// "value": "0" +// }, +// { +// "name": "PUSH", +// "value": "1" +// }, +// { +// "name": "PUSH", +// "value": "0123456789ABCDEF" +// }, +// { +// "name": "PUSH", +// "value": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" +// } +// ] +// } +// Assembly: +// 0x00 +// 0x01 +// 0x0123456789abcdef +// 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +// Bytecode: 5f6001670123456789abcdef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +// Opcodes: PUSH0 PUSH1 0x1 PUSH8 0x123456789ABCDEF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +// SourceMappings: :::-:0;;; diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/pushsize.asm b/test/libevmasm/evmAssemblyTests/isoltestTesting/pushsize.asm new file mode 100644 index 000000000000..3c92687c425a --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/pushsize.asm @@ -0,0 +1,33 @@ +PUSHSIZE + +.sub + PUSHSIZE +// ==== +// outputs: InputAssemblyJSON,Assembly,Bytecode,Opcodes,SourceMappings +// ---- +// InputAssemblyJSON: { +// ".code": [ +// { +// "name": "PUSHSIZE" +// } +// ], +// ".data": { +// "0": { +// ".code": [ +// { +// "name": "PUSHSIZE" +// } +// ] +// } +// } +// } +// Assembly: +// bytecodeSize +// stop +// +// sub_0: assembly { +// bytecodeSize +// } +// Bytecode: 6003fe +// Opcodes: PUSH1 0x3 INVALID +// SourceMappings: :::-:0 diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/pushsubsize.asm b/test/libevmasm/evmAssemblyTests/isoltestTesting/pushsubsize.asm new file mode 100644 index 000000000000..1b51c22a84ef --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/pushsubsize.asm @@ -0,0 +1,72 @@ +PUSH [$] 0x0000 +PUSH #[$] 0x0000 + +.sub + PUSH [$] 0x0 + PUSH #[$] 0x2 + + .sub + .sub + .sub +// ==== +// outputs: InputAssemblyJSON,Assembly,Bytecode,Opcodes,SourceMappings +// ---- +// InputAssemblyJSON: { +// ".code": [ +// { +// "name": "PUSH [$]", +// "value": "0000" +// }, +// { +// "name": "PUSH #[$]", +// "value": "0000" +// } +// ], +// ".data": { +// "0": { +// ".code": [ +// { +// "name": "PUSH [$]", +// "value": "0" +// }, +// { +// "name": "PUSH #[$]", +// "value": "2" +// } +// ], +// ".data": { +// "0": { +// ".code": [] +// }, +// "1": { +// ".code": [] +// }, +// "2": { +// ".code": [] +// } +// } +// } +// } +// } +// Assembly: +// dataOffset(sub_0) +// dataSize(sub_0) +// stop +// +// sub_0: assembly { +// dataOffset(sub_0) +// dataSize(sub_2) +// stop +// +// sub_0: assembly { +// } +// +// sub_1: assembly { +// } +// +// sub_2: assembly { +// } +// } +// Bytecode: 60056005fe60056000fe +// Opcodes: PUSH1 0x5 PUSH1 0x5 INVALID PUSH1 0x5 PUSH1 0x0 INVALID +// SourceMappings: :::-:0; diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_eof_version.asmjson b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_eof_version.asmjson new file mode 100644 index 000000000000..5785b4b8931e --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_eof_version.asmjson @@ -0,0 +1,13 @@ +{ + ".code": [ + {"name": "CODESIZE"} + ] +} +// ==== +// bytecodeFormat: legacy +// ---- +// Assembly: +// codesize +// Bytecode: 38 +// Opcodes: CODESIZE +// SourceMappings: :::-:0 diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_evm_version.asmjson b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_evm_version.asmjson new file mode 100644 index 000000000000..a0f042b32e88 --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_evm_version.asmjson @@ -0,0 +1,13 @@ +{ + ".code": [ + {"name": "BLOBBASEFEE"} + ] +} +// ==== +// EVMVersion: >=cancun +// ---- +// Assembly: +// blobbasefee +// Bytecode: 4a +// Opcodes: BLOBBASEFEE +// SourceMappings: :::-:0 diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_constant_optimizer.asmjson b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_constant_optimizer.asmjson new file mode 100644 index 000000000000..a3610217fbaf --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_constant_optimizer.asmjson @@ -0,0 +1,14 @@ +{ + ".code": [ + {"name": "PUSH", "value": "ffffffffffffffff"} + ] +} +// ==== +// optimizationPreset: none +// optimizer.constantOptimizer: true +// ---- +// Assembly: +// sub(shl(0x40, 0x01), 0x01) +// Bytecode: 6001600160401b03 +// Opcodes: PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB +// SourceMappings: :::-:0;;;; diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_cse.asmjson b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_cse.asmjson new file mode 100644 index 000000000000..c8133b43f799 --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_cse.asmjson @@ -0,0 +1,16 @@ +{ + ".code": [ + {"name": "PUSH", "value": "0"}, + {"name": "DUP2"}, + {"name": "SUB"} + ] +} +// ==== +// optimizationPreset: none +// optimizer.cse: true +// ---- +// Assembly: +// dup1 +// Bytecode: 80 +// Opcodes: DUP1 +// SourceMappings: :::-:0 diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_deduplicate.asmjson b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_deduplicate.asmjson new file mode 100644 index 000000000000..67b87e59e9ee --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_deduplicate.asmjson @@ -0,0 +1,26 @@ +{ + ".code": [ + {"name": "PUSH [tag]", "value": "1"}, + {"name": "PUSH [tag]", "value": "2"}, + {"name": "tag", "value": "1"}, + {"name": "JUMPDEST"}, + {"name": "JUMP"}, + {"name": "tag", "value": "2"}, + {"name": "JUMPDEST"}, + {"name": "JUMP"} + ] +} +// ==== +// optimizationPreset: none +// optimizer.deduplicate: true +// ---- +// Assembly: +// tag_1 +// tag_1 +// tag_1: +// jump +// tag_2: +// jump +// Bytecode: 600460045b565b56 +// Opcodes: PUSH1 0x4 PUSH1 0x4 JUMPDEST JUMP JUMPDEST JUMP +// SourceMappings: :::-:0;;;;; diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_expected_executions_per_deployment.asmjson b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_expected_executions_per_deployment.asmjson new file mode 100644 index 000000000000..b9fd814d5c8e --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_expected_executions_per_deployment.asmjson @@ -0,0 +1,26 @@ +{ + ".code": [ + {"name": "PUSH [$]", "value": "0"} + ], + ".data": { + "0": { + ".code": [ + {"name": "PUSH", "value": "ffffffffffffffff"} + ] + } + } +} +// ==== +// optimizationPreset: standard +// optimizer.expectedExecutionsPerDeployment: 0 +// ---- +// Assembly: +// dataOffset(sub_0) +// stop +// +// sub_0: assembly { +// sub(shl(0x40, 0x01), 0x01) +// } +// Bytecode: 6003fe6001600160401b03 +// Opcodes: PUSH1 0x3 INVALID PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB +// SourceMappings: :::-:0 diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_inliner.asmjson b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_inliner.asmjson new file mode 100644 index 000000000000..81be6392c444 --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_inliner.asmjson @@ -0,0 +1,33 @@ +{ + ".code": [ + {"name": "PUSH [tag]", "value": "1"}, + {"name": "PUSH [tag]", "value": "2"}, + {"name": "JUMP"}, + {"name": "tag", "value": "1"}, + {"name": "JUMPDEST"}, + {"name": "STOP"}, + {"name": "tag", "value": "2"}, + {"name": "JUMPDEST"}, + {"name": "CALLVALUE"}, + {"name": "SWAP1"}, + {"name": "JUMP"} + ] +} +// ==== +// optimizationPreset: none +// optimizer.inliner: true +// ---- +// Assembly: +// tag_1 +// callvalue +// swap1 +// jump +// tag_1: +// stop +// tag_2: +// callvalue +// swap1 +// jump +// Bytecode: 60053490565b005b349056 +// Opcodes: PUSH1 0x5 CALLVALUE SWAP1 JUMP JUMPDEST STOP JUMPDEST CALLVALUE SWAP1 JUMP +// SourceMappings: :::-:0;;;;;;;;; diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_jumpdest_remover.asmjson b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_jumpdest_remover.asmjson new file mode 100644 index 000000000000..baca77b992fc --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_jumpdest_remover.asmjson @@ -0,0 +1,14 @@ +{ + ".code": [ + {"name": "tag", "value": "1"}, + {"name": "JUMPDEST"} + ] +} +// ==== +// optimizationPreset: none +// optimizer.jumpdestRemover: true +// ---- +// Assembly: +// Bytecode: +// Opcodes: +// SourceMappings: diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_peephole.asmjson b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_peephole.asmjson new file mode 100644 index 000000000000..f9e7c3b8d550 --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_peephole.asmjson @@ -0,0 +1,15 @@ +{ + ".code": [ + {"name": "STOP"}, + {"name": "STOP"} + ] +} +// ==== +// optimizationPreset: none +// optimizer.peephole: true +// ---- +// Assembly: +// stop +// Bytecode: 00 +// Opcodes: STOP +// SourceMappings: :::-:0 diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_preset.asmjson b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_preset.asmjson new file mode 100644 index 000000000000..706a3ae8b61a --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_optimizer_preset.asmjson @@ -0,0 +1,18 @@ +{ + ".code": [ + {"name": "PUSH", "value": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}, + {"name": "PUSH", "value": "42"}, + {"name": "PUSH", "value": "24"}, + {"name": "SWAP1"}, + {"name": "ADD"} + ] +} +// ==== +// optimizationPreset: full +// ---- +// Assembly: +// not(0x00) +// 0x66 +// Bytecode: 5f196066 +// Opcodes: PUSH0 NOT PUSH1 0x66 +// SourceMappings: :::-:0;; diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_outputs.asmjson b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_outputs.asmjson new file mode 100644 index 000000000000..2af7b57c3e75 --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/settings_outputs.asmjson @@ -0,0 +1,10 @@ +{ + ".code": [ + {"name": "CALLVALUE"} + ] +} +// ==== +// outputs: SourceMappings,Opcodes +// ---- +// Opcodes: CALLVALUE +// SourceMappings: :::-:0 diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/smoke.asmjson b/test/libevmasm/evmAssemblyTests/isoltestTesting/smoke.asmjson new file mode 100644 index 000000000000..99e527a72587 --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/smoke.asmjson @@ -0,0 +1,11 @@ +{ + ".code": [ + {"name": "CALLVALUE"} + ] +} +// ---- +// Assembly: +// callvalue +// Bytecode: 34 +// Opcodes: CALLVALUE +// SourceMappings: :::-:0 diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/smoke_plain.asm b/test/libevmasm/evmAssemblyTests/isoltestTesting/smoke_plain.asm new file mode 100644 index 000000000000..a1714241fb86 --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/smoke_plain.asm @@ -0,0 +1,16 @@ +CALLVALUE +// ==== +// outputs: InputAssemblyJSON,Assembly,Bytecode,Opcodes,SourceMappings +// ---- +// InputAssemblyJSON: { +// ".code": [ +// { +// "name": "CALLVALUE" +// } +// ] +// } +// Assembly: +// callvalue +// Bytecode: 34 +// Opcodes: CALLVALUE +// SourceMappings: :::-:0 diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/subassemblies.asm b/test/libevmasm/evmAssemblyTests/isoltestTesting/subassemblies.asm new file mode 100644 index 000000000000..7dc1a515067d --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/subassemblies.asm @@ -0,0 +1,69 @@ +PUSH 0x2 +DUP1 +ADD + +.sub + PUSH 0x42 + DUP1 + MUL + +.sub + STOP +// ==== +// outputs: InputAssemblyJSON,Assembly,Bytecode,Opcodes,SourceMappings +// ---- +// InputAssemblyJSON: { +// ".code": [ +// { +// "name": "PUSH", +// "value": "2" +// }, +// { +// "name": "DUP1" +// }, +// { +// "name": "ADD" +// } +// ], +// ".data": { +// "0": { +// ".code": [ +// { +// "name": "PUSH", +// "value": "42" +// }, +// { +// "name": "DUP1" +// }, +// { +// "name": "MUL" +// } +// ] +// }, +// "1": { +// ".code": [ +// { +// "name": "STOP" +// } +// ] +// } +// } +// } +// Assembly: +// 0x02 +// dup1 +// add +// stop +// +// sub_0: assembly { +// 0x42 +// dup1 +// mul +// } +// +// sub_1: assembly { +// stop +// } +// Bytecode: 60028001fe +// Opcodes: PUSH1 0x2 DUP1 ADD INVALID +// SourceMappings: :::-:0;; diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/subassemblies_empty.asm b/test/libevmasm/evmAssemblyTests/isoltestTesting/subassemblies_empty.asm new file mode 100644 index 000000000000..8914710dbf34 --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/subassemblies_empty.asm @@ -0,0 +1,34 @@ +.sub +.sub +.sub +// ==== +// outputs: InputAssemblyJSON,Assembly,Bytecode,Opcodes,SourceMappings +// ---- +// InputAssemblyJSON: { +// ".code": [], +// ".data": { +// "0": { +// ".code": [] +// }, +// "1": { +// ".code": [] +// }, +// "2": { +// ".code": [] +// } +// } +// } +// Assembly: +// stop +// +// sub_0: assembly { +// } +// +// sub_1: assembly { +// } +// +// sub_2: assembly { +// } +// Bytecode: fe +// Opcodes: INVALID +// SourceMappings: diff --git a/test/libevmasm/evmAssemblyTests/isoltestTesting/subassemblies_nested.asm b/test/libevmasm/evmAssemblyTests/isoltestTesting/subassemblies_nested.asm new file mode 100644 index 000000000000..59beb9b69ece --- /dev/null +++ b/test/libevmasm/evmAssemblyTests/isoltestTesting/subassemblies_nested.asm @@ -0,0 +1,171 @@ +TIMESTAMP +TIMESTAMP + +.sub + TIMESTAMP + + .sub + TIMESTAMP + .sub + TIMESTAMP + .sub + TIMESTAMP + .sub + TIMESTAMP + .sub + TIMESTAMP +.sub + NUMBER + SLOAD + .sub + NUMBER + MLOAD + .sub + NUMBER + TLOAD + +// ==== +// outputs: InputAssemblyJSON,Assembly,Bytecode,Opcodes,SourceMappings +// ---- +// InputAssemblyJSON: { +// ".code": [ +// { +// "name": "TIMESTAMP" +// }, +// { +// "name": "TIMESTAMP" +// } +// ], +// ".data": { +// "0": { +// ".code": [ +// { +// "name": "TIMESTAMP" +// } +// ], +// ".data": { +// "0": { +// ".code": [ +// { +// "name": "TIMESTAMP" +// } +// ] +// }, +// "1": { +// ".code": [ +// { +// "name": "TIMESTAMP" +// } +// ], +// ".data": { +// "0": { +// ".code": [ +// { +// "name": "TIMESTAMP" +// } +// ], +// ".data": { +// "0": { +// ".code": [ +// { +// "name": "TIMESTAMP" +// } +// ] +// } +// } +// } +// } +// }, +// "2": { +// ".code": [ +// { +// "name": "TIMESTAMP" +// } +// ] +// } +// } +// }, +// "1": { +// ".code": [ +// { +// "name": "NUMBER" +// }, +// { +// "name": "SLOAD" +// } +// ], +// ".data": { +// "0": { +// ".code": [ +// { +// "name": "NUMBER" +// }, +// { +// "name": "MLOAD" +// } +// ], +// ".data": { +// "0": { +// ".code": [ +// { +// "name": "NUMBER" +// }, +// { +// "name": "TLOAD" +// } +// ] +// } +// } +// } +// } +// } +// } +// } +// Assembly: +// timestamp +// timestamp +// stop +// +// sub_0: assembly { +// timestamp +// stop +// +// sub_0: assembly { +// timestamp +// } +// +// sub_1: assembly { +// timestamp +// stop +// +// sub_0: assembly { +// timestamp +// stop +// +// sub_0: assembly { +// timestamp +// } +// } +// } +// +// sub_2: assembly { +// timestamp +// } +// } +// +// sub_1: assembly { +// sload(number) +// stop +// +// sub_0: assembly { +// mload(number) +// stop +// +// sub_0: assembly { +// tload(number) +// } +// } +// } +// Bytecode: 4242fe +// Opcodes: TIMESTAMP TIMESTAMP INVALID +// SourceMappings: :::-:0; diff --git a/test/libsolidity/ASTJSON/enum_value_natspec.json b/test/libsolidity/ASTJSON/enum_value_natspec.json new file mode 100644 index 000000000000..e468bb987064 --- /dev/null +++ b/test/libsolidity/ASTJSON/enum_value_natspec.json @@ -0,0 +1,56 @@ +{ + "absolutePath": "a", + "exportedSymbols": { + "Color": [ + 6 + ] + }, + "id": 7, + "nodeType": "SourceUnit", + "nodes": [ + { + "canonicalName": "Color", + "id": 6, + "members": [ + { + "id": 1, + "name": "Red", + "nameLocation": "17:3:1", + "nodeType": "EnumValue", + "src": "17:3:1" + }, + { + "documentation": { + "id": 2, + "nodeType": "StructuredDocumentation", + "src": "26:57:1", + "text": "@notice example of notice\n @dev example of dev" + }, + "id": 3, + "name": "Green", + "nameLocation": "88:5:1", + "nodeType": "EnumValue", + "src": "88:5:1" + }, + { + "documentation": { + "id": 4, + "nodeType": "StructuredDocumentation", + "src": "99:23:1", + "text": "@dev example of dev" + }, + "id": 5, + "name": "Blue", + "nameLocation": "127:4:1", + "nodeType": "EnumValue", + "src": "127:4:1" + } + ], + "name": "Color", + "nameLocation": "5:5:1", + "nodeType": "EnumDefinition", + "src": "0:164:1" + } + ], + "src": "0:165:1" +} diff --git a/test/libsolidity/ASTJSON/enum_value_natspec.sol b/test/libsolidity/ASTJSON/enum_value_natspec.sol new file mode 100644 index 000000000000..e5209d644831 --- /dev/null +++ b/test/libsolidity/ASTJSON/enum_value_natspec.sol @@ -0,0 +1,11 @@ +enum Color { + Red, + /// @notice example of notice + /// @dev example of dev + Green, + /// @dev example of dev + Blue + /// @dev beyond last value +} + +// ---- diff --git a/test/libsolidity/ASTJSON/enum_value_natspec_parseOnly.json b/test/libsolidity/ASTJSON/enum_value_natspec_parseOnly.json new file mode 100644 index 000000000000..ff3d7c756ed1 --- /dev/null +++ b/test/libsolidity/ASTJSON/enum_value_natspec_parseOnly.json @@ -0,0 +1,50 @@ +{ + "absolutePath": "a", + "id": 7, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 6, + "members": [ + { + "id": 1, + "name": "Red", + "nameLocation": "17:3:1", + "nodeType": "EnumValue", + "src": "17:3:1" + }, + { + "documentation": { + "id": 2, + "nodeType": "StructuredDocumentation", + "src": "26:57:1", + "text": "@notice example of notice\n @dev example of dev" + }, + "id": 3, + "name": "Green", + "nameLocation": "88:5:1", + "nodeType": "EnumValue", + "src": "88:5:1" + }, + { + "documentation": { + "id": 4, + "nodeType": "StructuredDocumentation", + "src": "99:23:1", + "text": "@dev example of dev" + }, + "id": 5, + "name": "Blue", + "nameLocation": "127:4:1", + "nodeType": "EnumValue", + "src": "127:4:1" + } + ], + "name": "Color", + "nameLocation": "5:5:1", + "nodeType": "EnumDefinition", + "src": "0:164:1" + } + ], + "src": "0:165:1" +} diff --git a/test/libsolidity/SMTCheckerTest.cpp b/test/libsolidity/SMTCheckerTest.cpp index d8843e0d3a1e..ce099091f69c 100644 --- a/test/libsolidity/SMTCheckerTest.cpp +++ b/test/libsolidity/SMTCheckerTest.cpp @@ -32,8 +32,17 @@ SMTCheckerTest::SMTCheckerTest(std::string const& _filename): universalCallback(nullptr, smtCommand) { auto contract = m_reader.stringSetting("SMTContract", ""); - if (!contract.empty()) + auto maybeContracts = ModelCheckerContracts::fromString(contract); + auto isValidContractName = [](std::string const& _name) + { + return !_name.empty() && _name.find_first_of(" \t\n\r:,") == std::string::npos; + }; + if (maybeContracts) + m_modelCheckerSettings.contracts = *maybeContracts; + else if (isValidContractName(contract)) m_modelCheckerSettings.contracts.contracts[""] = {contract}; + else + BOOST_THROW_EXCEPTION(std::runtime_error("Invalid contract specified in SMTContract setting.")); auto extCallsMode = ModelCheckerExtCalls::fromString(m_reader.stringSetting("SMTExtCalls", "untrusted")); if (extCallsMode) diff --git a/test/libsolidity/StandardCompiler.cpp b/test/libsolidity/StandardCompiler.cpp index b17f566613a1..5360a2778677 100644 --- a/test/libsolidity/StandardCompiler.cpp +++ b/test/libsolidity/StandardCompiler.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -1170,33 +1171,14 @@ BOOST_AUTO_TEST_CASE(evm_version) )"; }; Json result; - result = compile(inputForVersion("\"evmVersion\": \"homestead\",")); - BOOST_CHECK(result["contracts"]["fileA"]["A"]["metadata"].get().find("\"evmVersion\":\"homestead\"") != std::string::npos); - result = compile(inputForVersion("\"evmVersion\": \"tangerineWhistle\",")); - BOOST_CHECK(result["contracts"]["fileA"]["A"]["metadata"].get().find("\"evmVersion\":\"tangerineWhistle\"") != std::string::npos); - result = compile(inputForVersion("\"evmVersion\": \"spuriousDragon\",")); - BOOST_CHECK(result["contracts"]["fileA"]["A"]["metadata"].get().find("\"evmVersion\":\"spuriousDragon\"") != std::string::npos); - result = compile(inputForVersion("\"evmVersion\": \"byzantium\",")); - BOOST_CHECK(result["contracts"]["fileA"]["A"]["metadata"].get().find("\"evmVersion\":\"byzantium\"") != std::string::npos); - result = compile(inputForVersion("\"evmVersion\": \"constantinople\",")); - BOOST_CHECK(result["contracts"]["fileA"]["A"]["metadata"].get().find("\"evmVersion\":\"constantinople\"") != std::string::npos); - result = compile(inputForVersion("\"evmVersion\": \"petersburg\",")); - BOOST_CHECK(result["contracts"]["fileA"]["A"]["metadata"].get().find("\"evmVersion\":\"petersburg\"") != std::string::npos); - result = compile(inputForVersion("\"evmVersion\": \"istanbul\",")); - BOOST_CHECK(result["contracts"]["fileA"]["A"]["metadata"].get().find("\"evmVersion\":\"istanbul\"") != std::string::npos); - result = compile(inputForVersion("\"evmVersion\": \"berlin\",")); - BOOST_CHECK(result["contracts"]["fileA"]["A"]["metadata"].get().find("\"evmVersion\":\"berlin\"") != std::string::npos); - result = compile(inputForVersion("\"evmVersion\": \"london\",")); - BOOST_CHECK(result["contracts"]["fileA"]["A"]["metadata"].get().find("\"evmVersion\":\"london\"") != std::string::npos); - result = compile(inputForVersion("\"evmVersion\": \"paris\",")); - BOOST_CHECK(result["contracts"]["fileA"]["A"]["metadata"].get().find("\"evmVersion\":\"paris\"") != std::string::npos); - result = compile(inputForVersion("\"evmVersion\": \"shanghai\",")); - BOOST_CHECK(result["contracts"]["fileA"]["A"]["metadata"].get().find("\"evmVersion\":\"shanghai\"") != std::string::npos); - result = compile(inputForVersion("\"evmVersion\": \"cancun\",")); - BOOST_CHECK(result["contracts"]["fileA"]["A"]["metadata"].get().find("\"evmVersion\":\"cancun\"") != std::string::npos); + for (auto const& version: langutil::EVMVersion::allVersions()) + { + result = compile(inputForVersion(fmt::format("\"evmVersion\": \"{}\",", version.name()))); + BOOST_CHECK(result["contracts"]["fileA"]["A"]["metadata"].get().find(fmt::format("\"evmVersion\":\"{}\"", version.name())) != std::string::npos); + } // test default result = compile(inputForVersion("")); - BOOST_CHECK(result["contracts"]["fileA"]["A"]["metadata"].get().find("\"evmVersion\":\"cancun\"") != std::string::npos); + BOOST_CHECK(result["contracts"]["fileA"]["A"]["metadata"].get().find("\"evmVersion\":\"prague\"") != std::string::npos); // test invalid result = compile(inputForVersion("\"evmVersion\": \"invalid\",")); BOOST_CHECK(result["errors"][0]["message"].get() == "Invalid EVM version requested."); diff --git a/test/libsolidity/natspecJSON/enum_no_docs.sol b/test/libsolidity/natspecJSON/enum.sol similarity index 100% rename from test/libsolidity/natspecJSON/enum_no_docs.sol rename to test/libsolidity/natspecJSON/enum.sol diff --git a/test/libsolidity/natspecJSON/docstring_enum.sol b/test/libsolidity/natspecJSON/enum_value.sol similarity index 55% rename from test/libsolidity/natspecJSON/docstring_enum.sol rename to test/libsolidity/natspecJSON/enum_value.sol index d5ace6b14192..ccb3233a51b4 100644 --- a/test/libsolidity/natspecJSON/docstring_enum.sol +++ b/test/libsolidity/natspecJSON/enum_value.sol @@ -1,11 +1,13 @@ contract C { - /// @title example of title - /// @author example of author - /// @notice example of notice - /// @dev example of dev enum Color { + /// @custom red color Red, + /// @title example of title + /// @author example of author + /// @notice example of notice + /// @dev example of dev Green + /// @notice beyond last value } } // ---- diff --git a/test/libsolidity/semanticTests/functionCall/eof/calling_nonexisting_contract.sol b/test/libsolidity/semanticTests/functionCall/eof/calling_nonexisting_contract.sol index 10b39634d5de..a1a53e09d89a 100644 --- a/test/libsolidity/semanticTests/functionCall/eof/calling_nonexisting_contract.sol +++ b/test/libsolidity/semanticTests/functionCall/eof/calling_nonexisting_contract.sol @@ -8,7 +8,7 @@ contract C { function f() public returns (uint256) { // This call throws on legacy bytecode because of calling nonexisting contract. Legacy checks that there is - // a non-empty code under under an address. EOF doesn't do it because non-observability assumption + // a non-empty code under an address. EOF doesn't do it because non-observability assumption d.g(); return 7; } diff --git a/test/libsolidity/smtCheckerTests/external_calls/external_call_from_constructor_1_trusted.sol b/test/libsolidity/smtCheckerTests/external_calls/external_call_from_constructor_1_trusted.sol index 6f2b717b5e87..051215bb102d 100644 --- a/test/libsolidity/smtCheckerTests/external_calls/external_call_from_constructor_1_trusted.sol +++ b/test/libsolidity/smtCheckerTests/external_calls/external_call_from_constructor_1_trusted.sol @@ -1,6 +1,6 @@ contract State { function f(uint _x) public pure returns (uint) { - assert(_x < 100); // should fail + assert(_x < 100); // should hold when analyzing only contract C (can fail only when analyzing State as standalone contract) return _x; } } @@ -18,5 +18,4 @@ contract C { // SMTExtCalls: trusted // SMTIgnoreInv: yes // ---- -// Warning 6328: (69-85): CHC: Assertion violation happens here. -// Info 1391: CHC: 1 verification condition(s) proved safe! Enable the model checker option "show proved safe" to see all of them. +// Info 1391: CHC: 2 verification condition(s) proved safe! Enable the model checker option "show proved safe" to see all of them. diff --git a/test/libsolidity/smtCheckerTests/external_calls/external_call_from_constructor_3_trusted.sol b/test/libsolidity/smtCheckerTests/external_calls/external_call_from_constructor_3_trusted.sol index 590664055d6b..0f22100d696d 100644 --- a/test/libsolidity/smtCheckerTests/external_calls/external_call_from_constructor_3_trusted.sol +++ b/test/libsolidity/smtCheckerTests/external_calls/external_call_from_constructor_3_trusted.sol @@ -1,6 +1,6 @@ contract State { function f(uint _x) public pure returns (uint) { - assert(_x < 100); // should fail + assert(_x < 100); // should hold when analyzing only contract C (can fail only when analyzing State as standalone contract) return _x; } } @@ -21,5 +21,4 @@ contract C { // SMTEngine: all // SMTExtCalls: trusted // ---- -// Warning 6328: (69-85): CHC: Assertion violation happens here. -// Info 1391: CHC: 1 verification condition(s) proved safe! Enable the model checker option "show proved safe" to see all of them. +// Info 1391: CHC: 2 verification condition(s) proved safe! Enable the model checker option "show proved safe" to see all of them. diff --git a/test/libsolidity/smtCheckerTests/imports/target_in_imported_contract_analyzed_when_called_from_selection_with_trusted_calls.sol b/test/libsolidity/smtCheckerTests/imports/target_in_imported_contract_analyzed_when_called_from_selection_with_trusted_calls.sol new file mode 100644 index 000000000000..9389f7d93866 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/imports/target_in_imported_contract_analyzed_when_called_from_selection_with_trusted_calls.sol @@ -0,0 +1,11 @@ +==== Source: A.sol ==== +contract A { function a() pure public { assert(false); } } +==== Source: B.sol ==== +import "A.sol"; +contract B { function b(A a) pure public { a.a(); } } +// ==== +// SMTContract: B.sol:B +// SMTEngine: chc +// SMTExtCalls: trusted +// ---- +// Warning 6328: (A.sol:40-53): CHC: Assertion violation happens here.\nCounterexample:\n\na = 0\n\nTransaction trace:\nB.constructor()\nB.b(0)\n A.a() -- trusted external call diff --git a/test/libsolidity/smtCheckerTests/imports/target_in_imported_contract_not_analyzed_when_not_selected_and_not_called_from_selection.sol b/test/libsolidity/smtCheckerTests/imports/target_in_imported_contract_not_analyzed_when_not_selected_and_not_called_from_selection.sol new file mode 100644 index 000000000000..a7c472bbcd1a --- /dev/null +++ b/test/libsolidity/smtCheckerTests/imports/target_in_imported_contract_not_analyzed_when_not_selected_and_not_called_from_selection.sol @@ -0,0 +1,9 @@ +==== Source: A.sol ==== +contract A { function a() pure public { assert(false); } } +==== Source: B.sol ==== +import "A.sol"; +contract B { function b() pure public { } } +// ==== +// SMTContract: B.sol:B +// SMTEngine: chc +// ---- diff --git a/test/libsolidity/smtCheckerTests/loops/for_loop_condition_constant_true_in_first_iteration_and_constant_false_in_second.sol b/test/libsolidity/smtCheckerTests/loops/for_loop_condition_constant_true_in_first_iteration_and_constant_false_in_second.sol new file mode 100644 index 000000000000..7e0a85b9b401 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/loops/for_loop_condition_constant_true_in_first_iteration_and_constant_false_in_second.sol @@ -0,0 +1,10 @@ +contract Test { + function loop() public pure { + for (uint k = 0; (k == 0 ? true : false); k++) { + } + } +} +// ==== +// SMTEngine: bmc +// SMTTargets: constantCondition +// ---- diff --git a/test/libsolidity/smtCheckerTests/loops/while_loop_condition_constant_true_in_first_iteration_and_constant_false_in_second.sol b/test/libsolidity/smtCheckerTests/loops/while_loop_condition_constant_true_in_first_iteration_and_constant_false_in_second.sol new file mode 100644 index 000000000000..b367cb803647 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/loops/while_loop_condition_constant_true_in_first_iteration_and_constant_false_in_second.sol @@ -0,0 +1,12 @@ +contract Test { + function loop() public pure { + uint k = 0; + while (k == 0 ? true : false) { + ++k; + } + } +} +// ==== +// SMTEngine: bmc +// SMTTargets: constantCondition +// ---- diff --git a/test/libsolidity/smtCheckerTests/userTypes/user_type_over_fixed_bytes_can_be_initialized_from_string_literal.sol b/test/libsolidity/smtCheckerTests/userTypes/user_type_over_fixed_bytes_can_be_initialized_from_string_literal.sol new file mode 100644 index 000000000000..fe64541f116e --- /dev/null +++ b/test/libsolidity/smtCheckerTests/userTypes/user_type_over_fixed_bytes_can_be_initialized_from_string_literal.sol @@ -0,0 +1,15 @@ +type MyBytes is bytes2; + +contract C { + MyBytes b = MyBytes.wrap("ab"); + + function check() view public { + assert(MyBytes.unwrap(b) == 0); // should fail + assert(MyBytes.unwrap(b) == 0x6162); // should hold + } +} +// ==== +// SMTEngine: chc +// ---- +// Warning 6328: (118-148): CHC: Assertion violation happens here.\nCounterexample:\n\n\nTransaction trace:\nC.constructor()\nC.check() +// Info 1391: CHC: 1 verification condition(s) proved safe! Enable the model checker option "show proved safe" to see all of them. diff --git a/test/libsolidity/smtCheckerTests/verification_target/target_in_constructor_of_same_source_contract_not_analyzed_when_not_selected_and_not_called_from_selection.sol b/test/libsolidity/smtCheckerTests/verification_target/target_in_constructor_of_same_source_contract_not_analyzed_when_not_selected_and_not_called_from_selection.sol new file mode 100644 index 000000000000..29d8017cc075 --- /dev/null +++ b/test/libsolidity/smtCheckerTests/verification_target/target_in_constructor_of_same_source_contract_not_analyzed_when_not_selected_and_not_called_from_selection.sol @@ -0,0 +1,13 @@ +contract B { + constructor() { fail(); } + + function fail() pure internal { assert(false); } +} + +contract A { + function safe() pure public { } +} +// ==== +// SMTContract: A +// SMTEngine: chc +// ---- diff --git a/test/libsolidity/smtCheckerTests/verification_target/target_in_same_source_contract_not_analyzed_when_not_selected_and_not_called_from_selection.sol b/test/libsolidity/smtCheckerTests/verification_target/target_in_same_source_contract_not_analyzed_when_not_selected_and_not_called_from_selection.sol new file mode 100644 index 000000000000..f9fcdbb18e7c --- /dev/null +++ b/test/libsolidity/smtCheckerTests/verification_target/target_in_same_source_contract_not_analyzed_when_not_selected_and_not_called_from_selection.sol @@ -0,0 +1,11 @@ +contract B { + function fail() pure public { assert(false); } +} + +contract A { + function safe() pure public { } +} +// ==== +// SMTContract: A +// SMTEngine: chc +// ---- diff --git a/test/libyul/ControlFlowGraphTest.cpp b/test/libyul/ControlFlowGraphTest.cpp index c0ab37956e4c..594b2f6c96ee 100644 --- a/test/libyul/ControlFlowGraphTest.cpp +++ b/test/libyul/ControlFlowGraphTest.cpp @@ -29,7 +29,15 @@ #include #ifdef ISOLTEST +#include +#if (BOOST_VERSION < 108800) #include +#else +#define BOOST_PROCESS_VERSION 1 +#include +#include +#include +#endif #endif using namespace solidity; diff --git a/test/libyul/SSAControlFlowGraphTest.cpp b/test/libyul/SSAControlFlowGraphTest.cpp index c23a2ca5faf9..d2acee7bcb85 100644 --- a/test/libyul/SSAControlFlowGraphTest.cpp +++ b/test/libyul/SSAControlFlowGraphTest.cpp @@ -28,7 +28,15 @@ #include #ifdef ISOLTEST +#include +#if (BOOST_VERSION < 108800) #include +#else +#define BOOST_PROCESS_VERSION 1 +#include +#include +#include +#endif #endif using namespace solidity; diff --git a/test/libyul/StackLayoutGeneratorTest.cpp b/test/libyul/StackLayoutGeneratorTest.cpp index eb34eabb1776..0c85b1a7b968 100644 --- a/test/libyul/StackLayoutGeneratorTest.cpp +++ b/test/libyul/StackLayoutGeneratorTest.cpp @@ -33,7 +33,15 @@ #include #ifdef ISOLTEST +#include +#if (BOOST_VERSION < 108800) #include +#else +#define BOOST_PROCESS_VERSION 1 +#include +#include +#include +#endif #endif using namespace solidity; diff --git a/test/libyul/YulInterpreterTest.cpp b/test/libyul/YulInterpreterTest.cpp index d97211b9761d..42e0e7c6f543 100644 --- a/test/libyul/YulInterpreterTest.cpp +++ b/test/libyul/YulInterpreterTest.cpp @@ -80,8 +80,7 @@ std::string YulInterpreterTest::interpret(std::shared_ptr const& _ { Interpreter::run( state, - *_object->dialect(), - _object->code()->root(), + *_object->code(), /*disableExternalCalls=*/ !m_simulateExternalCallsToSelf, /*disableMemoryTracing=*/ false ); diff --git a/test/libyul/objectCompiler/eof/256_subcontainers.yul b/test/libyul/objectCompiler/eof/256_subcontainers.yul index fac0f7b5df29..9306dcbbdeb3 100644 --- a/test/libyul/objectCompiler/eof/256_subcontainers.yul +++ b/test/libyul/objectCompiler/eof/256_subcontainers.yul @@ -2823,8 +2823,6 @@ object "a" { // dup1 // eofcreate{255} // /* "source":12286:12321 */ -// pop -// /* "source":22:12337 */ // stop // stop // @@ -4107,6 +4105,6 @@ object "a" { // /* "source":24612:24619 */ // stop // } -// Bytecode: ef00010100040200010701030100001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001404000000008000045f808080ec00505f808080ec01505f808080ec02505f808080ec03505f808080ec04505f808080ec05505f808080ec06505f808080ec07505f808080ec08505f808080ec09505f808080ec0a505f808080ec0b505f808080ec0c505f808080ec0d505f808080ec0e505f808080ec0f505f808080ec10505f808080ec11505f808080ec12505f808080ec13505f808080ec14505f808080ec15505f808080ec16505f808080ec17505f808080ec18505f808080ec19505f808080ec1a505f808080ec1b505f808080ec1c505f808080ec1d505f808080ec1e505f808080ec1f505f808080ec20505f808080ec21505f808080ec22505f808080ec23505f808080ec24505f808080ec25505f808080ec26505f808080ec27505f808080ec28505f808080ec29505f808080ec2a505f808080ec2b505f808080ec2c505f808080ec2d505f808080ec2e505f808080ec2f505f808080ec30505f808080ec31505f808080ec32505f808080ec33505f808080ec34505f808080ec35505f808080ec36505f808080ec37505f808080ec38505f808080ec39505f808080ec3a505f808080ec3b505f808080ec3c505f808080ec3d505f808080ec3e505f808080ec3f505f808080ec40505f808080ec41505f808080ec42505f808080ec43505f808080ec44505f808080ec45505f808080ec46505f808080ec47505f808080ec48505f808080ec49505f808080ec4a505f808080ec4b505f808080ec4c505f808080ec4d505f808080ec4e505f808080ec4f505f808080ec50505f808080ec51505f808080ec52505f808080ec53505f808080ec54505f808080ec55505f808080ec56505f808080ec57505f808080ec58505f808080ec59505f808080ec5a505f808080ec5b505f808080ec5c505f808080ec5d505f808080ec5e505f808080ec5f505f808080ec60505f808080ec61505f808080ec62505f808080ec63505f808080ec64505f808080ec65505f808080ec66505f808080ec67505f808080ec68505f808080ec69505f808080ec6a505f808080ec6b505f808080ec6c505f808080ec6d505f808080ec6e505f808080ec6f505f808080ec70505f808080ec71505f808080ec72505f808080ec73505f808080ec74505f808080ec75505f808080ec76505f808080ec77505f808080ec78505f808080ec79505f808080ec7a505f808080ec7b505f808080ec7c505f808080ec7d505f808080ec7e505f808080ec7f505f808080ec80505f808080ec81505f808080ec82505f808080ec83505f808080ec84505f808080ec85505f808080ec86505f808080ec87505f808080ec88505f808080ec89505f808080ec8a505f808080ec8b505f808080ec8c505f808080ec8d505f808080ec8e505f808080ec8f505f808080ec90505f808080ec91505f808080ec92505f808080ec93505f808080ec94505f808080ec95505f808080ec96505f808080ec97505f808080ec98505f808080ec99505f808080ec9a505f808080ec9b505f808080ec9c505f808080ec9d505f808080ec9e505f808080ec9f505f808080eca0505f808080eca1505f808080eca2505f808080eca3505f808080eca4505f808080eca5505f808080eca6505f808080eca7505f808080eca8505f808080eca9505f808080ecaa505f808080ecab505f808080ecac505f808080ecad505f808080ecae505f808080ecaf505f808080ecb0505f808080ecb1505f808080ecb2505f808080ecb3505f808080ecb4505f808080ecb5505f808080ecb6505f808080ecb7505f808080ecb8505f808080ecb9505f808080ecba505f808080ecbb505f808080ecbc505f808080ecbd505f808080ecbe505f808080ecbf505f808080ecc0505f808080ecc1505f808080ecc2505f808080ecc3505f808080ecc4505f808080ecc5505f808080ecc6505f808080ecc7505f808080ecc8505f808080ecc9505f808080ecca505f808080eccb505f808080eccc505f808080eccd505f808080ecce505f808080eccf505f808080ecd0505f808080ecd1505f808080ecd2505f808080ecd3505f808080ecd4505f808080ecd5505f808080ecd6505f808080ecd7505f808080ecd8505f808080ecd9505f808080ecda505f808080ecdb505f808080ecdc505f808080ecdd505f808080ecde505f808080ecdf505f808080ece0505f808080ece1505f808080ece2505f808080ece3505f808080ece4505f808080ece5505f808080ece6505f808080ece7505f808080ece8505f808080ece9505f808080ecea505f808080eceb505f808080ecec505f808080eced505f808080ecee505f808080ecef505f808080ecf0505f808080ecf1505f808080ecf2505f808080ecf3505f808080ecf4505f808080ecf5505f808080ecf6505f808080ecf7505f808080ecf8505f808080ecf9505f808080ecfa505f808080ecfb505f808080ecfc505f808080ecfd505f808080ecfe505f808080ecff5000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000 -// Opcodes: 0xEF STOP ADD ADD STOP DIV MUL STOP ADD SMOD ADD SUB ADD STOP STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ DIV STOP STOP STOP STOP DUP1 STOP DIV PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x0 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x1 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x2 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x3 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x4 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x5 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x6 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x7 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x8 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x9 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x10 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x11 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x12 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x13 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x14 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x15 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x16 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x17 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x18 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x19 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x1A POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x1B POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x1C POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x1D POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x1E POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x1F POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x20 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x21 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x22 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x23 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x24 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x25 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x26 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x27 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x28 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x29 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x2A POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x2B POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x2C POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x2D POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x2E POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x2F POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x30 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x31 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x32 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x33 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x34 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x35 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x36 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x37 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x38 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x39 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x3A POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x3B POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x3C POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x3D POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x3E POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x3F POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x40 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x41 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x42 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x43 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x44 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x45 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x46 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x47 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x48 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x49 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x4A POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x4B POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x4C POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x4D POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x4E POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x4F POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x50 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x51 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x52 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x53 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x54 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x55 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x56 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x57 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x58 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x59 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x5A POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x5B POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x5C POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x5D POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x5E POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x5F POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x60 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x61 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x62 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x63 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x64 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x65 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x66 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x67 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x68 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x69 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x6A POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x6B POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x6C POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x6D POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x6E POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x6F POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x70 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x71 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x72 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x73 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x74 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x75 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x76 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x77 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x78 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x79 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x7A POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x7B POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x7C POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x7D POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x7E POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x7F POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x80 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x81 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x82 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x83 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x84 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x85 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x86 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x87 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x88 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x89 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x8A POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x8B POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x8C POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x8D POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x8E POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x8F POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x90 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x91 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x92 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x93 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x94 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x95 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x96 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x97 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x98 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x99 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x9A POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x9B POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x9C POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x9D POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x9E POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x9F POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA0 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA1 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA2 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA3 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA4 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA5 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA6 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA7 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA8 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA9 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xAA POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xAB POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xAC POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xAD POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xAE POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xAF POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB0 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB1 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB2 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB3 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB4 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB5 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB6 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB7 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB8 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB9 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xBA POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xBB POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xBC POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xBD POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xBE POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xBF POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC0 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC1 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC2 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC3 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC4 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC5 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC6 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC7 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC8 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC9 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xCA POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xCB POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xCC POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xCD POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xCE POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xCF POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD0 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD1 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD2 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD3 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD4 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD5 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD6 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD7 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD8 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD9 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xDA POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xDB POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xDC POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xDD POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xDE POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xDF POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE0 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE1 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE2 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE3 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE4 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE5 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE6 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE7 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE8 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE9 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xEA POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xEB POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xEC POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xED POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xEE POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xEF POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF0 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF1 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF2 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF3 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF4 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF5 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF6 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF7 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF8 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF9 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xFA POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xFB POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xFC POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xFD POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xFE POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xFF POP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP -// SourceMappings: 78:1:0:-:0;50:30;;;;46:35;126:1;98:30;;;;94:35;174:1;146:30;;;;142:35;222:1;194:30;;;;190:35;270:1;242:30;;;;238:35;318:1;290:30;;;;286:35;366:1;338:30;;;;334:35;414:1;386:30;;;;382:35;462:1;434:30;;;;430:35;510:1;482:30;;;;478:35;558:1;530:30;;;;526:35;606:1;578:30;;;;574:35;654:1;626:30;;;;622:35;702:1;674:30;;;;670:35;750:1;722:30;;;;718:35;798:1;770:30;;;;766:35;846:1;818:30;;;;814:35;894:1;866:30;;;;862:35;942:1;914:30;;;;910:35;990:1;962:30;;;;958:35;1038:1;1010:30;;;;1006:35;1086:1;1058:30;;;;1054:35;1134:1;1106:30;;;;1102:35;1182:1;1154:30;;;;1150:35;1230:1;1202:30;;;;1198:35;1278:1;1250:30;;;;1246:35;1326:1;1298:30;;;;1294:35;1374:1;1346:30;;;;1342:35;1422:1;1394:30;;;;1390:35;1470:1;1442:30;;;;1438:35;1518:1;1490:30;;;;1486:35;1566:1;1538:30;;;;1534:35;1614:1;1586:30;;;;1582:35;1662:1;1634:30;;;;1630:35;1710:1;1682:30;;;;1678:35;1758:1;1730:30;;;;1726:35;1806:1;1778:30;;;;1774:35;1854:1;1826:30;;;;1822:35;1902:1;1874:30;;;;1870:35;1950:1;1922:30;;;;1918:35;1998:1;1970:30;;;;1966:35;2046:1;2018:30;;;;2014:35;2094:1;2066:30;;;;2062:35;2142:1;2114:30;;;;2110:35;2190:1;2162:30;;;;2158:35;2238:1;2210:30;;;;2206:35;2286:1;2258:30;;;;2254:35;2334:1;2306:30;;;;2302:35;2382:1;2354:30;;;;2350:35;2430:1;2402:30;;;;2398:35;2478:1;2450:30;;;;2446:35;2526:1;2498:30;;;;2494:35;2574:1;2546:30;;;;2542:35;2622:1;2594:30;;;;2590:35;2670:1;2642:30;;;;2638:35;2718:1;2690:30;;;;2686:35;2766:1;2738:30;;;;2734:35;2814:1;2786:30;;;;2782:35;2862:1;2834:30;;;;2830:35;2910:1;2882:30;;;;2878:35;2958:1;2930:30;;;;2926:35;3006:1;2978:30;;;;2974:35;3054:1;3026:30;;;;3022:35;3102:1;3074:30;;;;3070:35;3150:1;3122:30;;;;3118:35;3198:1;3170:30;;;;3166:35;3246:1;3218:30;;;;3214:35;3294:1;3266:30;;;;3262:35;3342:1;3314:30;;;;3310:35;3390:1;3362:30;;;;3358:35;3438:1;3410:30;;;;3406:35;3486:1;3458:30;;;;3454:35;3534:1;3506:30;;;;3502:35;3582:1;3554:30;;;;3550:35;3630:1;3602:30;;;;3598:35;3678:1;3650:30;;;;3646:35;3726:1;3698:30;;;;3694:35;3774:1;3746:30;;;;3742:35;3822:1;3794:30;;;;3790:35;3870:1;3842:30;;;;3838:35;3918:1;3890:30;;;;3886:35;3966:1;3938:30;;;;3934:35;4014:1;3986:30;;;;3982:35;4062:1;4034:30;;;;4030:35;4110:1;4082:30;;;;4078:35;4158:1;4130:30;;;;4126:35;4206:1;4178:30;;;;4174:35;4254:1;4226:30;;;;4222:35;4302:1;4274:30;;;;4270:35;4350:1;4322:30;;;;4318:35;4398:1;4370:30;;;;4366:35;4446:1;4418:30;;;;4414:35;4494:1;4466:30;;;;4462:35;4542:1;4514:30;;;;4510:35;4590:1;4562:30;;;;4558:35;4638:1;4610:30;;;;4606:35;4686:1;4658:30;;;;4654:35;4734:1;4706:30;;;;4702:35;4782:1;4754:30;;;;4750:35;4830:1;4802:30;;;;4798:35;4878:1;4850:30;;;;4846:35;4926:1;4898:30;;;;4894:35;4974:1;4946:30;;;;4942:35;5022:1;4994:30;;;;4990:35;5070:1;5042:30;;;;5038:35;5118:1;5090:30;;;;5086:35;5166:1;5138:30;;;;5134:35;5214:1;5186:30;;;;5182:35;5262:1;5234:30;;;;5230:35;5310:1;5282:30;;;;5278:35;5358:1;5330:30;;;;5326:35;5406:1;5378:30;;;;5374:35;5454:1;5426:30;;;;5422:35;5502:1;5474:30;;;;5470:35;5550:1;5522:30;;;;5518:35;5598:1;5570:30;;;;5566:35;5646:1;5618:30;;;;5614:35;5694:1;5666:30;;;;5662:35;5742:1;5714:30;;;;5710:35;5790:1;5762:30;;;;5758:35;5838:1;5810:30;;;;5806:35;5886:1;5858:30;;;;5854:35;5934:1;5906:30;;;;5902:35;5982:1;5954:30;;;;5950:35;6030:1;6002:30;;;;5998:35;6078:1;6050:30;;;;6046:35;6126:1;6098:30;;;;6094:35;6174:1;6146:30;;;;6142:35;6222:1;6194:30;;;;6190:35;6270:1;6242:30;;;;6238:35;6318:1;6290:30;;;;6286:35;6366:1;6338:30;;;;6334:35;6414:1;6386:30;;;;6382:35;6462:1;6434:30;;;;6430:35;6510:1;6482:30;;;;6478:35;6558:1;6530:30;;;;6526:35;6606:1;6578:30;;;;6574:35;6654:1;6626:30;;;;6622:35;6702:1;6674:30;;;;6670:35;6750:1;6722:30;;;;6718:35;6798:1;6770:30;;;;6766:35;6846:1;6818:30;;;;6814:35;6894:1;6866:30;;;;6862:35;6942:1;6914:30;;;;6910:35;6990:1;6962:30;;;;6958:35;7038:1;7010:30;;;;7006:35;7086:1;7058:30;;;;7054:35;7134:1;7106:30;;;;7102:35;7182:1;7154:30;;;;7150:35;7230:1;7202:30;;;;7198:35;7278:1;7250:30;;;;7246:35;7326:1;7298:30;;;;7294:35;7374:1;7346:30;;;;7342:35;7422:1;7394:30;;;;7390:35;7470:1;7442:30;;;;7438:35;7518:1;7490:30;;;;7486:35;7566:1;7538:30;;;;7534:35;7614:1;7586:30;;;;7582:35;7662:1;7634:30;;;;7630:35;7710:1;7682:30;;;;7678:35;7758:1;7730:30;;;;7726:35;7806:1;7778:30;;;;7774:35;7854:1;7826:30;;;;7822:35;7902:1;7874:30;;;;7870:35;7950:1;7922:30;;;;7918:35;7998:1;7970:30;;;;7966:35;8046:1;8018:30;;;;8014:35;8094:1;8066:30;;;;8062:35;8142:1;8114:30;;;;8110:35;8190:1;8162:30;;;;8158:35;8238:1;8210:30;;;;8206:35;8286:1;8258:30;;;;8254:35;8334:1;8306:30;;;;8302:35;8382:1;8354:30;;;;8350:35;8430:1;8402:30;;;;8398:35;8478:1;8450:30;;;;8446:35;8526:1;8498:30;;;;8494:35;8574:1;8546:30;;;;8542:35;8622:1;8594:30;;;;8590:35;8670:1;8642:30;;;;8638:35;8718:1;8690:30;;;;8686:35;8766:1;8738:30;;;;8734:35;8814:1;8786:30;;;;8782:35;8862:1;8834:30;;;;8830:35;8910:1;8882:30;;;;8878:35;8958:1;8930:30;;;;8926:35;9006:1;8978:30;;;;8974:35;9054:1;9026:30;;;;9022:35;9102:1;9074:30;;;;9070:35;9150:1;9122:30;;;;9118:35;9198:1;9170:30;;;;9166:35;9246:1;9218:30;;;;9214:35;9294:1;9266:30;;;;9262:35;9342:1;9314:30;;;;9310:35;9390:1;9362:30;;;;9358:35;9438:1;9410:30;;;;9406:35;9486:1;9458:30;;;;9454:35;9534:1;9506:30;;;;9502:35;9582:1;9554:30;;;;9550:35;9630:1;9602:30;;;;9598:35;9678:1;9650:30;;;;9646:35;9726:1;9698:30;;;;9694:35;9774:1;9746:30;;;;9742:35;9822:1;9794:30;;;;9790:35;9870:1;9842:30;;;;9838:35;9918:1;9890:30;;;;9886:35;9966:1;9938:30;;;;9934:35;10014:1;9986:30;;;;9982:35;10062:1;10034:30;;;;10030:35;10110:1;10082:30;;;;10078:35;10158:1;10130:30;;;;10126:35;10206:1;10178:30;;;;10174:35;10254:1;10226:30;;;;10222:35;10302:1;10274:30;;;;10270:35;10350:1;10322:30;;;;10318:35;10398:1;10370:30;;;;10366:35;10446:1;10418:30;;;;10414:35;10494:1;10466:30;;;;10462:35;10542:1;10514:30;;;;10510:35;10590:1;10562:30;;;;10558:35;10638:1;10610:30;;;;10606:35;10686:1;10658:30;;;;10654:35;10734:1;10706:30;;;;10702:35;10782:1;10754:30;;;;10750:35;10830:1;10802:30;;;;10798:35;10878:1;10850:30;;;;10846:35;10926:1;10898:30;;;;10894:35;10974:1;10946:30;;;;10942:35;11022:1;10994:30;;;;10990:35;11070:1;11042:30;;;;11038:35;11118:1;11090:30;;;;11086:35;11166:1;11138:30;;;;11134:35;11214:1;11186:30;;;;11182:35;11262:1;11234:30;;;;11230:35;11310:1;11282:30;;;;11278:35;11358:1;11330:30;;;;11326:35;11406:1;11378:30;;;;11374:35;11454:1;11426:30;;;;11422:35;11502:1;11474:30;;;;11470:35;11550:1;11522:30;;;;11518:35;11598:1;11570:30;;;;11566:35;11646:1;11618:30;;;;11614:35;11694:1;11666:30;;;;11662:35;11742:1;11714:30;;;;11710:35;11790:1;11762:30;;;;11758:35;11838:1;11810:30;;;;11806:35;11886:1;11858:30;;;;11854:35;11934:1;11906:30;;;;11902:35;11982:1;11954:30;;;;11950:35;12030:1;12002:30;;;;11998:35;12078:1;12050:30;;;;12046:35;12126:1;12098:30;;;;12094:35;12174:1;12146:30;;;;12142:35;12222:1;12194:30;;;;12190:35;12270:1;12242:30;;;;12238:35;12318:1;12290:30;;;;12286:35;22:12315 +// Bytecode: ef00010100040200010700030100001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001400140014001404000000008000045f808080ec00505f808080ec01505f808080ec02505f808080ec03505f808080ec04505f808080ec05505f808080ec06505f808080ec07505f808080ec08505f808080ec09505f808080ec0a505f808080ec0b505f808080ec0c505f808080ec0d505f808080ec0e505f808080ec0f505f808080ec10505f808080ec11505f808080ec12505f808080ec13505f808080ec14505f808080ec15505f808080ec16505f808080ec17505f808080ec18505f808080ec19505f808080ec1a505f808080ec1b505f808080ec1c505f808080ec1d505f808080ec1e505f808080ec1f505f808080ec20505f808080ec21505f808080ec22505f808080ec23505f808080ec24505f808080ec25505f808080ec26505f808080ec27505f808080ec28505f808080ec29505f808080ec2a505f808080ec2b505f808080ec2c505f808080ec2d505f808080ec2e505f808080ec2f505f808080ec30505f808080ec31505f808080ec32505f808080ec33505f808080ec34505f808080ec35505f808080ec36505f808080ec37505f808080ec38505f808080ec39505f808080ec3a505f808080ec3b505f808080ec3c505f808080ec3d505f808080ec3e505f808080ec3f505f808080ec40505f808080ec41505f808080ec42505f808080ec43505f808080ec44505f808080ec45505f808080ec46505f808080ec47505f808080ec48505f808080ec49505f808080ec4a505f808080ec4b505f808080ec4c505f808080ec4d505f808080ec4e505f808080ec4f505f808080ec50505f808080ec51505f808080ec52505f808080ec53505f808080ec54505f808080ec55505f808080ec56505f808080ec57505f808080ec58505f808080ec59505f808080ec5a505f808080ec5b505f808080ec5c505f808080ec5d505f808080ec5e505f808080ec5f505f808080ec60505f808080ec61505f808080ec62505f808080ec63505f808080ec64505f808080ec65505f808080ec66505f808080ec67505f808080ec68505f808080ec69505f808080ec6a505f808080ec6b505f808080ec6c505f808080ec6d505f808080ec6e505f808080ec6f505f808080ec70505f808080ec71505f808080ec72505f808080ec73505f808080ec74505f808080ec75505f808080ec76505f808080ec77505f808080ec78505f808080ec79505f808080ec7a505f808080ec7b505f808080ec7c505f808080ec7d505f808080ec7e505f808080ec7f505f808080ec80505f808080ec81505f808080ec82505f808080ec83505f808080ec84505f808080ec85505f808080ec86505f808080ec87505f808080ec88505f808080ec89505f808080ec8a505f808080ec8b505f808080ec8c505f808080ec8d505f808080ec8e505f808080ec8f505f808080ec90505f808080ec91505f808080ec92505f808080ec93505f808080ec94505f808080ec95505f808080ec96505f808080ec97505f808080ec98505f808080ec99505f808080ec9a505f808080ec9b505f808080ec9c505f808080ec9d505f808080ec9e505f808080ec9f505f808080eca0505f808080eca1505f808080eca2505f808080eca3505f808080eca4505f808080eca5505f808080eca6505f808080eca7505f808080eca8505f808080eca9505f808080ecaa505f808080ecab505f808080ecac505f808080ecad505f808080ecae505f808080ecaf505f808080ecb0505f808080ecb1505f808080ecb2505f808080ecb3505f808080ecb4505f808080ecb5505f808080ecb6505f808080ecb7505f808080ecb8505f808080ecb9505f808080ecba505f808080ecbb505f808080ecbc505f808080ecbd505f808080ecbe505f808080ecbf505f808080ecc0505f808080ecc1505f808080ecc2505f808080ecc3505f808080ecc4505f808080ecc5505f808080ecc6505f808080ecc7505f808080ecc8505f808080ecc9505f808080ecca505f808080eccb505f808080eccc505f808080eccd505f808080ecce505f808080eccf505f808080ecd0505f808080ecd1505f808080ecd2505f808080ecd3505f808080ecd4505f808080ecd5505f808080ecd6505f808080ecd7505f808080ecd8505f808080ecd9505f808080ecda505f808080ecdb505f808080ecdc505f808080ecdd505f808080ecde505f808080ecdf505f808080ece0505f808080ece1505f808080ece2505f808080ece3505f808080ece4505f808080ece5505f808080ece6505f808080ece7505f808080ece8505f808080ece9505f808080ecea505f808080eceb505f808080ecec505f808080eced505f808080ecee505f808080ecef505f808080ecf0505f808080ecf1505f808080ecf2505f808080ecf3505f808080ecf4505f808080ecf5505f808080ecf6505f808080ecf7505f808080ecf8505f808080ecf9505f808080ecfa505f808080ecfb505f808080ecfc505f808080ecfd505f808080ecfe505f808080ecff00ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000ef00010100040200010001040000000080000000 +// Opcodes: 0xEF STOP ADD ADD STOP DIV MUL STOP ADD SMOD STOP SUB ADD STOP STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ STOP EQ DIV STOP STOP STOP STOP DUP1 STOP DIV PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x0 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x1 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x2 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x3 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x4 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x5 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x6 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x7 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x8 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x9 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x10 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x11 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x12 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x13 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x14 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x15 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x16 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x17 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x18 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x19 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x1A POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x1B POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x1C POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x1D POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x1E POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x1F POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x20 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x21 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x22 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x23 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x24 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x25 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x26 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x27 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x28 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x29 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x2A POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x2B POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x2C POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x2D POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x2E POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x2F POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x30 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x31 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x32 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x33 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x34 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x35 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x36 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x37 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x38 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x39 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x3A POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x3B POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x3C POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x3D POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x3E POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x3F POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x40 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x41 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x42 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x43 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x44 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x45 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x46 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x47 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x48 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x49 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x4A POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x4B POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x4C POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x4D POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x4E POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x4F POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x50 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x51 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x52 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x53 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x54 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x55 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x56 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x57 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x58 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x59 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x5A POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x5B POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x5C POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x5D POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x5E POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x5F POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x60 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x61 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x62 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x63 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x64 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x65 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x66 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x67 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x68 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x69 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x6A POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x6B POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x6C POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x6D POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x6E POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x6F POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x70 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x71 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x72 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x73 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x74 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x75 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x76 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x77 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x78 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x79 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x7A POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x7B POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x7C POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x7D POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x7E POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x7F POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x80 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x81 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x82 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x83 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x84 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x85 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x86 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x87 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x88 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x89 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x8A POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x8B POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x8C POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x8D POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x8E POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x8F POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x90 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x91 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x92 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x93 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x94 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x95 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x96 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x97 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x98 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x99 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x9A POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x9B POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x9C POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x9D POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x9E POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0x9F POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA0 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA1 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA2 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA3 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA4 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA5 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA6 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA7 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA8 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xA9 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xAA POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xAB POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xAC POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xAD POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xAE POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xAF POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB0 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB1 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB2 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB3 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB4 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB5 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB6 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB7 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB8 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xB9 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xBA POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xBB POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xBC POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xBD POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xBE POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xBF POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC0 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC1 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC2 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC3 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC4 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC5 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC6 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC7 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC8 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xC9 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xCA POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xCB POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xCC POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xCD POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xCE POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xCF POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD0 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD1 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD2 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD3 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD4 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD5 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD6 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD7 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD8 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xD9 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xDA POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xDB POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xDC POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xDD POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xDE POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xDF POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE0 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE1 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE2 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE3 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE4 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE5 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE6 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE7 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE8 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xE9 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xEA POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xEB POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xEC POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xED POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xEE POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xEF POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF0 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF1 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF2 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF3 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF4 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF5 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF6 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF7 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF8 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xF9 POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xFA POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xFB POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xFC POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xFD POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xFE POP PUSH0 DUP1 DUP1 DUP1 EOFCREATE 0xFF STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP 0xEF STOP ADD ADD STOP DIV MUL STOP ADD STOP ADD DIV STOP STOP STOP STOP DUP1 STOP STOP STOP +// SourceMappings: 78:1:0:-:0;50:30;;;;46:35;126:1;98:30;;;;94:35;174:1;146:30;;;;142:35;222:1;194:30;;;;190:35;270:1;242:30;;;;238:35;318:1;290:30;;;;286:35;366:1;338:30;;;;334:35;414:1;386:30;;;;382:35;462:1;434:30;;;;430:35;510:1;482:30;;;;478:35;558:1;530:30;;;;526:35;606:1;578:30;;;;574:35;654:1;626:30;;;;622:35;702:1;674:30;;;;670:35;750:1;722:30;;;;718:35;798:1;770:30;;;;766:35;846:1;818:30;;;;814:35;894:1;866:30;;;;862:35;942:1;914:30;;;;910:35;990:1;962:30;;;;958:35;1038:1;1010:30;;;;1006:35;1086:1;1058:30;;;;1054:35;1134:1;1106:30;;;;1102:35;1182:1;1154:30;;;;1150:35;1230:1;1202:30;;;;1198:35;1278:1;1250:30;;;;1246:35;1326:1;1298:30;;;;1294:35;1374:1;1346:30;;;;1342:35;1422:1;1394:30;;;;1390:35;1470:1;1442:30;;;;1438:35;1518:1;1490:30;;;;1486:35;1566:1;1538:30;;;;1534:35;1614:1;1586:30;;;;1582:35;1662:1;1634:30;;;;1630:35;1710:1;1682:30;;;;1678:35;1758:1;1730:30;;;;1726:35;1806:1;1778:30;;;;1774:35;1854:1;1826:30;;;;1822:35;1902:1;1874:30;;;;1870:35;1950:1;1922:30;;;;1918:35;1998:1;1970:30;;;;1966:35;2046:1;2018:30;;;;2014:35;2094:1;2066:30;;;;2062:35;2142:1;2114:30;;;;2110:35;2190:1;2162:30;;;;2158:35;2238:1;2210:30;;;;2206:35;2286:1;2258:30;;;;2254:35;2334:1;2306:30;;;;2302:35;2382:1;2354:30;;;;2350:35;2430:1;2402:30;;;;2398:35;2478:1;2450:30;;;;2446:35;2526:1;2498:30;;;;2494:35;2574:1;2546:30;;;;2542:35;2622:1;2594:30;;;;2590:35;2670:1;2642:30;;;;2638:35;2718:1;2690:30;;;;2686:35;2766:1;2738:30;;;;2734:35;2814:1;2786:30;;;;2782:35;2862:1;2834:30;;;;2830:35;2910:1;2882:30;;;;2878:35;2958:1;2930:30;;;;2926:35;3006:1;2978:30;;;;2974:35;3054:1;3026:30;;;;3022:35;3102:1;3074:30;;;;3070:35;3150:1;3122:30;;;;3118:35;3198:1;3170:30;;;;3166:35;3246:1;3218:30;;;;3214:35;3294:1;3266:30;;;;3262:35;3342:1;3314:30;;;;3310:35;3390:1;3362:30;;;;3358:35;3438:1;3410:30;;;;3406:35;3486:1;3458:30;;;;3454:35;3534:1;3506:30;;;;3502:35;3582:1;3554:30;;;;3550:35;3630:1;3602:30;;;;3598:35;3678:1;3650:30;;;;3646:35;3726:1;3698:30;;;;3694:35;3774:1;3746:30;;;;3742:35;3822:1;3794:30;;;;3790:35;3870:1;3842:30;;;;3838:35;3918:1;3890:30;;;;3886:35;3966:1;3938:30;;;;3934:35;4014:1;3986:30;;;;3982:35;4062:1;4034:30;;;;4030:35;4110:1;4082:30;;;;4078:35;4158:1;4130:30;;;;4126:35;4206:1;4178:30;;;;4174:35;4254:1;4226:30;;;;4222:35;4302:1;4274:30;;;;4270:35;4350:1;4322:30;;;;4318:35;4398:1;4370:30;;;;4366:35;4446:1;4418:30;;;;4414:35;4494:1;4466:30;;;;4462:35;4542:1;4514:30;;;;4510:35;4590:1;4562:30;;;;4558:35;4638:1;4610:30;;;;4606:35;4686:1;4658:30;;;;4654:35;4734:1;4706:30;;;;4702:35;4782:1;4754:30;;;;4750:35;4830:1;4802:30;;;;4798:35;4878:1;4850:30;;;;4846:35;4926:1;4898:30;;;;4894:35;4974:1;4946:30;;;;4942:35;5022:1;4994:30;;;;4990:35;5070:1;5042:30;;;;5038:35;5118:1;5090:30;;;;5086:35;5166:1;5138:30;;;;5134:35;5214:1;5186:30;;;;5182:35;5262:1;5234:30;;;;5230:35;5310:1;5282:30;;;;5278:35;5358:1;5330:30;;;;5326:35;5406:1;5378:30;;;;5374:35;5454:1;5426:30;;;;5422:35;5502:1;5474:30;;;;5470:35;5550:1;5522:30;;;;5518:35;5598:1;5570:30;;;;5566:35;5646:1;5618:30;;;;5614:35;5694:1;5666:30;;;;5662:35;5742:1;5714:30;;;;5710:35;5790:1;5762:30;;;;5758:35;5838:1;5810:30;;;;5806:35;5886:1;5858:30;;;;5854:35;5934:1;5906:30;;;;5902:35;5982:1;5954:30;;;;5950:35;6030:1;6002:30;;;;5998:35;6078:1;6050:30;;;;6046:35;6126:1;6098:30;;;;6094:35;6174:1;6146:30;;;;6142:35;6222:1;6194:30;;;;6190:35;6270:1;6242:30;;;;6238:35;6318:1;6290:30;;;;6286:35;6366:1;6338:30;;;;6334:35;6414:1;6386:30;;;;6382:35;6462:1;6434:30;;;;6430:35;6510:1;6482:30;;;;6478:35;6558:1;6530:30;;;;6526:35;6606:1;6578:30;;;;6574:35;6654:1;6626:30;;;;6622:35;6702:1;6674:30;;;;6670:35;6750:1;6722:30;;;;6718:35;6798:1;6770:30;;;;6766:35;6846:1;6818:30;;;;6814:35;6894:1;6866:30;;;;6862:35;6942:1;6914:30;;;;6910:35;6990:1;6962:30;;;;6958:35;7038:1;7010:30;;;;7006:35;7086:1;7058:30;;;;7054:35;7134:1;7106:30;;;;7102:35;7182:1;7154:30;;;;7150:35;7230:1;7202:30;;;;7198:35;7278:1;7250:30;;;;7246:35;7326:1;7298:30;;;;7294:35;7374:1;7346:30;;;;7342:35;7422:1;7394:30;;;;7390:35;7470:1;7442:30;;;;7438:35;7518:1;7490:30;;;;7486:35;7566:1;7538:30;;;;7534:35;7614:1;7586:30;;;;7582:35;7662:1;7634:30;;;;7630:35;7710:1;7682:30;;;;7678:35;7758:1;7730:30;;;;7726:35;7806:1;7778:30;;;;7774:35;7854:1;7826:30;;;;7822:35;7902:1;7874:30;;;;7870:35;7950:1;7922:30;;;;7918:35;7998:1;7970:30;;;;7966:35;8046:1;8018:30;;;;8014:35;8094:1;8066:30;;;;8062:35;8142:1;8114:30;;;;8110:35;8190:1;8162:30;;;;8158:35;8238:1;8210:30;;;;8206:35;8286:1;8258:30;;;;8254:35;8334:1;8306:30;;;;8302:35;8382:1;8354:30;;;;8350:35;8430:1;8402:30;;;;8398:35;8478:1;8450:30;;;;8446:35;8526:1;8498:30;;;;8494:35;8574:1;8546:30;;;;8542:35;8622:1;8594:30;;;;8590:35;8670:1;8642:30;;;;8638:35;8718:1;8690:30;;;;8686:35;8766:1;8738:30;;;;8734:35;8814:1;8786:30;;;;8782:35;8862:1;8834:30;;;;8830:35;8910:1;8882:30;;;;8878:35;8958:1;8930:30;;;;8926:35;9006:1;8978:30;;;;8974:35;9054:1;9026:30;;;;9022:35;9102:1;9074:30;;;;9070:35;9150:1;9122:30;;;;9118:35;9198:1;9170:30;;;;9166:35;9246:1;9218:30;;;;9214:35;9294:1;9266:30;;;;9262:35;9342:1;9314:30;;;;9310:35;9390:1;9362:30;;;;9358:35;9438:1;9410:30;;;;9406:35;9486:1;9458:30;;;;9454:35;9534:1;9506:30;;;;9502:35;9582:1;9554:30;;;;9550:35;9630:1;9602:30;;;;9598:35;9678:1;9650:30;;;;9646:35;9726:1;9698:30;;;;9694:35;9774:1;9746:30;;;;9742:35;9822:1;9794:30;;;;9790:35;9870:1;9842:30;;;;9838:35;9918:1;9890:30;;;;9886:35;9966:1;9938:30;;;;9934:35;10014:1;9986:30;;;;9982:35;10062:1;10034:30;;;;10030:35;10110:1;10082:30;;;;10078:35;10158:1;10130:30;;;;10126:35;10206:1;10178:30;;;;10174:35;10254:1;10226:30;;;;10222:35;10302:1;10274:30;;;;10270:35;10350:1;10322:30;;;;10318:35;10398:1;10370:30;;;;10366:35;10446:1;10418:30;;;;10414:35;10494:1;10466:30;;;;10462:35;10542:1;10514:30;;;;10510:35;10590:1;10562:30;;;;10558:35;10638:1;10610:30;;;;10606:35;10686:1;10658:30;;;;10654:35;10734:1;10706:30;;;;10702:35;10782:1;10754:30;;;;10750:35;10830:1;10802:30;;;;10798:35;10878:1;10850:30;;;;10846:35;10926:1;10898:30;;;;10894:35;10974:1;10946:30;;;;10942:35;11022:1;10994:30;;;;10990:35;11070:1;11042:30;;;;11038:35;11118:1;11090:30;;;;11086:35;11166:1;11138:30;;;;11134:35;11214:1;11186:30;;;;11182:35;11262:1;11234:30;;;;11230:35;11310:1;11282:30;;;;11278:35;11358:1;11330:30;;;;11326:35;11406:1;11378:30;;;;11374:35;11454:1;11426:30;;;;11422:35;11502:1;11474:30;;;;11470:35;11550:1;11522:30;;;;11518:35;11598:1;11570:30;;;;11566:35;11646:1;11618:30;;;;11614:35;11694:1;11666:30;;;;11662:35;11742:1;11714:30;;;;11710:35;11790:1;11762:30;;;;11758:35;11838:1;11810:30;;;;11806:35;11886:1;11858:30;;;;11854:35;11934:1;11906:30;;;;11902:35;11982:1;11954:30;;;;11950:35;12030:1;12002:30;;;;11998:35;12078:1;12050:30;;;;12046:35;12126:1;12098:30;;;;12094:35;12174:1;12146:30;;;;12142:35;12222:1;12194:30;;;;12190:35;12270:1;12242:30;;;;12238:35;12318:1;12290:30;;;;12286:35 diff --git a/test/libyul/yulSyntaxTests/eof/eofcreate_invalid_object_name_data.yul b/test/libyul/yulSyntaxTests/eof/eofcreate_invalid_object_name_data.yul index 1e9fad7d0244..06bb487d62f8 100644 --- a/test/libyul/yulSyntaxTests/eof/eofcreate_invalid_object_name_data.yul +++ b/test/libyul/yulSyntaxTests/eof/eofcreate_invalid_object_name_data.yul @@ -10,4 +10,4 @@ object "a" { // EVMVersion: >=shanghai // bytecodeFormat: >=EOFv1 // ---- -// TypeError 7575: (52-59): Data name "data1" cannot be used as an argument of eofcreate/returncontract. An object name is only acceptable. +// TypeError 7575: (52-59): Data name "data1" cannot be used as an argument of eofcreate/returncontract. Only an object name is acceptable. diff --git a/test/tools/CMakeLists.txt b/test/tools/CMakeLists.txt index 5c1d41b7f595..289f2f2def35 100644 --- a/test/tools/CMakeLists.txt +++ b/test/tools/CMakeLists.txt @@ -18,6 +18,8 @@ add_executable(isoltest ../EVMHost.cpp ../TestCase.cpp ../TestCaseReader.cpp + ../libevmasm/EVMAssemblyTest.cpp + ../libevmasm/PlainAssemblyParser.cpp ../libsolidity/util/BytesUtils.cpp ../libsolidity/util/Common.cpp ../libsolidity/util/ContractABIUtils.cpp diff --git a/test/tools/isoltest.cpp b/test/tools/isoltest.cpp index 57ab4af16034..26efc089020b 100644 --- a/test/tools/isoltest.cpp +++ b/test/tools/isoltest.cpp @@ -75,7 +75,7 @@ class TestFilter boost::replace_all(filter, "/", "\\/"); boost::replace_all(filter, "*", ".*"); - m_filterExpression = std::regex{"(" + filter + "(\\.sol|\\.yul|\\.stack))"}; + m_filterExpression = std::regex{"(" + filter + "(\\.sol|\\.yul|\\.asm|\\.asmjson|\\.stack))"}; } bool matches(fs::path const& _path, std::string const& _name) const diff --git a/test/tools/ossfuzz/strictasm_diff_ossfuzz.cpp b/test/tools/ossfuzz/strictasm_diff_ossfuzz.cpp index a4515b30957a..9abf269c869a 100644 --- a/test/tools/ossfuzz/strictasm_diff_ossfuzz.cpp +++ b/test/tools/ossfuzz/strictasm_diff_ossfuzz.cpp @@ -90,8 +90,7 @@ extern "C" int LLVMFuzzerTestOneInput(uint8_t const* _data, size_t _size) // TODO: Add EOF support yulFuzzerUtil::TerminationReason termReason = yulFuzzerUtil::interpret( os1, - stack.parserResult()->code()->root(), - EVMDialect::strictAssemblyForEVMObjects(langutil::EVMVersion(), std::nullopt), + *stack.parserResult()->code(), /*disableMemoryTracing=*/true ); if (yulFuzzerUtil::resourceLimitsExceeded(termReason)) @@ -100,8 +99,7 @@ extern "C" int LLVMFuzzerTestOneInput(uint8_t const* _data, size_t _size) stack.optimize(); termReason = yulFuzzerUtil::interpret( os2, - stack.parserResult()->code()->root(), - EVMDialect::strictAssemblyForEVMObjects(langutil::EVMVersion(), std::nullopt), + *stack.parserResult()->code(), /*disableMemoryTracing=*/true ); diff --git a/test/tools/ossfuzz/yulFuzzerCommon.cpp b/test/tools/ossfuzz/yulFuzzerCommon.cpp index b95df8f2138c..c34f4351c5d4 100644 --- a/test/tools/ossfuzz/yulFuzzerCommon.cpp +++ b/test/tools/ossfuzz/yulFuzzerCommon.cpp @@ -23,8 +23,7 @@ using namespace solidity::yul::test::yul_fuzzer; yulFuzzerUtil::TerminationReason yulFuzzerUtil::interpret( std::ostream& _os, - yul::Block const& _astRoot, - Dialect const& _dialect, + AST const& _ast, bool _disableMemoryTracing, bool _outputStorageOnly, size_t _maxSteps, @@ -52,7 +51,7 @@ yulFuzzerUtil::TerminationReason yulFuzzerUtil::interpret( TerminationReason reason = TerminationReason::None; try { - Interpreter::run(state, _dialect, _astRoot, true, _disableMemoryTracing); + Interpreter::run(state, _ast, true, _disableMemoryTracing); } catch (StepLimitReached const&) { diff --git a/test/tools/ossfuzz/yulFuzzerCommon.h b/test/tools/ossfuzz/yulFuzzerCommon.h index afcb0f2d3c9e..dcfd0f833775 100644 --- a/test/tools/ossfuzz/yulFuzzerCommon.h +++ b/test/tools/ossfuzz/yulFuzzerCommon.h @@ -40,8 +40,7 @@ struct yulFuzzerUtil /// eliminator. static TerminationReason interpret( std::ostream& _os, - yul::Block const& _astRoot, - Dialect const& _dialect, + AST const& _ast, bool _disableMemoryTracing = false, bool _outputStorageOnly = false, size_t _maxSteps = maxSteps, diff --git a/test/tools/ossfuzz/yulProto_diff_ossfuzz.cpp b/test/tools/ossfuzz/yulProto_diff_ossfuzz.cpp index d15043972693..4edfbf7ba4ee 100644 --- a/test/tools/ossfuzz/yulProto_diff_ossfuzz.cpp +++ b/test/tools/ossfuzz/yulProto_diff_ossfuzz.cpp @@ -90,8 +90,7 @@ DEFINE_PROTO_FUZZER(Program const& _input) // TODO: Add EOF support yulFuzzerUtil::TerminationReason termReason = yulFuzzerUtil::interpret( os1, - stack.parserResult()->code()->root(), - EVMDialect::strictAssemblyForEVMObjects(version, std::nullopt), + *stack.parserResult()->code(), /*disableMemoryTracing=*/true ); @@ -106,8 +105,7 @@ DEFINE_PROTO_FUZZER(Program const& _input) // TODO: Add EOF support termReason = yulFuzzerUtil::interpret( os2, - *astRoot, - EVMDialect::strictAssemblyForEVMObjects(version, std::nullopt), + *optimizerTest.optimizedObject()->code(), true ); if (yulFuzzerUtil::resourceLimitsExceeded(termReason)) diff --git a/test/tools/yulInterpreter/Inspector.cpp b/test/tools/yulInterpreter/Inspector.cpp index 7746483a367a..5fec7f1c58d4 100644 --- a/test/tools/yulInterpreter/Inspector.cpp +++ b/test/tools/yulInterpreter/Inspector.cpp @@ -31,9 +31,9 @@ using namespace solidity::yul::test; namespace { -void printVariable(YulString const& _name, u256 const& _value) +void printVariable(std::string_view const _name, u256 const& _value) { - std::cout << "\t" << _name.str() << " = " << _value.str(); + std::cout << "\t" << _name << " = " << _value.str(); if (_value != 0) std::cout << " (" << toCompactHexWithPrefix(_value) << ")"; @@ -46,17 +46,16 @@ void printVariable(YulString const& _name, u256 const& _value) void InspectedInterpreter::run( std::shared_ptr _inspector, InterpreterState& _state, - Dialect const& _dialect, - Block const& _ast, + AST const& _ast, bool _disableExternalCalls, bool _disableMemoryTrace ) { Scope scope; - InspectedInterpreter{_inspector, _state, _dialect, scope, _disableExternalCalls, _disableMemoryTrace}(_ast); + InspectedInterpreter{_inspector, _state, _ast.dialect(), scope, _disableExternalCalls, _disableMemoryTrace}(_ast.root()); } -Inspector::NodeAction Inspector::queryUser(langutil::DebugData const& _data, std::map const& _variables) +Inspector::NodeAction Inspector::queryUser(langutil::DebugData const& _data, std::map const& _variables) { if (m_stepMode == NodeAction::RunNode) { @@ -99,7 +98,7 @@ Inspector::NodeAction Inspector::queryUser(langutil::DebugData const& _data, std else if (input == "variables" || input == "v") { for (auto &&[yulStr, val]: _variables) - printVariable(yulStr, val); + printVariable(yulStr.str(), val); std::cout << std::endl; } else if ( @@ -120,7 +119,7 @@ Inspector::NodeAction Inspector::queryUser(langutil::DebugData const& _data, std for (auto &&[yulStr, val]: _variables) if (yulStr.str() == varname) { - printVariable(yulStr, val); + printVariable(varname, val); found = true; break; } diff --git a/test/tools/yulInterpreter/Inspector.h b/test/tools/yulInterpreter/Inspector.h index 903ebc1142ea..3ea669b438a9 100644 --- a/test/tools/yulInterpreter/Inspector.h +++ b/test/tools/yulInterpreter/Inspector.h @@ -103,8 +103,7 @@ class InspectedInterpreter: public Interpreter static void run( std::shared_ptr _inspector, InterpreterState& _state, - Dialect const& _dialect, - Block const& _ast, + AST const& _ast, bool _disableExternalCalls, bool _disableMemoryTracing ); diff --git a/test/tools/yulInterpreter/Interpreter.cpp b/test/tools/yulInterpreter/Interpreter.cpp index 2709d1b468aa..05db9f581fa5 100644 --- a/test/tools/yulInterpreter/Interpreter.cpp +++ b/test/tools/yulInterpreter/Interpreter.cpp @@ -109,14 +109,13 @@ void InterpreterState::dumpTraceAndState(std::ostream& _out, bool _disableMemory void Interpreter::run( InterpreterState& _state, - Dialect const& _dialect, - Block const& _ast, + AST const& _ast, bool _disableExternalCalls, bool _disableMemoryTrace ) { Scope scope; - Interpreter{_state, _dialect, scope, _disableExternalCalls, _disableMemoryTrace}(_ast); + Interpreter{_state, _ast.dialect(), scope, _disableExternalCalls, _disableMemoryTrace}(_ast.root()); } void Interpreter::operator()(ExpressionStatement const& _expressionStatement) diff --git a/test/tools/yulInterpreter/Interpreter.h b/test/tools/yulInterpreter/Interpreter.h index 427a30d9ea08..3dd6a4238d97 100644 --- a/test/tools/yulInterpreter/Interpreter.h +++ b/test/tools/yulInterpreter/Interpreter.h @@ -22,6 +22,7 @@ #pragma once #include +#include #include #include @@ -162,8 +163,7 @@ class Interpreter: public ASTWalker /// activated e.g., Redundant store eliminator, Equal store eliminator. static void run( InterpreterState& _state, - Dialect const& _dialect, - Block const& _ast, + AST const& _ast, bool _disableExternalCalls, bool _disableMemoryTracing ); diff --git a/test/tools/yulrun.cpp b/test/tools/yulrun.cpp index 36d48858620b..a5fa05d934ce 100644 --- a/test/tools/yulrun.cpp +++ b/test/tools/yulrun.cpp @@ -63,6 +63,9 @@ std::pair, std::shared_ptr> parse(st solidity::frontend::OptimiserSettings::none(), DebugInfoSelection::Default() ); + auto const* evmDialect = dynamic_cast(&stack.dialect()); + // TODO: Add EOF support + solUnimplementedAssert(evmDialect && !evmDialect->eofVersion(), "No EOF support for yulrun yet."); if (stack.parseAndAnalyze("--INPUT--", _source)) { yulAssert(!Error::hasErrorsWarningsOrInfos(stack.errors()), "Parsed successfully but had errors."); @@ -87,13 +90,10 @@ void interpret(std::string const& _source, bool _inspect, bool _disableExternalC state.maxTraceSize = 10000; try { - Dialect const& dialect(EVMDialect::strictAssemblyForEVMObjects(langutil::EVMVersion{}, std::nullopt)); - if (_inspect) - InspectedInterpreter::run(std::make_shared(_source, state), state, dialect, ast->root(), _disableExternalCalls, /*disableMemoryTracing=*/false); - + InspectedInterpreter::run(std::make_shared(_source, state), state, *ast, _disableExternalCalls, /*disableMemoryTracing=*/false); else - Interpreter::run(state, dialect, ast->root(), _disableExternalCalls, /*disableMemoryTracing=*/false); + Interpreter::run(state, *ast, _disableExternalCalls, /*disableMemoryTracing=*/false); } catch (InterpreterTerminatedGeneric const&) {