Rollup merge of #110465 - WaffleLapkin:assure_everyone_that_has_type_flags_is_fast, r=oli-obk
Assure everyone that `has_type_flags` is fast `number_of_people_who_tripped_on_this += 1` r? ``@oli-obk``
This commit is contained in:
commit
5606653f01
@ -33,6 +33,14 @@ pub trait TypeVisitableExt<'tcx>: TypeVisitable<TyCtxt<'tcx>> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn has_type_flags(&self, flags: TypeFlags) -> bool {
|
fn has_type_flags(&self, flags: TypeFlags) -> bool {
|
||||||
|
// N.B. Even though this uses a visitor, the visitor does not actually
|
||||||
|
// recurse through the whole `TypeVisitable` implementor type.
|
||||||
|
//
|
||||||
|
// Instead it stops on the first "level", visiting types, regions,
|
||||||
|
// consts and predicates just fetches their type flags.
|
||||||
|
//
|
||||||
|
// Thus this is a lot faster than it might seem and should be
|
||||||
|
// optimized to a simple field access.
|
||||||
let res =
|
let res =
|
||||||
self.visit_with(&mut HasTypeFlagsVisitor { flags }).break_value() == Some(FoundFlags);
|
self.visit_with(&mut HasTypeFlagsVisitor { flags }).break_value() == Some(FoundFlags);
|
||||||
trace!(?self, ?flags, ?res, "has_type_flags");
|
trace!(?self, ?flags, ?res, "has_type_flags");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user