mirror of
https://github.com/pezkuwichain/revive.git
synced 2026-10-20 18:56:17 +00:00
resolc crate (#328)
- Factor the YUL crate out of `revive-solidity`. - `revive-solidity` is in reality not a Solidity implementation but the revive solidity compiler driver (`resolc`). By renaming we not only get this straight but also a binary with the same name as the crate which should be less confusing. --------- Signed-off-by: Cyrill Leutwiler <bigcyrill@hotmail.com>
This commit is contained in:
1 parent
090e3ac13c
commit
bd4e108bb0
99 files changed
+599
-624
No files matched your search
@@ -94,7 +94,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Install LLVM Builder
|
- name: Install LLVM Builder
|
||||||
run: |
|
run: |
|
||||||
cargo install --path crates/llvm-builder
|
cargo install --locked --force --path crates/llvm-builder
|
||||||
|
|
||||||
- name: Clone LLVM
|
- name: Clone LLVM
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
Generated
+41
-29
@@ -8358,6 +8358,31 @@ dependencies = [
|
|||||||
"windows-registry",
|
"windows-registry",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "resolc"
|
||||||
|
version = "0.1.0-dev.16"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"clap",
|
||||||
|
"git2",
|
||||||
|
"hex",
|
||||||
|
"inkwell",
|
||||||
|
"libc",
|
||||||
|
"mimalloc",
|
||||||
|
"once_cell",
|
||||||
|
"path-slash",
|
||||||
|
"rayon",
|
||||||
|
"revive-common",
|
||||||
|
"revive-llvm-context",
|
||||||
|
"revive-solc-json-interface",
|
||||||
|
"revive-yul",
|
||||||
|
"semver 1.0.26",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
"sha3",
|
||||||
|
"which",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "revive-benchmarks"
|
name = "revive-benchmarks"
|
||||||
version = "0.1.0-dev.16"
|
version = "0.1.0-dev.16"
|
||||||
@@ -8412,9 +8437,9 @@ dependencies = [
|
|||||||
"alloy-sol-types",
|
"alloy-sol-types",
|
||||||
"hex",
|
"hex",
|
||||||
"rayon",
|
"rayon",
|
||||||
|
"resolc",
|
||||||
"revive-llvm-context",
|
"revive-llvm-context",
|
||||||
"revive-runner",
|
"revive-runner",
|
||||||
"revive-solidity",
|
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"sha1",
|
"sha1",
|
||||||
@@ -8487,9 +8512,9 @@ dependencies = [
|
|||||||
"hex",
|
"hex",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"polkadot-sdk 2503.0.1",
|
"polkadot-sdk 2503.0.1",
|
||||||
|
"resolc",
|
||||||
"revive-differential",
|
"revive-differential",
|
||||||
"revive-llvm-context",
|
"revive-llvm-context",
|
||||||
"revive-solidity",
|
|
||||||
"scale-info",
|
"scale-info",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
@@ -8517,33 +8542,6 @@ dependencies = [
|
|||||||
"serde_json",
|
"serde_json",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "revive-solidity"
|
|
||||||
version = "0.1.0-dev.16"
|
|
||||||
dependencies = [
|
|
||||||
"anyhow",
|
|
||||||
"clap",
|
|
||||||
"git2",
|
|
||||||
"hex",
|
|
||||||
"inkwell",
|
|
||||||
"libc",
|
|
||||||
"mimalloc",
|
|
||||||
"num",
|
|
||||||
"once_cell",
|
|
||||||
"path-slash",
|
|
||||||
"rayon",
|
|
||||||
"regex",
|
|
||||||
"revive-common",
|
|
||||||
"revive-llvm-context",
|
|
||||||
"revive-solc-json-interface",
|
|
||||||
"semver 1.0.26",
|
|
||||||
"serde",
|
|
||||||
"serde_json",
|
|
||||||
"sha3",
|
|
||||||
"thiserror 2.0.12",
|
|
||||||
"which",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "revive-stdlib"
|
name = "revive-stdlib"
|
||||||
version = "0.1.0-dev.16"
|
version = "0.1.0-dev.16"
|
||||||
@@ -8552,6 +8550,20 @@ dependencies = [
|
|||||||
"revive-build-utils",
|
"revive-build-utils",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "revive-yul"
|
||||||
|
version = "0.1.0-dev.16"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"inkwell",
|
||||||
|
"num",
|
||||||
|
"regex",
|
||||||
|
"revive-common",
|
||||||
|
"revive-llvm-context",
|
||||||
|
"serde",
|
||||||
|
"thiserror 2.0.12",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rfc6979"
|
name = "rfc6979"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
|
|||||||
+2
-1
@@ -14,6 +14,7 @@ repository = "https://github.com/paritytech/revive"
|
|||||||
rust-version = "1.85.0"
|
rust-version = "1.85.0"
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
|
resolc = { version = "0.1.0-dev.16", path = "crates/resolc" }
|
||||||
revive-benchmarks = { version = "0.1.0-dev.16", path = "crates/benchmarks" }
|
revive-benchmarks = { version = "0.1.0-dev.16", path = "crates/benchmarks" }
|
||||||
revive-builtins = { version = "0.1.0-dev.16", path = "crates/builtins" }
|
revive-builtins = { version = "0.1.0-dev.16", path = "crates/builtins" }
|
||||||
revive-common = { version = "0.1.0-dev.16", path = "crates/common" }
|
revive-common = { version = "0.1.0-dev.16", path = "crates/common" }
|
||||||
@@ -25,9 +26,9 @@ revive-llvm-context = { version = "0.1.0-dev.16", path = "crates/llvm-context" }
|
|||||||
revive-runtime-api = { version = "0.1.0-dev.16", path = "crates/runtime-api" }
|
revive-runtime-api = { version = "0.1.0-dev.16", path = "crates/runtime-api" }
|
||||||
revive-runner = { version = "0.1.0-dev.16", path = "crates/runner" }
|
revive-runner = { version = "0.1.0-dev.16", path = "crates/runner" }
|
||||||
revive-solc-json-interface = { version = "0.1.0-dev.16", path = "crates/solc-json-interface" }
|
revive-solc-json-interface = { version = "0.1.0-dev.16", path = "crates/solc-json-interface" }
|
||||||
revive-solidity = { version = "0.1.0-dev.16", path = "crates/solidity" }
|
|
||||||
revive-stdlib = { version = "0.1.0-dev.16", path = "crates/stdlib" }
|
revive-stdlib = { version = "0.1.0-dev.16", path = "crates/stdlib" }
|
||||||
revive-build-utils = { version = "0.1.0-dev.16", path = "crates/build-utils" }
|
revive-build-utils = { version = "0.1.0-dev.16", path = "crates/build-utils" }
|
||||||
|
revive-yul = { version = "0.1.0-dev.16", path = "crates/yul" }
|
||||||
|
|
||||||
hex = "0.4.3"
|
hex = "0.4.3"
|
||||||
cc = "1.2"
|
cc = "1.2"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
machete \
|
machete \
|
||||||
test \
|
test \
|
||||||
test-integration \
|
test-integration \
|
||||||
test-solidity \
|
test-resolc \
|
||||||
test-workspace \
|
test-workspace \
|
||||||
test-cli \
|
test-cli \
|
||||||
test-wasm \
|
test-wasm \
|
||||||
@@ -24,24 +24,24 @@
|
|||||||
install: install-bin install-npm
|
install: install-bin install-npm
|
||||||
|
|
||||||
install-bin:
|
install-bin:
|
||||||
cargo install --locked --path crates/solidity
|
cargo install --force --locked --path crates/resolc
|
||||||
|
|
||||||
install-npm:
|
install-npm:
|
||||||
npm install && npm fund
|
npm install && npm fund
|
||||||
|
|
||||||
install-wasm: install-npm
|
install-wasm: install-npm
|
||||||
cargo build --target wasm32-unknown-emscripten -p revive-solidity --release --no-default-features
|
cargo build --target wasm32-unknown-emscripten -p resolc --release --no-default-features
|
||||||
npm run build:package
|
npm run build:package
|
||||||
|
|
||||||
install-llvm-builder:
|
install-llvm-builder:
|
||||||
cargo install --path crates/llvm-builder
|
cargo install --force --locked --path crates/llvm-builder
|
||||||
|
|
||||||
install-llvm: install-llvm-builder
|
install-llvm: install-llvm-builder
|
||||||
revive-llvm clone
|
revive-llvm clone
|
||||||
revive-llvm build --llvm-projects lld --llvm-projects clang
|
revive-llvm build --llvm-projects lld --llvm-projects clang
|
||||||
|
|
||||||
install-revive-runner:
|
install-revive-runner:
|
||||||
cargo install --path crates/runner --no-default-features --locked
|
cargo install --locked --force --path crates/runner --no-default-features
|
||||||
|
|
||||||
format:
|
format:
|
||||||
cargo fmt --all --check
|
cargo fmt --all --check
|
||||||
@@ -58,8 +58,8 @@ test: format clippy machete test-cli test-workspace install-revive-runner
|
|||||||
test-integration: install-bin
|
test-integration: install-bin
|
||||||
cargo test --package revive-integration
|
cargo test --package revive-integration
|
||||||
|
|
||||||
test-solidity: install
|
test-resolc: install
|
||||||
cargo test --package revive-solidity
|
cargo test --package resolc
|
||||||
|
|
||||||
test-workspace: install
|
test-workspace: install
|
||||||
cargo test --workspace --exclude revive-llvm-builder
|
cargo test --workspace --exclude revive-llvm-builder
|
||||||
@@ -90,6 +90,6 @@ clean:
|
|||||||
cargo clean ; \
|
cargo clean ; \
|
||||||
revive-llvm clean ; \
|
revive-llvm clean ; \
|
||||||
rm -rf node_modules ; \
|
rm -rf node_modules ; \
|
||||||
rm -rf crates/solidity/src/tests/cli-tests/artifacts ; \
|
rm -rf crates/resolc/src/tests/cli-tests/artifacts ; \
|
||||||
cargo uninstall revive-solidity ; \
|
cargo uninstall resolc ; \
|
||||||
cargo uninstall revive-llvm-builder ;
|
cargo uninstall revive-llvm-builder ;
|
||||||
@@ -13,7 +13,7 @@ alloy-sol-types = { workspace = true }
|
|||||||
hex = { workspace = true }
|
hex = { workspace = true }
|
||||||
serde_json = { workspace = true }
|
serde_json = { workspace = true }
|
||||||
|
|
||||||
revive-solidity = { workspace = true }
|
resolc = { workspace = true }
|
||||||
revive-runner = { workspace = true }
|
revive-runner = { workspace = true }
|
||||||
revive-llvm-context = { workspace = true }
|
revive-llvm-context = { workspace = true }
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
use alloy_primitives::{Address, Bytes, I256, U256};
|
use alloy_primitives::{Address, Bytes, I256, U256};
|
||||||
use alloy_sol_types::{sol, SolCall, SolConstructor};
|
use alloy_sol_types::{sol, SolCall, SolConstructor};
|
||||||
|
|
||||||
|
use resolc::test_utils::*;
|
||||||
use revive_llvm_context::OptimizerSettings;
|
use revive_llvm_context::OptimizerSettings;
|
||||||
use revive_solidity::test_utils::*;
|
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct Contract {
|
pub struct Contract {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "revive-solidity"
|
name = "resolc"
|
||||||
version.workspace = true
|
version.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
@@ -18,26 +18,23 @@ path = "src/resolc/main.rs"
|
|||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap = { workspace = true }
|
|
||||||
thiserror = { workspace = true }
|
|
||||||
anyhow = { workspace = true }
|
anyhow = { workspace = true }
|
||||||
which = { workspace = true }
|
clap = { workspace = true }
|
||||||
|
hex = { workspace = true }
|
||||||
|
inkwell = { workspace = true }
|
||||||
|
once_cell = { workspace = true }
|
||||||
path-slash = { workspace = true }
|
path-slash = { workspace = true }
|
||||||
rayon = { workspace = true, optional = true }
|
rayon = { workspace = true, optional = true }
|
||||||
|
semver = { workspace = true }
|
||||||
serde = { workspace = true }
|
serde = { workspace = true }
|
||||||
serde_json = { workspace = true }
|
serde_json = { workspace = true }
|
||||||
semver = { workspace = true }
|
|
||||||
once_cell = { workspace = true }
|
|
||||||
regex = { workspace = true }
|
|
||||||
hex = { workspace = true }
|
|
||||||
num = { workspace = true }
|
|
||||||
sha3 = { workspace = true }
|
sha3 = { workspace = true }
|
||||||
inkwell = { workspace = true }
|
which = { workspace = true }
|
||||||
|
|
||||||
revive-common = { workspace = true }
|
revive-common = { workspace = true }
|
||||||
revive-llvm-context = { workspace = true }
|
revive-llvm-context = { workspace = true }
|
||||||
revive-solc-json-interface = { workspace = true, features = ["resolc"] }
|
revive-solc-json-interface = { workspace = true, features = ["resolc"] }
|
||||||
|
revive-yul = { workspace = true }
|
||||||
|
|
||||||
[target.'cfg(target_env = "musl")'.dependencies]
|
[target.'cfg(target_env = "musl")'.dependencies]
|
||||||
mimalloc = { version = "*", default-features = false }
|
mimalloc = { version = "*", default-features = false }
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -7,7 +7,6 @@ pub(crate) mod process;
|
|||||||
pub(crate) mod project;
|
pub(crate) mod project;
|
||||||
pub(crate) mod solc;
|
pub(crate) mod solc;
|
||||||
pub(crate) mod version;
|
pub(crate) mod version;
|
||||||
pub(crate) mod yul;
|
|
||||||
|
|
||||||
pub use self::build::contract::Contract as ContractBuild;
|
pub use self::build::contract::Contract as ContractBuild;
|
||||||
pub use self::build::Build;
|
pub use self::build::Build;
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+1
-1
@@ -8,7 +8,7 @@ use std::collections::HashSet;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::yul::parser::statement::object::Object;
|
use revive_yul::parser::statement::object::Object;
|
||||||
|
|
||||||
use self::llvm_ir::LLVMIR;
|
use self::llvm_ir::LLVMIR;
|
||||||
use self::yul::Yul;
|
use self::yul::Yul;
|
||||||
+1
-1
@@ -5,7 +5,7 @@ use std::collections::HashSet;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::yul::parser::statement::object::Object;
|
use revive_yul::parser::statement::object::Object;
|
||||||
|
|
||||||
/// The contract Yul source code.
|
/// The contract Yul source code.
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone)]
|
#[derive(Debug, Serialize, Deserialize, Clone)]
|
||||||
File renamed without changes.
File renamed without changes.
@@ -9,11 +9,14 @@ use std::path::Path;
|
|||||||
|
|
||||||
#[cfg(feature = "parallel")]
|
#[cfg(feature = "parallel")]
|
||||||
use rayon::iter::{IntoParallelIterator, ParallelIterator};
|
use rayon::iter::{IntoParallelIterator, ParallelIterator};
|
||||||
use revive_solc_json_interface::SolcStandardJsonOutput;
|
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use sha3::Digest;
|
use sha3::Digest;
|
||||||
|
|
||||||
|
use revive_solc_json_interface::SolcStandardJsonOutput;
|
||||||
|
use revive_yul::lexer::Lexer;
|
||||||
|
use revive_yul::parser::statement::object::Object;
|
||||||
|
|
||||||
use crate::build::contract::Contract as ContractBuild;
|
use crate::build::contract::Contract as ContractBuild;
|
||||||
use crate::build::Build;
|
use crate::build::Build;
|
||||||
use crate::missing_libraries::MissingLibraries;
|
use crate::missing_libraries::MissingLibraries;
|
||||||
@@ -22,8 +25,6 @@ use crate::process::Process;
|
|||||||
use crate::project::contract::ir::IR;
|
use crate::project::contract::ir::IR;
|
||||||
use crate::solc::version::Version as SolcVersion;
|
use crate::solc::version::Version as SolcVersion;
|
||||||
use crate::solc::Compiler;
|
use crate::solc::Compiler;
|
||||||
use crate::yul::lexer::Lexer;
|
|
||||||
use crate::yul::parser::statement::object::Object;
|
|
||||||
|
|
||||||
use self::contract::Contract;
|
use self::contract::Contract;
|
||||||
|
|
||||||
File renamed without changes.
@@ -5,7 +5,7 @@ pub mod arguments;
|
|||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
use revive_solidity::Process;
|
use resolc::Process;
|
||||||
|
|
||||||
use self::arguments::Arguments;
|
use self::arguments::Arguments;
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ fn main_inner() -> anyhow::Result<()> {
|
|||||||
std::io::stdout(),
|
std::io::stdout(),
|
||||||
"{} version {}",
|
"{} version {}",
|
||||||
env!("CARGO_PKG_DESCRIPTION"),
|
env!("CARGO_PKG_DESCRIPTION"),
|
||||||
revive_solidity::ResolcVersion::default().long
|
resolc::ResolcVersion::default().long
|
||||||
)?;
|
)?;
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
@@ -45,8 +45,8 @@ fn main_inner() -> anyhow::Result<()> {
|
|||||||
writeln!(
|
writeln!(
|
||||||
std::io::stdout(),
|
std::io::stdout(),
|
||||||
">={},<={}",
|
">={},<={}",
|
||||||
revive_solidity::SolcFirstSupportedVersion,
|
resolc::SolcFirstSupportedVersion,
|
||||||
revive_solidity::SolcLastSupportedVersion,
|
resolc::SolcLastSupportedVersion,
|
||||||
)?;
|
)?;
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
@@ -71,20 +71,20 @@ fn main_inner() -> anyhow::Result<()> {
|
|||||||
let mut infile = std::fs::File::open(fname)?;
|
let mut infile = std::fs::File::open(fname)?;
|
||||||
#[cfg(target_os = "emscripten")]
|
#[cfg(target_os = "emscripten")]
|
||||||
{
|
{
|
||||||
return revive_solidity::WorkerProcess::run(Some(&mut infile));
|
return resolc::WorkerProcess::run(Some(&mut infile));
|
||||||
}
|
}
|
||||||
#[cfg(not(target_os = "emscripten"))]
|
#[cfg(not(target_os = "emscripten"))]
|
||||||
{
|
{
|
||||||
return revive_solidity::NativeProcess::run(Some(&mut infile));
|
return resolc::NativeProcess::run(Some(&mut infile));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[cfg(target_os = "emscripten")]
|
#[cfg(target_os = "emscripten")]
|
||||||
{
|
{
|
||||||
return revive_solidity::WorkerProcess::run(None);
|
return resolc::WorkerProcess::run(None);
|
||||||
}
|
}
|
||||||
#[cfg(not(target_os = "emscripten"))]
|
#[cfg(not(target_os = "emscripten"))]
|
||||||
{
|
{
|
||||||
return revive_solidity::NativeProcess::run(None);
|
return resolc::NativeProcess::run(None);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,14 +111,16 @@ fn main_inner() -> anyhow::Result<()> {
|
|||||||
let mut solc = {
|
let mut solc = {
|
||||||
#[cfg(target_os = "emscripten")]
|
#[cfg(target_os = "emscripten")]
|
||||||
{
|
{
|
||||||
revive_solidity::SoljsonCompiler
|
resolc::SoljsonCompiler
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(target_os = "emscripten"))]
|
#[cfg(not(target_os = "emscripten"))]
|
||||||
{
|
{
|
||||||
revive_solidity::SolcCompiler::new(arguments.solc.unwrap_or_else(|| {
|
resolc::SolcCompiler::new(
|
||||||
revive_solidity::SolcCompiler::DEFAULT_EXECUTABLE_NAME.to_owned()
|
arguments
|
||||||
}))?
|
.solc
|
||||||
|
.unwrap_or_else(|| resolc::SolcCompiler::DEFAULT_EXECUTABLE_NAME.to_owned()),
|
||||||
|
)?
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -158,7 +160,7 @@ fn main_inner() -> anyhow::Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let build = if arguments.yul {
|
let build = if arguments.yul {
|
||||||
revive_solidity::yul(
|
resolc::yul(
|
||||||
input_files.as_slice(),
|
input_files.as_slice(),
|
||||||
&mut solc,
|
&mut solc,
|
||||||
optimizer_settings,
|
optimizer_settings,
|
||||||
@@ -168,7 +170,7 @@ fn main_inner() -> anyhow::Result<()> {
|
|||||||
memory_config,
|
memory_config,
|
||||||
)
|
)
|
||||||
} else if arguments.llvm_ir {
|
} else if arguments.llvm_ir {
|
||||||
revive_solidity::llvm_ir(
|
resolc::llvm_ir(
|
||||||
input_files.as_slice(),
|
input_files.as_slice(),
|
||||||
optimizer_settings,
|
optimizer_settings,
|
||||||
include_metadata_hash,
|
include_metadata_hash,
|
||||||
@@ -177,7 +179,7 @@ fn main_inner() -> anyhow::Result<()> {
|
|||||||
memory_config,
|
memory_config,
|
||||||
)
|
)
|
||||||
} else if arguments.standard_json {
|
} else if arguments.standard_json {
|
||||||
revive_solidity::standard_json(
|
resolc::standard_json(
|
||||||
&mut solc,
|
&mut solc,
|
||||||
arguments.detect_missing_libraries,
|
arguments.detect_missing_libraries,
|
||||||
arguments.base_path,
|
arguments.base_path,
|
||||||
@@ -188,7 +190,7 @@ fn main_inner() -> anyhow::Result<()> {
|
|||||||
)?;
|
)?;
|
||||||
return Ok(());
|
return Ok(());
|
||||||
} else if let Some(format) = arguments.combined_json {
|
} else if let Some(format) = arguments.combined_json {
|
||||||
revive_solidity::combined_json(
|
resolc::combined_json(
|
||||||
format,
|
format,
|
||||||
input_files.as_slice(),
|
input_files.as_slice(),
|
||||||
arguments.libraries,
|
arguments.libraries,
|
||||||
@@ -210,7 +212,7 @@ fn main_inner() -> anyhow::Result<()> {
|
|||||||
)?;
|
)?;
|
||||||
return Ok(());
|
return Ok(());
|
||||||
} else {
|
} else {
|
||||||
revive_solidity::standard_output(
|
resolc::standard_output(
|
||||||
input_files.as_slice(),
|
input_files.as_slice(),
|
||||||
arguments.libraries,
|
arguments.libraries,
|
||||||
&mut solc,
|
&mut solc,
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -17,7 +17,7 @@ path = "src/main.rs"
|
|||||||
[features]
|
[features]
|
||||||
std = ["polkadot-sdk/std"]
|
std = ["polkadot-sdk/std"]
|
||||||
default = ["solidity"]
|
default = ["solidity"]
|
||||||
solidity = ["revive-solidity", "revive-differential", "revive-llvm-context"]
|
solidity = ["resolc", "revive-differential", "revive-llvm-context"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
env_logger = { workspace = true }
|
env_logger = { workspace = true }
|
||||||
@@ -39,6 +39,6 @@ polkadot-sdk.features = [
|
|||||||
"pallet-timestamp"
|
"pallet-timestamp"
|
||||||
]
|
]
|
||||||
|
|
||||||
revive-solidity = { workspace = true, optional = true }
|
resolc = { workspace = true, optional = true }
|
||||||
revive-differential = { workspace = true, optional = true }
|
revive-differential = { workspace = true, optional = true }
|
||||||
revive-llvm-context = { workspace = true, optional = true }
|
revive-llvm-context = { workspace = true, optional = true }
|
||||||
@@ -44,7 +44,7 @@ pub use crate::specs::*;
|
|||||||
mod runtime;
|
mod runtime;
|
||||||
mod specs;
|
mod specs;
|
||||||
|
|
||||||
#[cfg(not(feature = "revive-solidity"))]
|
#[cfg(not(feature = "resolc"))]
|
||||||
pub(crate) const NO_SOLIDITY_FRONTEND: &str =
|
pub(crate) const NO_SOLIDITY_FRONTEND: &str =
|
||||||
"revive-runner was built without the solidity frontend; please enable the 'solidity' feature!";
|
"revive-runner was built without the solidity frontend; please enable the 'solidity' feature!";
|
||||||
|
|
||||||
@@ -234,7 +234,7 @@ impl CallResult {
|
|||||||
|
|
||||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||||
pub enum Code {
|
pub enum Code {
|
||||||
#[cfg(feature = "revive-solidity")]
|
#[cfg(feature = "resolc")]
|
||||||
/// Compile a single solidity source and use the blob of `contract`
|
/// Compile a single solidity source and use the blob of `contract`
|
||||||
Solidity {
|
Solidity {
|
||||||
path: Option<std::path::PathBuf>,
|
path: Option<std::path::PathBuf>,
|
||||||
@@ -270,7 +270,7 @@ impl From<Code> for pallet_revive::Code {
|
|||||||
let Ok(source_code) = std::fs::read_to_string(&path) else {
|
let Ok(source_code) = std::fs::read_to_string(&path) else {
|
||||||
panic!("Failed to reead source code from {}", path.display());
|
panic!("Failed to reead source code from {}", path.display());
|
||||||
};
|
};
|
||||||
pallet_revive::Code::Upload(revive_solidity::test_utils::compile_blob_with_options(
|
pallet_revive::Code::Upload(resolc::test_utils::compile_blob_with_options(
|
||||||
&contract,
|
&contract,
|
||||||
&source_code,
|
&source_code,
|
||||||
solc_optimizer.unwrap_or(true),
|
solc_optimizer.unwrap_or(true),
|
||||||
|
|||||||
@@ -4,12 +4,12 @@ use serde::{Deserialize, Serialize};
|
|||||||
|
|
||||||
use crate::*;
|
use crate::*;
|
||||||
use alloy_primitives::keccak256;
|
use alloy_primitives::keccak256;
|
||||||
#[cfg(feature = "revive-solidity")]
|
#[cfg(feature = "resolc")]
|
||||||
use alloy_primitives::Address;
|
use alloy_primitives::Address;
|
||||||
#[cfg(feature = "revive-solidity")]
|
#[cfg(feature = "resolc")]
|
||||||
|
use resolc::test_utils::*;
|
||||||
|
#[cfg(feature = "resolc")]
|
||||||
use revive_differential::{Evm, EvmLog};
|
use revive_differential::{Evm, EvmLog};
|
||||||
#[cfg(feature = "revive-solidity")]
|
|
||||||
use revive_solidity::test_utils::*;
|
|
||||||
|
|
||||||
const SPEC_MARKER_BEGIN: &str = "/* runner.json";
|
const SPEC_MARKER_BEGIN: &str = "/* runner.json";
|
||||||
const SPEC_MARKER_END: &str = "*/";
|
const SPEC_MARKER_END: &str = "*/";
|
||||||
@@ -256,7 +256,7 @@ impl Specs {
|
|||||||
};
|
};
|
||||||
|
|
||||||
match code {
|
match code {
|
||||||
#[cfg(feature = "revive-solidity")]
|
#[cfg(feature = "resolc")]
|
||||||
Code::Bytes(bytes) if bytes.is_empty() => {
|
Code::Bytes(bytes) if bytes.is_empty() => {
|
||||||
let contract_source = match std::fs::read_to_string(contract_path) {
|
let contract_source = match std::fs::read_to_string(contract_path) {
|
||||||
Err(err) => panic!("unable to read {contract_path}: {err}"),
|
Err(err) => panic!("unable to read {contract_path}: {err}"),
|
||||||
@@ -264,9 +264,9 @@ impl Specs {
|
|||||||
};
|
};
|
||||||
*bytes = compile_blob(contract_name, &contract_source)
|
*bytes = compile_blob(contract_name, &contract_source)
|
||||||
}
|
}
|
||||||
#[cfg(not(feature = "revive-solidity"))]
|
#[cfg(not(feature = "resolc"))]
|
||||||
Code::Bytes(_) => panic!("{NO_SOLIDITY_FRONTEND}"),
|
Code::Bytes(_) => panic!("{NO_SOLIDITY_FRONTEND}"),
|
||||||
#[cfg(feature = "revive-solidity")]
|
#[cfg(feature = "resolc")]
|
||||||
Code::Solidity { path, .. } if path.is_none() => *path = Some(contract_path.into()),
|
Code::Solidity { path, .. } if path.is_none() => *path = Some(contract_path.into()),
|
||||||
_ => continue,
|
_ => continue,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
[package]
|
||||||
|
name = "revive-yul"
|
||||||
|
description = "The revive YUL parser library."
|
||||||
|
version.workspace = true
|
||||||
|
authors.workspace = true
|
||||||
|
license.workspace = true
|
||||||
|
edition.workspace = true
|
||||||
|
repository.workspace = true
|
||||||
|
rust-version.workspace = true
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
anyhow = { workspace = true }
|
||||||
|
inkwell = { workspace = true }
|
||||||
|
num = { workspace = true }
|
||||||
|
regex = { workspace = true }
|
||||||
|
serde = { workspace = true }
|
||||||
|
thiserror = { workspace = true }
|
||||||
|
|
||||||
|
revive-common = { workspace = true }
|
||||||
|
revive-llvm-context = { workspace = true }
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
//! The Yul IR error.
|
//! The Yul IR error.
|
||||||
|
|
||||||
use crate::yul::lexer::error::Error as LexerError;
|
use crate::lexer::error::Error as LexerError;
|
||||||
use crate::yul::parser::error::Error as ParserError;
|
use crate::parser::error::Error as ParserError;
|
||||||
|
|
||||||
/// The Yul IR error.
|
/// The Yul IR error.
|
||||||
#[derive(Debug, thiserror::Error, PartialEq, Eq)]
|
#[derive(Debug, thiserror::Error, PartialEq, Eq)]
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
//! The Yul IR lexer error.
|
//! The Yul IR lexer error.
|
||||||
|
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
|
|
||||||
/// The Yul IR lexer error.
|
/// The Yul IR lexer error.
|
||||||
#[derive(Debug, thiserror::Error, PartialEq, Eq)]
|
#[derive(Debug, thiserror::Error, PartialEq, Eq)]
|
||||||
@@ -42,6 +42,7 @@ impl Lexer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Advances the lexer, returning the next lexeme.
|
/// Advances the lexer, returning the next lexeme.
|
||||||
|
#[allow(clippy::should_implement_trait)]
|
||||||
pub fn next(&mut self) -> Result<Token, Error> {
|
pub fn next(&mut self) -> Result<Token, Error> {
|
||||||
if let Some(peeked) = self.peeked.take() {
|
if let Some(peeked) = self.peeked.take() {
|
||||||
return Ok(peeked);
|
return Ok(peeked);
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
//! The Yul IR lexer tests.
|
//! The Yul IR lexer tests.
|
||||||
|
|
||||||
use crate::yul::lexer::error::Error;
|
use crate::lexer::error::Error;
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn default() {
|
fn default() {
|
||||||
+1
-1
@@ -3,7 +3,7 @@
|
|||||||
pub mod multi_line;
|
pub mod multi_line;
|
||||||
pub mod single_line;
|
pub mod single_line;
|
||||||
|
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
|
|
||||||
use self::multi_line::Comment as MultiLineComment;
|
use self::multi_line::Comment as MultiLineComment;
|
||||||
use self::single_line::Comment as SingleLineComment;
|
use self::single_line::Comment as SingleLineComment;
|
||||||
+3
-3
@@ -1,8 +1,8 @@
|
|||||||
//! The multi-line comment lexeme.
|
//! The multi-line comment lexeme.
|
||||||
|
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
|
|
||||||
/// The multi-line comment lexeme.
|
/// The multi-line comment lexeme.
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
+3
-3
@@ -1,8 +1,8 @@
|
|||||||
//! The single-line comment lexeme.
|
//! The single-line comment lexeme.
|
||||||
|
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
|
|
||||||
/// The single-line comment lexeme.
|
/// The single-line comment lexeme.
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
+4
-4
@@ -1,9 +1,9 @@
|
|||||||
//! The identifier lexeme.
|
//! The identifier lexeme.
|
||||||
|
|
||||||
use crate::yul::lexer::token::lexeme::keyword::Keyword;
|
use crate::lexer::token::lexeme::keyword::Keyword;
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
|
|
||||||
/// The identifier lexeme.
|
/// The identifier lexeme.
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
+5
-5
@@ -1,10 +1,10 @@
|
|||||||
//! The keyword lexeme.
|
//! The keyword lexeme.
|
||||||
|
|
||||||
use crate::yul::lexer::token::lexeme::literal::boolean::Boolean as BooleanLiteral;
|
use crate::lexer::token::lexeme::literal::boolean::Boolean as BooleanLiteral;
|
||||||
use crate::yul::lexer::token::lexeme::literal::Literal;
|
use crate::lexer::token::lexeme::literal::Literal;
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
|
|
||||||
/// The keyword lexeme.
|
/// The keyword lexeme.
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
+1
-1
@@ -3,7 +3,7 @@
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::yul::lexer::token::lexeme::keyword::Keyword;
|
use crate::lexer::token::lexeme::keyword::Keyword;
|
||||||
|
|
||||||
/// The boolean literal lexeme.
|
/// The boolean literal lexeme.
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
||||||
+4
-4
@@ -3,10 +3,10 @@
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::lexeme::Literal;
|
use crate::lexer::token::lexeme::Literal;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
|
|
||||||
/// The integer literal lexeme.
|
/// The integer literal lexeme.
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
||||||
File renamed without changes.
+4
-4
@@ -3,10 +3,10 @@
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::lexeme::Literal;
|
use crate::lexer::token::lexeme::Literal;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
|
|
||||||
/// The string literal lexeme.
|
/// The string literal lexeme.
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
||||||
File renamed without changes.
+3
-3
@@ -1,8 +1,8 @@
|
|||||||
//! The symbol lexeme.
|
//! The symbol lexeme.
|
||||||
|
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
|
|
||||||
/// The symbol lexeme.
|
/// The symbol lexeme.
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
use std::collections::BTreeSet;
|
use std::collections::BTreeSet;
|
||||||
|
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
|
|
||||||
/// The Yul IR parser error.
|
/// The Yul IR parser error.
|
||||||
#[derive(Debug, thiserror::Error, PartialEq, Eq)]
|
#[derive(Debug, thiserror::Error, PartialEq, Eq)]
|
||||||
@@ -3,13 +3,13 @@
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::yul::error::Error;
|
use crate::error::Error;
|
||||||
use crate::yul::lexer::token::lexeme::symbol::Symbol;
|
use crate::lexer::token::lexeme::symbol::Symbol;
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::r#type::Type;
|
use crate::parser::r#type::Type;
|
||||||
|
|
||||||
/// The YUL source code identifier.
|
/// The YUL source code identifier.
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
||||||
@@ -50,7 +50,7 @@ impl Identifier {
|
|||||||
|
|
||||||
let mut expected_comma = false;
|
let mut expected_comma = false;
|
||||||
loop {
|
loop {
|
||||||
let token = crate::yul::parser::take_or_next(initial.take(), lexer)?;
|
let token = crate::parser::take_or_next(initial.take(), lexer)?;
|
||||||
|
|
||||||
match token {
|
match token {
|
||||||
Token {
|
Token {
|
||||||
@@ -81,7 +81,7 @@ impl Identifier {
|
|||||||
|
|
||||||
let mut expected_comma = false;
|
let mut expected_comma = false;
|
||||||
loop {
|
loop {
|
||||||
let token = crate::yul::parser::take_or_next(initial.take(), lexer)?;
|
let token = crate::parser::take_or_next(initial.take(), lexer)?;
|
||||||
|
|
||||||
match token {
|
match token {
|
||||||
Token {
|
Token {
|
||||||
@@ -5,9 +5,9 @@ pub mod identifier;
|
|||||||
pub mod statement;
|
pub mod statement;
|
||||||
pub mod r#type;
|
pub mod r#type;
|
||||||
|
|
||||||
use crate::yul::lexer::error::Error as LexerError;
|
use crate::lexer::error::Error as LexerError;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
|
|
||||||
/// Returns the `token` value if it is `Some(_)`, otherwise takes the next token from the `stream`.
|
/// Returns the `token` value if it is `Some(_)`, otherwise takes the next token from the `stream`.
|
||||||
pub fn take_or_next(mut token: Option<Token>, lexer: &mut Lexer) -> Result<Token, LexerError> {
|
pub fn take_or_next(mut token: Option<Token>, lexer: &mut Lexer) -> Result<Token, LexerError> {
|
||||||
+11
-11
@@ -6,15 +6,15 @@ use inkwell::types::BasicType;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::yul::error::Error;
|
use crate::error::Error;
|
||||||
use crate::yul::lexer::token::lexeme::symbol::Symbol;
|
use crate::lexer::token::lexeme::symbol::Symbol;
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::error::Error as ParserError;
|
use crate::parser::error::Error as ParserError;
|
||||||
use crate::yul::parser::identifier::Identifier;
|
use crate::parser::identifier::Identifier;
|
||||||
use crate::yul::parser::statement::expression::Expression;
|
use crate::parser::statement::expression::Expression;
|
||||||
|
|
||||||
/// The Yul assignment expression statement.
|
/// The Yul assignment expression statement.
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
||||||
@@ -30,7 +30,7 @@ pub struct Assignment {
|
|||||||
impl Assignment {
|
impl Assignment {
|
||||||
/// The element parser.
|
/// The element parser.
|
||||||
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
||||||
let token = crate::yul::parser::take_or_next(initial, lexer)?;
|
let token = crate::parser::take_or_next(initial, lexer)?;
|
||||||
|
|
||||||
let (location, identifier) = match token {
|
let (location, identifier) = match token {
|
||||||
Token {
|
Token {
|
||||||
@@ -75,7 +75,7 @@ impl Assignment {
|
|||||||
Some(Token::new(location, Lexeme::Identifier(identifier), length)),
|
Some(Token::new(location, Lexeme::Identifier(identifier), length)),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
match crate::yul::parser::take_or_next(next, lexer)? {
|
match crate::parser::take_or_next(next, lexer)? {
|
||||||
Token {
|
Token {
|
||||||
lexeme: Lexeme::Symbol(Symbol::Assignment),
|
lexeme: Lexeme::Symbol(Symbol::Assignment),
|
||||||
..
|
..
|
||||||
+16
-16
@@ -7,16 +7,16 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use inkwell::debug_info::AsDIScope;
|
use inkwell::debug_info::AsDIScope;
|
||||||
|
|
||||||
use crate::yul::error::Error;
|
use crate::error::Error;
|
||||||
use crate::yul::lexer::token::lexeme::symbol::Symbol;
|
use crate::lexer::token::lexeme::symbol::Symbol;
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::error::Error as ParserError;
|
use crate::parser::error::Error as ParserError;
|
||||||
use crate::yul::parser::statement::assignment::Assignment;
|
use crate::parser::statement::assignment::Assignment;
|
||||||
use crate::yul::parser::statement::expression::Expression;
|
use crate::parser::statement::expression::Expression;
|
||||||
use crate::yul::parser::statement::Statement;
|
use crate::parser::statement::Statement;
|
||||||
|
|
||||||
/// The Yul source code block.
|
/// The Yul source code block.
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
||||||
@@ -30,7 +30,7 @@ pub struct Block {
|
|||||||
impl Block {
|
impl Block {
|
||||||
/// The element parser.
|
/// The element parser.
|
||||||
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
||||||
let token = crate::yul::parser::take_or_next(initial, lexer)?;
|
let token = crate::parser::take_or_next(initial, lexer)?;
|
||||||
|
|
||||||
let mut statements = Vec::new();
|
let mut statements = Vec::new();
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ impl Block {
|
|||||||
let mut remaining = None;
|
let mut remaining = None;
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
match crate::yul::parser::take_or_next(remaining.take(), lexer)? {
|
match crate::parser::take_or_next(remaining.take(), lexer)? {
|
||||||
token @ Token {
|
token @ Token {
|
||||||
lexeme: Lexeme::Keyword(_),
|
lexeme: Lexeme::Keyword(_),
|
||||||
..
|
..
|
||||||
@@ -221,10 +221,10 @@ where
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::error::Error;
|
use crate::parser::error::Error;
|
||||||
use crate::yul::parser::statement::object::Object;
|
use crate::parser::statement::object::Object;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn error_invalid_token_bracket_curly_left() {
|
fn error_invalid_token_bracket_curly_left() {
|
||||||
+13
-13
@@ -5,14 +5,14 @@ use std::collections::HashSet;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::yul::error::Error;
|
use crate::error::Error;
|
||||||
use crate::yul::lexer::token::lexeme::keyword::Keyword;
|
use crate::lexer::token::lexeme::keyword::Keyword;
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::error::Error as ParserError;
|
use crate::parser::error::Error as ParserError;
|
||||||
use crate::yul::parser::statement::block::Block;
|
use crate::parser::statement::block::Block;
|
||||||
|
|
||||||
/// The YUL code entity, which is the first block of the object.
|
/// The YUL code entity, which is the first block of the object.
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
||||||
@@ -26,7 +26,7 @@ pub struct Code {
|
|||||||
impl Code {
|
impl Code {
|
||||||
/// The element parser.
|
/// The element parser.
|
||||||
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
||||||
let token = crate::yul::parser::take_or_next(initial, lexer)?;
|
let token = crate::parser::take_or_next(initial, lexer)?;
|
||||||
|
|
||||||
let location = match token {
|
let location = match token {
|
||||||
Token {
|
Token {
|
||||||
@@ -68,10 +68,10 @@ where
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::error::Error;
|
use crate::parser::error::Error;
|
||||||
use crate::yul::parser::statement::object::Object;
|
use crate::parser::statement::object::Object;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn error_invalid_token_code() {
|
fn error_invalid_token_code() {
|
||||||
+11
-11
@@ -9,16 +9,16 @@ use inkwell::values::BasicValue;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::yul::error::Error;
|
use crate::error::Error;
|
||||||
use crate::yul::lexer::token::lexeme::literal::Literal as LexicalLiteral;
|
use crate::lexer::token::lexeme::literal::Literal as LexicalLiteral;
|
||||||
use crate::yul::lexer::token::lexeme::symbol::Symbol;
|
use crate::lexer::token::lexeme::symbol::Symbol;
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::error::Error as ParserError;
|
use crate::parser::error::Error as ParserError;
|
||||||
use crate::yul::parser::statement::expression::literal::Literal;
|
use crate::parser::statement::expression::literal::Literal;
|
||||||
use crate::yul::parser::statement::expression::Expression;
|
use crate::parser::statement::expression::Expression;
|
||||||
|
|
||||||
use self::name::Name;
|
use self::name::Name;
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ pub struct FunctionCall {
|
|||||||
impl FunctionCall {
|
impl FunctionCall {
|
||||||
/// The element parser.
|
/// The element parser.
|
||||||
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
||||||
let token = crate::yul::parser::take_or_next(initial, lexer)?;
|
let token = crate::parser::take_or_next(initial, lexer)?;
|
||||||
|
|
||||||
let (location, name) = match token {
|
let (location, name) = match token {
|
||||||
Token {
|
Token {
|
||||||
File renamed without changes.
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
//! Translates the verbatim simulations.
|
//! Translates the verbatim simulations.
|
||||||
|
|
||||||
use crate::yul::parser::statement::expression::function_call::FunctionCall;
|
use crate::parser::statement::expression::function_call::FunctionCall;
|
||||||
|
|
||||||
/// Translates the verbatim simulations.
|
/// Translates the verbatim simulations.
|
||||||
pub fn verbatim<'ctx, D>(
|
pub fn verbatim<'ctx, D>(
|
||||||
+12
-12
@@ -7,17 +7,17 @@ use num::Zero;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::yul::error::Error;
|
use crate::error::Error;
|
||||||
use crate::yul::lexer::token::lexeme::literal::boolean::Boolean as BooleanLiteral;
|
use crate::lexer::token::lexeme::literal::boolean::Boolean as BooleanLiteral;
|
||||||
use crate::yul::lexer::token::lexeme::literal::integer::Integer as IntegerLiteral;
|
use crate::lexer::token::lexeme::literal::integer::Integer as IntegerLiteral;
|
||||||
use crate::yul::lexer::token::lexeme::literal::Literal as LexicalLiteral;
|
use crate::lexer::token::lexeme::literal::Literal as LexicalLiteral;
|
||||||
use crate::yul::lexer::token::lexeme::symbol::Symbol;
|
use crate::lexer::token::lexeme::symbol::Symbol;
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::error::Error as ParserError;
|
use crate::parser::error::Error as ParserError;
|
||||||
use crate::yul::parser::r#type::Type;
|
use crate::parser::r#type::Type;
|
||||||
|
|
||||||
/// Represents a literal in YUL without differentiating its type.
|
/// Represents a literal in YUL without differentiating its type.
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
||||||
@@ -33,7 +33,7 @@ pub struct Literal {
|
|||||||
impl Literal {
|
impl Literal {
|
||||||
/// The element parser.
|
/// The element parser.
|
||||||
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
||||||
let token = crate::yul::parser::take_or_next(initial, lexer)?;
|
let token = crate::parser::take_or_next(initial, lexer)?;
|
||||||
|
|
||||||
let (location, literal) = match token {
|
let (location, literal) = match token {
|
||||||
Token {
|
Token {
|
||||||
+9
-9
@@ -8,14 +8,14 @@ use std::collections::HashSet;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::yul::error::Error;
|
use crate::error::Error;
|
||||||
use crate::yul::lexer::token::lexeme::symbol::Symbol;
|
use crate::lexer::token::lexeme::symbol::Symbol;
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::error::Error as ParserError;
|
use crate::parser::error::Error as ParserError;
|
||||||
use crate::yul::parser::identifier::Identifier;
|
use crate::parser::identifier::Identifier;
|
||||||
|
|
||||||
use self::function_call::FunctionCall;
|
use self::function_call::FunctionCall;
|
||||||
use self::literal::Literal;
|
use self::literal::Literal;
|
||||||
@@ -34,7 +34,7 @@ pub enum Expression {
|
|||||||
impl Expression {
|
impl Expression {
|
||||||
/// The element parser.
|
/// The element parser.
|
||||||
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
||||||
let token = crate::yul::parser::take_or_next(initial, lexer)?;
|
let token = crate::parser::take_or_next(initial, lexer)?;
|
||||||
|
|
||||||
let (location, identifier) = match token {
|
let (location, identifier) = match token {
|
||||||
Token {
|
Token {
|
||||||
+7
-7
@@ -5,12 +5,12 @@ use std::collections::HashSet;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::yul::error::Error;
|
use crate::error::Error;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::statement::block::Block;
|
use crate::parser::statement::block::Block;
|
||||||
use crate::yul::parser::statement::expression::Expression;
|
use crate::parser::statement::expression::Expression;
|
||||||
|
|
||||||
/// The Yul for-loop statement.
|
/// The Yul for-loop statement.
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
||||||
@@ -30,7 +30,7 @@ pub struct ForLoop {
|
|||||||
impl ForLoop {
|
impl ForLoop {
|
||||||
/// The element parser.
|
/// The element parser.
|
||||||
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
||||||
let token = crate::yul::parser::take_or_next(initial, lexer)?;
|
let token = crate::parser::take_or_next(initial, lexer)?;
|
||||||
let location = token.location;
|
let location = token.location;
|
||||||
|
|
||||||
let initializer = Block::parse(lexer, Some(token))?;
|
let initializer = Block::parse(lexer, Some(token))?;
|
||||||
+16
-16
@@ -8,16 +8,16 @@ use inkwell::types::BasicType;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::yul::error::Error;
|
use crate::error::Error;
|
||||||
use crate::yul::lexer::token::lexeme::symbol::Symbol;
|
use crate::lexer::token::lexeme::symbol::Symbol;
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::error::Error as ParserError;
|
use crate::parser::error::Error as ParserError;
|
||||||
use crate::yul::parser::identifier::Identifier;
|
use crate::parser::identifier::Identifier;
|
||||||
use crate::yul::parser::statement::block::Block;
|
use crate::parser::statement::block::Block;
|
||||||
use crate::yul::parser::statement::expression::function_call::name::Name as FunctionName;
|
use crate::parser::statement::expression::function_call::name::Name as FunctionName;
|
||||||
|
|
||||||
/// The function definition statement.
|
/// The function definition statement.
|
||||||
/// All functions are translated in two steps:
|
/// All functions are translated in two steps:
|
||||||
@@ -48,7 +48,7 @@ impl FunctionDefinition {
|
|||||||
|
|
||||||
/// The element parser.
|
/// The element parser.
|
||||||
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
||||||
let token = crate::yul::parser::take_or_next(initial, lexer)?;
|
let token = crate::parser::take_or_next(initial, lexer)?;
|
||||||
|
|
||||||
let (location, identifier) = match token {
|
let (location, identifier) = match token {
|
||||||
Token {
|
Token {
|
||||||
@@ -94,7 +94,7 @@ impl FunctionDefinition {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let (arguments, next) = Identifier::parse_typed_list(lexer, None)?;
|
let (arguments, next) = Identifier::parse_typed_list(lexer, None)?;
|
||||||
match crate::yul::parser::take_or_next(next, lexer)? {
|
match crate::parser::take_or_next(next, lexer)? {
|
||||||
Token {
|
Token {
|
||||||
lexeme: Lexeme::Symbol(Symbol::ParenthesisRight),
|
lexeme: Lexeme::Symbol(Symbol::ParenthesisRight),
|
||||||
..
|
..
|
||||||
@@ -328,10 +328,10 @@ where
|
|||||||
mod tests {
|
mod tests {
|
||||||
use std::collections::BTreeSet;
|
use std::collections::BTreeSet;
|
||||||
|
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::error::Error;
|
use crate::parser::error::Error;
|
||||||
use crate::yul::parser::statement::object::Object;
|
use crate::parser::statement::object::Object;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn error_invalid_token_identifier() {
|
fn error_invalid_token_identifier() {
|
||||||
+7
-7
@@ -5,12 +5,12 @@ use std::collections::HashSet;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::yul::error::Error;
|
use crate::error::Error;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::statement::block::Block;
|
use crate::parser::statement::block::Block;
|
||||||
use crate::yul::parser::statement::expression::Expression;
|
use crate::parser::statement::expression::Expression;
|
||||||
|
|
||||||
/// The Yul if-conditional statement.
|
/// The Yul if-conditional statement.
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
||||||
@@ -26,7 +26,7 @@ pub struct IfConditional {
|
|||||||
impl IfConditional {
|
impl IfConditional {
|
||||||
/// The element parser.
|
/// The element parser.
|
||||||
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
||||||
let token = crate::yul::parser::take_or_next(initial, lexer)?;
|
let token = crate::parser::take_or_next(initial, lexer)?;
|
||||||
let location = token.location;
|
let location = token.location;
|
||||||
|
|
||||||
let condition = Expression::parse(lexer, Some(token))?;
|
let condition = Expression::parse(lexer, Some(token))?;
|
||||||
+8
-8
@@ -16,13 +16,13 @@ use std::collections::HashSet;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::yul::error::Error;
|
use crate::error::Error;
|
||||||
use crate::yul::lexer::token::lexeme::keyword::Keyword;
|
use crate::lexer::token::lexeme::keyword::Keyword;
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::error::Error as ParserError;
|
use crate::parser::error::Error as ParserError;
|
||||||
|
|
||||||
use self::assignment::Assignment;
|
use self::assignment::Assignment;
|
||||||
use self::block::Block;
|
use self::block::Block;
|
||||||
@@ -72,7 +72,7 @@ impl Statement {
|
|||||||
lexer: &mut Lexer,
|
lexer: &mut Lexer,
|
||||||
initial: Option<Token>,
|
initial: Option<Token>,
|
||||||
) -> Result<(Self, Option<Token>), Error> {
|
) -> Result<(Self, Option<Token>), Error> {
|
||||||
let token = crate::yul::parser::take_or_next(initial, lexer)?;
|
let token = crate::parser::take_or_next(initial, lexer)?;
|
||||||
|
|
||||||
match token {
|
match token {
|
||||||
token @ Token {
|
token @ Token {
|
||||||
+15
-15
@@ -7,16 +7,16 @@ use inkwell::debug_info::AsDIScope;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::yul::error::Error;
|
use crate::error::Error;
|
||||||
use crate::yul::lexer::token::lexeme::keyword::Keyword;
|
use crate::lexer::token::lexeme::keyword::Keyword;
|
||||||
use crate::yul::lexer::token::lexeme::literal::Literal;
|
use crate::lexer::token::lexeme::literal::Literal;
|
||||||
use crate::yul::lexer::token::lexeme::symbol::Symbol;
|
use crate::lexer::token::lexeme::symbol::Symbol;
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::error::Error as ParserError;
|
use crate::parser::error::Error as ParserError;
|
||||||
use crate::yul::parser::statement::code::Code;
|
use crate::parser::statement::code::Code;
|
||||||
|
|
||||||
/// The upper-level YUL object, representing the deploy code.
|
/// The upper-level YUL object, representing the deploy code.
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
||||||
@@ -38,7 +38,7 @@ pub struct Object {
|
|||||||
impl Object {
|
impl Object {
|
||||||
/// The element parser.
|
/// The element parser.
|
||||||
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
||||||
let token = crate::yul::parser::take_or_next(initial, lexer)?;
|
let token = crate::parser::take_or_next(initial, lexer)?;
|
||||||
|
|
||||||
let location = match token {
|
let location = match token {
|
||||||
Token {
|
Token {
|
||||||
@@ -299,10 +299,10 @@ where
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::error::Error;
|
use crate::parser::error::Error;
|
||||||
use crate::yul::parser::statement::object::Object;
|
use crate::parser::statement::object::Object;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn error_invalid_token_object() {
|
fn error_invalid_token_object() {
|
||||||
+13
-13
@@ -5,14 +5,14 @@ use std::collections::HashSet;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::yul::error::Error;
|
use crate::error::Error;
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::error::Error as ParserError;
|
use crate::parser::error::Error as ParserError;
|
||||||
use crate::yul::parser::statement::block::Block;
|
use crate::parser::statement::block::Block;
|
||||||
use crate::yul::parser::statement::expression::literal::Literal;
|
use crate::parser::statement::expression::literal::Literal;
|
||||||
|
|
||||||
/// The Yul switch statement case.
|
/// The Yul switch statement case.
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
||||||
@@ -28,7 +28,7 @@ pub struct Case {
|
|||||||
impl Case {
|
impl Case {
|
||||||
/// The element parser.
|
/// The element parser.
|
||||||
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
||||||
let token = crate::yul::parser::take_or_next(initial, lexer)?;
|
let token = crate::parser::take_or_next(initial, lexer)?;
|
||||||
|
|
||||||
let (location, literal) = match token {
|
let (location, literal) = match token {
|
||||||
token @ Token {
|
token @ Token {
|
||||||
@@ -63,10 +63,10 @@ impl Case {
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::error::Error;
|
use crate::parser::error::Error;
|
||||||
use crate::yul::parser::statement::object::Object;
|
use crate::parser::statement::object::Object;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn error_invalid_token_literal() {
|
fn error_invalid_token_literal() {
|
||||||
+14
-14
@@ -7,15 +7,15 @@ use std::collections::HashSet;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::yul::error::Error;
|
use crate::error::Error;
|
||||||
use crate::yul::lexer::token::lexeme::keyword::Keyword;
|
use crate::lexer::token::lexeme::keyword::Keyword;
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::error::Error as ParserError;
|
use crate::parser::error::Error as ParserError;
|
||||||
use crate::yul::parser::statement::block::Block;
|
use crate::parser::statement::block::Block;
|
||||||
use crate::yul::parser::statement::expression::Expression;
|
use crate::parser::statement::expression::Expression;
|
||||||
|
|
||||||
use self::case::Case;
|
use self::case::Case;
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ pub enum State {
|
|||||||
impl Switch {
|
impl Switch {
|
||||||
/// The element parser.
|
/// The element parser.
|
||||||
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
||||||
let mut token = crate::yul::parser::take_or_next(initial, lexer)?;
|
let mut token = crate::parser::take_or_next(initial, lexer)?;
|
||||||
let location = token.location;
|
let location = token.location;
|
||||||
let mut state = State::CaseOrDefaultKeyword;
|
let mut state = State::CaseOrDefaultKeyword;
|
||||||
|
|
||||||
@@ -177,10 +177,10 @@ where
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::error::Error;
|
use crate::parser::error::Error;
|
||||||
use crate::yul::parser::statement::object::Object;
|
use crate::parser::statement::object::Object;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn error_invalid_token_case() {
|
fn error_invalid_token_case() {
|
||||||
+16
-16
@@ -7,16 +7,16 @@ use inkwell::values::BasicValue;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::yul::error::Error;
|
use crate::error::Error;
|
||||||
use crate::yul::lexer::token::lexeme::symbol::Symbol;
|
use crate::lexer::token::lexeme::symbol::Symbol;
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::error::Error as ParserError;
|
use crate::parser::error::Error as ParserError;
|
||||||
use crate::yul::parser::identifier::Identifier;
|
use crate::parser::identifier::Identifier;
|
||||||
use crate::yul::parser::statement::expression::function_call::name::Name as FunctionName;
|
use crate::parser::statement::expression::function_call::name::Name as FunctionName;
|
||||||
use crate::yul::parser::statement::expression::Expression;
|
use crate::parser::statement::expression::Expression;
|
||||||
|
|
||||||
/// The Yul variable declaration statement.
|
/// The Yul variable declaration statement.
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
||||||
@@ -35,7 +35,7 @@ impl VariableDeclaration {
|
|||||||
lexer: &mut Lexer,
|
lexer: &mut Lexer,
|
||||||
initial: Option<Token>,
|
initial: Option<Token>,
|
||||||
) -> Result<(Self, Option<Token>), Error> {
|
) -> Result<(Self, Option<Token>), Error> {
|
||||||
let token = crate::yul::parser::take_or_next(initial, lexer)?;
|
let token = crate::parser::take_or_next(initial, lexer)?;
|
||||||
let location = token.location;
|
let location = token.location;
|
||||||
|
|
||||||
let (bindings, next) = Identifier::parse_typed_list(lexer, Some(token))?;
|
let (bindings, next) = Identifier::parse_typed_list(lexer, Some(token))?;
|
||||||
@@ -52,7 +52,7 @@ impl VariableDeclaration {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
match crate::yul::parser::take_or_next(next, lexer)? {
|
match crate::parser::take_or_next(next, lexer)? {
|
||||||
Token {
|
Token {
|
||||||
lexeme: Lexeme::Symbol(Symbol::Assignment),
|
lexeme: Lexeme::Symbol(Symbol::Assignment),
|
||||||
..
|
..
|
||||||
@@ -220,10 +220,10 @@ where
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::yul::lexer::token::location::Location;
|
use crate::lexer::token::location::Location;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::error::Error;
|
use crate::parser::error::Error;
|
||||||
use crate::yul::parser::statement::object::Object;
|
use crate::parser::statement::object::Object;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn error_reserved_identifier() {
|
fn error_reserved_identifier() {
|
||||||
@@ -3,12 +3,12 @@
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::yul::error::Error;
|
use crate::error::Error;
|
||||||
use crate::yul::lexer::token::lexeme::keyword::Keyword;
|
use crate::lexer::token::lexeme::keyword::Keyword;
|
||||||
use crate::yul::lexer::token::lexeme::Lexeme;
|
use crate::lexer::token::lexeme::Lexeme;
|
||||||
use crate::yul::lexer::token::Token;
|
use crate::lexer::token::Token;
|
||||||
use crate::yul::lexer::Lexer;
|
use crate::lexer::Lexer;
|
||||||
use crate::yul::parser::error::Error as ParserError;
|
use crate::parser::error::Error as ParserError;
|
||||||
|
|
||||||
/// The YUL source code type.
|
/// The YUL source code type.
|
||||||
/// The type is not currently in use, so all values have the `uint256` type by default.
|
/// The type is not currently in use, so all values have the `uint256` type by default.
|
||||||
@@ -33,7 +33,7 @@ impl Default for Type {
|
|||||||
impl Type {
|
impl Type {
|
||||||
/// The element parser.
|
/// The element parser.
|
||||||
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
pub fn parse(lexer: &mut Lexer, initial: Option<Token>) -> Result<Self, Error> {
|
||||||
let token = crate::yul::parser::take_or_next(initial, lexer)?;
|
let token = crate::parser::take_or_next(initial, lexer)?;
|
||||||
|
|
||||||
match token {
|
match token {
|
||||||
Token {
|
Token {
|
||||||
Generated
+252
-310
File diff suppressed because it is too large.
Load diff
+2
-2
@@ -2,14 +2,14 @@
|
|||||||
"name": "root",
|
"name": "root",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test:cli": "npm run test -w crates/solidity/src/tests/cli-tests",
|
"test:cli": "npm run test -w crates/resolc/src/tests/cli-tests",
|
||||||
"test:wasm": "npm run test:node -w js/emscripten",
|
"test:wasm": "npm run test:node -w js/emscripten",
|
||||||
"build:package": "npm run build:package -w js/emscripten",
|
"build:package": "npm run build:package -w js/emscripten",
|
||||||
"lint": "npx eslint 'js/**/*.{cjs,mjs,ts}' && npx prettier --check '**/*.{mjs,cjs,ts}'",
|
"lint": "npx eslint 'js/**/*.{cjs,mjs,ts}' && npx prettier --check '**/*.{mjs,cjs,ts}'",
|
||||||
"lint:fix": "npx prettier --write '**/*.{mjs,cjs,ts}'"
|
"lint:fix": "npx prettier --write '**/*.{mjs,cjs,ts}'"
|
||||||
},
|
},
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"crates/solidity/src/tests/cli-tests",
|
"crates/resolc/src/tests/cli-tests",
|
||||||
"js/emscripten",
|
"js/emscripten",
|
||||||
"js/resolc"
|
"js/resolc"
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in new issue
Block a user