diff options
author | Marc Poulhiès <dkm@kataplop.net> | 2021-08-11 23:15:25 +0200 |
---|---|---|
committer | Marc <dkm@kataplop.net> | 2021-08-12 11:17:58 +0200 |
commit | da72de4d8929608b064b486312ca8dd80cce47a4 (patch) | |
tree | decb6e01d0db2bb940bfc11fcf61e6de0fdf5eb8 /gcc | |
parent | a0ba86c3bef853ff8a0c282c10c3e0cb1811a507 (diff) | |
download | gcc-da72de4d8929608b064b486312ca8dd80cce47a4.zip gcc-da72de4d8929608b064b486312ca8dd80cce47a4.tar.gz gcc-da72de4d8929608b064b486312ca8dd80cce47a4.tar.bz2 |
Change name resolver's iterate_* functions to allow early exit
The callback now returns a bool for continuing the iteration (true) or stopping
it (false).
Fixed the scanning for unused names without changing its behavior (always doing
full iteration).
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve-unused.h | 9 | ||||
-rw-r--r-- | gcc/rust/resolve/rust-name-resolver.h | 15 |
2 files changed, 14 insertions, 10 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve-unused.h b/gcc/rust/resolve/rust-ast-resolve-unused.h index 18d02a1..b8b50a0 100644 --- a/gcc/rust/resolve/rust-ast-resolve-unused.h +++ b/gcc/rust/resolve/rust-ast-resolve-unused.h @@ -27,7 +27,7 @@ namespace Resolver { class ScanUnused { public: - static void ScanRib (Rib *r) + static bool ScanRib (Rib *r) { r->iterate_decls ([&] (NodeId decl_node_id, Location locus) -> bool { CanonicalPath ident = CanonicalPath::create_empty (); @@ -43,14 +43,15 @@ public: } return true; }); + return true; } static void Scan () { auto resolver = Resolver::get (); - resolver->iterate_name_ribs ([&] (Rib *r) -> void { ScanRib (r); }); - resolver->iterate_type_ribs ([&] (Rib *r) -> void { ScanRib (r); }); - resolver->iterate_label_ribs ([&] (Rib *r) -> void { ScanRib (r); }); + resolver->iterate_name_ribs ([&] (Rib *r) -> bool { return ScanRib (r); }); + resolver->iterate_type_ribs ([&] (Rib *r) -> bool { return ScanRib (r); }); + resolver->iterate_label_ribs ([&] (Rib *r) -> bool { return ScanRib (r); }); } }; diff --git a/gcc/rust/resolve/rust-name-resolver.h b/gcc/rust/resolve/rust-name-resolver.h index 1b26a46..6fac3d3 100644 --- a/gcc/rust/resolve/rust-name-resolver.h +++ b/gcc/rust/resolve/rust-name-resolver.h @@ -335,27 +335,30 @@ public: return it->second.size (); } - void iterate_name_ribs (std::function<void (Rib *)> cb) + void iterate_name_ribs (std::function<bool (Rib *)> cb) { for (auto it = name_ribs.begin (); it != name_ribs.end (); it++) - cb (it->second); + if (!cb (it->second)) + break; } - void iterate_type_ribs (std::function<void (Rib *)> cb) + void iterate_type_ribs (std::function<bool (Rib *)> cb) { for (auto it = type_ribs.begin (); it != type_ribs.end (); it++) { if (it->first == global_type_node_id) continue; - cb (it->second); + if (!cb (it->second)) + break; } } - void iterate_label_ribs (std::function<void (Rib *)> cb) + void iterate_label_ribs (std::function<bool (Rib *)> cb) { for (auto it = label_ribs.begin (); it != label_ribs.end (); it++) - cb (it->second); + if (!cb (it->second)) + break; } private: |