//@ run-pass macro_rules! myfn { ( $f:ident, ( $( $x:ident ),* ), $body:block ) => ( fn $f( $( $x : isize),* ) -> isize $body ) } myfn!(add, (a,b), { return a+b; } ); pub fn main() { macro_rules! mylet { ($x:ident, $val:expr) => ( let $x = $val; ) } mylet!(y, 8*2); assert_eq!(y, 16); myfn!(mult, (a,b), { a*b } ); assert_eq!(mult(2, add(4,4)), 16); macro_rules! actually_an_expr_macro { () => ( 16 ) } assert_eq!({ actually_an_expr_macro!() }, 16); }