Some blog posts on macros


#1

Hi, I’ve been blogging about macros in Rust, they may be interesting to some of you:

There will be more, stay posted…


#2

And another blog post, this one covers import/export, parsing and libsyntax, spans, and expansion traces.


#3

I wonder if

Once parsing is complete, then we have an AST for the whole crate which will include macro uses with un-parsed token trees as arguments. We can then start macro expansion.

is a simplification? When we define macros, we use syntactic categories as expr and ident. When is it enforced that the macro argument is really and expression?

Also there are snippets in parser.rs like this

// Check for a whole path...
let found = match self.token {
    token::Interpolated(token::NtPath(_)) => Some(try!(self.bump_and_get())),
    _ => None,
};
if let Some(token::Interpolated(token::NtPath(path))) = found {
    return Ok(*path);
}

which I suspect are related to macro expansion in some way :slight_smile:

Could you point me to the entry point of macro expansion code? I am curious about it.