From 218f689422f0d90041d5a023ce32bc13e7e92af3 Mon Sep 17 00:00:00 2001 From: Daniel Lubarov Date: Wed, 21 Sep 2022 12:53:47 -0700 Subject: [PATCH] Fix prohibited macro names --- evm/src/cpu/kernel/assembler.rs | 6 ++++++ evm/src/cpu/kernel/evm_asm.pest | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/evm/src/cpu/kernel/assembler.rs b/evm/src/cpu/kernel/assembler.rs index 4319612d..5364e8a5 100644 --- a/evm/src/cpu/kernel/assembler.rs +++ b/evm/src/cpu/kernel/assembler.rs @@ -512,6 +512,12 @@ mod tests { assert_eq!(kernel.code, vec![push1, 42, push1, 42]); } + #[test] + fn macro_with_reserved_prefix() { + // The name `repeat` should be allowed, even though `rep` is reserved. + parse_and_assemble(&["%macro repeat %endmacro", "%repeat"]); + } + #[test] #[should_panic] fn macro_with_wrong_vars() { diff --git a/evm/src/cpu/kernel/evm_asm.pest b/evm/src/cpu/kernel/evm_asm.pest index 89d06e74..5d670c6c 100644 --- a/evm/src/cpu/kernel/evm_asm.pest +++ b/evm/src/cpu/kernel/evm_asm.pest @@ -17,7 +17,7 @@ constant = ${ "@" ~ identifier } item = { macro_def | macro_call | repeat | stack | global_label_decl | local_label_decl | macro_label_decl | bytes_item | push_instruction | prover_input_instruction | nullary_instruction } macro_def = { ^"%macro" ~ identifier ~ paramlist? ~ item* ~ ^"%endmacro" } -macro_call = ${ "%" ~ !(^"macro" | ^"endmacro" | ^"rep" | ^"endrep" | ^"stack") ~ identifier ~ macro_arglist? } +macro_call = ${ "%" ~ !((^"macro" | ^"endmacro" | ^"rep" | ^"endrep" | ^"stack") ~ !identifier_char) ~ identifier ~ macro_arglist? } repeat = { ^"%rep" ~ literal ~ item* ~ ^"%endrep" } paramlist = { "(" ~ identifier ~ ("," ~ identifier)* ~ ")" } macro_arglist = !{ "(" ~ push_target ~ ("," ~ push_target)* ~ ")" }