]> git.lizzy.rs Git - rust.git/commitdiff
Add ExpnId to expanded procedural macro code
authorDavid Tolnay <dtolnay@gmail.com>
Fri, 9 Sep 2016 21:53:15 +0000 (14:53 -0700)
committerDavid Tolnay <dtolnay@gmail.com>
Sat, 10 Sep 2016 01:50:05 +0000 (18:50 -0700)
src/libsyntax_ext/deriving/custom.rs

index 716cf3a94b5166bfec642b62a1a4b05ab8ccfbb3..465fc0016e5e8ef6a526748040433e97cfd8bb5f 100644 (file)
 
 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 @@ fn expand(&self,
             }
         }
 
-        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;