@@ -91,6 +91,9 @@ pub trait TypeFoldable<'tcx>: fmt::Debug + Clone {
9191 fn needs_subst ( & self ) -> bool {
9292 self . has_type_flags ( TypeFlags :: NEEDS_SUBST )
9393 }
94+ fn has_re_skol ( & self ) -> bool {
95+ self . has_type_flags ( TypeFlags :: HAS_RE_SKOL )
96+ }
9497 fn has_closure_types ( & self ) -> bool {
9598 self . has_type_flags ( TypeFlags :: HAS_TY_CLOSURE )
9699 }
@@ -632,26 +635,15 @@ struct HasTypeFlagsVisitor {
632635
633636impl < ' tcx > TypeVisitor < ' tcx > for HasTypeFlagsVisitor {
634637 fn visit_ty ( & mut self , t : Ty ) -> bool {
635- t. flags . get ( ) . intersects ( self . flags )
638+ let flags = t. flags . get ( ) ;
639+ debug ! ( "HasTypeFlagsVisitor: t={:?} t.flags={:?} self.flags={:?}" , t, flags, self . flags) ;
640+ flags. intersects ( self . flags )
636641 }
637642
638643 fn visit_region ( & mut self , r : & ' tcx ty:: Region ) -> bool {
639- if self . flags . intersects ( ty:: TypeFlags :: HAS_LOCAL_NAMES ) {
640- // does this represent a region that cannot be named
641- // in a global way? used in fulfillment caching.
642- match * r {
643- ty:: ReStatic | ty:: ReEmpty | ty:: ReErased => { }
644- _ => return true ,
645- }
646- }
647- if self . flags . intersects ( ty:: TypeFlags :: HAS_RE_INFER |
648- ty:: TypeFlags :: KEEP_IN_LOCAL_TCX ) {
649- match * r {
650- ty:: ReVar ( _) | ty:: ReSkolemized ( ..) => { return true }
651- _ => { }
652- }
653- }
654- false
644+ let flags = r. type_flags ( ) ;
645+ debug ! ( "HasTypeFlagsVisitor: r={:?} r.flags={:?} self.flags={:?}" , r, flags, self . flags) ;
646+ flags. intersects ( self . flags )
655647 }
656648}
657649
0 commit comments