about summary refs log tree commit diff
path: root/src/etc/gdb_providers.py
diff options
context:
space:
mode:
authorMatt Brubeck <mbrubeck@limpet.net>2020-08-10 16:19:54 -0700
committerMatt Brubeck <mbrubeck@limpet.net>2020-09-08 17:24:23 -0700
commitebd15e790aceeaacb01bdd5c4361c5b4be2db237 (patch)
tree3d365e241eaf9911ffcfcbe51340583719d8869d /src/etc/gdb_providers.py
parent15ccdeb2248f697c3873a60eea538110ed5b2f8f (diff)
downloadrust-ebd15e790aceeaacb01bdd5c4361c5b4be2db237.tar.gz
rust-ebd15e790aceeaacb01bdd5c4361c5b4be2db237.zip
Implement HashSet in terms of hashbrown::HashSet
Diffstat (limited to 'src/etc/gdb_providers.py')
-rw-r--r--src/etc/gdb_providers.py14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/etc/gdb_providers.py b/src/etc/gdb_providers.py
index 67f99ec4e40..bae51e6f9ee 100644
--- a/src/etc/gdb_providers.py
+++ b/src/etc/gdb_providers.py
@@ -347,7 +347,7 @@ class StdHashMapProvider:
         self.valobj = valobj
         self.show_values = show_values
 
-        table = self.valobj["base"]["table"]
+        table = self.table()
         capacity = int(table["bucket_mask"]) + 1
         ctrl = table["ctrl"]["pointer"]
 
@@ -368,6 +368,18 @@ class StdHashMapProvider:
             if is_presented:
                 self.valid_indices.append(idx)
 
+    def table(self):
+        if self.show_values:
+            hashbrown_hashmap = self.valobj["base"]
+        elif self.valobj.type.fields()[0].name == "map":
+            # BACKCOMPAT: rust 1.47
+            # HashSet wraps std::collections::HashMap, which wraps hashbrown::HashMap
+            hashbrown_hashmap = self.valobj["map"]["base"]
+        else:
+            # HashSet wraps hashbrown::HashSet, which wraps hashbrown::HashMap
+            hashbrown_hashmap = self.valobj["base"]["map"]
+        return hashbrown_hashmap["table"]
+
     def to_string(self):
         if self.show_values:
             return "HashMap(size={})".format(self.size)