[ty] Improve performance of subtyping and assignability checks for protocols (#19824)

This commit is contained in:
Micha Reiser 2025-08-08 13:05:12 +02:00 committed by GitHub
parent fc72ff4a94
commit fd35435281
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -47,16 +47,19 @@ impl<T: Hash + Eq + Copy, R: Copy> CycleDetector<T, R> {
}
pub(crate) fn visit(&mut self, item: T, func: impl FnOnce(&mut Self) -> R) -> R {
if let Some(ty) = self.cache.get(&item) {
return *ty;
}
// We hit a cycle
if !self.seen.insert(item) {
return self.fallback;
}
if let Some(ty) = self.cache.get(&item) {
self.seen.pop();
return *ty;
}
let ret = func(self);
self.cache.insert(item, ret);
self.seen.pop();
self.cache.insert(item, ret);
ret
}
}