@@ -56,6 +56,48 @@ type ExpandDerivingEnumDefFn = &self/fn(ext_ctxt,
5656 ident ,
5757 y : & Generics ) -> @item;
5858
59+ pub fn expand_meta_deriving( cx : ext_ctxt ,
60+ _span : span ,
61+ mitem : @meta_item ,
62+ in_items : ~[ @item] )
63+ -> ~[ @item] {
64+ use ast:: { meta_list , meta_name_value , meta_word } ;
65+
66+ match mitem. node {
67+ meta_name_value( _, l) => {
68+ cx. span_err ( l. span , ~"unexpected value in `deriving`") ;
69+ in_items
70+ }
71+ meta_word( _) | meta_list( _, [ ] ) => {
72+ cx. span_warn ( mitem. span , ~"empty trait list in `deriving`") ;
73+ in_items
74+ }
75+ meta_list( _, titems) => {
76+ do titems. foldr ( in_items) |& titem, in_items| {
77+ match titem. node {
78+ meta_name_value( tname, _) |
79+ meta_list( tname, _) |
80+ meta_word( tname) => {
81+ match * tname {
82+ ~"Clone " => expand_deriving_clone ( cx,
83+ titem. span , titem, in_items) ,
84+ ~"Eq " => expand_deriving_eq ( cx, titem. span ,
85+ titem, in_items) ,
86+ ~"IterBytes " => expand_deriving_iter_bytes ( cx,
87+ titem. span , titem, in_items) ,
88+ tname => {
89+ cx. span_err ( titem. span , fmt ! ( "unknown \
90+ `deriving` trait: `%s`", tname) ) ;
91+ in_items
92+ }
93+ }
94+ }
95+ }
96+ }
97+ }
98+ }
99+ }
100+
59101pub fn expand_deriving_eq( cx: ext_ctxt,
60102 span: span,
61103 _mitem: @meta_item,
0 commit comments