diff --git a/src/libsyntax/ext/deriving/clone.rs b/src/libsyntax/ext/deriving/clone.rs index 3cbccae664be..bb3636e68281 100644 --- a/src/libsyntax/ext/deriving/clone.rs +++ b/src/libsyntax/ext/deriving/clone.rs @@ -19,6 +19,7 @@ pub fn expand_deriving_clone(cx: &mut ExtCtxt, mitem: @MetaItem, item: @Item, push: |@Item|) { + assert!(span.expn_info.is_some(), "derived trait should have expn_info set"); let trait_def = TraitDef { span: span, attributes: Vec::new(), diff --git a/src/libsyntax/ext/deriving/generic.rs b/src/libsyntax/ext/deriving/generic.rs index 89a8b2cd336d..b30fe48c2acc 100644 --- a/src/libsyntax/ext/deriving/generic.rs +++ b/src/libsyntax/ext/deriving/generic.rs @@ -408,6 +408,7 @@ impl<'a> TraitDef<'a> { InternedString::new("automatically_derived"))); let opt_trait_ref = Some(trait_ref); let ident = ast_util::impl_pretty_name(&opt_trait_ref, self_type); + assert!(self.span.expn_info.is_some(), "Should have expansion info") cx.item( self.span, ident, @@ -613,6 +614,7 @@ impl<'a> MethodDef<'a> { Vec::new() }; + assert!(trait_.span.expn_info.is_some(), "Should have expansion info") // Create the method. @ast::Method { ident: method_ident, diff --git a/src/libsyntax/ext/deriving/mod.rs b/src/libsyntax/ext/deriving/mod.rs index 5a980cb9de90..f9251df8a4dd 100644 --- a/src/libsyntax/ext/deriving/mod.rs +++ b/src/libsyntax/ext/deriving/mod.rs @@ -20,6 +20,7 @@ library. use ast::{Item, MetaItem, MetaList, MetaNameValue, MetaWord}; use ext::base::ExtCtxt; +use codemap; use codemap::Span; pub mod clone; @@ -65,7 +66,17 @@ pub fn expand_meta_deriving(cx: &mut ExtCtxt, MetaNameValue(ref tname, _) | MetaList(ref tname, _) | MetaWord(ref tname) => { - macro_rules! expand(($func:path) => ($func(cx, titem.span, + let mut span = titem.span; + span.expn_info = Some(@codemap::ExpnInfo { + call_site: span, + callee: codemap::NameAndSpan { + name: format!("deriving({})", tname.get()), + format: codemap::MacroAttribute, + span: None, + } + }); + + macro_rules! expand(($func:path) => ($func(cx, span, titem, item, |i| push(i)))); match tname.get() {