| ... | ... | @@ -201,7 +201,7 @@ class std_MultiArrayList_SynthProvider: |
| 201 | 201 | |
| 202 | 202 | value_type = self.value.type |
| 203 | 203 | for helper in self.value.target.FindFunctions('%s.dbHelper' % value_type.name, lldb.eFunctionNameTypeFull): |
| 204 | | ptr_self_type, ptr_child_type, ptr_entry_type = helper.function.type.GetFunctionArgumentTypes() |
| 204 | ptr_self_type, ptr_child_type, ptr_field_type, ptr_entry_type = helper.function.type.GetFunctionArgumentTypes() |
| 205 | 205 | if ptr_self_type.GetPointeeType() == value_type: break |
| 206 | 206 | else: return |
| 207 | 207 | |
| ... | ... | @@ -221,12 +221,44 @@ class std_MultiArrayList_SynthProvider: |
| 221 | 221 | offset = 0 |
| 222 | 222 | data = lldb.SBData() |
| 223 | 223 | for field in self.entry_type.fields: |
| 224 | | ptr_field_type = field.type |
| 225 | | field_size = ptr_field_type.GetPointeeType().size |
| 226 | | data.Append(self.bytes.CreateChildAtOffset(field.name, offset + index * field_size, ptr_field_type).address_of.data) |
| 224 | field_type = field.type.GetPointeeType() |
| 225 | field_size = field_type.size |
| 226 | data.Append(self.bytes.CreateChildAtOffset(field.name, offset + index * field_size, field_type).address_of.data) |
| 227 | 227 | offset += self.capacity * field_size |
| 228 | 228 | return self.bytes.CreateValueFromData('[%d]' % index, data, self.entry_type) |
| 229 | 229 | except: return None |
| 230 | class std_MultiArrayList_Slice_SynthProvider: |
| 231 | def __init__(self, value, _=None): self.value = value |
| 232 | def update(self): |
| 233 | try: |
| 234 | self.len = 0 |
| 235 | |
| 236 | value_type = self.value.type |
| 237 | for helper in self.value.target.FindFunctions('%s.dbHelper' % value_type.name, lldb.eFunctionNameTypeFull): |
| 238 | ptr_self_type, ptr_child_type, ptr_field_type, ptr_entry_type = helper.function.type.GetFunctionArgumentTypes() |
| 239 | if ptr_self_type.GetPointeeType() == value_type: break |
| 240 | else: return |
| 241 | |
| 242 | self.fields = {member.name: index for index, member in enumerate(ptr_field_type.GetPointeeType().enum_members)} |
| 243 | self.entry_type = ptr_entry_type.GetPointeeType() |
| 244 | self.ptrs = self.value.GetChildMemberWithName('ptrs') |
| 245 | self.len = self.value.GetChildMemberWithName('len').unsigned |
| 246 | self.capacity = self.value.GetChildMemberWithName('capacity').unsigned |
| 247 | except: pass |
| 248 | def has_children(self): return True |
| 249 | def num_children(self): return self.len |
| 250 | def get_child_index(self, name): |
| 251 | try: return int(name.removeprefix('[').removesuffix(']')) |
| 252 | except: return -1 |
| 253 | def get_child_at_index(self, index): |
| 254 | try: |
| 255 | if index < 0 or index >= self.len: return None |
| 256 | data = lldb.SBData() |
| 257 | for field in self.entry_type.fields: |
| 258 | field_type = field.type.GetPointeeType() |
| 259 | data.Append(self.ptrs.child[self.fields[field.name.removesuffix('_ptr')]].CreateChildAtOffset(field.name, index * field_type.size, field_type).address_of.data) |
| 260 | return self.ptrs.CreateValueFromData('[%d]' % index, data, self.entry_type) |
| 261 | except: return None |
| 230 | 262 | |
| 231 | 263 | class std_HashMapUnmanaged_SynthProvider: |
| 232 | 264 | def __init__(self, value, _=None): self.value = value |
| ... | ... | @@ -556,6 +588,7 @@ def __lldb_init_module(debugger, _=None): |
| 556 | 588 | add(debugger, category='zig.std', type='mem.Allocator', summary='${var.ptr}') |
| 557 | 589 | add(debugger, category='zig.std', regex=True, type='^segmented_list\\.SegmentedList\\(.*\\)$', identifier='std_SegmentedList', synth=True, expand=True, summary='len=${var.len}') |
| 558 | 590 | add(debugger, category='zig.std', regex=True, type='^multi_array_list\\.MultiArrayList\\(.*\\)$', identifier='std_MultiArrayList', synth=True, expand=True, summary='len=${var.len} capacity=${var.capacity}') |
| 591 | add(debugger, category='zig.std', regex=True, type='^multi_array_list\\.MultiArrayList\\(.*\\)\\.Slice$', identifier='std_MultiArrayList_Slice', synth=True, expand=True, summary='len=${var.len} capacity=${var.capacity}') |
| 559 | 592 | add(debugger, category='zig.std', regex=True, type=MultiArrayList_Entry('.*'), identifier='std_Entry', synth=True, inline_children=True, summary=True) |
| 560 | 593 | add(debugger, category='zig.std', regex=True, type='^hash_map\\.HashMapUnmanaged\\(.*\\)$', identifier='std_HashMapUnmanaged', synth=True, expand=True, summary=True) |
| 561 | 594 | add(debugger, category='zig.std', regex=True, type='^hash_map\\.HashMapUnmanaged\\(.*\\)\\.Entry$', identifier = 'std_Entry', synth=True, inline_children=True, summary=True) |