@@ -899,7 +899,9 @@ impl<'self> MethodDef<'self> {
899
899
let summary = enum_def. variants . map ( |v| {
900
900
let ident = v. node . name ;
901
901
let summary = match v. node . kind {
902
- ast:: tuple_variant_kind( ref args) => Unnamed ( args. map ( |va| va. ty . span ) ) ,
902
+ ast:: tuple_variant_kind( ref args) => {
903
+ Unnamed ( args. map ( |va| trait_. set_expn_info ( va. ty . span ) ) )
904
+ }
903
905
ast:: struct_variant_kind( struct_def) => {
904
906
trait_. summarise_struct ( struct_def)
905
907
}
@@ -919,11 +921,27 @@ enum StructType {
919
921
920
922
// general helper methods.
921
923
impl < ' a > TraitDef < ' a > {
924
+ fn set_expn_info ( & self , mut to_set : Span ) -> Span {
925
+ let trait_name = match self . path . path . last_opt ( ) {
926
+ None => self . cx . span_bug ( self . span , "trait with empty path in generic `deriving`" ) ,
927
+ Some ( name) => * name
928
+ } ;
929
+ to_set. expn_info = Some ( @codemap:: ExpnInfo {
930
+ call_site : to_set,
931
+ callee : codemap:: NameAndSpan {
932
+ name : format ! ( "deriving({})" , trait_name) . to_managed ( ) ,
933
+ format : codemap:: MacroAttribute ,
934
+ span : Some ( self . span )
935
+ }
936
+ } ) ;
937
+ to_set
938
+ }
939
+
922
940
fn summarise_struct ( & self , struct_def : & struct_def ) -> StaticFields {
923
941
let mut named_idents = ~[ ] ;
924
942
let mut just_spans = ~[ ] ;
925
943
for field in struct_def. fields . iter ( ) {
926
- let sp = field. span ;
944
+ let sp = self . set_expn_info ( field. span ) ;
927
945
match field. node . kind {
928
946
ast:: named_field( ident, _) => named_idents. push ( ( ident, sp) ) ,
929
947
ast:: unnamed_field => just_spans. push ( sp) ,
@@ -973,7 +991,7 @@ impl<'a> TraitDef<'a> {
973
991
let mut struct_type = Unknown ;
974
992
975
993
for ( i, struct_field) in struct_def. fields . iter ( ) . enumerate ( ) {
976
- let sp = struct_field. span ;
994
+ let sp = self . set_expn_info ( struct_field. span ) ;
977
995
let opt_id = match struct_field. node . kind {
978
996
ast:: named_field( ident, _) if ( struct_type == Unknown ||
979
997
struct_type == Record ) => {
@@ -1031,7 +1049,7 @@ impl<'a> TraitDef<'a> {
1031
1049
let mut paths = ~[ ] ;
1032
1050
let mut ident_expr = ~[ ] ;
1033
1051
for ( i, va) in variant_args. iter ( ) . enumerate ( ) {
1034
- let sp = va. ty . span ;
1052
+ let sp = self . set_expn_info ( va. ty . span ) ;
1035
1053
let path = cx. path_ident ( sp, cx. ident_of ( format ! ( "{}_{}" , prefix, i) ) ) ;
1036
1054
1037
1055
paths. push ( path. clone ( ) ) ;
0 commit comments