diff options
Diffstat (limited to 'gcc/rust/resolve')
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve-item.h | 4 | ||||
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve-unused.h | 11 | ||||
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve.cc | 7 | ||||
-rw-r--r-- | gcc/rust/resolve/rust-name-resolver.h | 17 |
4 files changed, 26 insertions, 13 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve-item.h b/gcc/rust/resolve/rust-ast-resolve-item.h index 74b5f8d..cc8e451 100644 --- a/gcc/rust/resolve/rust-ast-resolve-item.h +++ b/gcc/rust/resolve/rust-ast-resolve-item.h @@ -24,7 +24,6 @@ #include "rust-ast-resolve-type.h" #include "rust-ast-resolve-pattern.h" #include "rust-ast-resolve-stmt.h" -#include "rust-ast-resolve-unused.h" namespace Rust { namespace Resolver { @@ -110,9 +109,6 @@ public: ResolveExpr::go (function.get_definition ().get (), function.get_node_id ()); - ScanUnused::Scan (resolver->get_name_scope ().peek ()); - ScanUnused::Scan (resolver->get_type_scope ().peek ()); - resolver->get_name_scope ().pop (); resolver->get_type_scope ().pop (); } diff --git a/gcc/rust/resolve/rust-ast-resolve-unused.h b/gcc/rust/resolve/rust-ast-resolve-unused.h index 08b2db1..928cf11 100644 --- a/gcc/rust/resolve/rust-ast-resolve-unused.h +++ b/gcc/rust/resolve/rust-ast-resolve-unused.h @@ -24,10 +24,10 @@ namespace Rust { namespace Resolver { -class ScanUnused : public ResolverBase +class ScanUnused { public: - static void Scan (Rib *r) + static void ScanRib (Rib *r) { r->iterate_decls ([&] (NodeId decl_node_id, Location locus) -> bool { if (!r->have_references_for_node (decl_node_id)) @@ -37,6 +37,13 @@ public: 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); }); + } }; } // namespace Resolver diff --git a/gcc/rust/resolve/rust-ast-resolve.cc b/gcc/rust/resolve/rust-ast-resolve.cc index fd49720..593a732 100644 --- a/gcc/rust/resolve/rust-ast-resolve.cc +++ b/gcc/rust/resolve/rust-ast-resolve.cc @@ -22,7 +22,6 @@ #include "rust-ast-resolve-toplevel.h" #include "rust-ast-resolve-item.h" #include "rust-ast-resolve-expr.h" -#include "rust-ast-resolve-unused.h" #define MKBUILTIN_TYPE(_X, _R, _TY) \ do \ @@ -284,9 +283,6 @@ NameResolution::go (AST::Crate &crate) // next we can drill down into the items and their scopes for (auto it = crate.items.begin (); it != crate.items.end (); it++) ResolveItem::go (it->get ()); - - ScanUnused::Scan (resolver->get_name_scope ().peek ()); - ScanUnused::Scan (resolver->get_type_scope ().peek ()); } // rust-ast-resolve-expr.h @@ -308,9 +304,6 @@ ResolveExpr::visit (AST::BlockExpr &expr) if (expr.has_tail_expr ()) ResolveExpr::go (expr.get_tail_expr ().get (), expr.get_node_id ()); - ScanUnused::Scan (resolver->get_name_scope ().peek ()); - ScanUnused::Scan (resolver->get_type_scope ().peek ()); - resolver->get_name_scope ().pop (); resolver->get_type_scope ().pop (); } diff --git a/gcc/rust/resolve/rust-name-resolver.h b/gcc/rust/resolve/rust-name-resolver.h index f22eba7..5544f30 100644 --- a/gcc/rust/resolve/rust-name-resolver.h +++ b/gcc/rust/resolve/rust-name-resolver.h @@ -290,6 +290,23 @@ public: return it->second.size (); } + void iterate_name_ribs (std::function<void (Rib *)> cb) + { + for (auto it = name_ribs.begin (); it != name_ribs.end (); it++) + cb (it->second); + } + + void iterate_type_ribs (std::function<void (Rib *)> cb) + { + for (auto it = type_ribs.begin (); it != type_ribs.end (); it++) + { + if (it->first == global_type_node_id) + continue; + + cb (it->second); + } + } + private: Resolver (); |