Change fold_tt and fold_tts to take token trees by value (instead of by reference)
This commit is contained in:
parent
febe6a46f6
commit
5bf7970ac7
8 changed files with 68 additions and 88 deletions
|
|
@ -236,7 +236,7 @@ fn expand_mac_invoc<T>(mac: ast::Mac, ident: Option<Ident>, attrs: Vec<ast::Attr
|
|||
},
|
||||
});
|
||||
|
||||
let marked_tts = mark_tts(&tts[..], mark);
|
||||
let marked_tts = mark_tts(tts, mark);
|
||||
Some(expandfun.expand(fld.cx, call_site, &marked_tts))
|
||||
}
|
||||
|
||||
|
|
@ -256,7 +256,7 @@ fn expand_mac_invoc<T>(mac: ast::Mac, ident: Option<Ident>, attrs: Vec<ast::Attr
|
|||
}
|
||||
});
|
||||
|
||||
let marked_tts = mark_tts(&tts, mark);
|
||||
let marked_tts = mark_tts(tts, mark);
|
||||
Some(expander.expand(fld.cx, call_site, ident, marked_tts))
|
||||
}
|
||||
|
||||
|
|
@ -1190,7 +1190,7 @@ impl Folder for Marker {
|
|||
Spanned {
|
||||
node: Mac_ {
|
||||
path: self.fold_path(node.path),
|
||||
tts: self.fold_tts(&node.tts),
|
||||
tts: self.fold_tts(node.tts),
|
||||
},
|
||||
span: self.new_span(span),
|
||||
}
|
||||
|
|
@ -1205,7 +1205,7 @@ impl Folder for Marker {
|
|||
}
|
||||
|
||||
// apply a given mark to the given token trees. Used prior to expansion of a macro.
|
||||
fn mark_tts(tts: &[TokenTree], m: Mrk) -> Vec<TokenTree> {
|
||||
fn mark_tts(tts: Vec<TokenTree>, m: Mrk) -> Vec<TokenTree> {
|
||||
noop_fold_tts(tts, &mut Marker{mark:m, expn_id: None})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@ pub mod rt {
|
|||
use ext::base::ExtCtxt;
|
||||
use parse::{self, token, classify};
|
||||
use ptr::P;
|
||||
use std::rc::Rc;
|
||||
|
||||
use ast::TokenTree;
|
||||
|
||||
|
|
@ -214,12 +213,12 @@ pub mod rt {
|
|||
if self.node.style == ast::AttrStyle::Inner {
|
||||
r.push(TokenTree::Token(self.span, token::Not));
|
||||
}
|
||||
r.push(TokenTree::Delimited(self.span, Rc::new(ast::Delimited {
|
||||
r.push(TokenTree::Delimited(self.span, ast::Delimited {
|
||||
delim: token::Bracket,
|
||||
open_span: self.span,
|
||||
tts: self.node.value.to_tokens(cx),
|
||||
close_span: self.span,
|
||||
})));
|
||||
}));
|
||||
r
|
||||
}
|
||||
}
|
||||
|
|
@ -234,12 +233,12 @@ pub mod rt {
|
|||
|
||||
impl ToTokens for () {
|
||||
fn to_tokens(&self, _cx: &ExtCtxt) -> Vec<TokenTree> {
|
||||
vec![TokenTree::Delimited(DUMMY_SP, Rc::new(ast::Delimited {
|
||||
vec![TokenTree::Delimited(DUMMY_SP, ast::Delimited {
|
||||
delim: token::Paren,
|
||||
open_span: DUMMY_SP,
|
||||
tts: vec![],
|
||||
close_span: DUMMY_SP,
|
||||
}))]
|
||||
})]
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -789,14 +788,9 @@ fn statements_mk_tt(cx: &ExtCtxt, tt: &TokenTree, matcher: bool) -> Vec<ast::Stm
|
|||
cx.expr_usize(sp, seq.num_captures))];
|
||||
let seq_path = vec![id_ext("syntax"), id_ext("ast"), id_ext("SequenceRepetition")];
|
||||
let e_seq_struct = cx.expr_struct(sp, cx.path_global(sp, seq_path), fields);
|
||||
let e_rc_new = cx.expr_call_global(sp, vec![id_ext("std"),
|
||||
id_ext("rc"),
|
||||
id_ext("Rc"),
|
||||
id_ext("new")],
|
||||
vec![e_seq_struct]);
|
||||
let e_tok = cx.expr_call(sp,
|
||||
mk_tt_path(cx, sp, "Sequence"),
|
||||
vec!(e_sp, e_rc_new));
|
||||
vec!(e_sp, e_seq_struct));
|
||||
let e_push =
|
||||
cx.expr_method_call(sp,
|
||||
cx.expr_ident(sp, id_ext("tt")),
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@ use util::small_vector::SmallVector;
|
|||
use std::cell::RefCell;
|
||||
use std::collections::{HashMap};
|
||||
use std::collections::hash_map::{Entry};
|
||||
use std::rc::Rc;
|
||||
|
||||
struct ParserAnyMacro<'a> {
|
||||
parser: RefCell<Parser<'a>>,
|
||||
|
|
@ -246,26 +245,25 @@ pub fn compile<'cx>(cx: &'cx mut ExtCtxt,
|
|||
// These spans won't matter, anyways
|
||||
let match_lhs_tok = MatchNt(lhs_nm, token::str_to_ident("tt"));
|
||||
let match_rhs_tok = MatchNt(rhs_nm, token::str_to_ident("tt"));
|
||||
let argument_gram = vec!(
|
||||
TokenTree::Sequence(DUMMY_SP,
|
||||
Rc::new(ast::SequenceRepetition {
|
||||
tts: vec![
|
||||
TokenTree::Token(DUMMY_SP, match_lhs_tok),
|
||||
TokenTree::Token(DUMMY_SP, token::FatArrow),
|
||||
TokenTree::Token(DUMMY_SP, match_rhs_tok)],
|
||||
separator: Some(token::Semi),
|
||||
op: ast::KleeneOp::OneOrMore,
|
||||
num_captures: 2
|
||||
})),
|
||||
//to phase into semicolon-termination instead of
|
||||
//semicolon-separation
|
||||
TokenTree::Sequence(DUMMY_SP,
|
||||
Rc::new(ast::SequenceRepetition {
|
||||
tts: vec![TokenTree::Token(DUMMY_SP, token::Semi)],
|
||||
separator: None,
|
||||
op: ast::KleeneOp::ZeroOrMore,
|
||||
num_captures: 0
|
||||
})));
|
||||
let argument_gram = vec![
|
||||
TokenTree::Sequence(DUMMY_SP, ast::SequenceRepetition {
|
||||
tts: vec![
|
||||
TokenTree::Token(DUMMY_SP, match_lhs_tok),
|
||||
TokenTree::Token(DUMMY_SP, token::FatArrow),
|
||||
TokenTree::Token(DUMMY_SP, match_rhs_tok)
|
||||
],
|
||||
separator: Some(token::Semi),
|
||||
op: ast::KleeneOp::OneOrMore,
|
||||
num_captures: 2,
|
||||
}),
|
||||
// to phase into semicolon-termination instead of semicolon-separation
|
||||
TokenTree::Sequence(DUMMY_SP, ast::SequenceRepetition {
|
||||
tts: vec![TokenTree::Token(DUMMY_SP, token::Semi)],
|
||||
separator: None,
|
||||
op: ast::KleeneOp::ZeroOrMore,
|
||||
num_captures: 0,
|
||||
}),
|
||||
];
|
||||
|
||||
|
||||
// Parse the macro_rules! invocation (`none` is for no interpolations):
|
||||
|
|
|
|||
|
|
@ -79,11 +79,11 @@ pub fn new_tt_reader_with_doc_flag(sp_diag: &Handler,
|
|||
let mut r = TtReader {
|
||||
sp_diag: sp_diag,
|
||||
stack: vec!(TtFrame {
|
||||
forest: TokenTree::Sequence(DUMMY_SP, Rc::new(ast::SequenceRepetition {
|
||||
forest: TokenTree::Sequence(DUMMY_SP, ast::SequenceRepetition {
|
||||
tts: src,
|
||||
// doesn't matter. This merely holds the root unzipping.
|
||||
separator: None, op: ast::KleeneOp::ZeroOrMore, num_captures: 0
|
||||
})),
|
||||
}),
|
||||
idx: 0,
|
||||
dotdotdoted: false,
|
||||
sep: None,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue