evm_runtime/eval/
macros.rs1macro_rules! try_or_fail {
2 ( $e:expr ) => {
3 match $e {
4 Ok(v) => v,
5 Err(e) => return Control::Exit(e.into()),
6 }
7 };
8}
9
10macro_rules! pop {
11 ( $machine:expr, $( $x:ident ),* ) => (
12 $(
13 let $x = match $machine.machine.stack_mut().pop() {
14 Ok(value) => value,
15 Err(e) => return Control::Exit(e.into()),
16 };
17 )*
18 );
19}
20
21macro_rules! pop_u256 {
22 ( $machine:expr, $( $x:ident ),* ) => (
23 $(
24 let $x = match $machine.machine.stack_mut().pop() {
25 Ok(value) => U256::from_big_endian(&value[..]),
26 Err(e) => return Control::Exit(e.into()),
27 };
28 )*
29 );
30}
31
32macro_rules! push {
33 ( $machine:expr, $( $x:expr ),* ) => (
34 $(
35 match $machine.machine.stack_mut().push($x) {
36 Ok(()) => (),
37 Err(e) => return Control::Exit(e.into()),
38 }
39 )*
40 )
41}
42
43macro_rules! push_u256 {
44 ( $machine:expr, $( $x:expr ),* ) => (
45 $(
46 let value = H256::from($x.to_big_endian());
47 match $machine.machine.stack_mut().push(value) {
48 Ok(()) => (),
49 Err(e) => return Control::Exit(e.into()),
50 }
51 )*
52 )
53}
54
55macro_rules! as_usize_or_fail {
56 ( $v:expr ) => {{
57 if $v > U256::from(usize::MAX) {
58 return Control::Exit(ExitFatal::NotSupported.into());
59 }
60
61 $v.as_usize()
62 }};
63
64 ( $v:expr, $reason:expr ) => {{
65 if $v > U256::from(usize::MAX) {
66 return Control::Exit($reason.into());
67 }
68
69 $v.as_usize()
70 }};
71}