diff --git a/src/libsyntax/ext/tt/macro_parser.rs b/src/libsyntax/ext/tt/macro_parser.rs index 918949113ad..29963a7b461 100644 --- a/src/libsyntax/ext/tt/macro_parser.rs +++ b/src/libsyntax/ext/tt/macro_parser.rs @@ -419,18 +419,18 @@ pub fn parse_nt(p: &Parser, name: &str) -> nonterminal { Some(i) => token::nt_item(i), None => p.fatal("expected an item keyword") }, - "block" => token::nt_block(p.parse_block()), + "block" => token::nt_block(~p.parse_block()), "stmt" => token::nt_stmt(p.parse_stmt(~[])), "pat" => token::nt_pat(p.parse_pat()), "expr" => token::nt_expr(p.parse_expr()), - "ty" => token::nt_ty(p.parse_ty(false /* no need to disambiguate*/)), + "ty" => token::nt_ty(~p.parse_ty(false /* no need to disambiguate*/)), // this could be handled like a token, since it is one "ident" => match *p.token { - token::IDENT(sn,b) => { p.bump(); token::nt_ident(sn,b) } + token::IDENT(sn,b) => { p.bump(); token::nt_ident(~sn,b) } _ => p.fatal(~"expected ident, found " + token::to_str(get_ident_interner(), p.token)) }, - "path" => token::nt_path(p.parse_path_with_tps(false)), + "path" => token::nt_path(~p.parse_path_with_tps(false)), "attr" => token::nt_attr(@p.parse_attribute(false)), "tt" => { *p.quote_depth += 1u; //but in theory, non-quoted tts might be useful diff --git a/src/libsyntax/ext/tt/transcribe.rs b/src/libsyntax/ext/tt/transcribe.rs index 16019b21448..9d3e916b500 100644 --- a/src/libsyntax/ext/tt/transcribe.rs +++ b/src/libsyntax/ext/tt/transcribe.rs @@ -279,7 +279,7 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan { /* sidestep the interpolation tricks for ident because (a) idents can be in lots of places, so it'd be a pain (b) we actually can, since it's a token. */ - matched_nonterminal(nt_ident(sn,b)) => { + matched_nonterminal(nt_ident(~sn,b)) => { r.cur_span = sp; r.cur_tok = IDENT(sn,b); r.stack.idx += 1u; return ret_val; diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 77c50a779c0..59db1a3cfa2 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -146,7 +146,7 @@ macro_rules! maybe_whole_expr ( Some($p.mk_expr( ($p).span.lo, ($p).span.hi, - expr_path(/* bad */ (*pt).clone()))) + expr_path(/* bad */ (**pt).clone()))) } _ => None }; @@ -235,8 +235,8 @@ macro_rules! maybe_whole ( _ => None }; match __found__ { - Some(INTERPOLATED(token::$constructor(x))) => { - return (~[], x.clone()) + Some(INTERPOLATED(token::$constructor(ref x))) => { + return (~[], (**x).clone()) } _ => {} } @@ -939,7 +939,7 @@ impl Parser { // Useless second parameter for compatibility with quasiquote macros. // Bleh! pub fn parse_ty(&self, _: bool) -> Ty { - maybe_whole!(self, nt_ty); + maybe_whole!(deref self, nt_ty); let lo = self.span.lo; @@ -1293,7 +1293,7 @@ impl Parser { // parse a path that doesn't have type parameters attached pub fn parse_path_without_tps(&self) -> ast::Path { - maybe_whole!(self, nt_path); + maybe_whole!(deref self, nt_path); let (ids,is_global,sp) = self.parse_path(); ast::Path { span: sp, global: is_global, @@ -1306,7 +1306,7 @@ impl Parser { before_tps: Option<&fn()>) -> ast::Path { debug!("parse_path_with_tps(colons=%b)", colons); - maybe_whole!(self, nt_path); + maybe_whole!(deref self, nt_path); let lo = self.span.lo; let path = self.parse_path_without_tps(); if colons && !self.eat(&token::MOD_SEP) { @@ -3100,7 +3100,7 @@ impl Parser { // parse a block. No inner attrs are allowed. pub fn parse_block(&self) -> Block { - maybe_whole!(self, nt_block); + maybe_whole!(deref self, nt_block); let lo = self.span.lo; if self.eat_keyword(keywords::Unsafe) { diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs index c554f111bf9..bdfd25ae644 100644 --- a/src/libsyntax/parse/token.rs +++ b/src/libsyntax/parse/token.rs @@ -99,14 +99,14 @@ pub enum Token { /// For interpolation during macro expansion. pub enum nonterminal { nt_item(@ast::item), - nt_block(ast::Block), + nt_block(~ast::Block), nt_stmt(@ast::stmt), nt_pat( @ast::pat), nt_expr(@ast::expr), - nt_ty( ast::Ty), - nt_ident(ast::ident, bool), + nt_ty( ~ast::Ty), + nt_ident(~ast::ident, bool), nt_attr(@ast::Attribute), // #[foo] - nt_path( ast::Path), + nt_path(~ast::Path), nt_tt( @ast::token_tree), //needs @ed to break a circularity nt_matchers(~[ast::matcher]) }