diff options
| author | David Tolnay <dtolnay@gmail.com> | 2016-09-09 14:53:15 -0700 |
|---|---|---|
| committer | David Tolnay <dtolnay@gmail.com> | 2016-09-09 18:50:05 -0700 |
| commit | fe41520fceb00427e797cc0b42f449f54967b104 (patch) | |
| tree | f7afd5144f5548d05fc3b4dac931f95255201bb1 /src/libsyntax_ext | |
| parent | 707a40f2065cb46d12c4f4991e6408585b315c92 (diff) | |
| download | rust-fe41520fceb00427e797cc0b42f449f54967b104.tar.gz rust-fe41520fceb00427e797cc0b42f449f54967b104.zip | |
Add ExpnId to expanded procedural macro code
Diffstat (limited to 'src/libsyntax_ext')
| -rw-r--r-- | src/libsyntax_ext/deriving/custom.rs | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/libsyntax_ext/deriving/custom.rs b/src/libsyntax_ext/deriving/custom.rs index 716cf3a94b5..465fc0016e5 100644 --- a/src/libsyntax_ext/deriving/custom.rs +++ b/src/libsyntax_ext/deriving/custom.rs @@ -10,12 +10,14 @@ use std::panic; +use errors::FatalError; use rustc_macro::{TokenStream, __internal}; use syntax::ast::{self, ItemKind}; -use syntax::codemap::Span; +use syntax::codemap::{ExpnInfo, MacroAttribute, NameAndSpan, Span}; use syntax::ext::base::*; use syntax::fold::{self, Folder}; -use errors::FatalError; +use syntax::parse::token::intern; +use syntax::print::pprust; pub struct CustomDerive { inner: fn(TokenStream) -> TokenStream, @@ -31,7 +33,7 @@ impl MultiItemModifier for CustomDerive { fn expand(&self, ecx: &mut ExtCtxt, span: Span, - _meta_item: &ast::MetaItem, + meta_item: &ast::MetaItem, item: Annotatable) -> Vec<Annotatable> { let item = match item { @@ -53,7 +55,17 @@ impl MultiItemModifier for CustomDerive { } } - let input_span = item.span; + let input_span = Span { + expn_id: ecx.codemap().record_expansion(ExpnInfo { + call_site: span, + callee: NameAndSpan { + format: MacroAttribute(intern(&pprust::meta_item_to_string(meta_item))), + span: Some(span), + allow_internal_unstable: true, + }, + }), + ..item.span + }; let input = __internal::new_token_stream(item); let res = __internal::set_parse_sess(&ecx.parse_sess, || { let inner = self.inner; |
