#[macro_export]
#[collapse_debuginfo(yes)]
macro_rules! require_non_staticcall {
($interpreter:expr) => {
if $interpreter.runtime_flag.is_static() {
$crate::primitives::hints_util::cold_path();
return Err($crate::InstructionResult::StateChangeDuringStaticCall);
}
};
}
#[macro_export]
#[collapse_debuginfo(yes)]
macro_rules! check {
($interpreter:expr, $min:ident) => {
if !$interpreter
.runtime_flag
.spec_id()
.is_enabled_in(primitives::hardfork::SpecId::$min)
{
$crate::primitives::hints_util::cold_path();
return Err($crate::InstructionResult::NotActivated);
}
};
}
#[macro_export]
#[collapse_debuginfo(yes)]
macro_rules! state_gas {
($interpreter:expr, $gas:expr) => {{
if !$interpreter.gas.record_state_cost($gas) {
$crate::primitives::hints_util::cold_path();
return Err($crate::InstructionResult::OutOfGas);
}
}};
}
#[macro_export]
#[collapse_debuginfo(yes)]
macro_rules! gas {
($interpreter:expr, $gas:expr) => {
if !$interpreter.gas.record_regular_cost($gas) {
$crate::primitives::hints_util::cold_path();
return Err($crate::InstructionResult::OutOfGas);
}
};
}
#[macro_export]
#[collapse_debuginfo(yes)]
macro_rules! popn {
([ $($x:ident),* ],$interpreter:expr) => {
let Some([$( $x ),*]) = $interpreter.stack.popn() else {
$crate::primitives::hints_util::cold_path();
return Err($crate::InstructionResult::StackUnderflow);
};
};
}
#[doc(hidden)]
#[macro_export]
#[collapse_debuginfo(yes)]
macro_rules! _count {
(@count) => { 0 };
(@count $head:tt $($tail:tt)*) => { 1 + $crate::_count!(@count $($tail)*) };
($($arg:tt)*) => { $crate::_count!(@count $($arg)*) };
}
#[macro_export]
#[collapse_debuginfo(yes)]
macro_rules! popn_top {
([ $($x:ident),* ], $top:ident, $interpreter:expr) => {
if $interpreter.stack.len() < (1 + $crate::_count!($($x)*)) {
$crate::primitives::hints_util::cold_path();
return Err($crate::InstructionResult::StackUnderflow);
}
let ([$( $x ),*], $top) = unsafe { $crate::interpreter_types::StackTr::popn_top(&mut $interpreter.stack).unwrap_unchecked() };
};
}
#[macro_export]
#[collapse_debuginfo(yes)]
macro_rules! push {
($interpreter:expr, $x:expr) => {
if !$interpreter.stack.push($x) {
$crate::primitives::hints_util::cold_path();
return Err($crate::InstructionResult::StackOverflow);
}
};
}
#[macro_export]
#[collapse_debuginfo(yes)]
macro_rules! as_u64_saturated {
($v:expr) => {
u64::try_from($v).unwrap_or(u64::MAX)
};
}
#[macro_export]
#[collapse_debuginfo(yes)]
macro_rules! as_usize_saturated {
($v:expr) => {
usize::try_from($v).unwrap_or(usize::MAX)
};
}
#[macro_export]
#[collapse_debuginfo(yes)]
macro_rules! as_usize_or_fail {
($interpreter:expr, $v:expr) => {
match $v.as_limbs() {
x => {
if (x[0] > usize::MAX as u64) | (x[1] != 0) | (x[2] != 0) | (x[3] != 0) {
$crate::primitives::hints_util::cold_path();
return Err($crate::InstructionResult::InvalidOperandOOG);
}
x[0] as usize
}
}
};
}