| ... | @@ -201,7 +201,7 @@ class std_MultiArrayList_SynthProvider: | ... | @@ -201,7 +201,7 @@ class std_MultiArrayList_SynthProvider: |
| 201 | | 201 | |
| 202 | value_type = self.value.type | 202 | value_type = self.value.type |
| 203 | for helper in self.value.target.FindFunctions('%s.dbHelper' % value_type.name, lldb.eFunctionNameTypeFull): | 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 | if ptr_self_type.GetPointeeType() == value_type: break | 205 | if ptr_self_type.GetPointeeType() == value_type: break |
| 206 | else: return | 206 | else: return |
| 207 | | 207 | |
| ... | @@ -221,12 +221,44 @@ class std_MultiArrayList_SynthProvider: | ... | @@ -221,12 +221,44 @@ class std_MultiArrayList_SynthProvider: |
| 221 | offset = 0 | 221 | offset = 0 |
| 222 | data = lldb.SBData() | 222 | data = lldb.SBData() |
| 223 | for field in self.entry_type.fields: | 223 | for field in self.entry_type.fields: |
| 224 | ptr_field_type = field.type | 224 | field_type = field.type.GetPointeeType() |
| 225 | field_size = ptr_field_type.GetPointeeType().size | 225 | field_size = field_type.size |
| 226 | data.Append(self.bytes.CreateChildAtOffset(field.name, offset + index * field_size, ptr_field_type).address_of.data) | 226 | data.Append(self.bytes.CreateChildAtOffset(field.name, offset + index * field_size, field_type).address_of.data) |
| 227 | offset += self.capacity * field_size | 227 | offset += self.capacity * field_size |
| 228 | return self.bytes.CreateValueFromData('[%d]' % index, data, self.entry_type) | 228 | return self.bytes.CreateValueFromData('[%d]' % index, data, self.entry_type) |
| 229 | except: return None | 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 | class std_HashMapUnmanaged_SynthProvider: | 263 | class std_HashMapUnmanaged_SynthProvider: |
| 232 | def __init__(self, value, _=None): self.value = value | 264 | def __init__(self, value, _=None): self.value = value |
| ... | @@ -556,6 +588,7 @@ def __lldb_init_module(debugger, _=None): | ... | @@ -556,6 +588,7 @@ def __lldb_init_module(debugger, _=None): |
| 556 | add(debugger, category='zig.std', type='mem.Allocator', summary='${var.ptr}') | 588 | add(debugger, category='zig.std', type='mem.Allocator', summary='${var.ptr}') |
| 557 | add(debugger, category='zig.std', regex=True, type='^segmented_list\\.SegmentedList\\(.*\\)$', identifier='std_SegmentedList', synth=True, expand=True, summary='len=${var.len}') | 589 | add(debugger, category='zig.std', regex=True, type='^segmented_list\\.SegmentedList\\(.*\\)$', identifier='std_SegmentedList', synth=True, expand=True, summary='len=${var.len}') |
| 558 | 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}') | 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 | add(debugger, category='zig.std', regex=True, type=MultiArrayList_Entry('.*'), identifier='std_Entry', synth=True, inline_children=True, summary=True) | 592 | add(debugger, category='zig.std', regex=True, type=MultiArrayList_Entry('.*'), identifier='std_Entry', synth=True, inline_children=True, summary=True) |
| 560 | add(debugger, category='zig.std', regex=True, type='^hash_map\\.HashMapUnmanaged\\(.*\\)$', identifier='std_HashMapUnmanaged', synth=True, expand=True, summary=True) | 593 | add(debugger, category='zig.std', regex=True, type='^hash_map\\.HashMapUnmanaged\\(.*\\)$', identifier='std_HashMapUnmanaged', synth=True, expand=True, summary=True) |
| 561 | add(debugger, category='zig.std', regex=True, type='^hash_map\\.HashMapUnmanaged\\(.*\\)\\.Entry$', identifier = 'std_Entry', synth=True, inline_children=True, summary=True) | 594 | add(debugger, category='zig.std', regex=True, type='^hash_map\\.HashMapUnmanaged\\(.*\\)\\.Entry$', identifier = 'std_Entry', synth=True, inline_children=True, summary=True) |