From d1d404b9892b878211762c5966c401252b35e9c1 Mon Sep 17 00:00:00 2001 From: Nicholas Ward Date: Sun, 11 Sep 2022 22:58:18 -0700 Subject: [PATCH] addressed comments --- .../cpu/kernel/stack/stack_manipulation.rs | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/evm/src/cpu/kernel/stack/stack_manipulation.rs b/evm/src/cpu/kernel/stack/stack_manipulation.rs index ebc54af1..7264dde9 100644 --- a/evm/src/cpu/kernel/stack/stack_manipulation.rs +++ b/evm/src/cpu/kernel/stack/stack_manipulation.rs @@ -1,6 +1,6 @@ use std::cmp::Ordering; use std::collections::hash_map::Entry::{Occupied, Vacant}; -use std::collections::{BinaryHeap, HashMap, HashSet}; +use std::collections::{BinaryHeap, HashMap}; use std::hash::Hash; use itertools::Itertools; @@ -27,21 +27,20 @@ pub(crate) fn expand_stack_manipulation(body: Vec) -> Vec { fn expand(names: Vec, replacements: Vec) -> Vec { let mut stack_blocks = HashMap::new(); - let mut stack_names = HashSet::new(); let mut src = names .iter() .cloned() .flat_map(|item| match item { StackPlaceholder::Identifier(name) => { - stack_names.insert(name.clone()); + stack_blocks.insert(name.clone(), 1); vec![StackItem::NamedItem(name)] } StackPlaceholder::Block(name, n) => { stack_blocks.insert(name.clone(), n); (0..n) .map(|i| { - let literal_name = format!("block_{}_{}", name, i); + let literal_name = format!("@{}.{}", name, i); StackItem::NamedItem(literal_name) }) .collect_vec() @@ -57,14 +56,17 @@ fn expand(names: Vec, replacements: Vec) -> // May be either a named item or a label. Named items have precedence. if stack_blocks.contains_key(&name) { let n = *stack_blocks.get(&name).unwrap(); - (0..n) - .map(|i| { - let literal_name = format!("block_{}_{}", name, i); - StackItem::NamedItem(literal_name) - }) - .collect_vec() - } else if stack_names.contains(&name) { - vec![StackItem::NamedItem(name)] + if n == 1 { + // A name, not an actual block. + vec![StackItem::NamedItem(name)] + } else { + (0..n) + .map(|i| { + let literal_name = format!("@{}.{}", name, i); + StackItem::NamedItem(literal_name) + }) + .collect_vec() + } } else { vec![StackItem::PushTarget(PushTarget::Label(name))] }