Skip to content
This repository was archived by the owner on May 6, 2020. It is now read-only.

Commit 060e561

Browse files
committed
Merge pull request #44 from antrik/rustup
Update for latest libsyntax changes
2 parents e5abf9e + dae391a commit 060e561

30 files changed

+1417
-1583
lines changed

syntex/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
[package]
22
name = "syntex"
3-
version = "0.31.0"
3+
version = "0.32.0"
44
authors = [ "[email protected]" ]
55
license = "MIT/Apache-2.0"
66
description = "A library that enables compile time syntax extension expansion"
77
repository = "https://github.com/erickt/rust-syntex"
88
readme = "../README.md"
99

1010
[dependencies]
11-
syntex_syntax = { version = "^0.31.0", path = "../syntex_syntax" }
11+
syntex_syntax = { version = "^0.32.0", path = "../syntex_syntax" }

syntex/src/lib.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,7 @@ impl Registry {
133133

134134
krate.attrs.extend(self.attrs);
135135

136-
let features = feature_gate::check_crate_macros(
137-
&sess.codemap(),
136+
let features = feature_gate::get_features(
138137
&sess.span_diagnostic,
139138
&krate);
140139

syntex/src/squash_derive.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ mod tests {
178178

179179
let generics = ast::Generics {
180180
lifetimes: vec![],
181-
ty_params: P::empty(),
181+
ty_params: P::new(),
182182
where_clause: ast::WhereClause {
183183
id: ast::DUMMY_NODE_ID,
184184
predicates: vec![],

syntex_syntax/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "syntex_syntax"
3-
version = "0.31.0"
3+
version = "0.32.0"
44
authors = [ "[email protected]" ]
55
license = "MIT/Apache-2.0"
66
description = "Export of libsyntax for code generation"

syntex_syntax/src/ast.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -248,8 +248,8 @@ impl PathParameters {
248248
pub fn none() -> PathParameters {
249249
PathParameters::AngleBracketed(AngleBracketedParameterData {
250250
lifetimes: Vec::new(),
251-
types: P::empty(),
252-
bindings: P::empty(),
251+
types: P::new(),
252+
bindings: P::new(),
253253
})
254254
}
255255

@@ -421,7 +421,7 @@ impl Default for Generics {
421421
fn default() -> Generics {
422422
Generics {
423423
lifetimes: Vec::new(),
424-
ty_params: P::empty(),
424+
ty_params: P::new(),
425425
where_clause: WhereClause {
426426
id: DUMMY_NODE_ID,
427427
predicates: Vec::new(),
@@ -986,7 +986,9 @@ pub enum ExprKind {
986986
/// A `match` block.
987987
Match(P<Expr>, Vec<Arm>),
988988
/// A closure (for example, `move |a, b, c| {a + b + c}`)
989-
Closure(CaptureBy, P<FnDecl>, P<Block>),
989+
///
990+
/// The final span is the span of the argument block `|...|`
991+
Closure(CaptureBy, P<FnDecl>, P<Block>, Span),
990992
/// A block (`{ ... }`)
991993
Block(P<Block>),
992994

@@ -1206,8 +1208,7 @@ impl TokenTree {
12061208
TokenTree::Delimited(sp, Rc::new(Delimited {
12071209
delim: token::Bracket,
12081210
open_span: sp,
1209-
tts: vec![TokenTree::Token(sp, token::Ident(token::str_to_ident("doc"),
1210-
token::Plain)),
1211+
tts: vec![TokenTree::Token(sp, token::Ident(token::str_to_ident("doc"))),
12111212
TokenTree::Token(sp, token::Eq),
12121213
TokenTree::Token(sp, token::Literal(
12131214
token::StrRaw(token::intern(&stripped), num_of_hashes), None))],
@@ -1225,14 +1226,13 @@ impl TokenTree {
12251226
}
12261227
(&TokenTree::Token(sp, token::SpecialVarNt(var)), _) => {
12271228
let v = [TokenTree::Token(sp, token::Dollar),
1228-
TokenTree::Token(sp, token::Ident(token::str_to_ident(var.as_str()),
1229-
token::Plain))];
1229+
TokenTree::Token(sp, token::Ident(token::str_to_ident(var.as_str())))];
12301230
v[index].clone()
12311231
}
1232-
(&TokenTree::Token(sp, token::MatchNt(name, kind, name_st, kind_st)), _) => {
1233-
let v = [TokenTree::Token(sp, token::SubstNt(name, name_st)),
1232+
(&TokenTree::Token(sp, token::MatchNt(name, kind)), _) => {
1233+
let v = [TokenTree::Token(sp, token::SubstNt(name)),
12341234
TokenTree::Token(sp, token::Colon),
1235-
TokenTree::Token(sp, token::Ident(kind, kind_st))];
1235+
TokenTree::Token(sp, token::Ident(kind))];
12361236
v[index].clone()
12371237
}
12381238
(&TokenTree::Sequence(_, ref seq), _) => {
@@ -1887,7 +1887,7 @@ pub struct PolyTraitRef {
18871887
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
18881888
pub enum Visibility {
18891889
Public,
1890-
Crate,
1890+
Crate(Span),
18911891
Restricted { path: P<Path>, id: NodeId },
18921892
Inherited,
18931893
}

syntex_syntax/src/attr.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -334,11 +334,11 @@ pub enum InlineAttr {
334334
pub fn find_inline_attr(diagnostic: Option<&Handler>, attrs: &[Attribute]) -> InlineAttr {
335335
attrs.iter().fold(InlineAttr::None, |ia,attr| {
336336
match attr.node.value.node {
337-
MetaItemKind::Word(ref n) if *n == "inline" => {
337+
MetaItemKind::Word(ref n) if n == "inline" => {
338338
mark_used(attr);
339339
InlineAttr::Hint
340340
}
341-
MetaItemKind::List(ref n, ref items) if *n == "inline" => {
341+
MetaItemKind::List(ref n, ref items) if n == "inline" => {
342342
mark_used(attr);
343343
if items.len() != 1 {
344344
diagnostic.map(|d|{ d.span_err(attr.span, "expected one argument"); });
@@ -712,7 +712,7 @@ pub fn require_unique_names(diagnostic: &Handler, metas: &[P<MetaItem>]) {
712712
pub fn find_repr_attrs(diagnostic: &Handler, attr: &Attribute) -> Vec<ReprAttr> {
713713
let mut acc = Vec::new();
714714
match attr.node.value.node {
715-
ast::MetaItemKind::List(ref s, ref items) if *s == "repr" => {
715+
ast::MetaItemKind::List(ref s, ref items) if s == "repr" => {
716716
mark_used(attr);
717717
for item in items {
718718
match item.node {

syntex_syntax/src/codemap.rs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1396,6 +1396,56 @@ impl CodeMap {
13961396
pub fn count_lines(&self) -> usize {
13971397
self.files.borrow().iter().fold(0, |a, f| a + f.count_lines())
13981398
}
1399+
1400+
pub fn macro_backtrace(&self, span: Span) -> Vec<MacroBacktrace> {
1401+
let mut last_span = DUMMY_SP;
1402+
let mut span = span;
1403+
let mut result = vec![];
1404+
loop {
1405+
let span_name_span = self.with_expn_info(span.expn_id, |expn_info| {
1406+
expn_info.map(|ei| {
1407+
let (pre, post) = match ei.callee.format {
1408+
MacroAttribute(..) => ("#[", "]"),
1409+
MacroBang(..) => ("", "!"),
1410+
};
1411+
let macro_decl_name = format!("{}{}{}",
1412+
pre,
1413+
ei.callee.name(),
1414+
post);
1415+
let def_site_span = ei.callee.span;
1416+
(ei.call_site, macro_decl_name, def_site_span)
1417+
})
1418+
});
1419+
1420+
match span_name_span {
1421+
None => break,
1422+
Some((call_site, macro_decl_name, def_site_span)) => {
1423+
// Don't print recursive invocations
1424+
if !call_site.source_equal(&last_span) {
1425+
result.push(MacroBacktrace {
1426+
call_site: call_site,
1427+
macro_decl_name: macro_decl_name,
1428+
def_site_span: def_site_span,
1429+
});
1430+
}
1431+
last_span = span;
1432+
span = call_site;
1433+
}
1434+
}
1435+
}
1436+
result
1437+
}
1438+
}
1439+
1440+
pub struct MacroBacktrace {
1441+
/// span where macro was applied to generate this code
1442+
pub call_site: Span,
1443+
1444+
/// name of macro that was applied (e.g., "foo!" or "#[derive(Eq)]")
1445+
pub macro_decl_name: String,
1446+
1447+
/// span where macro was defined (if known)
1448+
pub def_site_span: Option<Span>,
13991449
}
14001450

14011451
// _____________________________________________________________________________

syntex_syntax/src/diagnostics/plugin.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ pub fn expand_diagnostic_used<'cx>(ecx: &'cx mut ExtCtxt,
5454
token_tree: &[TokenTree])
5555
-> Box<MacResult+'cx> {
5656
let code = match (token_tree.len(), token_tree.get(0)) {
57-
(1, Some(&TokenTree::Token(_, token::Ident(code, _)))) => code,
57+
(1, Some(&TokenTree::Token(_, token::Ident(code)))) => code,
5858
_ => unreachable!()
5959
};
6060

@@ -92,10 +92,10 @@ pub fn expand_register_diagnostic<'cx>(ecx: &'cx mut ExtCtxt,
9292
token_tree.get(1),
9393
token_tree.get(2)
9494
) {
95-
(1, Some(&TokenTree::Token(_, token::Ident(ref code, _))), None, None) => {
95+
(1, Some(&TokenTree::Token(_, token::Ident(ref code))), None, None) => {
9696
(code, None)
9797
},
98-
(3, Some(&TokenTree::Token(_, token::Ident(ref code, _))),
98+
(3, Some(&TokenTree::Token(_, token::Ident(ref code))),
9999
Some(&TokenTree::Token(_, token::Comma)),
100100
Some(&TokenTree::Token(_, token::Literal(token::StrRaw(description, _), None)))) => {
101101
(code, Some(description))
@@ -160,9 +160,9 @@ pub fn expand_build_diagnostic_array<'cx>(ecx: &'cx mut ExtCtxt,
160160
let (crate_name, name) = match (&token_tree[0], &token_tree[2]) {
161161
(
162162
// Crate name.
163-
&TokenTree::Token(_, token::Ident(ref crate_name, _)),
163+
&TokenTree::Token(_, token::Ident(ref crate_name)),
164164
// DIAGNOSTICS ident.
165-
&TokenTree::Token(_, token::Ident(ref name, _))
165+
&TokenTree::Token(_, token::Ident(ref name))
166166
) => (*&crate_name, name),
167167
_ => unreachable!()
168168
};

syntex_syntax/src/errors/emitter.rs

Lines changed: 9 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -577,46 +577,17 @@ impl EmitterWriter {
577577
fn print_macro_backtrace(&mut self,
578578
sp: Span)
579579
-> io::Result<()> {
580-
let mut last_span = codemap::DUMMY_SP;
581-
let mut span = sp;
582-
583-
loop {
584-
let span_name_span = self.cm.with_expn_info(span.expn_id, |expn_info| {
585-
expn_info.map(|ei| {
586-
let (pre, post) = match ei.callee.format {
587-
codemap::MacroAttribute(..) => ("#[", "]"),
588-
codemap::MacroBang(..) => ("", "!"),
589-
};
590-
let macro_decl_name = format!("in this expansion of {}{}{}",
591-
pre,
592-
ei.callee.name(),
593-
post);
594-
let def_site_span = ei.callee.span;
595-
(ei.call_site, macro_decl_name, def_site_span)
596-
})
597-
});
598-
let (macro_decl_name, def_site_span) = match span_name_span {
599-
None => break,
600-
Some((sp, macro_decl_name, def_site_span)) => {
601-
span = sp;
602-
(macro_decl_name, def_site_span)
603-
}
604-
};
605-
606-
// Don't print recursive invocations
607-
if !span.source_equal(&last_span) {
608-
let mut diag_string = macro_decl_name;
609-
if let Some(def_site_span) = def_site_span {
610-
diag_string.push_str(&format!(" (defined in {})",
611-
self.cm.span_to_filename(def_site_span)));
612-
}
613-
614-
let snippet = self.cm.span_to_string(span);
615-
try!(print_diagnostic(&mut self.dst, &snippet, Note, &diag_string, None));
580+
for trace in self.cm.macro_backtrace(sp) {
581+
let mut diag_string =
582+
format!("in this expansion of {}", trace.macro_decl_name);
583+
if let Some(def_site_span) = trace.def_site_span {
584+
diag_string.push_str(
585+
&format!(" (defined in {})",
586+
self.cm.span_to_filename(def_site_span)));
616587
}
617-
last_span = span;
588+
let snippet = self.cm.span_to_string(sp);
589+
try!(print_diagnostic(&mut self.dst, &snippet, Note, &diag_string, None));
618590
}
619-
620591
Ok(())
621592
}
622593
}

0 commit comments

Comments
 (0)