Skip to content

Commit 949953d

Browse files
Merge #7059
7059: Update HashMap/HashSet pretty-printers to Rust 1.52 r=Undin a=ortem The corresponding PRs in rustc: rust-lang/rust#77566 rust-lang/rust#83920 Fixes #7045 changelog: Update LLDB/GDB pretty-printers to render `HashMap`/`HashSet` on Rust 1.52 or higher Co-authored-by: ortem <ortem00@gmail.com>
2 parents 2d80f50 + e78fbe5 commit 949953d

File tree

3 files changed

+22
-11
lines changed

3 files changed

+22
-11
lines changed

prettyPrinters/gdb_providers.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -337,17 +337,23 @@ def __init__(self, valobj, show_values=True):
337337
self.show_values = show_values
338338

339339
table = self.table()
340-
capacity = int(table["bucket_mask"]) + 1
341-
ctrl = table["ctrl"]["pointer"]
340+
# BACKCOMPAT: rust 1.51. Just drop `else` branch
341+
if table.type.fields()[0].name == "table":
342+
inner_table = table["table"]
343+
else:
344+
inner_table = table
345+
346+
capacity = int(inner_table["bucket_mask"]) + 1
347+
ctrl = inner_table["ctrl"]["pointer"]
342348

343-
self.size = int(table["items"])
349+
self.size = int(inner_table["items"])
344350
self.pair_type = table.type.template_argument(0).strip_typedefs()
345351

346-
self.new_layout = "data" not in table.type
352+
self.new_layout = "data" not in inner_table.type
347353
if self.new_layout:
348354
self.data_ptr = ctrl.cast(self.pair_type.pointer())
349355
else:
350-
self.data_ptr = table["data"]["pointer"]
356+
self.data_ptr = inner_table["data"]["pointer"]
351357

352358
self.valid_indices = []
353359
for idx in range(capacity):

prettyPrinters/lldb_providers.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -377,18 +377,24 @@ def get_child_at_index(self, index):
377377
def update(self):
378378
# type: () -> None
379379
table = self.table()
380-
capacity = table.GetChildMemberWithName("bucket_mask").GetValueAsUnsigned() + 1
381-
ctrl = table.GetChildMemberWithName("ctrl").GetChildAtIndex(0)
380+
# BACKCOMPAT: rust 1.51. Just drop `else` branch
381+
if table.GetChildMemberWithName("table").IsValid():
382+
inner_table = table.GetChildMemberWithName("table")
383+
else:
384+
inner_table = table
385+
386+
capacity = inner_table.GetChildMemberWithName("bucket_mask").GetValueAsUnsigned() + 1
387+
ctrl = inner_table.GetChildMemberWithName("ctrl").GetChildAtIndex(0)
382388

383-
self.size = table.GetChildMemberWithName("items").GetValueAsUnsigned()
389+
self.size = inner_table.GetChildMemberWithName("items").GetValueAsUnsigned()
384390
self.pair_type = table.type.template_args[0].GetTypedefedType()
385391
self.pair_type_size = self.pair_type.GetByteSize()
386392

387-
self.new_layout = not table.GetChildMemberWithName("data").IsValid()
393+
self.new_layout = not inner_table.GetChildMemberWithName("data").IsValid()
388394
if self.new_layout:
389395
self.data_ptr = ctrl.Cast(self.pair_type.GetPointerType())
390396
else:
391-
self.data_ptr = table.GetChildMemberWithName("data").GetChildAtIndex(0)
397+
self.data_ptr = inner_table.GetChildMemberWithName("data").GetChildAtIndex(0)
392398

393399
u8_type = self.valobj.GetTarget().GetBasicType(eBasicTypeUnsignedChar)
394400
u8_type_size = self.valobj.GetTarget().GetBasicType(eBasicTypeUnsignedChar).GetByteSize()

pretty_printers_tests/tests/hash_map.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
// min-version: 1.33.0
2-
// max-version: 1.51.0
32

43
// === LLDB TESTS ==================================================================================
54

0 commit comments

Comments
 (0)