mirror of
https://github.com/pezkuwichain/revive.git
synced 2026-06-15 13:51:12 +00:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2090830858 | |||
| 93c6387dae | |||
| 7346d82dfa | |||
| 39a6db7266 | |||
| 8240163be0 |
@@ -1,4 +1,5 @@
|
|||||||
name: Nightly Release
|
name: Nightly Release
|
||||||
|
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
# Run every day at 01:00 UTC
|
# Run every day at 01:00 UTC
|
||||||
@@ -10,10 +11,8 @@ concurrency:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
CARGO_TERM_COLOR: always
|
CARGO_TERM_COLOR: always
|
||||||
RUST_MUSL_CROSS_IMAGE: messense/rust-musl-cross@sha256:c0154e992adb791c3b848dd008939d19862549204f8cb26f5ca7a00f629e6067
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
# check if there were commits yesterday
|
|
||||||
check_commits:
|
check_commits:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
outputs:
|
outputs:
|
||||||
@@ -22,7 +21,7 @@ jobs:
|
|||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0 # Fetch full history to check previous commits
|
fetch-depth: 0
|
||||||
ref: "main"
|
ref: "main"
|
||||||
|
|
||||||
- name: Check for commits from yesterday
|
- name: Check for commits from yesterday
|
||||||
@@ -47,229 +46,12 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
build:
|
build:
|
||||||
# github actions matrix jobs don't support multiple outputs
|
|
||||||
# ugly workaround from https://github.com/orgs/community/discussions/17245#discussioncomment-11222880
|
|
||||||
if: ${{ needs.check_commits.outputs.has_commits == 'true' }}
|
if: ${{ needs.check_commits.outputs.has_commits == 'true' }}
|
||||||
outputs:
|
|
||||||
resolc-x86_64-unknown-linux-musl_url: ${{ steps.set-output.outputs.resolc-x86_64-unknown-linux-musl_url }}
|
|
||||||
resolc-x86_64-unknown-linux-musl_sha: ${{ steps.set-output.outputs.resolc-x86_64-unknown-linux-musl_sha }}
|
|
||||||
resolc-aarch64-apple-darwin_url: ${{ steps.set-output.outputs.resolc-aarch64-apple-darwin_url }}
|
|
||||||
resolc-aarch64-apple-darwin_sha: ${{ steps.set-output.outputs.resolc-aarch64-apple-darwin_sha }}
|
|
||||||
resolc-x86_64-apple-darwin_url: ${{ steps.set-output.outputs.resolc-x86_64-apple-darwin_url }}
|
|
||||||
resolc-x86_64-apple-darwin_sha: ${{ steps.set-output.outputs.resolc-x86_64-apple-darwin_sha }}
|
|
||||||
resolc-x86_64-pc-windows-msvc_url: ${{ steps.set-output.outputs.resolc-x86_64-pc-windows-msvc_url }}
|
|
||||||
resolc-x86_64-pc-windows-msvc_sha: ${{ steps.set-output.outputs.resolc-x86_64-pc-windows-msvc_sha }}
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
target:
|
|
||||||
[
|
|
||||||
x86_64-unknown-linux-musl,
|
|
||||||
aarch64-apple-darwin,
|
|
||||||
x86_64-apple-darwin,
|
|
||||||
x86_64-pc-windows-msvc,
|
|
||||||
]
|
|
||||||
include:
|
|
||||||
- target: x86_64-unknown-linux-musl
|
|
||||||
type: musl
|
|
||||||
runner: ubuntu-24.04
|
|
||||||
- target: aarch64-apple-darwin
|
|
||||||
type: native
|
|
||||||
runner: macos-14
|
|
||||||
- target: x86_64-apple-darwin
|
|
||||||
type: native
|
|
||||||
runner: macos-13
|
|
||||||
- target: x86_64-pc-windows-msvc
|
|
||||||
type: native
|
|
||||||
runner: windows-2022
|
|
||||||
runs-on: ${{ matrix.runner }}
|
|
||||||
needs: [check_commits]
|
needs: [check_commits]
|
||||||
steps:
|
uses: ./.github/workflows/reusable-build.yml
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
||||||
with:
|
with:
|
||||||
# without this it will override our rust flags
|
is_release: false
|
||||||
rustflags: ""
|
retention_days: 40
|
||||||
cache-key: ${{ matrix.target }}
|
|
||||||
|
|
||||||
- name: Download LLVM
|
|
||||||
uses: ./.github/actions/get-llvm
|
|
||||||
with:
|
|
||||||
target: ${{ matrix.target }}
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
if: ${{ matrix.type == 'native' }}
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
export LLVM_SYS_181_PREFIX=$PWD/llvm-${{ matrix.target }}
|
|
||||||
make install-bin
|
|
||||||
mv target/release/resolc resolc-${{ matrix.target }} || mv target/release/resolc.exe resolc-${{ matrix.target }}.exe
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
if: ${{ matrix.type == 'musl' }}
|
|
||||||
run: |
|
|
||||||
docker run -v $PWD:/opt/revive $RUST_MUSL_CROSS_IMAGE /bin/bash -c "
|
|
||||||
cd /opt/revive
|
|
||||||
chown -R root:root .
|
|
||||||
apt update && apt upgrade -y && apt install -y pkg-config
|
|
||||||
export LLVM_SYS_181_PREFIX=/opt/revive/llvm-${{ matrix.target }}
|
|
||||||
make install-bin
|
|
||||||
mv target/${{ matrix.target }}/release/resolc resolc-${{ matrix.target }}
|
|
||||||
"
|
|
||||||
sudo chown -R $(id -u):$(id -g) .
|
|
||||||
|
|
||||||
- name: Install Solc
|
|
||||||
uses: ./.github/actions/get-solc
|
|
||||||
|
|
||||||
- name: Basic Sanity Check
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
result=$(./resolc-${{ matrix.target }} --bin crates/integration/contracts/flipper.sol)
|
|
||||||
echo $result
|
|
||||||
if [[ $result == *'50564d'* ]]; then exit 0; else exit 1; fi
|
|
||||||
|
|
||||||
- name: Upload artifacts (nightly)
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
id: artifact-upload-step
|
|
||||||
with:
|
|
||||||
name: resolc-${{ matrix.target }}
|
|
||||||
path: resolc-${{ matrix.target }}*
|
|
||||||
retention-days: 40
|
|
||||||
|
|
||||||
- name: Set output variables (nightly)
|
|
||||||
id: set-output
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "Artifact URL is ${{ steps.artifact-upload-step.outputs.artifact-url }}"
|
|
||||||
echo "Artifact SHA is ${{ steps.artifact-upload-step.outputs.artifact-digest }}"
|
|
||||||
echo "resolc-${{ matrix.target }}_url=${{ steps.artifact-upload-step.outputs.artifact-url }}"
|
|
||||||
echo "resolc-${{ matrix.target }}_url=${{ steps.artifact-upload-step.outputs.artifact-url }}" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "resolc-${{ matrix.target }}_sha=${{ steps.artifact-upload-step.outputs.artifact-digest }}"
|
|
||||||
echo "resolc-${{ matrix.target }}_sha=${{ steps.artifact-upload-step.outputs.artifact-digest }}" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
build-wasm:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
needs: [check_commits]
|
|
||||||
if: ${{ needs.check_commits.outputs.has_commits == 'true' }}
|
|
||||||
outputs:
|
|
||||||
resolc-web.js_url: ${{ steps.set-output.outputs.resolc_web_js_url }}
|
|
||||||
resolc-web.js_sha: ${{ steps.set-output.outputs.resolc_web_js_sha }}
|
|
||||||
env:
|
|
||||||
RELEASE_RESOLC_WASM_URI: https://github.com/paritytech/revive/releases/download/${{ github.ref_name }}/resolc.wasm
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
||||||
with:
|
|
||||||
target: wasm32-unknown-emscripten
|
|
||||||
# without this it will override our rust flags
|
|
||||||
rustflags: ""
|
|
||||||
|
|
||||||
- name: Download Host LLVM
|
|
||||||
uses: ./.github/actions/get-llvm
|
|
||||||
with:
|
|
||||||
target: x86_64-unknown-linux-gnu
|
|
||||||
|
|
||||||
- name: Download Wasm LLVM
|
|
||||||
uses: ./.github/actions/get-llvm
|
|
||||||
with:
|
|
||||||
target: wasm32-unknown-emscripten
|
|
||||||
|
|
||||||
- name: Download EMSDK
|
|
||||||
uses: ./.github/actions/get-emsdk
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
export LLVM_SYS_181_PREFIX=$PWD/llvm-x86_64-unknown-linux-gnu
|
|
||||||
export REVIVE_LLVM_TARGET_PREFIX=$PWD/llvm-wasm32-unknown-emscripten
|
|
||||||
source emsdk/emsdk_env.sh
|
|
||||||
make install-wasm
|
|
||||||
chmod -x ./target/wasm32-unknown-emscripten/release/resolc.wasm
|
|
||||||
|
|
||||||
- name: Set Up Node.js
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: "20"
|
|
||||||
|
|
||||||
- name: Basic Sanity Check
|
|
||||||
run: |
|
|
||||||
mkdir -p solc
|
|
||||||
curl -sSLo solc/soljson.js https://github.com/ethereum/solidity/releases/download/v0.8.30/soljson.js
|
|
||||||
node -e "
|
|
||||||
const soljson = require('solc/soljson');
|
|
||||||
const createRevive = require('./target/wasm32-unknown-emscripten/release/resolc.js');
|
|
||||||
|
|
||||||
const compiler = createRevive();
|
|
||||||
compiler.soljson = soljson;
|
|
||||||
|
|
||||||
const standardJsonInput =
|
|
||||||
{
|
|
||||||
language: 'Solidity',
|
|
||||||
sources: {
|
|
||||||
'MyContract.sol': {
|
|
||||||
content: 'pragma solidity ^0.8.0; contract MyContract { function greet() public pure returns (string memory) { return \'Hello\'; } }',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
settings: { optimizer: { enabled: false } }
|
|
||||||
};
|
|
||||||
|
|
||||||
compiler.writeToStdin(JSON.stringify(standardJsonInput));
|
|
||||||
compiler.callMain(['--standard-json']);
|
|
||||||
|
|
||||||
// Collect output
|
|
||||||
const stdout = compiler.readFromStdout();
|
|
||||||
const stderr = compiler.readFromStderr();
|
|
||||||
|
|
||||||
if (stderr) { console.error(stderr); process.exit(1); }
|
|
||||||
|
|
||||||
let out = JSON.parse(stdout);
|
|
||||||
let bytecode = out.contracts['MyContract.sol']['MyContract'].evm.bytecode.object
|
|
||||||
console.log(bytecode);
|
|
||||||
|
|
||||||
if(!bytecode.startsWith('50564d')) { process.exit(1); }
|
|
||||||
"
|
|
||||||
|
|
||||||
- name: Compress Artifact
|
|
||||||
run: |
|
|
||||||
mkdir -p resolc-wasm32-unknown-emscripten
|
|
||||||
mv ./target/wasm32-unknown-emscripten/release/resolc.js ./resolc-wasm32-unknown-emscripten/
|
|
||||||
mv ./target/wasm32-unknown-emscripten/release/resolc.wasm ./resolc-wasm32-unknown-emscripten/
|
|
||||||
mv ./target/wasm32-unknown-emscripten/release/resolc_web.js ./resolc-wasm32-unknown-emscripten/
|
|
||||||
|
|
||||||
# There is no way to upload several files as several artifacts with a single upload-artifact step
|
|
||||||
# It's needed to have resolc_web.js separately for night builds for resolc-bin repo
|
|
||||||
# https://github.com/actions/upload-artifact/issues/331
|
|
||||||
- name: Upload artifact resolc.js (nightly)
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: resolc.js
|
|
||||||
path: resolc-wasm32-unknown-emscripten/resolc.js
|
|
||||||
retention-days: 40
|
|
||||||
|
|
||||||
- name: Upload artifacts resolc.wasm (nightly)
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: resolc.wasm
|
|
||||||
path: resolc-wasm32-unknown-emscripten/resolc.wasm
|
|
||||||
retention-days: 40
|
|
||||||
|
|
||||||
- name: Upload artifacts resolc_web.js (nightly)
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
id: artifact-upload-step
|
|
||||||
with:
|
|
||||||
name: resolc_web.js
|
|
||||||
path: resolc-wasm32-unknown-emscripten/resolc_web.js
|
|
||||||
retention-days: 40
|
|
||||||
|
|
||||||
- name: Set output variables
|
|
||||||
id: set-output
|
|
||||||
env:
|
|
||||||
TARGET: resolc_web_js
|
|
||||||
run: |
|
|
||||||
echo "Artifact URL is ${{ steps.artifact-upload-step.outputs.artifact-url }}"
|
|
||||||
echo "Artifact SHA is ${{ steps.artifact-upload-step.outputs.artifact-digest }}"
|
|
||||||
echo "${TARGET}_url=${{ steps.artifact-upload-step.outputs.artifact-url }}"
|
|
||||||
echo "${TARGET}_url=${{ steps.artifact-upload-step.outputs.artifact-url }}" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "${TARGET}_sha=${{ steps.artifact-upload-step.outputs.artifact-digest }}""
|
|
||||||
echo "${TARGET}_sha=${{ steps.artifact-upload-step.outputs.artifact-digest }}"" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
create-macos-fat-binary:
|
create-macos-fat-binary:
|
||||||
if: ${{ needs.check_commits.outputs.has_commits == 'true' }}
|
if: ${{ needs.check_commits.outputs.has_commits == 'true' }}
|
||||||
@@ -303,18 +85,14 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
TARGET: resolc-universal-apple-darwin
|
TARGET: resolc-universal-apple-darwin
|
||||||
run: |
|
run: |
|
||||||
echo "Artifact URL is ${{ steps.artifact-upload-step.outputs.artifact-url }}"
|
|
||||||
echo "Artifact SHA is ${{ steps.artifact-upload-step.outputs.artifact-digest }}"
|
|
||||||
echo "${TARGET}_url=${{ steps.artifact-upload-step.outputs.artifact-url }}"
|
|
||||||
echo "${TARGET}_url=${{ steps.artifact-upload-step.outputs.artifact-url }}" >> "$GITHUB_OUTPUT"
|
echo "${TARGET}_url=${{ steps.artifact-upload-step.outputs.artifact-url }}" >> "$GITHUB_OUTPUT"
|
||||||
echo "${TARGET}_sha=${{ steps.artifact-upload-step.outputs.artifact-digest }}""
|
echo "${TARGET}_sha=${{ steps.artifact-upload-step.outputs.artifact-digest }}" >> "$GITHUB_OUTPUT"
|
||||||
echo "${TARGET}_sha=${{ steps.artifact-upload-step.outputs.artifact-digest }}"" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
generate-nightly-json:
|
generate-nightly-json:
|
||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
if: ${{ needs.check_commits.outputs.has_commits == 'true' }}
|
if: ${{ needs.check_commits.outputs.has_commits == 'true' }}
|
||||||
environment: tags
|
environment: tags
|
||||||
needs: [build-wasm, build, create-macos-fat-binary, check_commits]
|
needs: [build, create-macos-fat-binary, check_commits]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout revive
|
- name: Checkout revive
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
@@ -352,8 +130,6 @@ jobs:
|
|||||||
echo '[' > data.json
|
echo '[' > data.json
|
||||||
echo '${{ toJSON(needs.build.outputs) }}' >> data.json
|
echo '${{ toJSON(needs.build.outputs) }}' >> data.json
|
||||||
echo ',' >> data.json
|
echo ',' >> data.json
|
||||||
echo '${{ toJSON(needs.build-wasm.outputs) }}' >> data.json
|
|
||||||
echo ',' >> data.json
|
|
||||||
echo '${{ toJSON(needs.create-macos-fat-binary.outputs) }}' >> data.json
|
echo '${{ toJSON(needs.create-macos-fat-binary.outputs) }}' >> data.json
|
||||||
echo ']' >> data.json
|
echo ']' >> data.json
|
||||||
chmod +x bins/resolc-x86_64-unknown-linux-musl
|
chmod +x bins/resolc-x86_64-unknown-linux-musl
|
||||||
|
|||||||
+12
-176
@@ -1,4 +1,5 @@
|
|||||||
name: Build & Release
|
name: Build & Release
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: ["main"]
|
branches: ["main"]
|
||||||
@@ -14,8 +15,6 @@ concurrency:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
CARGO_TERM_COLOR: always
|
CARGO_TERM_COLOR: always
|
||||||
# if changed, dont forget to update the env var in release-nightly.yml
|
|
||||||
RUST_MUSL_CROSS_IMAGE: messense/rust-musl-cross@sha256:c0154e992adb791c3b848dd008939d19862549204f8cb26f5ca7a00f629e6067
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check-version-changed:
|
check-version-changed:
|
||||||
@@ -29,33 +28,28 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
# Check that tag and version in Cargo.toml match
|
|
||||||
- name: Check versions
|
- name: Check versions
|
||||||
id: versions
|
id: versions
|
||||||
run: |
|
run: |
|
||||||
if [[ $CURRENT_TAG == 'main' ]];
|
if [[ $CURRENT_TAG == 'main' ]]; then
|
||||||
then
|
echo "::notice::Tag $CURRENT_TAG is not a release tag, skipping the check in the main branch"
|
||||||
echo "::notice::Tag $CURRENT_TAG is not a release tag, skipping the check in the main branch";
|
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $CURRENT_TAG != "v"* ]];
|
if [[ $CURRENT_TAG != "v"* ]]; then
|
||||||
then
|
echo "::notice::Tag $CURRENT_TAG is not a release tag, skipping the check in a PR"
|
||||||
echo "::notice::Tag $CURRENT_TAG is not a release tag, skipping the check in a PR";
|
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export PKG_VER=v$(cat crates/resolc/Cargo.toml | grep -A 5 package] | grep version | cut -d '=' -f 2 | tr -d '"' | tr -d " ")
|
export PKG_VER=v$(cat crates/resolc/Cargo.toml | grep -A 5 package] | grep version | cut -d '=' -f 2 | tr -d '"' | tr -d " ")
|
||||||
echo "Current tag $CURRENT_TAG"
|
echo "Current tag $CURRENT_TAG"
|
||||||
echo "Package version $PKG_VER"
|
echo "Package version $PKG_VER"
|
||||||
#
|
|
||||||
if [[ $CURRENT_TAG != $PKG_VER ]];
|
if [[ $CURRENT_TAG != $PKG_VER ]]; then
|
||||||
then
|
echo "::error::Tag $CURRENT_TAG doesn't match package version $PKG_VER in Cargo.toml, please fix"
|
||||||
echo "::error::Tag $CURRENT_TAG doesn't match package version $PKG_VER in Cargo.toml, please fix";
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Generating release notes early, in order to avoid checkout at the last step
|
|
||||||
export RELEASE_NOTES="$(sed '/^## '${CURRENT_TAG}'/,/^## v/!d' CHANGELOG.md | sed -e '1d' -e '$d')"
|
export RELEASE_NOTES="$(sed '/^## '${CURRENT_TAG}'/,/^## v/!d' CHANGELOG.md | sed -e '1d' -e '$d')"
|
||||||
|
|
||||||
echo "Release notes:"
|
echo "Release notes:"
|
||||||
@@ -66,173 +60,15 @@ jobs:
|
|||||||
echo 'EOF' >> $GITHUB_OUTPUT
|
echo 'EOF' >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
build:
|
build:
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
target:
|
|
||||||
[
|
|
||||||
x86_64-unknown-linux-musl,
|
|
||||||
aarch64-apple-darwin,
|
|
||||||
x86_64-apple-darwin,
|
|
||||||
x86_64-pc-windows-msvc,
|
|
||||||
]
|
|
||||||
include:
|
|
||||||
- target: x86_64-unknown-linux-musl
|
|
||||||
type: musl
|
|
||||||
runner: ubuntu-24.04
|
|
||||||
- target: aarch64-apple-darwin
|
|
||||||
type: native
|
|
||||||
runner: macos-14
|
|
||||||
- target: x86_64-apple-darwin
|
|
||||||
type: native
|
|
||||||
runner: macos-13
|
|
||||||
- target: x86_64-pc-windows-msvc
|
|
||||||
type: native
|
|
||||||
runner: windows-2022
|
|
||||||
runs-on: ${{ matrix.runner }}
|
|
||||||
needs: [check-version-changed]
|
needs: [check-version-changed]
|
||||||
steps:
|
uses: ./.github/workflows/reusable-build.yml
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
||||||
with:
|
with:
|
||||||
# without this it will override our rust flags
|
is_release: true
|
||||||
rustflags: ""
|
retention_days: 1
|
||||||
cache-key: ${{ matrix.target }}
|
|
||||||
|
|
||||||
- name: Download LLVM
|
|
||||||
uses: ./.github/actions/get-llvm
|
|
||||||
with:
|
|
||||||
target: ${{ matrix.target }}
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
if: ${{ matrix.type == 'native' }}
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
export LLVM_SYS_181_PREFIX=$PWD/llvm-${{ matrix.target }}
|
|
||||||
make install-bin
|
|
||||||
mv target/release/resolc resolc-${{ matrix.target }} || mv target/release/resolc.exe resolc-${{ matrix.target }}.exe
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
if: ${{ matrix.type == 'musl' }}
|
|
||||||
run: |
|
|
||||||
docker run -v $PWD:/opt/revive $RUST_MUSL_CROSS_IMAGE /bin/bash -c "
|
|
||||||
cd /opt/revive
|
|
||||||
chown -R root:root .
|
|
||||||
apt update && apt upgrade -y && apt install -y pkg-config
|
|
||||||
export LLVM_SYS_181_PREFIX=/opt/revive/llvm-${{ matrix.target }}
|
|
||||||
make install-bin
|
|
||||||
mv target/${{ matrix.target }}/release/resolc resolc-${{ matrix.target }}
|
|
||||||
"
|
|
||||||
sudo chown -R $(id -u):$(id -g) .
|
|
||||||
|
|
||||||
- name: Install Solc
|
|
||||||
uses: ./.github/actions/get-solc
|
|
||||||
|
|
||||||
- name: Basic Sanity Check
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
result=$(./resolc-${{ matrix.target }} --bin crates/integration/contracts/flipper.sol)
|
|
||||||
echo $result
|
|
||||||
if [[ $result == *'50564d'* ]]; then exit 0; else exit 1; fi
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: resolc-${{ matrix.target }}
|
|
||||||
path: resolc-${{ matrix.target }}*
|
|
||||||
retention-days: 1
|
|
||||||
|
|
||||||
build-wasm:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
needs: [check-version-changed]
|
|
||||||
env:
|
|
||||||
RELEASE_RESOLC_WASM_URI: https://github.com/paritytech/revive/releases/download/${{ github.ref_name }}/resolc.wasm
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
||||||
with:
|
|
||||||
target: wasm32-unknown-emscripten
|
|
||||||
# without this it will override our rust flags
|
|
||||||
rustflags: ""
|
|
||||||
|
|
||||||
- name: Download Host LLVM
|
|
||||||
uses: ./.github/actions/get-llvm
|
|
||||||
with:
|
|
||||||
target: x86_64-unknown-linux-gnu
|
|
||||||
|
|
||||||
- name: Download Wasm LLVM
|
|
||||||
uses: ./.github/actions/get-llvm
|
|
||||||
with:
|
|
||||||
target: wasm32-unknown-emscripten
|
|
||||||
|
|
||||||
- name: Download EMSDK
|
|
||||||
uses: ./.github/actions/get-emsdk
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
export LLVM_SYS_181_PREFIX=$PWD/llvm-x86_64-unknown-linux-gnu
|
|
||||||
export REVIVE_LLVM_TARGET_PREFIX=$PWD/llvm-wasm32-unknown-emscripten
|
|
||||||
source emsdk/emsdk_env.sh
|
|
||||||
make install-wasm
|
|
||||||
chmod -x ./target/wasm32-unknown-emscripten/release/resolc.wasm
|
|
||||||
|
|
||||||
- name: Set Up Node.js
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: "20"
|
|
||||||
|
|
||||||
- name: Basic Sanity Check
|
|
||||||
run: |
|
|
||||||
mkdir -p solc
|
|
||||||
curl -sSLo solc/soljson.js https://github.com/ethereum/solidity/releases/download/v0.8.30/soljson.js
|
|
||||||
node -e "
|
|
||||||
const soljson = require('solc/soljson');
|
|
||||||
const createRevive = require('./target/wasm32-unknown-emscripten/release/resolc.js');
|
|
||||||
|
|
||||||
const compiler = createRevive();
|
|
||||||
compiler.soljson = soljson;
|
|
||||||
|
|
||||||
const standardJsonInput =
|
|
||||||
{
|
|
||||||
language: 'Solidity',
|
|
||||||
sources: {
|
|
||||||
'MyContract.sol': {
|
|
||||||
content: 'pragma solidity ^0.8.0; contract MyContract { function greet() public pure returns (string memory) { return \'Hello\'; } }',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
settings: { optimizer: { enabled: false } }
|
|
||||||
};
|
|
||||||
|
|
||||||
compiler.writeToStdin(JSON.stringify(standardJsonInput));
|
|
||||||
compiler.callMain(['--standard-json']);
|
|
||||||
|
|
||||||
// Collect output
|
|
||||||
const stdout = compiler.readFromStdout();
|
|
||||||
const stderr = compiler.readFromStderr();
|
|
||||||
|
|
||||||
if (stderr) { console.error(stderr); process.exit(1); }
|
|
||||||
|
|
||||||
let out = JSON.parse(stdout);
|
|
||||||
let bytecode = out.contracts['MyContract.sol']['MyContract'].evm.bytecode.object
|
|
||||||
console.log(bytecode);
|
|
||||||
|
|
||||||
if(!bytecode.startsWith('50564d')) { process.exit(1); }
|
|
||||||
"
|
|
||||||
|
|
||||||
- name: Compress Artifact
|
|
||||||
run: |
|
|
||||||
mkdir -p resolc-wasm32-unknown-emscripten
|
|
||||||
mv ./target/wasm32-unknown-emscripten/release/resolc.js ./resolc-wasm32-unknown-emscripten/
|
|
||||||
mv ./target/wasm32-unknown-emscripten/release/resolc.wasm ./resolc-wasm32-unknown-emscripten/
|
|
||||||
mv ./target/wasm32-unknown-emscripten/release/resolc_web.js ./resolc-wasm32-unknown-emscripten/
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: resolc-wasm32-unknown-emscripten
|
|
||||||
path: resolc-wasm32-unknown-emscripten/*
|
|
||||||
retention-days: 1
|
|
||||||
|
|
||||||
create-release:
|
create-release:
|
||||||
if: startsWith(github.ref_name, 'v')
|
if: startsWith(github.ref_name, 'v')
|
||||||
needs: [check-version-changed, build-wasm]
|
needs: [check-version-changed, build]
|
||||||
runs-on: macos-14
|
runs-on: macos-14
|
||||||
environment: tags
|
environment: tags
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
@@ -0,0 +1,262 @@
|
|||||||
|
name: Reusable Build
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
is_release:
|
||||||
|
description: "Whether this is a release build"
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
retention_days:
|
||||||
|
description: "Artifact retention days"
|
||||||
|
required: false
|
||||||
|
type: number
|
||||||
|
default: 1
|
||||||
|
outputs:
|
||||||
|
resolc-x86_64-unknown-linux-musl_url:
|
||||||
|
value: ${{ jobs.build.outputs.resolc-x86_64-unknown-linux-musl_url }}
|
||||||
|
resolc-x86_64-unknown-linux-musl_sha:
|
||||||
|
value: ${{ jobs.build.outputs.resolc-x86_64-unknown-linux-musl_sha }}
|
||||||
|
resolc-aarch64-apple-darwin_url:
|
||||||
|
value: ${{ jobs.build.outputs.resolc-aarch64-apple-darwin_url }}
|
||||||
|
resolc-aarch64-apple-darwin_sha:
|
||||||
|
value: ${{ jobs.build.outputs.resolc-aarch64-apple-darwin_sha }}
|
||||||
|
resolc-x86_64-apple-darwin_url:
|
||||||
|
value: ${{ jobs.build.outputs.resolc-x86_64-apple-darwin_url }}
|
||||||
|
resolc-x86_64-apple-darwin_sha:
|
||||||
|
value: ${{ jobs.build.outputs.resolc-x86_64-apple-darwin_sha }}
|
||||||
|
resolc-x86_64-pc-windows-msvc_url:
|
||||||
|
value: ${{ jobs.build.outputs.resolc-x86_64-pc-windows-msvc_url }}
|
||||||
|
resolc-x86_64-pc-windows-msvc_sha:
|
||||||
|
value: ${{ jobs.build.outputs.resolc-x86_64-pc-windows-msvc_sha }}
|
||||||
|
resolc-web_js_url:
|
||||||
|
value: ${{ jobs.build-wasm.outputs.resolc_web_js_url }}
|
||||||
|
resolc-web_js_sha:
|
||||||
|
value: ${{ jobs.build-wasm.outputs.resolc_web_js_sha }}
|
||||||
|
|
||||||
|
env:
|
||||||
|
CARGO_TERM_COLOR: always
|
||||||
|
RUST_MUSL_CROSS_IMAGE: messense/rust-musl-cross@sha256:c0154e992adb791c3b848dd008939d19862549204f8cb26f5ca7a00f629e6067
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
# github actions matrix jobs don't support multiple outputs
|
||||||
|
# ugly workaround from https://github.com/orgs/community/discussions/17245#discussioncomment-11222880
|
||||||
|
outputs:
|
||||||
|
resolc-x86_64-unknown-linux-musl_url: ${{ steps.set-output.outputs.resolc-x86_64-unknown-linux-musl_url }}
|
||||||
|
resolc-x86_64-unknown-linux-musl_sha: ${{ steps.set-output.outputs.resolc-x86_64-unknown-linux-musl_sha }}
|
||||||
|
resolc-aarch64-apple-darwin_url: ${{ steps.set-output.outputs.resolc-aarch64-apple-darwin_url }}
|
||||||
|
resolc-aarch64-apple-darwin_sha: ${{ steps.set-output.outputs.resolc-aarch64-apple-darwin_sha }}
|
||||||
|
resolc-x86_64-apple-darwin_url: ${{ steps.set-output.outputs.resolc-x86_64-apple-darwin_url }}
|
||||||
|
resolc-x86_64-apple-darwin_sha: ${{ steps.set-output.outputs.resolc-x86_64-apple-darwin_sha }}
|
||||||
|
resolc-x86_64-pc-windows-msvc_url: ${{ steps.set-output.outputs.resolc-x86_64-pc-windows-msvc_url }}
|
||||||
|
resolc-x86_64-pc-windows-msvc_sha: ${{ steps.set-output.outputs.resolc-x86_64-pc-windows-msvc_sha }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
target:
|
||||||
|
[
|
||||||
|
x86_64-unknown-linux-musl,
|
||||||
|
aarch64-apple-darwin,
|
||||||
|
x86_64-apple-darwin,
|
||||||
|
x86_64-pc-windows-msvc,
|
||||||
|
]
|
||||||
|
include:
|
||||||
|
- target: x86_64-unknown-linux-musl
|
||||||
|
type: musl
|
||||||
|
runner: ubuntu-24.04
|
||||||
|
- target: aarch64-apple-darwin
|
||||||
|
type: native
|
||||||
|
runner: macos-14
|
||||||
|
- target: x86_64-apple-darwin
|
||||||
|
type: native
|
||||||
|
runner: macos-13
|
||||||
|
- target: x86_64-pc-windows-msvc
|
||||||
|
type: native
|
||||||
|
runner: windows-2022
|
||||||
|
runs-on: ${{ matrix.runner }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||||
|
with:
|
||||||
|
rustflags: ""
|
||||||
|
cache-key: ${{ matrix.target }}
|
||||||
|
|
||||||
|
- name: Download LLVM
|
||||||
|
uses: ./.github/actions/get-llvm
|
||||||
|
with:
|
||||||
|
target: ${{ matrix.target }}
|
||||||
|
|
||||||
|
- name: Build (Native)
|
||||||
|
if: ${{ matrix.type == 'native' }}
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
export LLVM_SYS_181_PREFIX=$PWD/llvm-${{ matrix.target }}
|
||||||
|
make install-bin
|
||||||
|
mv target/release/resolc resolc-${{ matrix.target }} || mv target/release/resolc.exe resolc-${{ matrix.target }}.exe
|
||||||
|
|
||||||
|
- name: Build (MUSL)
|
||||||
|
if: ${{ matrix.type == 'musl' }}
|
||||||
|
run: |
|
||||||
|
docker run -v $PWD:/opt/revive $RUST_MUSL_CROSS_IMAGE /bin/bash -c "
|
||||||
|
cd /opt/revive
|
||||||
|
chown -R root:root .
|
||||||
|
apt update && apt upgrade -y && apt install -y pkg-config
|
||||||
|
export LLVM_SYS_181_PREFIX=/opt/revive/llvm-${{ matrix.target }}
|
||||||
|
make install-bin
|
||||||
|
mv target/${{ matrix.target }}/release/resolc resolc-${{ matrix.target }}
|
||||||
|
"
|
||||||
|
sudo chown -R $(id -u):$(id -g) .
|
||||||
|
|
||||||
|
- name: Install Solc
|
||||||
|
uses: ./.github/actions/get-solc
|
||||||
|
|
||||||
|
- name: Basic Sanity Check
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
result=$(./resolc-${{ matrix.target }} --bin crates/integration/contracts/flipper.sol)
|
||||||
|
echo $result
|
||||||
|
if [[ $result == *'50564d'* ]]; then exit 0; else exit 1; fi
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v4
|
||||||
|
id: artifact-upload-step
|
||||||
|
with:
|
||||||
|
name: resolc-${{ matrix.target }}
|
||||||
|
path: resolc-${{ matrix.target }}*
|
||||||
|
retention-days: ${{ inputs.retention_days }}
|
||||||
|
|
||||||
|
- name: Set output variables
|
||||||
|
if: ${{ !inputs.is_release }}
|
||||||
|
id: set-output
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "resolc-${{ matrix.target }}_url=${{ steps.artifact-upload-step.outputs.artifact-url }}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "resolc-${{ matrix.target }}_sha=${{ steps.artifact-upload-step.outputs.artifact-digest }}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
build-wasm:
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
outputs:
|
||||||
|
resolc_web_js_url: ${{ steps.set-output.outputs.resolc_web_js_url }}
|
||||||
|
resolc_web_js_sha: ${{ steps.set-output.outputs.resolc_web_js_sha }}
|
||||||
|
env:
|
||||||
|
RELEASE_RESOLC_WASM_URI: https://github.com/paritytech/revive/releases/download/${{ github.ref_name }}/resolc.wasm
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||||
|
with:
|
||||||
|
target: wasm32-unknown-emscripten
|
||||||
|
rustflags: ""
|
||||||
|
|
||||||
|
- name: Download Host LLVM
|
||||||
|
uses: ./.github/actions/get-llvm
|
||||||
|
with:
|
||||||
|
target: x86_64-unknown-linux-gnu
|
||||||
|
|
||||||
|
- name: Download Wasm LLVM
|
||||||
|
uses: ./.github/actions/get-llvm
|
||||||
|
with:
|
||||||
|
target: wasm32-unknown-emscripten
|
||||||
|
|
||||||
|
- name: Download EMSDK
|
||||||
|
uses: ./.github/actions/get-emsdk
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
export LLVM_SYS_181_PREFIX=$PWD/llvm-x86_64-unknown-linux-gnu
|
||||||
|
export REVIVE_LLVM_TARGET_PREFIX=$PWD/llvm-wasm32-unknown-emscripten
|
||||||
|
source emsdk/emsdk_env.sh
|
||||||
|
make install-wasm
|
||||||
|
chmod -x ./target/wasm32-unknown-emscripten/release/resolc.wasm
|
||||||
|
|
||||||
|
- name: Set Up Node.js
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: "20"
|
||||||
|
|
||||||
|
- name: Basic Sanity Check
|
||||||
|
run: |
|
||||||
|
mkdir -p solc
|
||||||
|
curl -sSLo solc/soljson.js https://github.com/ethereum/solidity/releases/download/v0.8.30/soljson.js
|
||||||
|
node -e "
|
||||||
|
const soljson = require('solc/soljson');
|
||||||
|
const createRevive = require('./target/wasm32-unknown-emscripten/release/resolc.js');
|
||||||
|
|
||||||
|
const compiler = createRevive();
|
||||||
|
compiler.soljson = soljson;
|
||||||
|
|
||||||
|
const standardJsonInput =
|
||||||
|
{
|
||||||
|
language: 'Solidity',
|
||||||
|
sources: {
|
||||||
|
'MyContract.sol': {
|
||||||
|
content: 'pragma solidity ^0.8.0; contract MyContract { function greet() public pure returns (string memory) { return \'Hello\'; } }',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
settings: { optimizer: { enabled: false } }
|
||||||
|
};
|
||||||
|
|
||||||
|
compiler.writeToStdin(JSON.stringify(standardJsonInput));
|
||||||
|
compiler.callMain(['--standard-json']);
|
||||||
|
|
||||||
|
const stdout = compiler.readFromStdout();
|
||||||
|
const stderr = compiler.readFromStderr();
|
||||||
|
|
||||||
|
if (stderr) { console.error(stderr); process.exit(1); }
|
||||||
|
|
||||||
|
let out = JSON.parse(stdout);
|
||||||
|
let bytecode = out.contracts['MyContract.sol']['MyContract'].evm.bytecode.object
|
||||||
|
console.log(bytecode);
|
||||||
|
|
||||||
|
if(!bytecode.startsWith('50564d')) { process.exit(1); }
|
||||||
|
"
|
||||||
|
|
||||||
|
- name: Compress Artifact
|
||||||
|
run: |
|
||||||
|
mkdir -p resolc-wasm32-unknown-emscripten
|
||||||
|
mv ./target/wasm32-unknown-emscripten/release/resolc.js ./resolc-wasm32-unknown-emscripten/
|
||||||
|
mv ./target/wasm32-unknown-emscripten/release/resolc.wasm ./resolc-wasm32-unknown-emscripten/
|
||||||
|
mv ./target/wasm32-unknown-emscripten/release/resolc_web.js ./resolc-wasm32-unknown-emscripten/
|
||||||
|
|
||||||
|
- name: Upload artifacts (Release)
|
||||||
|
if: ${{ inputs.is_release }}
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: resolc-wasm32-unknown-emscripten
|
||||||
|
path: resolc-wasm32-unknown-emscripten/*
|
||||||
|
retention-days: ${{ inputs.retention_days }}
|
||||||
|
|
||||||
|
# There is no way to upload several files as several artifacts with a single upload-artifact step
|
||||||
|
# It's needed to have resolc_web.js separately for night builds for resolc-bin repo
|
||||||
|
# https://github.com/actions/upload-artifact/issues/331
|
||||||
|
- name: Upload artifact resolc.js (Nightly)
|
||||||
|
if: ${{ !inputs.is_release }}
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: resolc.js
|
||||||
|
path: resolc-wasm32-unknown-emscripten/resolc.js
|
||||||
|
retention-days: ${{ inputs.retention_days }}
|
||||||
|
|
||||||
|
- name: Upload artifacts resolc.wasm (Nightly)
|
||||||
|
if: ${{ !inputs.is_release }}
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: resolc.wasm
|
||||||
|
path: resolc-wasm32-unknown-emscripten/resolc.wasm
|
||||||
|
retention-days: ${{ inputs.retention_days }}
|
||||||
|
|
||||||
|
- name: Upload artifacts resolc_web.js (Nightly)
|
||||||
|
if: ${{ !inputs.is_release }}
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
id: artifact-upload-step
|
||||||
|
with:
|
||||||
|
name: resolc_web.js
|
||||||
|
path: resolc-wasm32-unknown-emscripten/resolc_web.js
|
||||||
|
retention-days: ${{ inputs.retention_days }}
|
||||||
|
|
||||||
|
- name: Set output variables
|
||||||
|
if: ${{ !inputs.is_release }}
|
||||||
|
id: set-output
|
||||||
|
env:
|
||||||
|
TARGET: resolc_web_js
|
||||||
|
run: |
|
||||||
|
echo "${TARGET}_url=${{ steps.artifact-upload-step.outputs.artifact-url }}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "${TARGET}_sha=${{ steps.artifact-upload-step.outputs.artifact-digest }}" >> "$GITHUB_OUTPUT"
|
||||||
@@ -6,6 +6,16 @@ This is a development pre-release.
|
|||||||
|
|
||||||
Supported `polkadot-sdk` rev: `2503.0.1`
|
Supported `polkadot-sdk` rev: `2503.0.1`
|
||||||
|
|
||||||
|
## v0.4.1
|
||||||
|
|
||||||
|
This is a development pre-release.
|
||||||
|
|
||||||
|
Supported `polkadot-sdk` rev: `2503.0.1`
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- The `ast` output is no longer pruned in standard JSON mode (required for foundry).
|
||||||
|
- Support `standard_json.output_selection` to also look at per file settings.
|
||||||
|
|
||||||
## v0.4.0
|
## v0.4.0
|
||||||
|
|
||||||
This is a development pre-release.
|
This is a development pre-release.
|
||||||
|
|||||||
Generated
+539
-437
File diff suppressed because it is too large
Load Diff
+11
-11
@@ -14,22 +14,22 @@ repository = "https://github.com/paritytech/revive"
|
|||||||
rust-version = "1.85.0"
|
rust-version = "1.85.0"
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
|
lld-sys = { version = "0.1.0", path = "crates/lld-sys" }
|
||||||
resolc = { version = "0.4.0", path = "crates/resolc", default-features = false }
|
resolc = { version = "0.4.0", path = "crates/resolc", default-features = false }
|
||||||
revive-benchmarks = { version = "0.1.0", path = "crates/benchmarks" }
|
revive-benchmarks = { version = "0.1.0", path = "crates/benchmarks" }
|
||||||
|
revive-build-utils = { version = "0.2.0", path = "crates/build-utils" }
|
||||||
revive-builtins = { version = "0.1.0", path = "crates/builtins" }
|
revive-builtins = { version = "0.1.0", path = "crates/builtins" }
|
||||||
revive-common = { version = "0.2.0", path = "crates/common" }
|
revive-common = { version = "0.2.1", path = "crates/common" }
|
||||||
revive-differential = { version = "0.1.0", path = "crates/differential" }
|
revive-differential = { version = "0.2.0", path = "crates/differential" }
|
||||||
revive-explorer = { version = "0.1.0", path = "crates/explore" }
|
revive-explorer = { version = "0.1.0", path = "crates/explore" }
|
||||||
revive-integration = { version = "0.1.1", path = "crates/integration" }
|
revive-integration = { version = "0.2.0", path = "crates/integration" }
|
||||||
revive-linker = { version = "0.2.0", path = "crates/linker" }
|
revive-linker = { version = "0.2.0", path = "crates/linker" }
|
||||||
lld-sys = { version = "0.1.0", path = "crates/lld-sys" }
|
revive-llvm-context = { version = "0.4.1", path = "crates/llvm-context" }
|
||||||
revive-llvm-context = { version = "0.4.0", path = "crates/llvm-context" }
|
revive-runner = { version = "0.2.0", path = "crates/runner" }
|
||||||
revive-runtime-api = { version = "0.2.0", path = "crates/runtime-api" }
|
revive-runtime-api = { version = "0.3.0", path = "crates/runtime-api" }
|
||||||
revive-runner = { version = "0.1.0", path = "crates/runner" }
|
revive-solc-json-interface = { version = "0.4.0", path = "crates/solc-json-interface", default-features = false }
|
||||||
revive-solc-json-interface = { version = "0.3.0", path = "crates/solc-json-interface", default-features = false }
|
revive-stdlib = { version = "0.2.0", path = "crates/stdlib" }
|
||||||
revive-stdlib = { version = "0.1.1", path = "crates/stdlib" }
|
revive-yul = { version = "0.3.1", path = "crates/yul" }
|
||||||
revive-build-utils = { version = "0.1.0", path = "crates/build-utils" }
|
|
||||||
revive-yul = { version = "0.3.0", path = "crates/yul" }
|
|
||||||
|
|
||||||
hex = "0.4.3"
|
hex = "0.4.3"
|
||||||
cc = "1.2"
|
cc = "1.2"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "revive-build-utils"
|
name = "revive-build-utils"
|
||||||
version.workspace = true
|
version = "0.2.0"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
repository.workspace = true
|
repository.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "revive-common"
|
name = "revive-common"
|
||||||
version = "0.2.0"
|
version = "0.2.1"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
repository.workspace = true
|
repository.workspace = true
|
||||||
|
|||||||
@@ -30,8 +30,8 @@ impl FromStr for ObjectFormat {
|
|||||||
"PVM" => Ok(Self::PVM),
|
"PVM" => Ok(Self::PVM),
|
||||||
_ => anyhow::bail!(
|
_ => anyhow::bail!(
|
||||||
"Unknown object format: {value}. Supported formats: {}, {}",
|
"Unknown object format: {value}. Supported formats: {}, {}",
|
||||||
Self::ELF.to_string(),
|
Self::ELF,
|
||||||
Self::PVM.to_string()
|
Self::PVM,
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "revive-differential"
|
name = "revive-differential"
|
||||||
description = "utilities for differential testing the revive compiler against EVM"
|
description = "utilities for differential testing the revive compiler against EVM"
|
||||||
version.workspace = true
|
version = "0.2.0"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
authors.workspace = true
|
authors.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "revive-explorer"
|
name = "revive-explorer"
|
||||||
version.workspace = true
|
version = "0.1.0"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
repository.workspace = true
|
repository.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "revive-integration"
|
name = "revive-integration"
|
||||||
version = "0.1.1"
|
version = "0.2.0"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
repository.workspace = true
|
repository.workspace = true
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"Baseline": 932,
|
"Baseline": 932,
|
||||||
"Computation": 2313,
|
"Computation": 2313,
|
||||||
"DivisionArithmetics": 8959,
|
"DivisionArithmetics": 9103,
|
||||||
"ERC20": 16993,
|
"ERC20": 17479,
|
||||||
"Events": 1692,
|
"Events": 1692,
|
||||||
"FibonacciIterative": 1474,
|
"FibonacciIterative": 1508,
|
||||||
"Flipper": 2098,
|
"Flipper": 2098,
|
||||||
"SHA1": 7751
|
"SHA1": 8176
|
||||||
}
|
}
|
||||||
@@ -6,7 +6,7 @@ authors = [
|
|||||||
"Anton Baliasnikov <aba@matterlabs.dev>",
|
"Anton Baliasnikov <aba@matterlabs.dev>",
|
||||||
"Cyrill Leutwiler <cyrill@parity.io>",
|
"Cyrill Leutwiler <cyrill@parity.io>",
|
||||||
]
|
]
|
||||||
version = "0.2.0"
|
version = "0.3.0"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
repository.workspace = true
|
repository.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "revive-llvm-context"
|
name = "revive-llvm-context"
|
||||||
version = "0.4.0"
|
version = "0.4.1"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
repository.workspace = true
|
repository.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "resolc"
|
name = "resolc"
|
||||||
version = "0.4.0"
|
version = "0.4.1"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
repository.workspace = true
|
repository.workspace = true
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ impl Compiler for SolcCompiler {
|
|||||||
anyhow::bail!(
|
anyhow::bail!(
|
||||||
"{} error: {}",
|
"{} error: {}",
|
||||||
self.executable,
|
self.executable,
|
||||||
String::from_utf8_lossy(output.stderr.as_slice()).to_string()
|
String::from_utf8_lossy(output.stderr.as_slice())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,7 +187,7 @@ impl Compiler for SolcCompiler {
|
|||||||
anyhow::bail!(
|
anyhow::bail!(
|
||||||
"{} error: {}",
|
"{} error: {}",
|
||||||
self.executable,
|
self.executable,
|
||||||
String::from_utf8_lossy(output.stderr.as_slice()).to_string()
|
String::from_utf8_lossy(output.stderr.as_slice())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "revive-runner"
|
name = "revive-runner"
|
||||||
version.workspace = true
|
version = "0.2.0"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
repository.workspace = true
|
repository.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "revive-runtime-api"
|
name = "revive-runtime-api"
|
||||||
version = "0.2.0"
|
version = "0.3.0"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
repository.workspace = true
|
repository.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "revive-solc-json-interface"
|
name = "revive-solc-json-interface"
|
||||||
version = "0.3.0"
|
version = "0.4.0"
|
||||||
authors.workspace = true
|
authors.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
|
|||||||
@@ -47,24 +47,3 @@ pub enum Flag {
|
|||||||
#[serde(rename = "ir")]
|
#[serde(rename = "ir")]
|
||||||
Ir,
|
Ir,
|
||||||
}
|
}
|
||||||
|
|
||||||
//impl std::fmt::Display for Flag {
|
|
||||||
// fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
||||||
// match self {
|
|
||||||
// Self::ABI => write!(f, "abi"),
|
|
||||||
// Self::Metadata => write!(f, "metadata"),
|
|
||||||
// Self::Devdoc => write!(f, "devdoc"),
|
|
||||||
// Self::Userdoc => write!(f, "userdoc"),
|
|
||||||
// Self::MethodIdentifiers => write!(f, "evm.methodIdentifiers"),
|
|
||||||
// Self::StorageLayout => write!(f, "storageLayout"),
|
|
||||||
// Self::AST => write!(f, "ast"),
|
|
||||||
// Self::Yul => write!(f, "irOptimized"),
|
|
||||||
// Self::EVM => write!(f, "evm"),
|
|
||||||
// Self::EVMLA => write!(f, "evm.legacyAssembly"),
|
|
||||||
// Self::EVMBC => write!(f, "evm.bytecode"),
|
|
||||||
// Self::EVMDBC => write!(f, "evm.deployedBytecode"),
|
|
||||||
// Self::Assembly => write!(f, "evm.assembly"),
|
|
||||||
// Self::Ir => write!(f, "ir"),
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|||||||
@@ -40,17 +40,6 @@ impl File {
|
|||||||
per_contract,
|
per_contract,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/// Creates the selection required for production compilation (excludes EVM bytecode).
|
|
||||||
pub fn new_required() -> Self {
|
|
||||||
Self {
|
|
||||||
per_file: HashSet::from_iter([SelectionFlag::AST]),
|
|
||||||
per_contract: HashSet::from_iter([
|
|
||||||
SelectionFlag::MethodIdentifiers,
|
|
||||||
SelectionFlag::Metadata,
|
|
||||||
SelectionFlag::Yul,
|
|
||||||
]),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Creates the selection required for test compilation (includes EVM bytecode).
|
/// Creates the selection required for test compilation (includes EVM bytecode).
|
||||||
pub fn new_required_for_tests() -> Self {
|
pub fn new_required_for_tests() -> Self {
|
||||||
@@ -66,16 +55,6 @@ impl File {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Extends the user's output selection with flag required by our compilation process.
|
|
||||||
pub fn extend_with_required(&mut self) -> &mut Self {
|
|
||||||
let required = Self::new_required();
|
|
||||||
|
|
||||||
self.per_file.extend(required.per_file);
|
|
||||||
self.per_contract.extend(required.per_contract);
|
|
||||||
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Extends the output selection with another one.
|
/// Extends the output selection with another one.
|
||||||
pub fn extend(&mut self, other: Self) -> &mut Self {
|
pub fn extend(&mut self, other: Self) -> &mut Self {
|
||||||
self.per_file.extend(other.per_file);
|
self.per_file.extend(other.per_file);
|
||||||
|
|||||||
@@ -10,15 +10,63 @@ use serde::Serialize;
|
|||||||
use self::file::flag::Flag;
|
use self::file::flag::Flag;
|
||||||
use self::file::File as FileSelection;
|
use self::file::File as FileSelection;
|
||||||
|
|
||||||
|
/// The `solc --standard-json` per-file output selection.
|
||||||
|
#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq)]
|
||||||
|
pub struct PerFileSelection {
|
||||||
|
/// Individual file selection configuration, required for foundry.
|
||||||
|
#[serde(skip_serializing_if = "BTreeMap::is_empty", flatten)]
|
||||||
|
pub files: BTreeMap<String, FileSelection>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PerFileSelection {
|
||||||
|
/// Extends the output selection with another one.
|
||||||
|
pub fn extend(&mut self, other: Self) {
|
||||||
|
for (entry, file) in other.files {
|
||||||
|
self.files
|
||||||
|
.entry(entry)
|
||||||
|
.and_modify(|v| {
|
||||||
|
v.extend(file.clone());
|
||||||
|
})
|
||||||
|
.or_insert(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns flags that are going to be automatically added by the compiler,
|
||||||
|
/// but were not explicitly requested by the user.
|
||||||
|
///
|
||||||
|
/// Afterwards, the flags are used to prune JSON output before returning it.
|
||||||
|
pub fn selection_to_prune(&self) -> Self {
|
||||||
|
let files = self
|
||||||
|
.files
|
||||||
|
.iter()
|
||||||
|
.map(|(k, v)| (k.to_owned(), v.selection_to_prune()))
|
||||||
|
.collect();
|
||||||
|
Self { files }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns whether `path` contains the `flag` or `None` if there is no selection for `path`.
|
||||||
|
pub fn contains(&self, path: &String, flag: &Flag) -> Option<bool> {
|
||||||
|
if let Some(file) = self.files.get(path) {
|
||||||
|
return Some(file.contains(flag));
|
||||||
|
};
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns whether this is the empty per file selection.
|
||||||
|
pub fn is_empty(&self) -> bool {
|
||||||
|
self.files.is_empty()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// The `solc --standard-json` output selection.
|
/// The `solc --standard-json` output selection.
|
||||||
#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq)]
|
#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq)]
|
||||||
pub struct Selection {
|
pub struct Selection {
|
||||||
/// Only the 'all' wildcard is available for robustness reasons.
|
/// Only the 'all' wildcard is available for robustness reasons.
|
||||||
#[serde(default, rename = "*", skip_serializing_if = "FileSelection::is_empty")]
|
#[serde(default, rename = "*", skip_serializing_if = "FileSelection::is_empty")]
|
||||||
all: FileSelection,
|
/// Individual file selection configuration, required for foundry.
|
||||||
|
pub all: FileSelection,
|
||||||
#[serde(skip_serializing_if = "BTreeMap::is_empty", flatten)]
|
#[serde(skip_serializing_if = "PerFileSelection::is_empty", flatten)]
|
||||||
pub files: BTreeMap<String, FileSelection>,
|
files: PerFileSelection,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Selection {
|
impl Selection {
|
||||||
@@ -32,17 +80,19 @@ impl Selection {
|
|||||||
|
|
||||||
/// Creates the selection required by our compilation process.
|
/// Creates the selection required by our compilation process.
|
||||||
pub fn new_required() -> Self {
|
pub fn new_required() -> Self {
|
||||||
Self {
|
Self::new(vec![
|
||||||
all: FileSelection::new_required(),
|
Flag::AST,
|
||||||
files: BTreeMap::new(),
|
Flag::MethodIdentifiers,
|
||||||
}
|
Flag::Metadata,
|
||||||
|
Flag::Yul,
|
||||||
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates the selection required for test compilation (includes EVM bytecode).
|
/// Creates the selection required for test compilation (includes EVM bytecode).
|
||||||
pub fn new_required_for_tests() -> Self {
|
pub fn new_required_for_tests() -> Self {
|
||||||
Self {
|
Self {
|
||||||
all: FileSelection::new_required_for_tests(),
|
all: FileSelection::new_required_for_tests(),
|
||||||
files: BTreeMap::new(),
|
files: Default::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,6 +104,7 @@ impl Selection {
|
|||||||
/// Extends the output selection with another one.
|
/// Extends the output selection with another one.
|
||||||
pub fn extend(&mut self, other: Self) -> &mut Self {
|
pub fn extend(&mut self, other: Self) -> &mut Self {
|
||||||
self.all.extend(other.all);
|
self.all.extend(other.all);
|
||||||
|
self.files.extend(other.files);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,12 +115,14 @@ impl Selection {
|
|||||||
pub fn selection_to_prune(&self) -> Self {
|
pub fn selection_to_prune(&self) -> Self {
|
||||||
Self {
|
Self {
|
||||||
all: self.all.selection_to_prune(),
|
all: self.all.selection_to_prune(),
|
||||||
files: Default::default(),
|
files: self.files.selection_to_prune(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Whether the flag is requested.
|
/// Whether the flag is requested.
|
||||||
pub fn contains(&self, flag: &Flag) -> bool {
|
pub fn contains(&self, path: &String, flag: &Flag) -> bool {
|
||||||
self.all.contains(flag)
|
self.files
|
||||||
|
.contains(path, flag)
|
||||||
|
.unwrap_or(self.all.contains(flag))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,9 @@
|
|||||||
|
|
||||||
pub mod evm;
|
pub mod evm;
|
||||||
|
|
||||||
|
#[cfg(feature = "resolc")]
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
|
#[cfg(feature = "resolc")]
|
||||||
use std::collections::BTreeSet;
|
use std::collections::BTreeSet;
|
||||||
|
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
@@ -45,19 +47,24 @@ pub struct Contract {
|
|||||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||||
pub hash: Option<String>,
|
pub hash: Option<String>,
|
||||||
/// Unlinked factory dependencies.
|
/// Unlinked factory dependencies.
|
||||||
|
#[cfg(feature = "resolc")]
|
||||||
#[serde(default, skip_deserializing)]
|
#[serde(default, skip_deserializing)]
|
||||||
pub factory_dependencies_unlinked: BTreeSet<String>,
|
pub factory_dependencies_unlinked: BTreeSet<String>,
|
||||||
/// The contract factory dependencies.
|
/// The contract factory dependencies.
|
||||||
|
#[cfg(feature = "resolc")]
|
||||||
#[serde(default, skip_deserializing)]
|
#[serde(default, skip_deserializing)]
|
||||||
pub factory_dependencies: BTreeMap<String, String>,
|
pub factory_dependencies: BTreeMap<String, String>,
|
||||||
/// Missing linkable libraries.
|
/// Missing linkable libraries.
|
||||||
|
#[cfg(feature = "resolc")]
|
||||||
#[serde(default, skip_deserializing)]
|
#[serde(default, skip_deserializing)]
|
||||||
pub missing_libraries: BTreeSet<String>,
|
pub missing_libraries: BTreeSet<String>,
|
||||||
/// Binary object format.
|
/// Binary object format.
|
||||||
#[serde(default, skip_deserializing)]
|
#[cfg(feature = "resolc")]
|
||||||
|
#[serde(default, skip_deserializing, skip_serializing_if = "Option::is_none")]
|
||||||
pub object_format: Option<revive_common::ObjectFormat>,
|
pub object_format: Option<revive_common::ObjectFormat>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "resolc")]
|
||||||
impl Contract {
|
impl Contract {
|
||||||
/// Checks if all fields are unset or empty.
|
/// Checks if all fields are unset or empty.
|
||||||
pub fn is_empty(&self) -> bool {
|
pub fn is_empty(&self) -> bool {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ use crate::standard_json::output::error::error_handler::ErrorHandler;
|
|||||||
use crate::SolcStandardJsonInputSettingsSelection;
|
use crate::SolcStandardJsonInputSettingsSelection;
|
||||||
#[cfg(feature = "resolc")]
|
#[cfg(feature = "resolc")]
|
||||||
use crate::SolcStandardJsonInputSource;
|
use crate::SolcStandardJsonInputSource;
|
||||||
#[cfg(feature = "parallel")]
|
#[cfg(all(feature = "parallel", feature = "resolc"))]
|
||||||
use rayon::iter::{IntoParallelRefIterator, ParallelIterator};
|
use rayon::iter::{IntoParallelRefIterator, ParallelIterator};
|
||||||
|
|
||||||
use self::contract::Contract;
|
use self::contract::Contract;
|
||||||
@@ -56,14 +56,22 @@ impl Output {
|
|||||||
messages: &mut Vec<SolcStandardJsonOutputError>,
|
messages: &mut Vec<SolcStandardJsonOutputError>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let sources = sources
|
let sources = sources
|
||||||
.keys()
|
.iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.map(|(index, path)| (path.to_owned(), Source::new(index)))
|
.map(|(index, (path, source))| {
|
||||||
|
(
|
||||||
|
path.to_owned(),
|
||||||
|
Source {
|
||||||
|
id: index,
|
||||||
|
ast: source.content().map(|x| serde_json::to_value(x).unwrap()),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
})
|
||||||
.collect::<BTreeMap<String, Source>>();
|
.collect::<BTreeMap<String, Source>>();
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
contracts: BTreeMap::new(),
|
contracts: BTreeMap::new(),
|
||||||
sources,
|
sources: sources.clone(),
|
||||||
errors: std::mem::take(messages),
|
errors: std::mem::take(messages),
|
||||||
|
|
||||||
version: None,
|
version: None,
|
||||||
@@ -92,39 +100,30 @@ impl Output {
|
|||||||
mut self,
|
mut self,
|
||||||
selection_to_prune: SolcStandardJsonInputSettingsSelection,
|
selection_to_prune: SolcStandardJsonInputSettingsSelection,
|
||||||
) -> ! {
|
) -> ! {
|
||||||
let sources = self.sources.values_mut().collect::<Vec<&mut Source>>();
|
for (path, contracts) in self.contracts.iter_mut() {
|
||||||
for source in sources.into_iter() {
|
for contract in contracts.values_mut() {
|
||||||
if selection_to_prune
|
if selection_to_prune.contains(
|
||||||
.contains(&crate::SolcStandardJsonInputSettingsSelectionFileFlag::AST)
|
path,
|
||||||
{
|
&crate::SolcStandardJsonInputSettingsSelectionFileFlag::Metadata,
|
||||||
source.ast = None;
|
) {
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let contracts = self
|
|
||||||
.contracts
|
|
||||||
.values_mut()
|
|
||||||
.flat_map(|contracts| contracts.values_mut())
|
|
||||||
.collect::<Vec<&mut Contract>>();
|
|
||||||
for contract in contracts.into_iter() {
|
|
||||||
if selection_to_prune
|
|
||||||
.contains(&crate::SolcStandardJsonInputSettingsSelectionFileFlag::Metadata)
|
|
||||||
{
|
|
||||||
contract.metadata = serde_json::Value::Null;
|
contract.metadata = serde_json::Value::Null;
|
||||||
}
|
}
|
||||||
if selection_to_prune
|
if selection_to_prune.contains(
|
||||||
.contains(&crate::SolcStandardJsonInputSettingsSelectionFileFlag::Yul)
|
path,
|
||||||
{
|
&crate::SolcStandardJsonInputSettingsSelectionFileFlag::Yul,
|
||||||
|
) {
|
||||||
contract.ir_optimized = String::new();
|
contract.ir_optimized = String::new();
|
||||||
}
|
}
|
||||||
if let Some(ref mut evm) = contract.evm {
|
if let Some(ref mut evm) = contract.evm {
|
||||||
if selection_to_prune.contains(
|
if selection_to_prune.contains(
|
||||||
|
path,
|
||||||
&crate::SolcStandardJsonInputSettingsSelectionFileFlag::MethodIdentifiers,
|
&crate::SolcStandardJsonInputSettingsSelectionFileFlag::MethodIdentifiers,
|
||||||
) {
|
) {
|
||||||
evm.method_identifiers.clear();
|
evm.method_identifiers.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.contracts.retain(|_, contracts| {
|
self.contracts.retain(|_, contracts| {
|
||||||
contracts.retain(|_, contract| !contract.is_empty());
|
contracts.retain(|_, contract| !contract.is_empty());
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "revive-stdlib"
|
name = "revive-stdlib"
|
||||||
version = "0.1.1"
|
version = "0.2.0"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
repository.workspace = true
|
repository.workspace = true
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "revive-yul"
|
name = "revive-yul"
|
||||||
description = "The revive YUL parser library."
|
description = "The revive YUL parser library."
|
||||||
version = "0.3.0"
|
version = "0.3.1"
|
||||||
authors.workspace = true
|
authors.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ impl Expression {
|
|||||||
anyhow::anyhow!(
|
anyhow::anyhow!(
|
||||||
"{} Invalid literal `{}`: {}",
|
"{} Invalid literal `{}`: {}",
|
||||||
literal.location,
|
literal.location,
|
||||||
literal.inner.to_string(),
|
literal.inner,
|
||||||
error
|
error
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@parity/resolc",
|
"name": "@parity/resolc",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"version": "0.4.0",
|
"version": "0.4.1",
|
||||||
"author": "Parity <admin@parity.io> (https://parity.io)",
|
"author": "Parity <admin@parity.io> (https://parity.io)",
|
||||||
"module": "index.ts",
|
"module": "index.ts",
|
||||||
"types": "./dist/index.d.ts",
|
"types": "./dist/index.d.ts",
|
||||||
|
|||||||
Generated
+1
-1
@@ -31,7 +31,7 @@
|
|||||||
},
|
},
|
||||||
"js/resolc": {
|
"js/resolc": {
|
||||||
"name": "@parity/resolc",
|
"name": "@parity/resolc",
|
||||||
"version": "0.4.0",
|
"version": "0.4.1",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/node": "^22.9.0",
|
"@types/node": "^22.9.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user