@@ -15,6 +15,7 @@ pub struct TraitDefNode {
1515 pub id : Box < VarNode > ,
1616 pub generics : Option < Box < GenericDefNode > > ,
1717 pub methods : Vec < FuncDefNode > ,
18+ pub derives : Vec < Box < TypeNodeEnum > > ,
1819}
1920
2021impl PrintTrait for TraitDefNode {
@@ -39,8 +40,11 @@ impl Node for TraitDefNode {
3940 for g in & mut self . generics {
4041 g. emit ( ctx, builder) ?;
4142 }
42- for method in & mut self . methods {
43- method. emit ( ctx, builder) ?;
43+ for de in & self . derives {
44+ de. emit_highlight ( ctx) ;
45+ }
46+ for method in & self . methods {
47+ method. emit_highlight ( ctx) ;
4448 }
4549 Ok ( ( None , None , TerminatorEnum :: NONE ) )
4650 }
@@ -65,7 +69,8 @@ impl TraitDefNode {
6569 refs : Rc :: new ( RefCell :: new ( vec ! [ ] ) ) ,
6670 doc : vec ! [ ] ,
6771 generic_map,
68- impls : vec ! [ ] ,
72+ impls : FxHashMap :: default ( ) ,
73+ derives : vec ! [ ] ,
6974 } ) ) ) ;
7075 builder. opaque_struct_type ( & ctx. plmod . get_full_name ( & self . id . name ) ) ;
7176 _ = ctx. add_type ( self . id . name . clone ( ) , stu, self . id . range ) ;
@@ -90,6 +95,10 @@ impl TraitDefNode {
9095 ) ;
9196 }
9297 }
98+ let mut derives = vec ! [ ] ;
99+ for de in & self . derives {
100+ derives. push ( de. get_type ( ctx, builder) ?) ;
101+ }
93102 // type hash
94103 order_fields. push ( Field {
95104 index : i,
@@ -125,6 +134,7 @@ impl TraitDefNode {
125134 range : field. range ,
126135 refs : Rc :: new ( RefCell :: new ( vec ! [ ] ) ) ,
127136 } ;
137+ field. get_type ( ctx, builder) ?;
128138
129139 ctx. set_if_refs ( f. refs . clone ( ) , field. id . range ) ;
130140 fields. insert ( id. name . to_string ( ) , f. clone ( ) ) ;
@@ -143,6 +153,7 @@ impl TraitDefNode {
143153 if let PLType :: TRAIT ( st) = & mut * pltype. borrow_mut ( ) {
144154 st. fields = fields;
145155 st. ordered_fields = newf;
156+ st. derives = derives;
146157 // st.doc = self.doc.clone();
147158 }
148159 ctx. set_if_refs_tp ( pltype. clone ( ) , self . id . range ) ;
0 commit comments