Skip to content

Commit

Permalink
Rollup merge of rust-lang#83920 - ortem:fix-hashmap-lldb-pretty-print…
Browse files Browse the repository at this point in the history
…er-1.52, r=pnkfelix

Fix HashMap/HashSet LLDB pretty-printer after hashbrown 0.11.0

The pretty-printer was broken in rust-lang#77566 after updating hashbrown to 0.11.0.
Note that the corresponding GDB pretty-printer was updated properly.

Fixes rust-lang#83891
  • Loading branch information
Dylan-DPC authored Apr 6, 2021
2 parents 2f57dc8 + 3d3a5ca commit 3d33818
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions src/etc/lldb_providers.py
Original file line number Diff line number Diff line change
Expand Up @@ -527,20 +527,22 @@ def get_child_at_index(self, index):
def update(self):
# type: () -> None
table = self.table()
capacity = table.GetChildMemberWithName("bucket_mask").GetValueAsUnsigned() + 1
ctrl = table.GetChildMemberWithName("ctrl").GetChildAtIndex(0)
inner_table = table.GetChildMemberWithName("table")

self.size = table.GetChildMemberWithName("items").GetValueAsUnsigned()
capacity = inner_table.GetChildMemberWithName("bucket_mask").GetValueAsUnsigned() + 1
ctrl = inner_table.GetChildMemberWithName("ctrl").GetChildAtIndex(0)

self.size = inner_table.GetChildMemberWithName("items").GetValueAsUnsigned()
self.pair_type = table.type.template_args[0]
if self.pair_type.IsTypedefType():
self.pair_type = self.pair_type.GetTypedefedType()
self.pair_type_size = self.pair_type.GetByteSize()

self.new_layout = not table.GetChildMemberWithName("data").IsValid()
self.new_layout = not inner_table.GetChildMemberWithName("data").IsValid()
if self.new_layout:
self.data_ptr = ctrl.Cast(self.pair_type.GetPointerType())
else:
self.data_ptr = table.GetChildMemberWithName("data").GetChildAtIndex(0)
self.data_ptr = inner_table.GetChildMemberWithName("data").GetChildAtIndex(0)

u8_type = self.valobj.GetTarget().GetBasicType(eBasicTypeUnsignedChar)
u8_type_size = self.valobj.GetTarget().GetBasicType(eBasicTypeUnsignedChar).GetByteSize()
Expand All @@ -563,7 +565,7 @@ def table(self):
# HashSet wraps either std HashMap or hashbrown::HashSet, which both
# wrap hashbrown::HashMap, so either way we "unwrap" twice.
hashbrown_hashmap = self.valobj.GetChildAtIndex(0).GetChildAtIndex(0)
return hashbrown_hashmap.GetChildMemberWithName("table").GetChildMemberWithName("table")
return hashbrown_hashmap.GetChildMemberWithName("table")

def has_children(self):
# type: () -> bool
Expand Down

0 comments on commit 3d33818

Please sign in to comment.