@@ -52,6 +52,7 @@ type visitor<E> =
52
52
visit_decl : fn @( @decl , E , vt < E > ) ,
53
53
visit_expr : fn @( @expr, E , vt < E > ) ,
54
54
visit_ty : fn @( @ty, E , vt < E > ) ,
55
+ visit_ty_params : fn @( [ ty_param ] , E , vt < E > ) ,
55
56
visit_constr : fn @( @path, span , node_id , E , vt < E > ) ,
56
57
visit_fn : fn @( fn_kind , fn_decl , blk , span , node_id , E , vt < E > ) } ;
57
58
@@ -68,6 +69,7 @@ fn default_visitor<E>() -> visitor<E> {
68
69
visit_decl : bind visit_decl :: < E > ( _, _, _) ,
69
70
visit_expr : bind visit_expr :: < E > ( _, _, _) ,
70
71
visit_ty : bind skip_ty :: < E > ( _, _, _) ,
72
+ visit_ty_params : bind visit_ty_params :: < E > ( _, _, _) ,
71
73
visit_constr : bind visit_constr :: < E > ( _, _, _, _, _) ,
72
74
visit_fn : bind visit_fn :: < E > ( _, _, _, _, _, _, _) } ;
73
75
}
@@ -113,27 +115,27 @@ fn visit_item<E>(i: @item, e: E, v: vt<E>) {
113
115
for vi: @view_item in nm. view_items { v. visit_view_item ( vi, e, v) ; }
114
116
for ni: @native_item in nm. items { v. visit_native_item ( ni, e, v) ; }
115
117
}
116
- item_ty ( t, tps) { v. visit_ty ( t, e, v) ; visit_ty_params ( tps, e, v) ; }
118
+ item_ty ( t, tps) { v. visit_ty ( t, e, v) ; v . visit_ty_params ( tps, e, v) ; }
117
119
item_res ( decl, tps, body, dtor_id, _) {
118
120
v. visit_fn ( fk_res ( i. ident , tps) , decl, body, i. span ,
119
121
dtor_id, e, v) ;
120
122
}
121
123
item_tag ( variants, tps) {
122
- visit_ty_params ( tps, e, v) ;
124
+ v . visit_ty_params ( tps, e, v) ;
123
125
for vr: variant in variants {
124
126
for va: variant_arg in vr. node . args { v. visit_ty ( va. ty , e, v) ; }
125
127
}
126
128
}
127
129
item_obj ( ob, tps, _) {
128
- visit_ty_params ( tps, e, v) ;
130
+ v . visit_ty_params ( tps, e, v) ;
129
131
for f: obj_field in ob. fields { v. visit_ty ( f. ty , e, v) ; }
130
132
for m: @method in ob. methods {
131
133
v. visit_fn ( fk_method ( m. ident , m. tps ) , m. decl , m. body , m. span ,
132
134
m. id , e, v) ;
133
135
}
134
136
}
135
137
item_impl ( tps, ifce, ty, methods) {
136
- visit_ty_params ( tps, e, v) ;
138
+ v . visit_ty_params ( tps, e, v) ;
137
139
alt ifce { some( ty) { v. visit_ty ( ty, e, v) ; } _ { } }
138
140
v. visit_ty ( ty, e, v) ;
139
141
for m in methods {
@@ -142,7 +144,7 @@ fn visit_item<E>(i: @item, e: E, v: vt<E>) {
142
144
}
143
145
}
144
146
item_iface ( tps, methods) {
145
- visit_ty_params ( tps, e, v) ;
147
+ v . visit_ty_params ( tps, e, v) ;
146
148
for m in methods {
147
149
for a in m. decl . inputs { v. visit_ty ( a. ty , e, v) ; }
148
150
v. visit_ty ( m. decl . output , e, v) ;
@@ -217,7 +219,7 @@ fn visit_pat<E>(p: @pat, e: E, v: vt<E>) {
217
219
fn visit_native_item < E > ( ni : @native_item , e : E , v : vt < E > ) {
218
220
alt ni. node {
219
221
native_item_fn ( fd, tps) {
220
- visit_ty_params ( tps, e, v) ;
222
+ v . visit_ty_params ( tps, e, v) ;
221
223
visit_fn_decl ( fd, e, v) ;
222
224
}
223
225
native_item_ty. { }
@@ -246,7 +248,7 @@ fn visit_fn_decl<E>(fd: fn_decl, e: E, v: vt<E>) {
246
248
fn visit_fn < E > ( fk : fn_kind , decl : fn_decl , body : blk , _sp : span ,
247
249
_id : node_id , e : E , v : vt < E > ) {
248
250
visit_fn_decl ( decl, e, v) ;
249
- visit_ty_params ( tps_of_fn ( fk) , e, v) ;
251
+ v . visit_ty_params ( tps_of_fn ( fk) , e, v) ;
250
252
v. visit_block ( body, e, v) ;
251
253
}
252
254
@@ -414,6 +416,7 @@ type simple_visitor =
414
416
visit_decl: fn @( @decl) ,
415
417
visit_expr: fn @( @expr) ,
416
418
visit_ty: fn @( @ty) ,
419
+ visit_ty_params: fn @( [ ty_param] ) ,
417
420
visit_constr: fn @( @path, span, node_id) ,
418
421
visit_fn: fn @( fn_kind, fn_decl, blk, span, node_id) } ;
419
422
@@ -432,6 +435,7 @@ fn default_simple_visitor() -> simple_visitor {
432
435
visit_decl: fn ( _d: @decl) { } ,
433
436
visit_expr: fn ( _e: @expr) { } ,
434
437
visit_ty: simple_ignore_ty,
438
+ visit_ty_params: fn ( _ps: [ ty_param] ) { } ,
435
439
visit_constr: fn ( _p: @path, _sp: span, _id: node_id) { } ,
436
440
visit_fn: fn ( _fk: fn_kind, _d: fn_decl, _b: blk, _sp: span,
437
441
_id: node_id) { }
@@ -488,6 +492,10 @@ fn mk_simple_visitor(v: simple_visitor) -> vt<()> {
488
492
f( ty) ;
489
493
visit_ty( ty, e, v) ;
490
494
}
495
+ fn v_ty_params( f: fn @( [ ty_param] ) , ps: [ ty_param] , &&e: ( ) , v: vt<( ) >) {
496
+ f( ps) ;
497
+ visit_ty_params( ps, e, v) ;
498
+ }
491
499
fn v_constr( f: fn @( @path, span, node_id) , pt: @path, sp: span,
492
500
id: node_id, &&e: ( ) , v: vt<( ) >) {
493
501
f( pt, sp, id) ;
@@ -517,6 +525,7 @@ fn mk_simple_visitor(v: simple_visitor) -> vt<()> {
517
525
visit_decl: bind v_decl( v. visit_decl, _, _, _) ,
518
526
visit_expr: bind v_expr( v. visit_expr, _, _, _) ,
519
527
visit_ty: visit_ty,
528
+ visit_ty_params: bind v_ty_params( v. visit_ty_params, _, _, _) ,
520
529
visit_constr: bind v_constr( v. visit_constr, _, _, _, _, _) ,
521
530
visit_fn: bind v_fn( v. visit_fn, _, _, _, _, _, _, _)
522
531
} ) ;
0 commit comments