@@ -19,21 +19,25 @@ enum fn_kind {
19
19
fk_anon( proto , capture_clause ) , //< an anonymous function like fn@(...)
20
20
fk_fn_block( capture_clause ) , //< a block {||...}
21
21
fk_ctor( ident , [ ty_param ] , node_id /* self id */ ,
22
- def_id /* parent class id */ ) // class constructor
22
+ def_id /* parent class id */ ) , // class constructor
23
+ fk_dtor( [ ty_param ] , node_id /* self id */ ,
24
+ def_id /* parent class id */ ) // class destructor
25
+
23
26
}
24
27
25
28
fn name_of_fn( fk : fn_kind ) -> ident {
26
29
alt fk {
27
30
fk_item_fn( name, _) | fk_method ( name, _, _) | fk_res ( name, _, _)
28
31
| fk_ctor ( name, _, _, _) { name }
29
32
fk_anon ( * ) | fk_fn_block( * ) { "anon" }
33
+ fk_dtor( * ) { "drop" }
30
34
}
31
35
}
32
36
33
37
fn tps_of_fn ( fk: fn_kind) -> [ ty_param] {
34
38
alt fk {
35
39
fk_item_fn( _, tps) | fk_method ( _, tps, _) | fk_res ( _, tps, _)
36
- | fk_ctor ( _, tps, _, _) { tps }
40
+ | fk_ctor ( _, tps, _, _) | fk_dtor ( tps , _ , _ ) { tps }
37
41
fk_anon ( * ) | fk_fn_block( * ) { [ ] }
38
42
}
39
43
}
@@ -140,14 +144,17 @@ fn visit_item<E>(i: @item, e: E, v: vt<E>) {
140
144
visit_method_helper( m, e, v)
141
145
}
142
146
}
143
- item_class ( tps, ifaces, members, ctor, _) {
147
+ item_class( tps, ifaces, members, ctor, m_dtor , _) {
144
148
v. visit_ty_params( tps, e, v) ;
145
149
for members. each { |m|
146
150
v. visit_class_item( m, e, v) ;
147
151
}
148
152
for ifaces. each { |p| visit_path( p. path, e, v) ; }
149
153
visit_class_ctor_helper( ctor, i. ident, tps,
150
154
ast_util:: local_def( i. id) , e, v) ;
155
+ option:: iter( m_dtor) { |dtor|
156
+ visit_class_dtor_helper( dtor, tps,
157
+ ast_util:: local_def( i. id) , e, v) } ;
151
158
}
152
159
item_iface( tps, _rp, methods) {
153
160
v. visit_ty_params( tps, e, v) ;
@@ -280,12 +287,20 @@ fn visit_method_helper<E>(m: @method, e: E, v: vt<E>) {
280
287
// Similar logic to the comment on visit_method_helper - Tim
281
288
fn visit_class_ctor_helper < E > ( ctor: class_ctor, nm: ident, tps: [ ty_param] ,
282
289
parent_id: def_id, e: E , v: vt < E > ) {
283
- v. visit_fn( visit :: fk_ctor( nm, tps, ctor. node. self_id,
290
+ v. visit_fn( fk_ctor( nm, tps, ctor. node. self_id,
284
291
parent_id) , ctor. node. dec,
285
292
ctor. node. body, ctor. span, ctor. node. id, e, v)
286
293
287
294
}
288
295
296
+ fn visit_class_dtor_helper < E > ( dtor: class_dtor, tps: [ ty_param] ,
297
+ parent_id: def_id, e: E , v: vt < E > ) {
298
+ v. visit_fn( fk_dtor( tps, dtor. node. self_id,
299
+ parent_id) , ast_util:: dtor_dec( ) ,
300
+ dtor. node. body, dtor. span, dtor. node. id, e, v)
301
+
302
+ }
303
+
289
304
fn visit_fn < E > ( fk: fn_kind, decl: fn_decl, body: blk, _sp: span,
290
305
_id: node_id, e: E , v: vt < E > ) {
291
306
visit_fn_decl( decl, e, v) ;
0 commit comments