From: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>

It might be necessary to compare both name resolution' internal states
during the transition. This new debug representation could help with
that.

gcc/rust/ChangeLog:

        * resolve/rust-name-resolver.h: Add new degug dump for old name
        resolver.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>
---
 gcc/rust/resolve/rust-name-resolver.h | 35 +++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/gcc/rust/resolve/rust-name-resolver.h 
b/gcc/rust/resolve/rust-name-resolver.h
index 43b79e51005..a3b34a9f160 100644
--- a/gcc/rust/resolve/rust-name-resolver.h
+++ b/gcc/rust/resolve/rust-name-resolver.h
@@ -204,6 +204,41 @@ public:
   void insert_captured_item (NodeId id);
   const std::set<NodeId> &get_captures (NodeId id) const;
 
+  std::string as_debug_string () const
+  {
+    std::stringstream ss;
+
+    ss << "Names:\n";
+    for (auto &n : name_ribs)
+      {
+       ss << "\tNodeID: " << n.first << " Rib: " << n.second->debug_str ()
+          << "\n";
+      }
+    ss << "Types:\n";
+    for (auto &n : type_ribs)
+      {
+       ss << "\tNodeID: " << n.first << " Rib: " << n.second->debug_str ()
+          << "\n";
+      }
+    ss << "Macros:\n";
+
+    for (auto &n : macro_ribs)
+      {
+       ss << "\tNodeID: " << n.first << " Rib: " << n.second->debug_str ()
+          << "\n";
+      }
+
+    ss << "Labels:\n";
+
+    for (auto &n : label_ribs)
+      {
+       ss << "\tNodeID: " << n.first << " Rib: " << n.second->debug_str ()
+          << "\n";
+      }
+
+    return ss.str ();
+  }
+
 protected:
   bool decl_needs_capture (NodeId decl_rib_node_id, NodeId closure_rib_node_id,
                           const Scope &scope);
-- 
2.45.2

Reply via email to