comments only
This commit is contained in:
parent
91d3c36430
commit
98a6cbdba3
4 changed files with 11 additions and 0 deletions
|
|
@ -642,6 +642,7 @@ pub enum matcher_ {
|
|||
// lo, hi position-in-match-array used:
|
||||
match_seq(~[matcher], Option<::parse::token::Token>, bool, uint, uint),
|
||||
// parse a Rust NT: name to bind, name of NT, position in match array:
|
||||
// NOTE: 'name of NT' shouldnt really be represented as an ident, should it?
|
||||
match_nonterminal(Ident, Ident, uint)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,8 @@ pub fn path_name_i(idents: &[Ident]) -> ~str {
|
|||
idents.map(|i| token::interner_get(i.name)).connect("::")
|
||||
}
|
||||
|
||||
// totally scary function: ignores all but the last element, should have
|
||||
// a different name
|
||||
pub fn path_to_ident(path: &Path) -> Ident {
|
||||
path.segments.last().identifier
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1480,6 +1480,8 @@ mod test {
|
|||
// other, so the result of the whole thing should be "let z_123 = 3; z_123"
|
||||
@"macro_rules! g (($x:ident) => ({macro_rules! f(($y:ident)=>({let $y=3;$x}));f!($x)}))
|
||||
fn a(){g!(z)}"
|
||||
// create a really evil test case where a $x appears inside a binding of $x but *shouldnt*
|
||||
// bind because it was inserted by a different macro....
|
||||
];
|
||||
for s in teststrs.iter() {
|
||||
// we need regexps to test these!
|
||||
|
|
|
|||
|
|
@ -23,11 +23,15 @@ use parse::token::{get_ident_interner, special_idents, gensym_ident, ident_to_st
|
|||
use parse::token::{FAT_ARROW, SEMI, nt_matchers, nt_tt};
|
||||
use print;
|
||||
|
||||
// this procedure performs the expansion of the
|
||||
// macro_rules! macro. It parses the RHS and adds
|
||||
// an extension to the current context.
|
||||
pub fn add_new_extension(cx: @ExtCtxt,
|
||||
sp: Span,
|
||||
name: Ident,
|
||||
arg: ~[ast::token_tree])
|
||||
-> base::MacResult {
|
||||
// Wrap a matcher_ in a spanned to produce a matcher.
|
||||
// these spans won't matter, anyways
|
||||
fn ms(m: matcher_) -> matcher {
|
||||
Spanned {
|
||||
|
|
@ -39,11 +43,13 @@ pub fn add_new_extension(cx: @ExtCtxt,
|
|||
let lhs_nm = gensym_ident("lhs");
|
||||
let rhs_nm = gensym_ident("rhs");
|
||||
|
||||
// The pattern that macro_rules matches.
|
||||
// The grammar for macro_rules! is:
|
||||
// $( $lhs:mtcs => $rhs:tt );+
|
||||
// ...quasiquoting this would be nice.
|
||||
let argument_gram = ~[
|
||||
ms(match_seq(~[
|
||||
// NOTE : probably just use an enum for the NT_name ?
|
||||
ms(match_nonterminal(lhs_nm, special_idents::matchers, 0u)),
|
||||
ms(match_tok(FAT_ARROW)),
|
||||
ms(match_nonterminal(rhs_nm, special_idents::tt, 1u)),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue