macro_rules! guard {
($node:ident[$port:expr]) => { ... };
( ( $($head:tt)* ) ) => { ... };
($e:ident) => { ... };
($node:ident[$port:expr] >= $($tail:tt)*) => { ... };
($node:ident[$port:expr] <= $($tail:tt)*) => { ... };
($node:ident[$port:expr] < $($tail:tt)*) => { ... };
($node:ident[$port:expr] > $($tail:tt)*) => { ... };
($node:ident[$port:expr] == $($tail:tt)*) => { ... };
($node:ident[$port:expr] != $($tail:tt)*) => { ... };
($node:ident[$port:expr] & $($tail:tt)*) => { ... };
( ( $($head:tt)* ) & $($tail:tt)*) => { ... };
($node:ident[$port:expr] | $($tail:tt)*) => { ... };
( ( $($head:tt)* ) | $($tail:tt)*) => { ... };
}Expand description
Parse guard expression into ir::Guard.
The identifier should either be a ir::Group or an
ir::Cell.
Example:
let fsm_out = guard!(fsm["out"] == lb["out"] & g);The macro supports constructing guards using the following operators:
- Port access:
node[port] - Comparison operators:
==,>=,<=,>,< - Logical operators:
&,| - Parentheses:
()