From 2395ef6af929a42c632f8db4dbdc42f098994f99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gast=C3=B3n=20Zanitti?= Date: Sat, 2 Sep 2023 15:57:41 +0200 Subject: [PATCH 1/9] feat(opcodes): mcopy opcode (#289) --- huff_utils/src/evm.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/huff_utils/src/evm.rs b/huff_utils/src/evm.rs index 8ad61a40..31bdde17 100644 --- a/huff_utils/src/evm.rs +++ b/huff_utils/src/evm.rs @@ -6,7 +6,7 @@ use strum_macros::EnumString; /// They are arranged in a particular order such that all the opcodes that have common /// prefixes are ordered by decreasing length to avoid mismatch when lexing. /// Example : [origin, or] or [push32, ..., push3] -pub const OPCODES: [&str; 147] = [ +pub const OPCODES: [&str; 148] = [ "lt", "gt", "slt", @@ -39,6 +39,7 @@ pub const OPCODES: [&str; 147] = [ "chainid", "selfbalance", "pop", + "mcopy", "mload", "mstore8", "mstore", @@ -199,6 +200,7 @@ pub static OPCODES_MAP: phf::Map<&'static str, Opcode> = phf_map! { "jumpi" => Opcode::Jumpi, "pc" => Opcode::Pc, "msize" => Opcode::Msize, + "mcopy" => Opcode::Mcopy, "push0" => Opcode::Push0, "push1" => Opcode::Push1, "push2" => Opcode::Push2, @@ -440,6 +442,8 @@ pub enum Opcode { Gas, /// Marks a valid destination for jumps Jumpdest, + /// Copies an area of memory from src to dst. Areas can overlap. + Mcopy, /// Places a zero on top of the stack Push0, /// Places 1 byte item on top of the stack @@ -678,6 +682,7 @@ impl Opcode { Opcode::Msize => "59", Opcode::Gas => "5a", Opcode::Jumpdest => "5b", + Opcode::Mcopy => "5e", Opcode::Push0 => "5f", Opcode::Push1 => "60", Opcode::Push2 => "61", From b43103e9b324ff237632cf4c34198d2f3728e65e Mon Sep 17 00:00:00 2001 From: Maddiaa <47148561+Maddiaa0@users.noreply.github.com> Date: Sat, 2 Sep 2023 15:41:24 +0100 Subject: [PATCH 2/9] chore(clippy): appease (#292) * chore: clippy fix * fix: clippy manual * fix: fmt --- huff_codegen/src/lib.rs | 2 +- huff_lexer/tests/builtins.rs | 6 +++--- huff_lexer/tests/comments.rs | 6 +++--- huff_lexer/tests/context.rs | 6 +++--- huff_lexer/tests/decorators.rs | 4 ++-- huff_lexer/tests/eof.rs | 2 +- huff_lexer/tests/evm_types.rs | 8 ++++---- huff_lexer/tests/fsp.rs | 2 +- huff_lexer/tests/function_type.rs | 2 +- huff_lexer/tests/hex.rs | 6 +++--- huff_parser/tests/abi.rs | 2 +- huff_utils/src/ast.rs | 3 +-- 12 files changed, 24 insertions(+), 25 deletions(-) diff --git a/huff_codegen/src/lib.rs b/huff_codegen/src/lib.rs index aca743ab..e281235f 100644 --- a/huff_codegen/src/lib.rs +++ b/huff_codegen/src/lib.rs @@ -475,7 +475,7 @@ impl Codegen { /// On failure, returns a CodegenError. pub fn fill_circular_codesize_invocations( bytes: Vec<(usize, Bytes)>, - circular_codesize_invocations: &mut CircularCodeSizeIndices, + circular_codesize_invocations: &CircularCodeSizeIndices, macro_name: &str, ) -> Result, CodegenError> { // Get the length of the macro diff --git a/huff_lexer/tests/builtins.rs b/huff_lexer/tests/builtins.rs index 64cc6fc7..e8ccb452 100644 --- a/huff_lexer/tests/builtins.rs +++ b/huff_lexer/tests/builtins.rs @@ -24,7 +24,7 @@ fn parses_builtin_function_in_macro_body() { "{", "}", ); let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let mut lexer = Lexer::new(flattened_source.source.clone()); + let mut lexer = Lexer::new(flattened_source.source); let _ = lexer.next(); // whitespace let _ = lexer.next(); // #define @@ -89,7 +89,7 @@ fn fails_to_parse_builtin_outside_macro_body() { for builtin in builtin_funcs { let source = &format!("{builtin}(MAIN)"); let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let mut lexer = Lexer::new(flattened_source.source.clone()); + let mut lexer = Lexer::new(flattened_source.source); let tok = lexer.next(); let unwrapped = tok.unwrap().unwrap(); @@ -123,7 +123,7 @@ fn fails_to_parse_invalid_builtin() { "{", "}", ); let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let mut lexer = Lexer::new(flattened_source.source.clone()); + let mut lexer = Lexer::new(flattened_source.source); let _ = lexer.next(); // whitespace let _ = lexer.next(); // #define diff --git a/huff_lexer/tests/comments.rs b/huff_lexer/tests/comments.rs index 898a6921..962aab03 100644 --- a/huff_lexer/tests/comments.rs +++ b/huff_lexer/tests/comments.rs @@ -14,7 +14,7 @@ use huff_utils::prelude::*; fn instantiates() { let source = "#define macro HELLO_WORLD()"; let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let lexer = Lexer::new(flattened_source.source.clone()); + let lexer = Lexer::new(flattened_source.source); assert!(!lexer.eof); } @@ -22,7 +22,7 @@ fn instantiates() { fn single_line_comments() { let source = "// comment contents \n#define macro HELLO_WORLD()"; let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let mut lexer = Lexer::new(flattened_source.source.clone()); + let mut lexer = Lexer::new(flattened_source.source); // The first token should be a single line comment let tok = lexer.next(); @@ -94,7 +94,7 @@ fn single_line_comments() { fn multi_line_comments() { let source = "/* comment contents*/#define macro HELLO_WORLD()"; let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let mut lexer = Lexer::new(flattened_source.source.clone()); + let mut lexer = Lexer::new(flattened_source.source); // The first token should be a single line comment let tok = lexer.next(); diff --git a/huff_lexer/tests/context.rs b/huff_lexer/tests/context.rs index 28874359..d2136906 100644 --- a/huff_lexer/tests/context.rs +++ b/huff_lexer/tests/context.rs @@ -6,7 +6,7 @@ use huff_utils::prelude::*; fn function_context() { let source = "#define function test(bytes32) {} returns (address)"; let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let lexer = Lexer::new(flattened_source.source.clone()); + let lexer = Lexer::new(flattened_source.source); let tokens = lexer .into_iter() .map(|x| x.unwrap()) @@ -26,7 +26,7 @@ fn function_context() { fn event_context() { let source = "#define event Transfer(bytes32,address)"; let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let lexer = Lexer::new(flattened_source.source.clone()); + let lexer = Lexer::new(flattened_source.source); let tokens = lexer .into_iter() .map(|x| x.unwrap()) @@ -44,7 +44,7 @@ fn event_context() { fn macro_context() { let source = "#define macro TEST() = takes (0) returns (0) {byte}"; let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let lexer = Lexer::new(flattened_source.source.clone()); + let lexer = Lexer::new(flattened_source.source); let tokens = lexer .into_iter() .map(|x| x.unwrap()) diff --git a/huff_lexer/tests/decorators.rs b/huff_lexer/tests/decorators.rs index 4cf3fbf2..2bc6b46a 100644 --- a/huff_lexer/tests/decorators.rs +++ b/huff_lexer/tests/decorators.rs @@ -17,7 +17,7 @@ fn parses_decorator() { ); let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let mut lexer = Lexer::new(flattened_source.source.clone()); + let mut lexer = Lexer::new(flattened_source.source); let _ = lexer.next(); // whitespace @@ -124,7 +124,7 @@ fn fails_to_parse_decorator_in_body() { ); let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let mut lexer = Lexer::new(flattened_source.source.clone()); + let mut lexer = Lexer::new(flattened_source.source); for token in lexer.by_ref() { if let Err(e) = token { diff --git a/huff_lexer/tests/eof.rs b/huff_lexer/tests/eof.rs index c363c723..e37bceac 100644 --- a/huff_lexer/tests/eof.rs +++ b/huff_lexer/tests/eof.rs @@ -5,7 +5,7 @@ use huff_utils::prelude::*; fn end_of_file() { let source = " "; let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let mut lexer = Lexer::new(flattened_source.source.clone()); + let mut lexer = Lexer::new(flattened_source.source); // Eats the whitespace let _ = lexer.next(); diff --git a/huff_lexer/tests/evm_types.rs b/huff_lexer/tests/evm_types.rs index 0e11054a..5c416a3e 100644 --- a/huff_lexer/tests/evm_types.rs +++ b/huff_lexer/tests/evm_types.rs @@ -16,7 +16,7 @@ fn primitive_type_parsing() { for (evm_type, evm_type_enum) in evm_types { let source = &format!("#define function test({evm_type}) view returns (uint256)"); let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let lexer = Lexer::new(flattened_source.source.clone()); + let lexer = Lexer::new(flattened_source.source); let tokens = lexer .into_iter() .map(|x| x.unwrap()) @@ -42,7 +42,7 @@ fn bounded_array_parsing() { for (evm_type, evm_type_enum) in evm_types { let source = &format!("#define function test({evm_type}) view returns (uint256)"); let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let lexer = Lexer::new(flattened_source.source.clone()); + let lexer = Lexer::new(flattened_source.source); let tokens = lexer .into_iter() .map(|x| x.unwrap()) @@ -68,7 +68,7 @@ fn unbounded_array_parsing() { for (evm_type, evm_type_enum) in evm_types { let source = &format!("#define function test({evm_type}) view returns (uint256)"); let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let lexer = Lexer::new(flattened_source.source.clone()); + let lexer = Lexer::new(flattened_source.source); let tokens = lexer .into_iter() .map(|x| x.unwrap()) @@ -93,7 +93,7 @@ fn multidim_array_parsing() { for (evm_type, evm_type_enum) in evm_types { let source = &format!("#define function test({evm_type}) view returns (uint256)"); let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let lexer = Lexer::new(flattened_source.source.clone()); + let lexer = Lexer::new(flattened_source.source); let tokens = lexer .into_iter() .map(|x| x.unwrap()) diff --git a/huff_lexer/tests/fsp.rs b/huff_lexer/tests/fsp.rs index bc254c64..d143efcb 100644 --- a/huff_lexer/tests/fsp.rs +++ b/huff_lexer/tests/fsp.rs @@ -5,7 +5,7 @@ use huff_utils::prelude::*; fn free_storage_pointer() { let source = "FREE_STORAGE_POINTER() "; let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let mut lexer = Lexer::new(flattened_source.source.clone()); + let mut lexer = Lexer::new(flattened_source.source); // The first token should be the fsp let tok = lexer.next().unwrap().unwrap(); diff --git a/huff_lexer/tests/function_type.rs b/huff_lexer/tests/function_type.rs index 10729edf..d8cf8fdf 100644 --- a/huff_lexer/tests/function_type.rs +++ b/huff_lexer/tests/function_type.rs @@ -13,7 +13,7 @@ fn parses_function_type() { for (fn_type, fn_type_kind) in fn_types { let source = &format!("#define function test() {fn_type} returns (uint256)"); let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let mut lexer = Lexer::new(flattened_source.source.clone()); + let mut lexer = Lexer::new(flattened_source.source); let _ = lexer.next(); // #define let _ = lexer.next(); // whitespace diff --git a/huff_lexer/tests/hex.rs b/huff_lexer/tests/hex.rs index 0d5b1ffc..b24ca847 100644 --- a/huff_lexer/tests/hex.rs +++ b/huff_lexer/tests/hex.rs @@ -5,7 +5,7 @@ use huff_utils::prelude::*; fn parses_single_hex() { let source = "0xa57B"; let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let mut lexer = Lexer::new(flattened_source.source.clone()); + let mut lexer = Lexer::new(flattened_source.source); // The first and only token should be lexed as Literal(0xa57B) let tok = lexer.next().unwrap().unwrap(); @@ -20,7 +20,7 @@ fn parses_single_hex() { fn parses_bool() { let source = "false true"; let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let mut lexer = Lexer::new(flattened_source.source.clone()); + let mut lexer = Lexer::new(flattened_source.source); // The first token should be lexed as a Literal representing 0x00 let tok = lexer.next().unwrap().unwrap(); @@ -41,7 +41,7 @@ fn parses_bool() { fn parses_odd_len_hex() { let source = "0x1"; let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let mut lexer = Lexer::new(flattened_source.source.clone()); + let mut lexer = Lexer::new(flattened_source.source); // The first and only token should be lexed as Literal(0x1) let tok = lexer.next().unwrap().unwrap(); diff --git a/huff_parser/tests/abi.rs b/huff_parser/tests/abi.rs index d054ce6e..e9db7fce 100644 --- a/huff_parser/tests/abi.rs +++ b/huff_parser/tests/abi.rs @@ -7,7 +7,7 @@ fn build_abi_from_ast() { let source = "#define function test(uint256[2][],string) view returns(uint256)"; let flattened_source = FullFileSource { source, file: None, spans: vec![] }; - let lexer = Lexer::new(flattened_source.source.clone()); + let lexer = Lexer::new(flattened_source.source); let tokens = lexer .into_iter() .map(|x| x.unwrap()) diff --git a/huff_utils/src/ast.rs b/huff_utils/src/ast.rs index 72cf8fe6..3b0c5255 100644 --- a/huff_utils/src/ast.rs +++ b/huff_utils/src/ast.rs @@ -33,8 +33,7 @@ impl AstSpan { pub fn error(&self, hint: Option<&String>) -> String { let file_to_source_map = self.0.iter().fold(BTreeMap::>::new(), |mut m, s| { - let file_name = - s.file.as_ref().map(|f2| f2.path.clone()).unwrap_or_else(|| "".to_string()); + let file_name = s.file.as_ref().map(|f2| f2.path.clone()).unwrap_or_default(); let mut new_vec: Vec<&Span> = m.get(&file_name).cloned().unwrap_or_default(); new_vec.push(s); m.insert(file_name, new_vec); From fded9c2275117a7dd02ee04bc0eda2a1175e1f7b Mon Sep 17 00:00:00 2001 From: chengxuncc Date: Mon, 25 Sep 2023 01:15:58 +0800 Subject: [PATCH 3/9] chore: update TLoad and TStore opcode (#294) --- huff_utils/src/evm.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/huff_utils/src/evm.rs b/huff_utils/src/evm.rs index 31bdde17..12da3f82 100644 --- a/huff_utils/src/evm.rs +++ b/huff_utils/src/evm.rs @@ -682,6 +682,8 @@ impl Opcode { Opcode::Msize => "59", Opcode::Gas => "5a", Opcode::Jumpdest => "5b", + Opcode::TLoad => "5c", + Opcode::TStore => "5d", Opcode::Mcopy => "5e", Opcode::Push0 => "5f", Opcode::Push1 => "60", @@ -753,8 +755,6 @@ impl Opcode { Opcode::Log2 => "a2", Opcode::Log3 => "a3", Opcode::Log4 => "a4", - Opcode::TLoad => "b3", - Opcode::TStore => "b4", Opcode::Create => "f0", Opcode::Call => "f1", Opcode::Callcode => "f2", From 6cf4121e39d93f910630b50f42a7c9146455ab30 Mon Sep 17 00:00:00 2001 From: Maddiaa <47148561+Maddiaa0@users.noreply.github.com> Date: Sun, 24 Sep 2023 19:42:33 +0200 Subject: [PATCH 4/9] chore: update deps (#296) --- Cargo.lock | 636 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 445 insertions(+), 191 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d42d6fef..f2b7cdaf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -15,18 +15,147 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.0.2" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +checksum = "ea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518ab" dependencies = [ "memchr", ] [[package]] -name = "android-tzdata" -version = "0.1.1" +name = "alloy-rlp" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" +checksum = "cc0fac0fc16baf1f63f78b47c3d24718f3619b0714076f6a02957d808d52cbef" +dependencies = [ + "arrayvec", + "bytes", + "smol_str", +] + +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.4.0", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint", + "num-traits", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", +] [[package]] name = "arrayvec" @@ -40,7 +169,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi 0.1.19", + "hermit-abi", "libc", "winapi", ] @@ -110,9 +239,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "byte-slice-cast" @@ -128,9 +257,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" dependencies = [ "serde", ] @@ -143,9 +272,12 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] [[package]] name = "cfg-if" @@ -161,11 +293,10 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.26" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" dependencies = [ - "android-tzdata", "num-traits", ] @@ -227,11 +358,10 @@ checksum = "b9e769b5c8c8283982a987c6e948e540254f1058d5a74b8794914d4ef5fc2a24" [[package]] name = "codemap-diagnostic" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ba0e6be8e2774e750f9e90625b490249715bece38a12f9d09e82477caba5028" +checksum = "cc20770be05b566a963bf91505e60412c4a2d016d1ef95c5512823bb085a8122" dependencies = [ - "atty", "codemap", "termcolor", ] @@ -250,9 +380,9 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6340df57935414636969091153f35f68d9f00bbc8fb4a9c6054706c213e6c6bc" +checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" [[package]] name = "convert_case" @@ -305,16 +435,6 @@ dependencies = [ "itertools", ] -[[package]] -name = "crossbeam-channel" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils", -] - [[package]] name = "crossbeam-deque" version = "0.8.3" @@ -393,9 +513,9 @@ dependencies = [ [[package]] name = "crypto-bigint" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15" +checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124" dependencies = [ "generic-array", "rand_core", @@ -446,14 +566,25 @@ dependencies = [ [[package]] name = "der" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7ed52955ce76b1554f509074bb357d3fb8ac9b51288a65a3fd480d1dfba946" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" dependencies = [ "const-oid", "zeroize", ] +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "derive_more" version = "0.99.17" @@ -463,10 +594,19 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "rustc_version", + "rustc_version 0.4.0", "syn 1.0.109", ] +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + [[package]] name = "digest" version = "0.10.7" @@ -493,12 +633,12 @@ dependencies = [ [[package]] name = "ecdsa" -version = "0.16.7" +version = "0.16.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0997c976637b606099b9985693efa3581e84e41f5c11ba5255f88711058ad428" +checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4" dependencies = [ - "der 0.7.7", - "digest", + "der 0.7.8", + "digest 0.10.7", "elliptic-curve 0.13.5", "rfc6979 0.4.0", "signature 2.1.0", @@ -506,9 +646,9 @@ dependencies = [ [[package]] name = "either" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "elliptic-curve" @@ -519,7 +659,7 @@ dependencies = [ "base16ct 0.1.1", "crypto-bigint 0.4.9", "der 0.6.1", - "digest", + "digest 0.10.7", "ff 0.12.1", "generic-array", "group 0.12.1", @@ -536,33 +676,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b" dependencies = [ "base16ct 0.2.0", - "crypto-bigint 0.5.2", - "digest", + "crypto-bigint 0.5.3", + "digest 0.10.7", "ff 0.13.0", "generic-array", "group 0.13.0", "rand_core", - "sec1 0.7.2", + "sec1 0.7.3", "subtle", "zeroize", ] [[package]] name = "enumn" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9838a970f5de399d3070ae1739e131986b2f5dcc223c7423ca0927e3a878522" +checksum = "c2ad8cef1d801a4686bfd8919f0b30eac4c8e48968c437a6405ded4fb5272d2b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.37", ] [[package]] name = "equivalent" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "ethabi" @@ -638,6 +778,17 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + [[package]] name = "ff" version = "0.12.1" @@ -764,12 +915,6 @@ dependencies = [ "libc", ] -[[package]] -name = "hermit-abi" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" - [[package]] name = "hex" version = "0.4.3" @@ -788,7 +933,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -1000,9 +1145,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "js-sys" @@ -1033,7 +1178,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" dependencies = [ "cfg-if 1.0.0", - "ecdsa 0.16.7", + "ecdsa 0.16.8", "elliptic-curve 0.13.5", "sha2", ] @@ -1058,9 +1203,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.147" +version = "0.2.148" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b" + +[[package]] +name = "libm" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" [[package]] name = "lock_api" @@ -1074,9 +1225,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "maplit" @@ -1095,9 +1246,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" [[package]] name = "memoffset" @@ -1132,9 +1283,9 @@ dependencies = [ [[package]] name = "num" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" dependencies = [ "num-bigint", "num-complex", @@ -1146,9 +1297,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ "autocfg", "num-integer", @@ -1157,9 +1308,9 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" dependencies = [ "num-traits", ] @@ -1199,21 +1350,12 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" dependencies = [ "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi 0.3.2", - "libc", + "libm", ] [[package]] @@ -1267,9 +1409,9 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "parity-scale-codec" -version = "3.6.3" +version = "3.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756d439303e94fae44f288ba881ad29670c65b0c4b0e05674ca81061bb65f2c5" +checksum = "0dec8a8073036902368c2cdc0387e85ff9a37054d7e7c98e592145e0c92cd4fb" dependencies = [ "arrayvec", "bitvec", @@ -1281,9 +1423,9 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.6.3" +version = "3.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d884d78fcf214d70b1e239fcd1c6e5e95aa3be1881918da2e488cc946c7a476" +checksum = "312270ee71e1cd70289dacf597cab7b207aa107d2f28191c2ae45b2ece18a260" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -1314,12 +1456,29 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + [[package]] name = "pathdiff" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" +[[package]] +name = "pest" +version = "2.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7a4d085fd991ac8d5b05a147b437791b4260b76326baf0fc60cf7c9c27ecd33" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + [[package]] name = "phf" version = "0.10.1" @@ -1385,7 +1544,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.37", ] [[package]] @@ -1408,9 +1567,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.10" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pkcs8" @@ -1512,18 +1671,35 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.63" +version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb" +checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328" dependencies = [ "unicode-ident", ] +[[package]] +name = "proptest" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e35c06b98bf36aba164cc17cb25f7e232f5c4aeea73baa14b8a9f0d92dbfa65" +dependencies = [ + "bitflags", + "byteorder", + "lazy_static", + "num-traits", + "rand", + "rand_chacha", + "rand_xorshift", + "regex-syntax 0.6.29", + "unarray", +] + [[package]] name = "quote" -version = "1.0.29" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -1564,11 +1740,20 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core", +] + [[package]] name = "rayon" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" dependencies = [ "either", "rayon-core", @@ -1576,14 +1761,12 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" dependencies = [ - "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "num_cpus", ] [[package]] @@ -1603,14 +1786,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.9.1" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575" +checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.3.2", - "regex-syntax 0.7.3", + "regex-automata 0.3.8", + "regex-syntax 0.7.5", ] [[package]] @@ -1624,13 +1807,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.3.2" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83d3daa6976cffb758ec878f108ba0e062a45b2d6ca3a2cca965338855476caf" +checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.7.3", + "regex-syntax 0.7.5", ] [[package]] @@ -1641,9 +1824,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.7.3" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab07dc67230e4a4718e70fd5c20055a4334b121f1f9db8fe63ef39ce9b8c846" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" [[package]] name = "revm" @@ -1733,7 +1916,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -1759,23 +1942,32 @@ dependencies = [ [[package]] name = "ruint" -version = "1.8.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d470e29e933dac4101180fd6574971892315c414cf2961a192729089687cc9b" +checksum = "95294d6e3a6192f3aabf91c38f56505a625aa495533442744185a36d75a790c4" dependencies = [ - "derive_more", + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "bytes", + "fastrlp", + "num-bigint", + "parity-scale-codec", "primitive-types", + "proptest", + "rand", "rlp", "ruint-macro", - "rustc_version", - "thiserror", + "serde", + "valuable", + "zeroize", ] [[package]] name = "ruint-macro" -version = "1.0.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62cc5760263ea229d367e7dff3c0cbf09e4797a125bd87059a6c095804f3b2d1" +checksum = "e666a5496a0b2186dbcd0ff6106e29e093c15591bde62c20d3842007c6978a09" [[package]] name = "rustc-hex" @@ -1783,26 +1975,35 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + [[package]] name = "rustc_version" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver", + "semver 1.0.19", ] [[package]] name = "rustversion" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc31bd9b61a32c31f9650d18add92aa83a49ba979c143eefd27fe7177b05bd5f" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "ryu" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe232bdf6be8c8de797b22184ee71118d63780ea42ac85b61d1baa6d3b782ae9" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "same-file" @@ -1839,9 +2040,9 @@ dependencies = [ [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sec1" @@ -1859,12 +2060,12 @@ dependencies = [ [[package]] name = "sec1" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0aec48e813d6b90b15f0b8948af3c63483992dee44c03e9930b3eebdabe046e" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct 0.2.0", - "der 0.7.7", + "der 0.7.8", "generic-array", "subtle", "zeroize", @@ -1890,15 +2091,33 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.17" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0" + +[[package]] +name = "semver-parser" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] [[package]] name = "serde" -version = "1.0.167" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7daf513456463b42aa1d94cff7e0c24d682b429f020b9afa4f5ba5c40a22b237" +checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" dependencies = [ "serde_derive", ] @@ -1926,20 +2145,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.167" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b69b106b68bc8054f0e974e70d19984040f8a5cf9215ca82626ea4853f82c4b9" +checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.37", ] [[package]] name = "serde_json" -version = "1.0.100" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f1e14e89be7aa4c4b78bdbdc9eb5bf8517829a600ae8eaa39a6e1d960b5185c" +checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" dependencies = [ "itoa", "ryu", @@ -1954,7 +2173,7 @@ checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" dependencies = [ "cfg-if 1.0.0", "cpufeatures", - "digest", + "digest 0.10.7", ] [[package]] @@ -1963,7 +2182,7 @@ version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "digest", + "digest 0.10.7", "keccak", ] @@ -1978,9 +2197,9 @@ dependencies = [ [[package]] name = "signal-hook" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" dependencies = [ "libc", "signal-hook-registry", @@ -2012,7 +2231,7 @@ version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" dependencies = [ - "digest", + "digest 0.10.7", "rand_core", ] @@ -2022,21 +2241,30 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" dependencies = [ - "digest", + "digest 0.10.7", "rand_core", ] [[package]] name = "siphasher" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "smallvec" -version = "1.11.0" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" + +[[package]] +name = "smol_str" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" +checksum = "74212e6bbe9a4352329b2f68ba3130c15a3f26fe88ff22dbdc6cdd58fa85e99c" +dependencies = [ + "serde", +] [[package]] name = "spin" @@ -2131,9 +2359,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.23" +version = "2.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fb7d6d8281a51045d62b8eb3a7d1ce347b76f312af50cd3dc0af39c87c1737" +checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8" dependencies = [ "proc-macro2", "quote", @@ -2148,9 +2376,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "termcolor" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64" dependencies = [ "winapi-util", ] @@ -2172,22 +2400,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.43" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a35fc5b8971143ca348fa6df4f024d4d55264f3468c71ad1c2f365b0a4d58c42" +checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.43" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "463fe12d7993d3b327787537ce8dd4dfa058de32fc2b195ef3cde03dc4771e8f" +checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.37", ] [[package]] @@ -2236,9 +2464,9 @@ checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" [[package]] name = "toml_edit" -version = "0.19.12" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c500344a19072298cd05a7224b3c0c629348b78692bf48466c5238656e315a78" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ "indexmap 2.0.0", "toml_datetime", @@ -2265,7 +2493,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.37", ] [[package]] @@ -2332,9 +2560,15 @@ dependencies = [ [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ucd-trie" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" [[package]] name = "uint" @@ -2348,17 +2582,23 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + [[package]] name = "unicode-ident" -version = "1.0.10" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22049a19f4a68748a168c0fc439f9516686aa045927ff767eca0a85101fb6e73" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "unicode-xid" @@ -2368,9 +2608,9 @@ checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "uuid" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d023da39d1fde5a8a3fe1f3e01ca9632ada0a63e9797de55a879d6e2236277be" +checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" dependencies = [ "getrandom", ] @@ -2389,9 +2629,9 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "walkdir" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ "same-file", "winapi-util", @@ -2424,7 +2664,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.37", "wasm-bindgen-shared", ] @@ -2446,7 +2686,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.37", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2485,9 +2725,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ "winapi", ] @@ -2509,9 +2749,9 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", @@ -2524,51 +2764,51 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "winnow" -version = "0.4.9" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81a2094c43cc94775293eaa0e499fbc30048a6d824ac82c0351a8c0bf9112529" +checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc" dependencies = [ "memchr", ] @@ -2593,3 +2833,17 @@ name = "zeroize" version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.37", +] From c62ab0788272668e48466ff97186cccc949e7302 Mon Sep 17 00:00:00 2001 From: shafu Date: Fri, 29 Sep 2023 15:03:38 +0200 Subject: [PATCH 5/9] fix(docs): typo in code example (#297) --- huff_lexer/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/huff_lexer/README.md b/huff_lexer/README.md index d3ce1146..693aaf1a 100644 --- a/huff_lexer/README.md +++ b/huff_lexer/README.md @@ -24,7 +24,7 @@ use std::ops::Deref; // Instantiate a new lexer let source = "#define macro HELLO_WORLD()"; let flattened_source = FullFileSource { source, file: None, spans: vec![] }; -let mut lexer = Lexer::new(flattened_source.sour); +let mut lexer = Lexer::new(flattened_source.source); // This token should be a Define identifier let tok = lexer.next().unwrap().unwrap(); From 09d7a243ba1436e7a20dd9315f3485c42b7ffa54 Mon Sep 17 00:00:00 2001 From: Pranesh A S <42379522+PraneshASP@users.noreply.github.com> Date: Sun, 1 Oct 2023 21:01:17 +0530 Subject: [PATCH 6/9] feat(parser): throw error on macro name clash (#293) * fix: restrict duplicate macros * refactor: create seperate method to check duplicates * fix: restrict duplicate macros * refactor: create seperate method to check duplicates * fix: run clippy * chore: add tracing::error * chore: remove comments --------- Co-authored-by: Maddiaa0 <47148561+Maddiaa0@users.noreply.github.com> --- huff_parser/src/lib.rs | 81 +++++++++++++++++++++++--------------- huff_parser/tests/macro.rs | 64 ++++++++++++++++++++++++++++++ huff_utils/src/error.rs | 10 +++++ 3 files changed, 124 insertions(+), 31 deletions(-) diff --git a/huff_parser/src/lib.rs b/huff_parser/src/lib.rs index 48e88c0e..1bc5ad49 100644 --- a/huff_parser/src/lib.rs +++ b/huff_parser/src/lib.rs @@ -104,6 +104,7 @@ impl Parser { TokenKind::Macro | TokenKind::Fn | TokenKind::Test => { let m = self.parse_macro()?; tracing::info!(target: "parser", "SUCCESSFULLY PARSED MACRO {}", m.name); + self.check_duplicate_macro(&contract, m.clone())?; contract.macros.push(m); } TokenKind::JumpTable | TokenKind::JumpTablePacked | TokenKind::CodeTable => { @@ -132,7 +133,7 @@ impl Parser { TokenKind::Include )), spans: AstSpan(self.spans.clone()), - }) + }); } } @@ -157,7 +158,7 @@ impl Parser { kind: ParserErrorKind::InvalidName(tok.clone()), hint: Some(format!("Expected import string. Got: \"{tok}\"")), spans: AstSpan(new_spans), - }) + }); } }; @@ -185,6 +186,24 @@ impl Parser { std::mem::discriminant(&self.current_token.kind) == std::mem::discriminant(&kind) } + /// Checks if there is a duplicate macro name + pub fn check_duplicate_macro( + &self, + contract: &Contract, + m: MacroDefinition, + ) -> Result<(), ParserError> { + if contract.macros.binary_search_by(|_macro| _macro.name.cmp(&m.name)).is_ok() { + tracing::error!(target: "parser", "DUPLICATE MACRO NAME FOUND: {}", m.name); + Err(ParserError { + kind: ParserErrorKind::DuplicateMacro(m.name), + hint: Some("MACRO names should be unique".to_string()), + spans: AstSpan(vec![self.spans[2].clone()]), + }) + } else { + Ok(()) + } + } + /// Consumes the next token. pub fn consume(&mut self) { self.spans.push(self.current_token.span.clone()); @@ -197,7 +216,7 @@ impl Parser { loop { let token = self.peek().unwrap(); if !kinds.contains(&token.kind) { - break + break; } self.current_token = token; self.cursor += 1; @@ -238,7 +257,7 @@ impl Parser { kind: ParserErrorKind::InvalidName(tok.clone()), hint: Some(format!("Expected function name, found: \"{tok}\"")), spans: AstSpan(self.spans.clone()), - }) + }); } }; @@ -300,7 +319,7 @@ impl Parser { kind: ParserErrorKind::InvalidName(tok.clone()), hint: Some(format!("Expected event name, found: \"{tok}\"")), spans: AstSpan(self.spans.clone()), - }) + }); } }; @@ -331,7 +350,7 @@ impl Parser { kind: ParserErrorKind::UnexpectedType(tok), hint: Some("Expected constant name.".to_string()), spans: AstSpan(self.spans.clone()), - }) + }); } }; @@ -356,7 +375,7 @@ impl Parser { .to_string(), ), spans: AstSpan(vec![self.current_token.span.clone()]), - }) + }); } }; @@ -384,7 +403,7 @@ impl Parser { kind: ParserErrorKind::UnexpectedType(tok), hint: Some("Expected error name.".to_string()), spans: AstSpan(self.spans.clone()), - }) + }); } }; @@ -431,7 +450,7 @@ impl Parser { ), hint: Some(format!("Expected string for decorator flag: {s}")), spans: AstSpan(vec![self.current_token.span.clone()]), - }) + }); } } // The value flag accepts a single literal as an argument @@ -447,7 +466,7 @@ impl Parser { ), hint: Some(format!("Expected literal for decorator flag: {s}")), spans: AstSpan(vec![self.current_token.span.clone()]), - }) + }); } } Err(_) => { @@ -456,7 +475,7 @@ impl Parser { kind: ParserErrorKind::InvalidDecoratorFlag(s.clone()), hint: Some(format!("Unknown decorator flag: {s}")), spans: AstSpan(self.spans.clone()), - }) + }); } } @@ -474,7 +493,7 @@ impl Parser { )), hint: Some(String::from("Unknown decorator flag")), spans: AstSpan(self.spans.clone()), - }) + }); } } @@ -683,7 +702,7 @@ impl Parser { kind: ParserErrorKind::InvalidTokenInMacroBody(kind), hint: None, spans: AstSpan(vec![self.current_token.span.clone()]), - }) + }); } }; } @@ -706,8 +725,8 @@ impl Parser { pub fn parse_label(&mut self) -> Result, ParserError> { let mut statements: Vec = Vec::new(); self.match_kind(TokenKind::Colon)?; - while !self.check(TokenKind::Label("NEXT_LABEL".to_string())) && - !self.check(TokenKind::CloseBrace) + while !self.check(TokenKind::Label("NEXT_LABEL".to_string())) + && !self.check(TokenKind::CloseBrace) { match self.current_token.kind.clone() { TokenKind::Literal(val) => { @@ -796,7 +815,7 @@ impl Parser { kind: ParserErrorKind::InvalidTokenInLabelDefinition(kind), hint: None, spans: AstSpan(vec![self.current_token.span.clone()]), - }) + }); } }; } @@ -848,7 +867,7 @@ impl Parser { self.consume(); on_type = true; } - continue + continue; } // Check for literals @@ -868,7 +887,7 @@ impl Parser { self.consume(); on_type = true; } - continue + continue; } } @@ -909,9 +928,9 @@ impl Parser { } // name comes second (is optional) - if select_name && - (self.check(TokenKind::Ident("x".to_string())) || - self.check(TokenKind::PrimitiveType(PrimitiveEVMType::Address))) + if select_name + && (self.check(TokenKind::Ident("x".to_string())) + || self.check(TokenKind::PrimitiveType(PrimitiveEVMType::Address))) { // We need to check if the name is a keyword - not the type if !on_type { @@ -927,7 +946,7 @@ impl Parser { "Argument names cannot be EVM types: {arg_str}" )), spans: AstSpan(vec![self.current_token.span.clone()]), - }) + }); } } TokenKind::PrimitiveType(ty) => { @@ -960,7 +979,7 @@ impl Parser { kind: ParserErrorKind::InvalidArgs(self.current_token.kind.clone()), hint: None, spans: AstSpan(vec![self.current_token.span.clone()]), - }) + }); } arg.span = AstSpan(arg_spans); @@ -1038,7 +1057,7 @@ impl Parser { .to_string(), ), spans: AstSpan(new_spans), - }) + }); } } if self.check(TokenKind::Comma) { @@ -1085,8 +1104,8 @@ impl Parser { 0_usize } }) - .sum::() / - 2 + .sum::() + / 2 } }; @@ -1126,7 +1145,7 @@ impl Parser { ), hint: Some("Expected valid hex bytecode.".to_string()), spans: AstSpan(new_spans), - }) + }); } } else { StatementType::LabelCall(ident_str.to_string()) @@ -1141,7 +1160,7 @@ impl Parser { kind: ParserErrorKind::InvalidTableBodyToken(kind.clone()), hint: Some("Expected an identifier string.".to_string()), spans: AstSpan(new_spans), - }) + }); } }; } @@ -1246,7 +1265,7 @@ impl Parser { kind: ParserErrorKind::InvalidUint256(size), hint: None, spans: AstSpan(vec![self.current_token.span.clone()]), - }) + }); } Ok(self.match_kind(self.current_token.kind.clone())?) } @@ -1256,7 +1275,7 @@ impl Parser { kind: ParserErrorKind::InvalidBytes(size), hint: None, spans: AstSpan(vec![self.current_token.span.clone()]), - }) + }); } Ok(self.match_kind(self.current_token.kind.clone())?) } @@ -1270,7 +1289,7 @@ impl Parser { kind: ParserErrorKind::InvalidInt(size), hint: None, spans: AstSpan(vec![self.current_token.span.clone()]), - }) + }); } let curr_token_kind = self.current_token.kind.clone(); self.consume(); diff --git a/huff_parser/tests/macro.rs b/huff_parser/tests/macro.rs index bc34e903..a2017997 100644 --- a/huff_parser/tests/macro.rs +++ b/huff_parser/tests/macro.rs @@ -1232,3 +1232,67 @@ fn empty_test_with_multi_flag_decorator() { assert_eq!(macro_definition, expected); assert_eq!(parser.current_token.kind, TokenKind::Eof); } + +#[test] +fn test_duplicate_macro_error() { + let source = r#" + #define macro CONSTRUCTOR() = takes(0) returns (0) {} + + #define macro MINT() = takes(0) returns (0) { + 0x04 calldataload // [to] + 0x00 // [from (0x00), to] + 0x24 calldataload // [value, from, to] + } + + #define macro MINT() = takes(0) returns (0) { + 0x04 calldataload // [to] + 0x00 // [from (0x00), to] + 0x24 calldataload // [value, from, to] + } + + #define macro MAIN() = takes(0) returns (0) { + 0x00 calldataload 0xE0 shr + dup1 0x40c10f19 eq mints jumpi + + mints: + MINT() + } + "#; + + let mut start = 0; + let target = "MINT"; + let target_len = target.len(); + let mut occurrences = Vec::new(); + + while let Some(pos) = source[start..].find(target) { + let adjusted_start = start + pos; + let adjusted_end = adjusted_start + target_len - 1; + + occurrences.push((adjusted_start, adjusted_end)); + start = adjusted_end + 1; + } + + let full_source = FullFileSource { source, file: None, spans: vec![] }; + let lexer = Lexer::new(full_source.source); + let tokens = lexer.into_iter().map(|x| x.unwrap()).collect::>(); + let mut parser = Parser::new(tokens, Some("".to_string())); + + // This should be caught before codegen invalid macro statement + match parser.parse() { + Ok(_) => panic!("moose"), + Err(e) => { + assert_eq!( + e, + ParserError { + kind: ParserErrorKind::DuplicateMacro("MINT".to_string()), + hint: Some("MACRO names should be unique".to_string()), + spans: AstSpan(vec![Span { + start: occurrences[1].0, + end: occurrences[1].1, + file: None + }]), + } + ) + } + } +} diff --git a/huff_utils/src/error.rs b/huff_utils/src/error.rs index 9ecb2631..b1d1af81 100644 --- a/huff_utils/src/error.rs +++ b/huff_utils/src/error.rs @@ -63,6 +63,8 @@ pub enum ParserErrorKind { InvalidDecoratorFlag(String), /// Invalid decorator flag argument InvalidDecoratorFlagArg(TokenKind), + /// Duplicate MACRO + DuplicateMacro(String), } /// A Lexing Error @@ -488,6 +490,14 @@ impl fmt::Display for CompilerError { pe.spans.error(pe.hint.as_ref()) ) } + ParserErrorKind::DuplicateMacro(mn) => { + write!( + f, + "\nError: Duplicate MACRO name found: \"{}\" \n{}\n", + mn, + pe.spans.error(pe.hint.as_ref()) + ) + } }, CompilerError::PathBufRead(os_str) => { write!( From 08531a90ca84118522f8ac77f641937df7f073ce Mon Sep 17 00:00:00 2001 From: Maddiaa <47148561+Maddiaa0@users.noreply.github.com> Date: Sun, 1 Oct 2023 17:40:53 +0200 Subject: [PATCH 7/9] fix: allow index into AstSpan (#299) --- huff_parser/src/lib.rs | 78 +++++++++++++++++++++-------------------- huff_utils/src/ast.rs | 14 ++++++++ huff_utils/src/error.rs | 2 +- 3 files changed, 55 insertions(+), 39 deletions(-) diff --git a/huff_parser/src/lib.rs b/huff_parser/src/lib.rs index 1bc5ad49..df2932cb 100644 --- a/huff_parser/src/lib.rs +++ b/huff_parser/src/lib.rs @@ -104,7 +104,7 @@ impl Parser { TokenKind::Macro | TokenKind::Fn | TokenKind::Test => { let m = self.parse_macro()?; tracing::info!(target: "parser", "SUCCESSFULLY PARSED MACRO {}", m.name); - self.check_duplicate_macro(&contract, m.clone())?; + self.check_duplicate_macro(&contract, &m)?; contract.macros.push(m); } TokenKind::JumpTable | TokenKind::JumpTablePacked | TokenKind::CodeTable => { @@ -133,7 +133,7 @@ impl Parser { TokenKind::Include )), spans: AstSpan(self.spans.clone()), - }); + }) } } @@ -158,7 +158,7 @@ impl Parser { kind: ParserErrorKind::InvalidName(tok.clone()), hint: Some(format!("Expected import string. Got: \"{tok}\"")), spans: AstSpan(new_spans), - }); + }) } }; @@ -190,14 +190,14 @@ impl Parser { pub fn check_duplicate_macro( &self, contract: &Contract, - m: MacroDefinition, + m: &MacroDefinition, ) -> Result<(), ParserError> { if contract.macros.binary_search_by(|_macro| _macro.name.cmp(&m.name)).is_ok() { tracing::error!(target: "parser", "DUPLICATE MACRO NAME FOUND: {}", m.name); Err(ParserError { - kind: ParserErrorKind::DuplicateMacro(m.name), + kind: ParserErrorKind::DuplicateMacro(m.name.to_owned()), hint: Some("MACRO names should be unique".to_string()), - spans: AstSpan(vec![self.spans[2].clone()]), + spans: AstSpan(vec![m.span[2].clone()]), }) } else { Ok(()) @@ -216,7 +216,7 @@ impl Parser { loop { let token = self.peek().unwrap(); if !kinds.contains(&token.kind) { - break; + break } self.current_token = token; self.cursor += 1; @@ -257,7 +257,7 @@ impl Parser { kind: ParserErrorKind::InvalidName(tok.clone()), hint: Some(format!("Expected function name, found: \"{tok}\"")), spans: AstSpan(self.spans.clone()), - }); + }) } }; @@ -319,7 +319,7 @@ impl Parser { kind: ParserErrorKind::InvalidName(tok.clone()), hint: Some(format!("Expected event name, found: \"{tok}\"")), spans: AstSpan(self.spans.clone()), - }); + }) } }; @@ -350,7 +350,7 @@ impl Parser { kind: ParserErrorKind::UnexpectedType(tok), hint: Some("Expected constant name.".to_string()), spans: AstSpan(self.spans.clone()), - }); + }) } }; @@ -375,7 +375,7 @@ impl Parser { .to_string(), ), spans: AstSpan(vec![self.current_token.span.clone()]), - }); + }) } }; @@ -403,7 +403,7 @@ impl Parser { kind: ParserErrorKind::UnexpectedType(tok), hint: Some("Expected error name.".to_string()), spans: AstSpan(self.spans.clone()), - }); + }) } }; @@ -450,7 +450,7 @@ impl Parser { ), hint: Some(format!("Expected string for decorator flag: {s}")), spans: AstSpan(vec![self.current_token.span.clone()]), - }); + }) } } // The value flag accepts a single literal as an argument @@ -466,7 +466,7 @@ impl Parser { ), hint: Some(format!("Expected literal for decorator flag: {s}")), spans: AstSpan(vec![self.current_token.span.clone()]), - }); + }) } } Err(_) => { @@ -475,7 +475,7 @@ impl Parser { kind: ParserErrorKind::InvalidDecoratorFlag(s.clone()), hint: Some(format!("Unknown decorator flag: {s}")), spans: AstSpan(self.spans.clone()), - }); + }) } } @@ -493,7 +493,7 @@ impl Parser { )), hint: Some(String::from("Unknown decorator flag")), spans: AstSpan(self.spans.clone()), - }); + }) } } @@ -654,7 +654,9 @@ impl Parser { let mut curr_spans = vec![self.current_token.span.clone()]; self.consume(); let inner_statements: Vec = self.parse_label()?; - inner_statements.iter().for_each(|a| curr_spans.extend_from_slice(&a.span.0)); + inner_statements + .iter() + .for_each(|a| curr_spans.extend_from_slice(a.span.inner_ref())); tracing::info!(target: "parser", "PARSED LABEL \"{}\" INSIDE MACRO WITH {} STATEMENTS.", l, inner_statements.len()); statements.push(Statement { ty: StatementType::Label(Label { @@ -685,7 +687,7 @@ impl Parser { let mut curr_spans = vec![self.current_token.span.clone()]; self.match_kind(TokenKind::BuiltinFunction(String::default()))?; let args = self.parse_args(true, false, false, true)?; - args.iter().for_each(|a| curr_spans.extend_from_slice(&a.span.0)); + args.iter().for_each(|a| curr_spans.extend_from_slice(a.span.inner_ref())); tracing::info!(target: "parser", "PARSING MACRO BODY: [BUILTIN FN: {}({:?})]", f, args); statements.push(Statement { ty: StatementType::BuiltinFunctionCall(BuiltinFunctionCall { @@ -702,7 +704,7 @@ impl Parser { kind: ParserErrorKind::InvalidTokenInMacroBody(kind), hint: None, spans: AstSpan(vec![self.current_token.span.clone()]), - }); + }) } }; } @@ -725,8 +727,8 @@ impl Parser { pub fn parse_label(&mut self) -> Result, ParserError> { let mut statements: Vec = Vec::new(); self.match_kind(TokenKind::Colon)?; - while !self.check(TokenKind::Label("NEXT_LABEL".to_string())) - && !self.check(TokenKind::CloseBrace) + while !self.check(TokenKind::Label("NEXT_LABEL".to_string())) && + !self.check(TokenKind::CloseBrace) { match self.current_token.kind.clone() { TokenKind::Literal(val) => { @@ -798,7 +800,7 @@ impl Parser { let mut curr_spans = vec![self.current_token.span.clone()]; self.match_kind(TokenKind::BuiltinFunction(String::default()))?; let args = self.parse_args(true, false, false, true)?; - args.iter().for_each(|a| curr_spans.extend_from_slice(&a.span.0)); + args.iter().for_each(|a| curr_spans.extend_from_slice(a.span.inner_ref())); tracing::info!(target: "parser", "PARSING LABEL BODY: [BUILTIN FN: {}({:?})]", f, args); statements.push(Statement { ty: StatementType::BuiltinFunctionCall(BuiltinFunctionCall { @@ -815,7 +817,7 @@ impl Parser { kind: ParserErrorKind::InvalidTokenInLabelDefinition(kind), hint: None, spans: AstSpan(vec![self.current_token.span.clone()]), - }); + }) } }; } @@ -867,7 +869,7 @@ impl Parser { self.consume(); on_type = true; } - continue; + continue } // Check for literals @@ -887,7 +889,7 @@ impl Parser { self.consume(); on_type = true; } - continue; + continue } } @@ -928,9 +930,9 @@ impl Parser { } // name comes second (is optional) - if select_name - && (self.check(TokenKind::Ident("x".to_string())) - || self.check(TokenKind::PrimitiveType(PrimitiveEVMType::Address))) + if select_name && + (self.check(TokenKind::Ident("x".to_string())) || + self.check(TokenKind::PrimitiveType(PrimitiveEVMType::Address))) { // We need to check if the name is a keyword - not the type if !on_type { @@ -946,7 +948,7 @@ impl Parser { "Argument names cannot be EVM types: {arg_str}" )), spans: AstSpan(vec![self.current_token.span.clone()]), - }); + }) } } TokenKind::PrimitiveType(ty) => { @@ -979,7 +981,7 @@ impl Parser { kind: ParserErrorKind::InvalidArgs(self.current_token.kind.clone()), hint: None, spans: AstSpan(vec![self.current_token.span.clone()]), - }); + }) } arg.span = AstSpan(arg_spans); @@ -1057,7 +1059,7 @@ impl Parser { .to_string(), ), spans: AstSpan(new_spans), - }); + }) } } if self.check(TokenKind::Comma) { @@ -1104,8 +1106,8 @@ impl Parser { 0_usize } }) - .sum::() - / 2 + .sum::() / + 2 } }; @@ -1145,7 +1147,7 @@ impl Parser { ), hint: Some("Expected valid hex bytecode.".to_string()), spans: AstSpan(new_spans), - }); + }) } } else { StatementType::LabelCall(ident_str.to_string()) @@ -1160,7 +1162,7 @@ impl Parser { kind: ParserErrorKind::InvalidTableBodyToken(kind.clone()), hint: Some("Expected an identifier string.".to_string()), spans: AstSpan(new_spans), - }); + }) } }; } @@ -1265,7 +1267,7 @@ impl Parser { kind: ParserErrorKind::InvalidUint256(size), hint: None, spans: AstSpan(vec![self.current_token.span.clone()]), - }); + }) } Ok(self.match_kind(self.current_token.kind.clone())?) } @@ -1275,7 +1277,7 @@ impl Parser { kind: ParserErrorKind::InvalidBytes(size), hint: None, spans: AstSpan(vec![self.current_token.span.clone()]), - }); + }) } Ok(self.match_kind(self.current_token.kind.clone())?) } @@ -1289,7 +1291,7 @@ impl Parser { kind: ParserErrorKind::InvalidInt(size), hint: None, spans: AstSpan(vec![self.current_token.span.clone()]), - }); + }) } let curr_token_kind = self.current_token.kind.clone(); self.consume(); diff --git a/huff_utils/src/ast.rs b/huff_utils/src/ast.rs index 3b0c5255..a2726a3b 100644 --- a/huff_utils/src/ast.rs +++ b/huff_utils/src/ast.rs @@ -1,5 +1,6 @@ use itertools::Itertools; use serde::{Deserialize, Serialize}; +use std::ops::Index; use crate::{ bytecode::*, @@ -76,6 +77,19 @@ impl AstSpan { None => Default::default(), }) } + + /// Retrieve the underlying vector of spans + pub fn inner_ref(&self) -> &Vec { + &self.0 + } +} + +/// Allows AstSpan to be indexed into +impl Index for AstSpan { + type Output = Span; + fn index(&self, index: usize) -> &Self::Output { + &self.0[index] + } } /// A Huff Contract Representation diff --git a/huff_utils/src/error.rs b/huff_utils/src/error.rs index b1d1af81..d0e90a1b 100644 --- a/huff_utils/src/error.rs +++ b/huff_utils/src/error.rs @@ -185,7 +185,7 @@ pub enum CodegenErrorKind { impl Spanned for CodegenError { fn span(&self) -> Span { - self.span.0[0].clone() + self.span[0].clone() } } From f13f7de05749544e0e5679a296d792d90cf57422 Mon Sep 17 00:00:00 2001 From: chengxuncc Date: Thu, 14 Mar 2024 23:28:17 +0800 Subject: [PATCH 8/9] add opcodes blobhash and blobbasefee (#311) --- huff_utils/src/evm.rs | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/huff_utils/src/evm.rs b/huff_utils/src/evm.rs index 12da3f82..97523465 100644 --- a/huff_utils/src/evm.rs +++ b/huff_utils/src/evm.rs @@ -6,7 +6,7 @@ use strum_macros::EnumString; /// They are arranged in a particular order such that all the opcodes that have common /// prefixes are ordered by decreasing length to avoid mismatch when lexing. /// Example : [origin, or] or [push32, ..., push3] -pub const OPCODES: [&str; 148] = [ +pub const OPCODES: [&str; 150] = [ "lt", "gt", "slt", @@ -29,6 +29,8 @@ pub const OPCODES: [&str; 148] = [ "codesize", "codecopy", "basefee", + "blobhash", + "blobbasefee", "blockhash", "coinbase", "timestamp", @@ -39,7 +41,6 @@ pub const OPCODES: [&str; 148] = [ "chainid", "selfbalance", "pop", - "mcopy", "mload", "mstore8", "mstore", @@ -80,6 +81,7 @@ pub const OPCODES: [&str; 148] = [ "log4", "tload", "tstore", + "mcopy", "create2", "create", "callcode", @@ -181,6 +183,8 @@ pub static OPCODES_MAP: phf::Map<&'static str, Opcode> = phf_map! { "codesize" => Opcode::Codesize, "codecopy" => Opcode::Codecopy, "basefee" => Opcode::Basefee, + "blobhash" => Opcode::Blobhash, + "blobbasefee" => Opcode::Blobbasefee, "blockhash" => Opcode::Blockhash, "coinbase" => Opcode::Coinbase, "timestamp" => Opcode::Timestamp, @@ -295,8 +299,8 @@ pub static OPCODES_MAP: phf::Map<&'static str, Opcode> = phf_map! { "log2" => Opcode::Log2, "log3" => Opcode::Log3, "log4" => Opcode::Log4, - "tload" => Opcode::TLoad, - "tstore" => Opcode::TStore, + "tload" => Opcode::Tload, + "tstore" => Opcode::Tstore, "create" => Opcode::Create, "call" => Opcode::Call, "callcode" => Opcode::Callcode, @@ -418,6 +422,10 @@ pub enum Opcode { Selfbalance, /// Base Fee Basefee, + /// Versioned hashes of blobs associated with the transaction. + Blobhash, + /// Blob base fee of the current block. + Blobbasefee, /// Removes an Item from the Stack Pop, /// Loads a word from Memory @@ -442,8 +450,6 @@ pub enum Opcode { Gas, /// Marks a valid destination for jumps Jumpdest, - /// Copies an area of memory from src to dst. Areas can overlap. - Mcopy, /// Places a zero on top of the stack Push0, /// Places 1 byte item on top of the stack @@ -585,9 +591,11 @@ pub enum Opcode { /// Append Log Record with 4 Topics Log4, /// Transaction-persistent, but storage-ephemeral variable load - TLoad, + Tload, /// Transaction-persistent, but storage-ephemeral variable store - TStore, + Tstore, + /// Copies an area of memory from src to dst. Areas can overlap. + Mcopy, /// Create a new account with associated code Create, /// Message-call into an account @@ -670,6 +678,8 @@ impl Opcode { Opcode::Chainid => "46", Opcode::Selfbalance => "47", Opcode::Basefee => "48", + Opcode::Blobhash => "49", + Opcode::Blobbasefee => "4a", Opcode::Pop => "50", Opcode::Mload => "51", Opcode::Mstore => "52", @@ -682,8 +692,8 @@ impl Opcode { Opcode::Msize => "59", Opcode::Gas => "5a", Opcode::Jumpdest => "5b", - Opcode::TLoad => "5c", - Opcode::TStore => "5d", + Opcode::Tload => "5c", + Opcode::Tstore => "5d", Opcode::Mcopy => "5e", Opcode::Push0 => "5f", Opcode::Push1 => "60", From 50ee6028038b5539e19c3bcb7f49f675d43c1f39 Mon Sep 17 00:00:00 2001 From: Maddiaa <47148561+Maddiaa0@users.noreply.github.com> Date: Sun, 21 Apr 2024 23:58:14 +0100 Subject: [PATCH 9/9] chore: fix up stage (#317) --- .github/workflows/ci.yaml | 8 +-- huff_cli/src/huffc.rs | 6 +-- huff_codegen/src/irgen/arg_calls.rs | 4 +- huff_codegen/src/irgen/constants.rs | 4 +- huff_codegen/src/irgen/statements.rs | 30 +++++------ huff_codegen/src/lib.rs | 14 ++--- huff_core/benches/huff_benchmark.rs | 10 ++-- huff_core/src/cache.rs | 6 +-- huff_core/src/lib.rs | 28 ++++------ huff_core/tests/erc20.rs | 2 +- huff_core/tests/erc721.rs | 2 +- huff_core/tests/parser_errors.rs | 2 +- huff_lexer/src/lib.rs | 26 +++++----- huff_lexer/tests/tables.rs | 6 +-- huff_parser/src/lib.rs | 52 +++++++++---------- huff_tests/src/inspectors/cheats_inspector.rs | 2 +- huff_tests/src/lib.rs | 2 +- huff_tests/src/report.rs | 2 +- huff_tests/src/runner.rs | 2 +- huff_utils/src/abi.rs | 18 +++---- huff_utils/src/ast.rs | 12 ++--- huff_utils/src/evm.rs | 4 +- huff_utils/src/file_provider.rs | 2 +- huff_utils/src/files.rs | 10 ++-- huff_utils/src/io.rs | 2 +- huff_utils/src/token.rs | 4 +- huff_utils/src/types.rs | 22 ++++---- 27 files changed, 138 insertions(+), 144 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index aa3ee06d..72a7581d 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -31,7 +31,7 @@ jobs: - name: Install toolchain uses: actions-rs/toolchain@v1 with: - toolchain: nightly + toolchain: stable profile: minimal components: rustfmt, clippy override: true @@ -39,7 +39,7 @@ jobs: with: cache-on-failure: true - name: cargo doc - run: cargo +nightly doc --all-features --no-deps + run: cargo doc --all-features --no-deps cargo-clippy: runs-on: ubuntu-latest @@ -49,7 +49,7 @@ jobs: - name: Install toolchain uses: actions-rs/toolchain@v1 with: - toolchain: nightly + toolchain: stable profile: minimal components: rustfmt, clippy override: true @@ -57,7 +57,7 @@ jobs: with: cache-on-failure: false - name: cargo clippy - run: cargo +nightly clippy --all --all-features -- -D warnings + run: cargo clippy --all --all-features -- -D warnings tests: runs-on: ubuntu-latest diff --git a/huff_cli/src/huffc.rs b/huff_cli/src/huffc.rs index f0605bc0..f2267f76 100644 --- a/huff_cli/src/huffc.rs +++ b/huff_cli/src/huffc.rs @@ -151,7 +151,7 @@ fn main() { if cli.path.is_none() { // Print help and exit app.print_help().unwrap(); - return + return; } // Create compiler from the Huff Args @@ -303,7 +303,7 @@ fn main() { std::process::exit(1); } } - return + return; } if let Some(TestCommands::Test { format, match_ }) = cli.test { @@ -332,7 +332,7 @@ fn main() { std::process::exit(1); } } - return + return; } // Create compiling spinner diff --git a/huff_codegen/src/irgen/arg_calls.rs b/huff_codegen/src/irgen/arg_calls.rs index 09e81621..d90877f0 100644 --- a/huff_codegen/src/irgen/arg_calls.rs +++ b/huff_codegen/src/irgen/arg_calls.rs @@ -90,7 +90,7 @@ pub fn bubble_arg_call( mis, jump_table, ) - } + }; } MacroArg::Ident(iden) => { tracing::debug!(target: "codegen", "Found MacroArg::Ident IN \"{}\" Macro Invocation: \"{}\"!", macro_invoc.1.macro_name, iden); @@ -124,7 +124,7 @@ pub fn bubble_arg_call( kind: CodegenErrorKind::StoragePointersNotDerived, span: AstSpan(vec![]), token: None, - }) + }); } }; *offset += push_bytes.len() / 2; diff --git a/huff_codegen/src/irgen/constants.rs b/huff_codegen/src/irgen/constants.rs index b9706bda..90211f20 100644 --- a/huff_codegen/src/irgen/constants.rs +++ b/huff_codegen/src/irgen/constants.rs @@ -23,7 +23,7 @@ pub fn constant_gen( kind: CodegenErrorKind::MissingConstantDefinition(name.to_string()), span: ir_byte_span.clone(), token: None, - }) + }); }; // Generate bytecode for the constant @@ -40,7 +40,7 @@ pub fn constant_gen( kind: CodegenErrorKind::StoragePointersNotDerived, span: constant.span.clone(), token: None, - }) + }); } }; diff --git a/huff_codegen/src/irgen/statements.rs b/huff_codegen/src/irgen/statements.rs index 96688202..c765c169 100644 --- a/huff_codegen/src/irgen/statements.rs +++ b/huff_codegen/src/irgen/statements.rs @@ -38,7 +38,7 @@ pub fn statement_gen<'a>( kind: CodegenErrorKind::InvalidMacroInvocation(mi.macro_name.clone()), span: mi.span.clone(), token: None, - }) + }); }; tracing::info!(target: "codegen", "FOUND INNER MACRO: {}", ir_macro.name); @@ -50,7 +50,7 @@ pub fn statement_gen<'a>( kind: CodegenErrorKind::TestInvocation(ir_macro.name.clone()), span: ir_macro.span.clone(), token: None, - }) + }); } // If invoked macro is a function (outlined), insert a jump to the function's code and a @@ -114,7 +114,7 @@ pub fn statement_gen<'a>( "FAILED TO RECURSE INTO MACRO \"{}\"", ir_macro.name ); - return Err(e) + return Err(e); } }; @@ -181,7 +181,7 @@ pub fn statement_gen<'a>( ), span: bf.span.clone(), token: None, - }) + }); }; // Get the name of the macro being passed to __codesize @@ -223,7 +223,7 @@ pub fn statement_gen<'a>( "FAILED TO RECURSE INTO MACRO \"{}\"", ir_macro.name ); - return Err(e) + return Err(e); } }; @@ -254,7 +254,7 @@ pub fn statement_gen<'a>( ), span: bf.span.clone(), token: None, - }) + }); }; let size = bytes32_to_string(&ir_table.size, false); @@ -294,7 +294,7 @@ pub fn statement_gen<'a>( ), span: bf.span.clone(), token: None, - }) + }); } } BuiltinFunctionKind::FunctionSignature => { @@ -353,7 +353,7 @@ pub fn statement_gen<'a>( ), span: bf.span.clone(), token: None, - }) + }); } } BuiltinFunctionKind::EventHash => { @@ -403,7 +403,7 @@ pub fn statement_gen<'a>( ), span: bf.span.clone(), token: None, - }) + }); } } BuiltinFunctionKind::Error => { @@ -420,7 +420,7 @@ pub fn statement_gen<'a>( )), span: bf.span.clone(), token: None, - }) + }); } if let Some(error) = contract @@ -453,7 +453,7 @@ pub fn statement_gen<'a>( ), span: bf.span.clone(), token: None, - }) + }); } } BuiltinFunctionKind::RightPad => { @@ -545,7 +545,7 @@ pub fn statement_gen<'a>( )), span: bf.span.clone(), token: None, - }) + }); } let verbatim_str = bf.args[0].name.as_ref().unwrap(); @@ -554,7 +554,7 @@ pub fn statement_gen<'a>( for c in verbatim_str.chars() { if !c.is_ascii_hexdigit() { is_hex = false; - break + break; } } if !is_hex { @@ -567,7 +567,7 @@ pub fn statement_gen<'a>( kind: CodegenErrorKind::InvalidHex(verbatim_str.to_string()), span: bf.span.clone(), token: None, - }) + }); } tracing::debug!(target: "codegen", "INJECTING as verbatim: {}", verbatim_str); @@ -586,7 +586,7 @@ pub fn statement_gen<'a>( kind: CodegenErrorKind::InvalidMacroStatement, span: s.span.clone(), token: None, - }) + }); } } diff --git a/huff_codegen/src/lib.rs b/huff_codegen/src/lib.rs index e281235f..d3e8ace9 100644 --- a/huff_codegen/src/lib.rs +++ b/huff_codegen/src/lib.rs @@ -154,7 +154,7 @@ impl Codegen { .collect::>(), ), token: None, - }) + }); } tracing::info!(target: "codegen", "GENERATING JUMPTABLE BYTECODE"); @@ -300,7 +300,7 @@ impl Codegen { let circular_codesize_invocations = circular_codesize_invocations.unwrap_or(&mut ccsi); // Loop through all intermediate bytecode representations generated from the AST - for (_ir_bytes_index, ir_byte) in ir_bytes.iter().enumerate() { + for ir_byte in ir_bytes.iter() { let starting_offset = offset; match &ir_byte.ty { IRByteType::Bytes(b) => { @@ -317,7 +317,7 @@ impl Codegen { // if we have a codesize call for the constructor here, from within the // constructor, we skip if recursing_constructor { - continue + continue; } let mut push_bytes = statement_gen( evm_version, @@ -481,7 +481,7 @@ impl Codegen { // Get the length of the macro let num_invocations = circular_codesize_invocations.len(); if num_invocations == 0 { - return Ok(bytes) + return Ok(bytes); } tracing::debug!(target: "codegen", "Circular Codesize Invocation: Bytes before expansion: {:#?}", bytes); @@ -706,7 +706,7 @@ impl Codegen { kind: CodegenErrorKind::InvalidDynArgIndex, span: AstSpan(vec![Span { start: 0, end: 0, file: None }]), token: None, - }) + }); } // Constructor size optimizations @@ -781,7 +781,7 @@ impl Codegen { })), }]), token: None, - }) + }); } } if let Err(e) = fs::write(file_path, serialized_artifact) { @@ -799,7 +799,7 @@ impl Codegen { })), }]), token: None, - }) + }); } Ok(()) } diff --git a/huff_core/benches/huff_benchmark.rs b/huff_core/benches/huff_benchmark.rs index e001cf71..394cc2f0 100644 --- a/huff_core/benches/huff_benchmark.rs +++ b/huff_core/benches/huff_benchmark.rs @@ -17,7 +17,7 @@ fn lex_erc20_from_source_benchmark(c: &mut Criterion) { .collect(); // Recurse file deps + generate flattened source - let file_source = file_sources.get(0).unwrap(); + let file_source = file_sources.first().unwrap(); let recursed_file_source = Compiler::recurse_deps(Arc::clone(file_source), &files::Remapper::new("./"), file_provider) .unwrap(); @@ -48,7 +48,7 @@ fn parse_erc20_benchmark(c: &mut Criterion) { .collect(); // Recurse file deps + generate flattened source - let file_source = file_sources.get(0).unwrap(); + let file_source = file_sources.first().unwrap(); let recursed_file_source = Compiler::recurse_deps(Arc::clone(file_source), &files::Remapper::new("./"), file_provider) .unwrap(); @@ -84,7 +84,7 @@ fn codegen_erc20_benchmark(c: &mut Criterion) { .collect(); // Recurse file deps + generate flattened source - let file_source = file_sources.get(0).unwrap(); + let file_source = file_sources.first().unwrap(); let recursed_file_source = Compiler::recurse_deps(Arc::clone(file_source), &files::Remapper::new("./"), file_provider) .unwrap(); @@ -133,7 +133,7 @@ fn erc20_compilation_benchmark(c: &mut Criterion) { .collect(); // Recurse file deps + generate flattened source - let file_source = file_sources.get(0).unwrap(); + let file_source = file_sources.first().unwrap(); let recursed_file_source = Compiler::recurse_deps( Arc::clone(file_source), &files::Remapper::new("./"), @@ -180,7 +180,7 @@ fn erc721_compilation_benchmark(c: &mut Criterion) { .collect(); // Recurse file deps + generate flattened source - let file_source = file_sources.get(0).unwrap(); + let file_source = file_sources.first().unwrap(); let recursed_file_source = Compiler::recurse_deps( Arc::clone(file_source), &files::Remapper::new("./"), diff --git a/huff_core/src/cache.rs b/huff_core/src/cache.rs index 94729d3f..1b856b5a 100644 --- a/huff_core/src/cache.rs +++ b/huff_core/src/cache.rs @@ -58,11 +58,11 @@ pub fn resolve_existing_artifacts( Some(expected_fs) => { if !artifact.bytecode.ends_with(&constructor_args) { tracing::warn!(target: "core", "Mismatched Constructor Args for Cached Artifact \"{}\"", artifact.file.path); - return None + return None; } if artifact.file.source != expected_fs.source { tracing::warn!(target: "core", "Cache Resolution Failed: \"{}\" Artifact Outdated", artifact.file.path); - return None + return None; } else { artifacts.push((expected_fs, artifact)); } @@ -77,7 +77,7 @@ pub fn resolve_existing_artifacts( tracing::error!(target: "core", "Invalid artifact file: {}", e); if expected.is_some() { tracing::error!(target: "core", "Expected artifact file to be compiled: {}", entry.path().display()); - return None + return None; } } } diff --git a/huff_core/src/lib.rs b/huff_core/src/lib.rs index e40e0151..5d5e0e4d 100644 --- a/huff_core/src/lib.rs +++ b/huff_core/src/lib.rs @@ -188,14 +188,11 @@ impl<'a, 'l> Compiler<'a, 'l> { files.iter().filter_map(|rfs| rfs.as_ref().err()).collect::>(); if !errors.is_empty() { let error = errors.remove(0); - return Err(Arc::new(error.clone())) + return Err(Arc::new(error.clone())); } // Unpack files into their file sources - let files = files - .iter() - .filter_map(|fs| fs.as_ref().map(Arc::clone).ok()) - .collect::>>(); + let files = files.iter().filter_map(|fs| fs.clone().ok()).collect::>>(); // Grab the output let output = self.get_outputs(); @@ -237,7 +234,7 @@ impl<'a, 'l> Compiler<'a, 'l> { .collect::>>(); if !errors.is_empty() { let error = errors.remove(0); - return Err(Arc::clone(error)) + return Err(Arc::clone(error)); } // Unpack recursed dependencies into FileSources @@ -263,7 +260,7 @@ impl<'a, 'l> Compiler<'a, 'l> { if !gen_errors.is_empty() { tracing::error!(target: "core", "{} FILES FAILED TO COMPILE", gen_errors.len()); - return Err(Arc::new(CompilerError::FailedCompiles(gen_errors))) + return Err(Arc::new(CompilerError::FailedCompiles(gen_errors))); } // Export @@ -296,14 +293,11 @@ impl<'a, 'l> Compiler<'a, 'l> { files.iter().filter_map(|rfs| rfs.as_ref().err()).collect::>(); if !errors.is_empty() { let error = errors.remove(0); - return Err(Arc::new(error.clone())) + return Err(Arc::new(error.clone())); } // Unpack files into their file sources - let files = files - .iter() - .filter_map(|fs| fs.as_ref().map(Arc::clone).ok()) - .collect::>>(); + let files = files.iter().filter_map(|fs| fs.clone().ok()).collect::>>(); let recursed_file_sources: Vec, Arc>> = files .into_par_iter() @@ -323,7 +317,7 @@ impl<'a, 'l> Compiler<'a, 'l> { .collect::>>(); if !errors.is_empty() { let error = errors.remove(0); - return Err(Arc::clone(error)) + return Err(Arc::clone(error)); } // Unpack recursed dependencies into FileSources @@ -427,7 +421,7 @@ impl<'a, 'l> Compiler<'a, 'l> { .collect::>(), ); tracing::error!(target: "core", "Roll Failed with CodegenError: {:?}", e.kind); - return Err(CompilerError::CodegenError(e)) + return Err(CompilerError::CodegenError(e)); } }; tracing::info!(target: "core", "MAIN BYTECODE GENERATED [{}]", main_bytecode); @@ -460,7 +454,7 @@ impl<'a, 'l> Compiler<'a, 'l> { errs.dedup(); e.span = AstSpan(errs); tracing::error!(target: "codegen", "Constructor inputs provided, but contract missing \"CONSTRUCTOR\" macro!"); - return Err(CompilerError::CodegenError(e)) + return Err(CompilerError::CodegenError(e)); } // If the kind is a missing constructor we can ignore it @@ -528,7 +522,7 @@ impl<'a, 'l> Compiler<'a, 'l> { Ok(source) => source, Err(_) => { tracing::error!(target: "core", "FILE READ FAILED: \"{}\"!", fs.path); - return Err(Arc::new(CompilerError::PathBufRead(OsString::from(&fs.path)))) + return Err(Arc::new(CompilerError::PathBufRead(OsString::from(&fs.path)))); } }; new_fs.access = Some(time::get_current_time()); @@ -598,7 +592,7 @@ impl<'a, 'l> Compiler<'a, 'l> { // Exit if empty output location if output.0.is_empty() { tracing::warn!(target: "core", "Exiting artifact export with empty output location!"); - return + return; } // Clean the Output Directory diff --git a/huff_core/tests/erc20.rs b/huff_core/tests/erc20.rs index 3c1144fe..84ed1c3b 100644 --- a/huff_core/tests/erc20.rs +++ b/huff_core/tests/erc20.rs @@ -18,7 +18,7 @@ fn test_erc20_compile() { .collect(); // Recurse file deps + generate flattened source - let file_source = file_sources.get(0).unwrap(); + let file_source = file_sources.first().unwrap(); let recursed_file_source = Compiler::recurse_deps(Arc::clone(file_source), &files::Remapper::new("./"), file_provider) .unwrap(); diff --git a/huff_core/tests/erc721.rs b/huff_core/tests/erc721.rs index 3460cec3..29ee3961 100644 --- a/huff_core/tests/erc721.rs +++ b/huff_core/tests/erc721.rs @@ -18,7 +18,7 @@ fn test_erc721_compile() { .collect(); // Recurse file deps + generate flattened source - let file_source = file_sources.get(0).unwrap(); + let file_source = file_sources.first().unwrap(); let recursed_file_source = Compiler::recurse_deps(Arc::clone(file_source), &files::Remapper::new("./"), file_provider) .unwrap(); diff --git a/huff_core/tests/parser_errors.rs b/huff_core/tests/parser_errors.rs index 8fd64b3c..a41a7c2e 100644 --- a/huff_core/tests/parser_errors.rs +++ b/huff_core/tests/parser_errors.rs @@ -251,7 +251,7 @@ fn test_invalid_single_arg() { !random_char.is_alphabetic() || random_char.to_string().as_bytes().len() > 1 { - continue + continue; } let source = &format!("#define macro CONSTANT() = takes ({random_char}) returns (0) {{}}"); diff --git a/huff_lexer/src/lib.rs b/huff_lexer/src/lib.rs index 7ce3f241..f3774c34 100644 --- a/huff_lexer/src/lib.rs +++ b/huff_lexer/src/lib.rs @@ -113,7 +113,7 @@ impl<'a> Lexer<'a> { // there will be a successfully parsed block comment // "/* */" // and " */" will be processed separately. - break + break; } } _ => { @@ -145,7 +145,7 @@ impl<'a> Lexer<'a> { let peeked = word.clone(); if key == peeked { found_kind = Some(kind); - break + break; } } @@ -163,7 +163,7 @@ impl<'a> Lexer<'a> { end: self.position as usize, file: None, }, - )) + )); } } // Alphabetical characters @@ -195,14 +195,14 @@ impl<'a> Lexer<'a> { ]; for kind in keys.into_iter() { if self.context == Context::MacroBody { - break + break; } let key = kind.to_string(); let peeked = word.clone(); if key == peeked { found_kind = Some(kind); - break + break; } } @@ -417,7 +417,7 @@ impl<'a> Lexer<'a> { end: self.position as usize, file: None, }, - )) + )); } }?; @@ -465,7 +465,7 @@ impl<'a> Lexer<'a> { // cursor If not, return word. The next character will be analyzed on the // next iteration of next_token, Which will increment the cursor if !predicate(peek_char) { - return (word, start, self.position) + return (word, start, self.position); } word.push(peek_char); @@ -565,7 +565,7 @@ impl<'a> Lexer<'a> { ]; for key in keys { if self.checked_lookback(key) { - return true + return true; } } false @@ -594,7 +594,7 @@ impl<'a> Lexer<'a> { // Iterate until newline while let Some(lc) = &peekable_source.next() { if lc.eq(&'\n') { - break + break; } } } else if nnc.eq(&'*') { @@ -603,7 +603,7 @@ impl<'a> Lexer<'a> { if lc.eq(&'*') { if let Some(llc) = peekable_source.peek() { if *llc == '/' { - break + break; } } } @@ -618,7 +618,7 @@ impl<'a> Lexer<'a> { // Skip over whitespace while peekable_source.peek().is_some() { if !peekable_source.peek().unwrap().is_whitespace() { - break + break; } else { peekable_source.next(); } @@ -634,7 +634,7 @@ impl<'a> Lexer<'a> { if let Some(c) = peekable_source.next() { if matches!(c, '"' | '\'') { imports.push(import); - break + break; } else { import.push(c); } @@ -646,7 +646,7 @@ impl<'a> Lexer<'a> { } } else if nc.ne(&include_chars_iterator.next().unwrap()) { include_chars_iterator = "#include".chars().peekable(); - break + break; } } } diff --git a/huff_lexer/tests/tables.rs b/huff_lexer/tests/tables.rs index feabae28..1ff07d74 100644 --- a/huff_lexer/tests/tables.rs +++ b/huff_lexer/tests/tables.rs @@ -12,7 +12,7 @@ fn parses_jump_table() { .filter(|x| !matches!(x.kind, TokenKind::Whitespace)) .collect::>(); - assert_eq!(tokens.get(0).unwrap().kind, TokenKind::Define); + assert_eq!(tokens.first().unwrap().kind, TokenKind::Define); assert_eq!(tokens.get(1).unwrap().kind, TokenKind::JumpTable); assert_eq!(tokens.get(2).unwrap().kind, TokenKind::Ident(String::from("JUMP_TABLE"))); assert_eq!(tokens.get(3).unwrap().kind, TokenKind::OpenParen); @@ -30,7 +30,7 @@ fn parses_packed_jump_table() { .filter(|x| !matches!(x.kind, TokenKind::Whitespace)) .collect::>(); - assert_eq!(tokens.get(0).unwrap().kind, TokenKind::Define); + assert_eq!(tokens.first().unwrap().kind, TokenKind::Define); assert_eq!(tokens.get(1).unwrap().kind, TokenKind::JumpTablePacked); assert_eq!(tokens.get(2).unwrap().kind, TokenKind::Ident(String::from("JUMP_TABLE_PACKED"))); assert_eq!(tokens.get(3).unwrap().kind, TokenKind::OpenParen); @@ -48,7 +48,7 @@ fn parses_code_table() { .filter(|x| !matches!(x.kind, TokenKind::Whitespace)) .collect::>(); - assert_eq!(tokens.get(0).unwrap().kind, TokenKind::Define); + assert_eq!(tokens.first().unwrap().kind, TokenKind::Define); assert_eq!(tokens.get(1).unwrap().kind, TokenKind::CodeTable); assert_eq!(tokens.get(2).unwrap().kind, TokenKind::Ident(String::from("CODE_TABLE"))); assert_eq!(tokens.get(3).unwrap().kind, TokenKind::OpenParen); diff --git a/huff_parser/src/lib.rs b/huff_parser/src/lib.rs index df2932cb..7d1c0d42 100644 --- a/huff_parser/src/lib.rs +++ b/huff_parser/src/lib.rs @@ -34,7 +34,7 @@ pub struct Parser { impl Parser { /// Public associated function that instantiates a Parser. pub fn new(tokens: Vec, base: Option) -> Self { - let initial_token = tokens.get(0).unwrap().clone(); + let initial_token = tokens.first().unwrap().clone(); let remapper = files::Remapper::new("./"); Self { tokens, cursor: 0, current_token: initial_token, base, spans: vec![], remapper } } @@ -43,7 +43,7 @@ impl Parser { /// /// PANICS if the tokens vec is empty! pub fn reset(&mut self) { - self.current_token = self.tokens.get(0).unwrap().clone(); + self.current_token = self.tokens.first().unwrap().clone(); self.cursor = 0; } @@ -133,7 +133,7 @@ impl Parser { TokenKind::Include )), spans: AstSpan(self.spans.clone()), - }) + }); } } @@ -158,7 +158,7 @@ impl Parser { kind: ParserErrorKind::InvalidName(tok.clone()), hint: Some(format!("Expected import string. Got: \"{tok}\"")), spans: AstSpan(new_spans), - }) + }); } }; @@ -216,7 +216,7 @@ impl Parser { loop { let token = self.peek().unwrap(); if !kinds.contains(&token.kind) { - break + break; } self.current_token = token; self.cursor += 1; @@ -257,7 +257,7 @@ impl Parser { kind: ParserErrorKind::InvalidName(tok.clone()), hint: Some(format!("Expected function name, found: \"{tok}\"")), spans: AstSpan(self.spans.clone()), - }) + }); } }; @@ -319,7 +319,7 @@ impl Parser { kind: ParserErrorKind::InvalidName(tok.clone()), hint: Some(format!("Expected event name, found: \"{tok}\"")), spans: AstSpan(self.spans.clone()), - }) + }); } }; @@ -350,7 +350,7 @@ impl Parser { kind: ParserErrorKind::UnexpectedType(tok), hint: Some("Expected constant name.".to_string()), spans: AstSpan(self.spans.clone()), - }) + }); } }; @@ -375,7 +375,7 @@ impl Parser { .to_string(), ), spans: AstSpan(vec![self.current_token.span.clone()]), - }) + }); } }; @@ -403,7 +403,7 @@ impl Parser { kind: ParserErrorKind::UnexpectedType(tok), hint: Some("Expected error name.".to_string()), spans: AstSpan(self.spans.clone()), - }) + }); } }; @@ -450,7 +450,7 @@ impl Parser { ), hint: Some(format!("Expected string for decorator flag: {s}")), spans: AstSpan(vec![self.current_token.span.clone()]), - }) + }); } } // The value flag accepts a single literal as an argument @@ -466,7 +466,7 @@ impl Parser { ), hint: Some(format!("Expected literal for decorator flag: {s}")), spans: AstSpan(vec![self.current_token.span.clone()]), - }) + }); } } Err(_) => { @@ -475,7 +475,7 @@ impl Parser { kind: ParserErrorKind::InvalidDecoratorFlag(s.clone()), hint: Some(format!("Unknown decorator flag: {s}")), spans: AstSpan(self.spans.clone()), - }) + }); } } @@ -493,7 +493,7 @@ impl Parser { )), hint: Some(String::from("Unknown decorator flag")), spans: AstSpan(self.spans.clone()), - }) + }); } } @@ -704,7 +704,7 @@ impl Parser { kind: ParserErrorKind::InvalidTokenInMacroBody(kind), hint: None, spans: AstSpan(vec![self.current_token.span.clone()]), - }) + }); } }; } @@ -817,7 +817,7 @@ impl Parser { kind: ParserErrorKind::InvalidTokenInLabelDefinition(kind), hint: None, spans: AstSpan(vec![self.current_token.span.clone()]), - }) + }); } }; } @@ -869,7 +869,7 @@ impl Parser { self.consume(); on_type = true; } - continue + continue; } // Check for literals @@ -889,7 +889,7 @@ impl Parser { self.consume(); on_type = true; } - continue + continue; } } @@ -948,7 +948,7 @@ impl Parser { "Argument names cannot be EVM types: {arg_str}" )), spans: AstSpan(vec![self.current_token.span.clone()]), - }) + }); } } TokenKind::PrimitiveType(ty) => { @@ -981,7 +981,7 @@ impl Parser { kind: ParserErrorKind::InvalidArgs(self.current_token.kind.clone()), hint: None, spans: AstSpan(vec![self.current_token.span.clone()]), - }) + }); } arg.span = AstSpan(arg_spans); @@ -1059,7 +1059,7 @@ impl Parser { .to_string(), ), spans: AstSpan(new_spans), - }) + }); } } if self.check(TokenKind::Comma) { @@ -1147,7 +1147,7 @@ impl Parser { ), hint: Some("Expected valid hex bytecode.".to_string()), spans: AstSpan(new_spans), - }) + }); } } else { StatementType::LabelCall(ident_str.to_string()) @@ -1162,7 +1162,7 @@ impl Parser { kind: ParserErrorKind::InvalidTableBodyToken(kind.clone()), hint: Some("Expected an identifier string.".to_string()), spans: AstSpan(new_spans), - }) + }); } }; } @@ -1267,7 +1267,7 @@ impl Parser { kind: ParserErrorKind::InvalidUint256(size), hint: None, spans: AstSpan(vec![self.current_token.span.clone()]), - }) + }); } Ok(self.match_kind(self.current_token.kind.clone())?) } @@ -1277,7 +1277,7 @@ impl Parser { kind: ParserErrorKind::InvalidBytes(size), hint: None, spans: AstSpan(vec![self.current_token.span.clone()]), - }) + }); } Ok(self.match_kind(self.current_token.kind.clone())?) } @@ -1291,7 +1291,7 @@ impl Parser { kind: ParserErrorKind::InvalidInt(size), hint: None, spans: AstSpan(vec![self.current_token.span.clone()]), - }) + }); } let curr_token_kind = self.current_token.kind.clone(); self.consume(); diff --git a/huff_tests/src/inspectors/cheats_inspector.rs b/huff_tests/src/inspectors/cheats_inspector.rs index 4df72704..9c31d84b 100644 --- a/huff_tests/src/inspectors/cheats_inspector.rs +++ b/huff_tests/src/inspectors/cheats_inspector.rs @@ -88,7 +88,7 @@ where // Check if we have exactly one 32 byte input if call.input.len() != 96 { - return (InstructionResult::Revert, remaining_gas, out) + return (InstructionResult::Revert, remaining_gas, out); } let log_item = hex::encode(&call.input[64..96]); diff --git a/huff_tests/src/lib.rs b/huff_tests/src/lib.rs index 487d5b07..a5d72c57 100644 --- a/huff_tests/src/lib.rs +++ b/huff_tests/src/lib.rs @@ -68,7 +68,7 @@ impl<'t> HuffTester<'t> { pub fn execute(mut self) -> Result, RunnerError> { // Check if any test macros exist if self.macros.is_empty() { - return Err(RunnerError(String::from("No test macros found."))) + return Err(RunnerError(String::from("No test macros found."))); } // Execute our tests and return a vector of the results diff --git a/huff_tests/src/report.rs b/huff_tests/src/report.rs index 0be48caa..7932dd2f 100644 --- a/huff_tests/src/report.rs +++ b/huff_tests/src/report.rs @@ -83,7 +83,7 @@ pub fn print_test_report(results: Vec, report_kind: ReportKind, star } else { eprintln!("Error serializing test results into JSON."); } - return + return; } } println!( diff --git a/huff_tests/src/runner.rs b/huff_tests/src/runner.rs index 912a31b0..cd4fd23e 100644 --- a/huff_tests/src/runner.rs +++ b/huff_tests/src/runner.rs @@ -145,7 +145,7 @@ impl TestRunner { Some(hex::encode(b)) } } else { - return Err(RunnerError(String::from("Unexpected transaction kind"))) + return Err(RunnerError(String::from("Unexpected transaction kind"))); } } ExecutionResult::Revert { output, .. } => { diff --git a/huff_utils/src/abi.rs b/huff_utils/src/abi.rs index 2f6cb67f..02a8669e 100644 --- a/huff_utils/src/abi.rs +++ b/huff_utils/src/abi.rs @@ -78,7 +78,7 @@ impl From for Abi { .filter(|m| m.name.to_lowercase() == "constructor") .cloned() .collect::>() - .get(0) + .first() .map(|func| Constructor { inputs: func .inputs @@ -97,7 +97,7 @@ impl From for Abi { .filter(|m| m.name == "CONSTRUCTOR") .cloned() .collect::>() - .get(0) + .first() .map(|func| Constructor { inputs: func .parameters @@ -366,7 +366,7 @@ impl FunctionParamType { .collect(); let func_type = FunctionParamType::convert_string_to_type(&cleaned.remove(0))?; let sizes: Vec = cleaned.iter().map(|x| x.parse::().unwrap()).collect(); - return Ok(Self::Array(Box::new(func_type), sizes)) + return Ok(Self::Array(Box::new(func_type), sizes)); } if input.starts_with("uint") { // Default to 256 if no size @@ -377,7 +377,7 @@ impl FunctionParamType { }, None => 256, }; - return Ok(Self::Uint(size)) + return Ok(Self::Uint(size)); } if input.starts_with("int") { // Default to 256 if no size @@ -388,20 +388,20 @@ impl FunctionParamType { }, None => 256, }; - return Ok(Self::Int(size)) + return Ok(Self::Int(size)); } if input.starts_with("bytes") && input.len() != 5 { let size = input.get(5..input.len()).unwrap().parse::().unwrap(); - return Ok(Self::FixedBytes(size)) + return Ok(Self::FixedBytes(size)); } if input.starts_with("bool") { - return Ok(Self::Bool) + return Ok(Self::Bool); } if input.starts_with("address") { - return Ok(Self::Address) + return Ok(Self::Address); } if input.starts_with("string") { - return Ok(Self::String) + return Ok(Self::String); } if input == "bytes" { Ok(Self::Bytes) diff --git a/huff_utils/src/ast.rs b/huff_utils/src/ast.rs index a2726a3b..f0901d24 100644 --- a/huff_utils/src/ast.rs +++ b/huff_utils/src/ast.rs @@ -180,7 +180,7 @@ impl Contract { .iter() .filter(|pointer| pointer.0.eq(&c.name)) .collect::>() - .get(0) + .first() { Some(p) => { *c = ConstantDefinition { @@ -219,7 +219,7 @@ impl Contract { let mut i = 0; loop { if i >= statements.len() { - break + break; } match &statements[i].clone().ty { StatementType::Constant(const_name) => { @@ -261,7 +261,7 @@ impl Contract { .iter() .filter(|md| md.name.eq(&mi.macro_name)) .collect::>() - .get(0) + .first() { Some(&md) => { if md.name.eq("CONSTRUCTOR") { @@ -291,7 +291,7 @@ impl Contract { .iter() .filter(|md| md.name.eq(name)) .collect::>() - .get(0) + .first() { Some(&md) => { if md.name.eq("CONSTRUCTOR") { @@ -348,7 +348,7 @@ impl Contract { .iter() .filter(|pointer| pointer.0.eq(const_name)) .collect::>() - .get(0) + .first() .is_none() { tracing::debug!(target: "ast", "No storage pointer already set for \"{}\"!", const_name); @@ -360,7 +360,7 @@ impl Contract { .iter() .filter(|c| c.name.eq(const_name)) .collect::>() - .get(0) + .first() { Some(c) => { let new_value = match c.value { diff --git a/huff_utils/src/evm.rs b/huff_utils/src/evm.rs index 97523465..a93e73c4 100644 --- a/huff_utils/src/evm.rs +++ b/huff_utils/src/evm.rs @@ -829,7 +829,7 @@ impl Opcode { let zeros_needed = size - literal.len() as u8; let zero_prefix = (0..zeros_needed).map(|_| "0").collect::>().join(""); - return format!("{zero_prefix}{literal}") + return format!("{zero_prefix}{literal}"); } } } @@ -844,7 +844,7 @@ impl Opcode { if let Ok(len) = u8::from_str_radix(&self.to_string(), 16) { if len >= 96 { let size = (len - 96 + 1) * 2; - return literal.len() > size as usize + return literal.len() > size as usize; } } } diff --git a/huff_utils/src/file_provider.rs b/huff_utils/src/file_provider.rs index 78fb0ac6..be100a7c 100644 --- a/huff_utils/src/file_provider.rs +++ b/huff_utils/src/file_provider.rs @@ -71,7 +71,7 @@ impl<'a> FileProvider<'a> for FileSystemFileProvider { } Err(e) => { tracing::error!(target: "core", "ERROR UNPACKING FILE: {:?}", e); - return Err(CompilerError::FileUnpackError(e)) + return Err(CompilerError::FileUnpackError(e)); } } } diff --git a/huff_utils/src/files.rs b/huff_utils/src/files.rs index 56a12785..efee81e6 100644 --- a/huff_utils/src/files.rs +++ b/huff_utils/src/files.rs @@ -92,7 +92,7 @@ impl Remapper { // Gracefully read foundry.toml if let Err(e) = br.read_to_string(&mut data) { tracing::warn!(target: "parser", "Failed to read \"foundry.toml\" file contents!\nError: {:?}", e); - return + return; } // Parse the foundry.toml file as toml @@ -100,7 +100,7 @@ impl Remapper { t } else { tracing::warn!(target: "parser", "\"foundry.toml\" incorrectly formatted!"); - return + return; }; // Parse the toml as a map @@ -190,7 +190,7 @@ impl Remapper { if path.starts_with(k) { tracing::debug!(target: "parser", "found key {} and value {}", k, v); path = path.replace(k, v); - return Some(format!("{}{path}", self.base_dir)) + return Some(format!("{}{path}", self.base_dir)); } } None @@ -294,12 +294,12 @@ impl FileSource { } None => { tracing::warn!("Failed to convert path to string"); - return None + return None; } }, None => { tracing::warn!("Failed to find parent for path: {:?}", path); - return None + return None; } } res_str = res_str.replacen("../", "", 1); diff --git a/huff_utils/src/io.rs b/huff_utils/src/io.rs index e63228b1..34703cfc 100644 --- a/huff_utils/src/io.rs +++ b/huff_utils/src/io.rs @@ -22,7 +22,7 @@ pub fn unpack_files(path: &str) -> Result, UnpackError> { match parse_extension(path) { Some(extension) => { if extension == "huff" { - return Ok(vec![path.to_string()]) + return Ok(vec![path.to_string()]); } Err(UnpackError::UnsupportedExtension(path.to_string())) } diff --git a/huff_utils/src/token.rs b/huff_utils/src/token.rs index 547fbe82..7aa8f384 100644 --- a/huff_utils/src/token.rs +++ b/huff_utils/src/token.rs @@ -190,7 +190,7 @@ impl fmt::Display for TokenKind { for b in l.iter() { let _ = write!(&mut s, "{b:02x}"); } - return write!(f, "{s}") + return write!(f, "{s}"); } TokenKind::Opcode(o) => return write!(f, "{o}"), TokenKind::Label(s) => return write!(f, "{s}"), @@ -201,7 +201,7 @@ impl fmt::Display for TokenKind { let brackets = if size > &0 { format!("[{size}]") } else { "[]".to_string() }; s.push_str(&brackets); } - return write!(f, "{pt}{s}") + return write!(f, "{pt}{s}"); } TokenKind::JumpTable => "jumptable", TokenKind::JumpTablePacked => "jumptable__packed", diff --git a/huff_utils/src/types.rs b/huff_utils/src/types.rs index 658009e1..89885c88 100644 --- a/huff_utils/src/types.rs +++ b/huff_utils/src/types.rs @@ -41,7 +41,7 @@ impl TryFrom for PrimitiveEVMType { }, None => 256, }; - return Ok(PrimitiveEVMType::Uint(size)) + return Ok(PrimitiveEVMType::Uint(size)); } if input.starts_with("int") { // Default to 256 if no size @@ -55,7 +55,7 @@ impl TryFrom for PrimitiveEVMType { }, None => 256, }; - return Ok(PrimitiveEVMType::Int(size)) + return Ok(PrimitiveEVMType::Int(size)); } if input.starts_with("bytes") && input.len() != 5 { let remaining = input.get(5..input.len()).unwrap(); @@ -63,16 +63,16 @@ impl TryFrom for PrimitiveEVMType { Ok(s) => s, Err(_) => return Err(format!("Invalid bytes size : {remaining}")), }; - return Ok(PrimitiveEVMType::Bytes(size)) + return Ok(PrimitiveEVMType::Bytes(size)); } if input.eq("bool") { - return Ok(PrimitiveEVMType::Bool) + return Ok(PrimitiveEVMType::Bool); } if input.eq("address") { - return Ok(PrimitiveEVMType::Address) + return Ok(PrimitiveEVMType::Address); } if input.eq("string") { - return Ok(PrimitiveEVMType::String) + return Ok(PrimitiveEVMType::String); } if input == "bytes" { Ok(PrimitiveEVMType::DynBytes) @@ -133,7 +133,7 @@ impl TryFrom for EToken { // dyn bytes array return Ok(EToken(Token::Bytes( str_to_vec(cleaned_input).map_err(|e| e.to_string())?, - ))) + ))); } } // array @@ -144,18 +144,18 @@ impl TryFrom for EToken { let etokens: Result, _> = v.iter().map(|x| EToken::try_from(x.to_owned())).collect(); let tokens: Vec = etokens?.iter().map(move |x| x.clone().0).collect(); - return Ok(EToken(Token::Array(tokens))) + return Ok(EToken(Token::Array(tokens))); } if input.starts_with('-') || input.starts_with('+') { - return Ok(EToken(input.parse::().map_err(|e| e.to_string())?.into_token())) + return Ok(EToken(input.parse::().map_err(|e| e.to_string())?.into_token())); } if input == "true" || input == "false" { - return Ok(EToken(Token::Bool(input == "true"))) + return Ok(EToken(Token::Bool(input == "true"))); } if input.chars().all(|x| x.is_ascii_digit()) { return Ok(EToken(Token::Uint( U256::from_str_radix(input.as_str(), 10).map_err(|e| e.to_string())?, - ))) + ))); } if input.chars().all(|x| x.is_alphanumeric()) { Ok(EToken(Token::String(input)))