| // 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); | |
| } |