From 0c6fe6470e6a19899bd32add0a282d3ae2a97b8a Mon Sep 17 00:00:00 2001 From: Paul Stansifer Date: Fri, 29 Jun 2012 18:26:34 -0700 Subject: Macro By Example transcription of token trees with interpolations and dotdotdots. --- src/libsyntax/parse/parser.rs | 10 ++++++---- src/libsyntax/parse/token.rs | 12 +++++++++++- 2 files changed, 17 insertions(+), 5 deletions(-) (limited to 'src/libsyntax/parse') diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index d31d4762c7b..4d564563d10 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -1070,9 +1070,10 @@ class parser { fn parse_tt_flat(p: parser, delim_ok: bool) -> token_tree { if p.eat_keyword("many") && p.quote_depth > 0u { - ret tt_dotdotdot( - p.parse_seq(token::LPAREN, token::RPAREN, seq_sep_none(), - |p| p.parse_token_tree()).node); + let seq = p.parse_seq(token::LPAREN, token::RPAREN, + seq_sep_none(), + |p| p.parse_token_tree()); + ret tt_dotdotdot(seq.span, seq.node); } alt p.token { token::RPAREN | token::RBRACE | token::RBRACKET @@ -1086,7 +1087,8 @@ class parser { /* we ought to allow different depths of unquotation */ token::DOLLAR if p.quote_depth > 0u { p.bump(); - ret tt_interpolate(p.parse_ident()); + let sp = p.span; + ret tt_interpolate(sp, p.parse_ident()); } _ { /* ok */ } } diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs index c4ae9269914..29a8fb18ebc 100644 --- a/src/libsyntax/parse/token.rs +++ b/src/libsyntax/parse/token.rs @@ -78,7 +78,8 @@ enum token { IDENT(str_num, bool), UNDERSCORE, - //ACTUALLY(whole_nonterminal), + /* For interpolation */ + ACTUALLY(whole_nt), DOC_COMMENT(str_num), EOF, @@ -181,6 +182,15 @@ fn to_str(in: interner<@str>, t: token) -> str { /* Other */ DOC_COMMENT(s) { *interner::get(in, s) } EOF { "" } + ACTUALLY(w_nt) { + "an interpolated " + + alt w_nt { + w_item(*) { "item" } w_block(*) { "block" } + w_stmt(*) { "statement" } w_pat(*) { "pattern" } + w_expr(*) { "expression" } w_ty(*) { "type" } + w_ident(*) { "identifier" } w_path(*) { "path" } + } + } } } -- cgit 1.4.1-3-g733a5