macro iff { rule { ($x:expr) { $truebody ... $truelast:expr } els { $falsebody ... $falselast:expr } } => { (function() { var res = null; if ($x) { $truebody ... res = $truelast; } else { $falsebody ... res = $falselast } return res; }()) } } var fortytwo = 42; console.log(iff(fortytwo == 42) { var temp = fortytwo + 2; "" + temp } els { null; "not!" });