Generated code spans now point to callsite parameters (where applicable)

This commit is contained in:
Daniel Campbell
2015-12-15 17:31:54 +13:00
parent 9267a3a222
commit 2dcd791d46
6 changed files with 35 additions and 8 deletions

View File

@@ -79,8 +79,8 @@ pub use self::ParseResult::*;
use self::TokenTreeOrTokenTreeVec::*;
use ast;
use ast::{TokenTree, Name};
use codemap::{BytePos, mk_sp, Span};
use ast::{TokenTree, Name, Ident};
use codemap::{BytePos, mk_sp, Span, Spanned};
use codemap;
use parse::lexer::*; //resolve bug?
use parse::ParseSess;
@@ -526,7 +526,10 @@ pub fn parse_nt(p: &mut Parser, sp: Span, name: &str) -> Nonterminal {
"ty" => token::NtTy(panictry!(p.parse_ty())),
// this could be handled like a token, since it is one
"ident" => match p.token {
token::Ident(sn,b) => { panictry!(p.bump()); token::NtIdent(Box::new(sn),b) }
token::Ident(sn,b) => {
panictry!(p.bump());
token::NtIdent(Box::new(Spanned::<Ident>{node: sn, span: p.span}),b)
}
_ => {
let token_str = pprust::token_to_string(&p.token);
panic!(p.fatal(&format!("expected ident, found {}",

View File

@@ -293,8 +293,8 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
// (a) idents can be in lots of places, so it'd be a pain
// (b) we actually can, since it's a token.
MatchedNonterminal(NtIdent(ref sn, b)) => {
r.cur_span = sp;
r.cur_tok = token::Ident(**sn, b);
r.cur_span = sn.span;
r.cur_tok = token::Ident(sn.node, b);
return ret_val;
}
MatchedNonterminal(ref other_whole_nt) => {