That test is for multiple *items*, not statements.

For the moment, you just have to wrap the interior of a macro expanding to an expression in a set of braces, so that it becomes a single statement.

macro_rules! my_print(
    ($a:expr, $b:expr) => (
        {
            println!("{:?}", a);
            println!("{:?}", b);
        }
    );
)

Multi-statement macros are covered by https://github.com/mozilla/rust/issues/10681 .


Huon


On 12/01/14 13:40, Ashish Myles wrote:
Rust 0.9 indicates that support for expansion of macros into multiple statements is now supported, and the following example from the test suite works for me.
https://github.com/mozilla/rust/blob/master/src/test/run-pass/macro-multiple-items.rs

However, I receive an error for the following code

#[feature(macro_rules)];

macro_rules! my_print(
    ($a:expr, $b:expr) => (
        println!("{:?}", a);
        println!("{:?}", b);
    );
)

fn main() {
    let a = 1;
    let b = 2;
    my_print!(a, b);
}

(Note that the ^~~~~~~ below points at println.)

$ rustc macro_ignores_second_line.rs <http://macro_ignores_second_line.rs>
macro_ignores_second_line.rs:6:9: 6:16 error: macro expansion ignores token `println` and any following macro_ignores_second_line.rs:6 <http://macro_ignores_second_line.rs:6> println!("{:?}", b);
                                       ^~~~~~~
error: aborting due to previous error
task 'rustc' failed at 'explicit failure', /home/marcianx/devel/rust/checkout/rust/src/libsyntax/diagnostic.rs:75 <http://diagnostic.rs:75> task '<main>' failed at 'explicit failure', /home/marcianx/devel/rust/checkout/rust/src/librustc/lib.rs:453 <http://lib.rs:453>


What's the right way to do this?

Ashish


_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to