@@ -61,6 +61,8 @@ type visitor<E> =
61
61
visit_fn : fn @( fn_kind , fn_decl , blk , span , node_id , E , vt < E > ) ,
62
62
visit_ty_method : fn @( ty_method , E , vt < E > ) ,
63
63
visit_trait_method : fn @( trait_method , E , vt < E > ) ,
64
+ visit_struct_def : fn @( struct_def , ident , ~[ ty_param ] , node_id , E ,
65
+ vt < E > ) ,
64
66
visit_class_item : fn @( @class_member , E , vt < E > ) } ;
65
67
66
68
fn default_visitor < E > ( ) -> visitor < E > {
@@ -81,6 +83,8 @@ fn default_visitor<E>() -> visitor<E> {
81
83
visit_fn: |a, b, c, d, e, f, g|visit_fn :: < E > ( a, b, c, d, e, f, g) ,
82
84
visit_ty_method: |a, b, c|visit_ty_method :: < E > ( a, b, c) ,
83
85
visit_trait_method: |a, b, c|visit_trait_method :: < E > ( a, b, c) ,
86
+ visit_struct_def:
87
+ |a, b, c, d, e, f|visit_struct_def :: < E > ( a, b, c, d, e, f) ,
84
88
visit_class_item: |a, b, c|visit_class_item :: < E > ( a, b, c) } ;
85
89
}
86
90
@@ -153,19 +157,8 @@ fn visit_item<E>(i: @item, e: E, v: vt<E>) {
153
157
}
154
158
}
155
159
item_class( struct_def, tps) => {
156
- v. visit_ty_params( tps, e, v) ;
157
- for struct_def. members. each |m| {
158
- v. visit_class_item( m, e, v) ;
159
- }
160
- for struct_def. traits. each |p| { visit_path( p. path, e, v) ; }
161
- do option:: iter( struct_def. ctor) |ctor| {
162
- visit_class_ctor_helper( ctor, i. ident, tps,
163
- ast_util:: local_def( i. id) , e, v) ;
164
- } ;
165
- do option:: iter( struct_def. dtor) |dtor| {
166
- visit_class_dtor_helper( dtor, tps,
167
- ast_util:: local_def( i. id) , e, v)
168
- } ;
160
+ v. visit_ty_params( tps, e, v) ;
161
+ v. visit_struct_def( struct_def, i. ident, tps, i. id, e, v) ;
169
162
}
170
163
item_trait( tps, traits, methods) => {
171
164
v. visit_ty_params( tps, e, v) ;
@@ -325,6 +318,20 @@ fn visit_trait_method<E>(m: trait_method, e: E, v: vt<E>) {
325
318
}
326
319
}
327
320
321
+ fn visit_struct_def < E > ( sd: struct_def, nm: ast:: ident, tps: ~[ ty_param] ,
322
+ id: node_id, e: E , v: vt < E > ) {
323
+ for sd. members. each |m| {
324
+ v. visit_class_item( m, e, v) ;
325
+ }
326
+ for sd. traits. each |p| { visit_path( p. path, e, v) ; }
327
+ do option:: iter( sd. ctor) |ctor| {
328
+ visit_class_ctor_helper( ctor, nm, tps, ast_util:: local_def( id) , e, v) ;
329
+ } ;
330
+ do option:: iter( sd. dtor) |dtor| {
331
+ visit_class_dtor_helper( dtor, tps, ast_util:: local_def( id) , e, v)
332
+ } ;
333
+ }
334
+
328
335
fn visit_block < E > ( b: ast:: blk, e: E , v: vt < E > ) {
329
336
for b. node. view_items. each |vi| { v. visit_view_item( vi, e, v) ; }
330
337
for b. node. stmts. each |s| { v. visit_stmt( s, e, v) ; }
@@ -472,6 +479,7 @@ type simple_visitor =
472
479
visit_fn: fn @( fn_kind, fn_decl, blk, span, node_id) ,
473
480
visit_ty_method: fn @( ty_method) ,
474
481
visit_trait_method: fn @( trait_method) ,
482
+ visit_struct_def: fn @( struct_def, ident, ~[ ty_param] , node_id) ,
475
483
visit_class_item: fn @( @class_member) } ;
476
484
477
485
fn simple_ignore_ty( _t: @ty) { }
@@ -495,6 +503,8 @@ fn default_simple_visitor() -> simple_visitor {
495
503
_id: node_id) { } ,
496
504
visit_ty_method: fn @( _m: ty_method) { } ,
497
505
visit_trait_method: fn @( _m: trait_method) { } ,
506
+ visit_struct_def: fn @( _sd: struct_def, _nm: ident,
507
+ _tps: ~[ ty_param] , _id: node_id) { } ,
498
508
visit_class_item: fn @( _c: @class_member) { }
499
509
} ;
500
510
}
@@ -562,6 +572,12 @@ fn mk_simple_visitor(v: simple_visitor) -> vt<()> {
562
572
f( m) ;
563
573
visit_trait_method( m, e, v) ;
564
574
}
575
+ fn v_struct_def( f: fn @( struct_def, ident, ~[ ty_param] , node_id) ,
576
+ sd: struct_def, nm: ident, tps: ~[ ty_param] , id: node_id,
577
+ &&e: ( ) , v: vt<( ) >) {
578
+ f( sd, nm, tps, id) ;
579
+ visit_struct_def( sd, nm, tps, id, e, v) ;
580
+ }
565
581
fn v_ty_params( f: fn @( ~[ ty_param] ) ,
566
582
ps: ~[ ty_param] ,
567
583
&&e: ( ) , v: vt<( ) >) {
@@ -609,6 +625,8 @@ fn mk_simple_visitor(v: simple_visitor) -> vt<()> {
609
625
v_ty_method( v. visit_ty_method, a, b, c) ,
610
626
visit_trait_method: |a, b, c|
611
627
v_trait_method( v. visit_trait_method, a, b, c) ,
628
+ visit_struct_def: |a, b, c, d, e, f|
629
+ v_struct_def( v. visit_struct_def, a, b, c, d, e, f) ,
612
630
visit_class_item: |a, b, c|
613
631
v_class_item( v. visit_class_item, a, b, c)
614
632
} ) ;
0 commit comments