@@ -37,7 +37,7 @@ export expr_ty_params_and_ty;
3737export expr_is_lval;
3838export field_ty;
3939export fold_ty, fold_sty_to_ty, fold_region, fold_regions, fold_ty_var;
40- export fold_regions_and_ty;
40+ export fold_regions_and_ty, walk_regions_and_ty ;
4141export field;
4242export field_idx;
4343export get_field;
@@ -97,7 +97,7 @@ export ty_tup, mk_tup;
9797export ty_type, mk_type;
9898export ty_uint, mk_uint, mk_mach_uint;
9999export ty_uniq, mk_uniq, mk_imm_uniq, type_is_unique_box;
100- export ty_var, mk_var;
100+ export ty_var, mk_var, type_is_var ;
101101export ty_self, mk_self;
102102export region, bound_region;
103103export get, type_has_params, type_has_vars, type_has_regions;
@@ -818,6 +818,21 @@ fn fold_ty_var(cx: ctxt, t0: t, fldop: fn(ty_vid) -> t) -> t {
818818 }
819819}
820820
821+ fn walk_regions_and_ty(
822+ cx: ctxt,
823+ ty: t,
824+ walkr: fn ( r: region) ,
825+ walkt: fn ( t: t) -> bool) {
826+
827+ if ( walkt( ty) ) {
828+ fold_regions_and_ty(
829+ cx, ty,
830+ { |r| walkr( r) ; r } ,
831+ { |t| walkt( t) ; walk_regions_and_ty( cx, t, walkr, walkt) ; t } ,
832+ { |t| walkt( t) ; walk_regions_and_ty( cx, t, walkr, walkt) ; t } ) ;
833+ }
834+ }
835+
821836fn fold_regions_and_ty(
822837 cx: ctxt,
823838 ty: t,
@@ -1000,6 +1015,13 @@ fn type_is_nil(ty: t) -> bool { get(ty).struct == ty_nil }
10001015
10011016fn type_is_bot( ty: t) -> bool { get( ty) . struct == ty_bot }
10021017
1018+ fn type_is_var( ty: t) -> bool {
1019+ alt get( ty) . struct {
1020+ ty_var( _) { true }
1021+ _ { false }
1022+ }
1023+ }
1024+
10031025fn type_is_bool( ty: t) -> bool { get( ty) . struct == ty_bool }
10041026
10051027fn type_is_structural( ty: t) -> bool {
0 commit comments