evm_runtime/eval/
macros.rs

1macro_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}