| ... | @@ -115,7 +115,7 @@ class zig_Slice_SynthProvider: | ... | @@ -115,7 +115,7 @@ class zig_Slice_SynthProvider: |
| 115 | try: return int(name.removeprefix('[').removesuffix(']')) | 115 | try: return int(name.removeprefix('[').removesuffix(']')) |
| 116 | except: return -1 | 116 | except: return -1 |
| 117 | def get_child_at_index(self, index): | 117 | def get_child_at_index(self, index): |
| 118 | if index < 0 or index >= self.len: return None | 118 | if index not in range(self.len): return None |
| 119 | try: return self.ptr.CreateChildAtOffset('[%d]' % index, index * self.elem_size, self.elem_type) | 119 | try: return self.ptr.CreateChildAtOffset('[%d]' % index, index * self.elem_size, self.elem_type) |
| 120 | except: return None | 120 | except: return None |
| 121 | | 121 | |
| ... | @@ -176,7 +176,7 @@ class zig_TaggedUnion_SynthProvider: | ... | @@ -176,7 +176,7 @@ class zig_TaggedUnion_SynthProvider: |
| 176 | def get_child_index(self, name): | 176 | def get_child_index(self, name): |
| 177 | try: return ('tag', 'payload').index(name) | 177 | try: return ('tag', 'payload').index(name) |
| 178 | except: return -1 | 178 | except: return -1 |
| 179 | def get_child_at_index(self, index): return (self.tag, self.payload)[index] if index >= 0 and index < 2 else None | 179 | def get_child_at_index(self, index): return (self.tag, self.payload)[index] if index in range(2) else None |
| 180 | | 180 | |
| 181 | # Define Zig Standard Library | 181 | # Define Zig Standard Library |
| 182 | | 182 | |
| ... | @@ -196,7 +196,7 @@ class std_SegmentedList_SynthProvider: | ... | @@ -196,7 +196,7 @@ class std_SegmentedList_SynthProvider: |
| 196 | except: return -1 | 196 | except: return -1 |
| 197 | def get_child_at_index(self, index): | 197 | def get_child_at_index(self, index): |
| 198 | try: | 198 | try: |
| 199 | if index < 0 or index >= self.len: return None | 199 | if index not in range(self.len): return None |
| 200 | prealloc_item_count = len(self.prealloc_segment) | 200 | prealloc_item_count = len(self.prealloc_segment) |
| 201 | if index < prealloc_item_count: return self.prealloc_segment.child[index] | 201 | if index < prealloc_item_count: return self.prealloc_segment.child[index] |
| 202 | prealloc_exp = prealloc_item_count.bit_length() - 1 | 202 | prealloc_exp = prealloc_item_count.bit_length() - 1 |
| ... | @@ -231,7 +231,7 @@ class std_MultiArrayList_SynthProvider: | ... | @@ -231,7 +231,7 @@ class std_MultiArrayList_SynthProvider: |
| 231 | except: return -1 | 231 | except: return -1 |
| 232 | def get_child_at_index(self, index): | 232 | def get_child_at_index(self, index): |
| 233 | try: | 233 | try: |
| 234 | if index < 0 or index >= self.len: return None | 234 | if index not in range(self.len): return None |
| 235 | offset = 0 | 235 | offset = 0 |
| 236 | data = lldb.SBData() | 236 | data = lldb.SBData() |
| 237 | for field in self.entry_type.fields: | 237 | for field in self.entry_type.fields: |
| ... | @@ -266,7 +266,7 @@ class std_MultiArrayList_Slice_SynthProvider: | ... | @@ -266,7 +266,7 @@ class std_MultiArrayList_Slice_SynthProvider: |
| 266 | except: return -1 | 266 | except: return -1 |
| 267 | def get_child_at_index(self, index): | 267 | def get_child_at_index(self, index): |
| 268 | try: | 268 | try: |
| 269 | if index < 0 or index >= self.len: return None | 269 | if index not in range(self.len): return None |
| 270 | data = lldb.SBData() | 270 | data = lldb.SBData() |
| 271 | for field in self.entry_type.fields: | 271 | for field in self.entry_type.fields: |
| 272 | field_type = field.type.GetPointeeType() | 272 | field_type = field.type.GetPointeeType() |
| ... | @@ -328,7 +328,7 @@ class std_Entry_SynthProvider: | ... | @@ -328,7 +328,7 @@ class std_Entry_SynthProvider: |
| 328 | def has_children(self): return self.num_children() != 0 | 328 | def has_children(self): return self.num_children() != 0 |
| 329 | def num_children(self): return len(self.children) | 329 | def num_children(self): return len(self.children) |
| 330 | def get_child_index(self, name): return self.indices.get(name) | 330 | def get_child_index(self, name): return self.indices.get(name) |
| 331 | def get_child_at_index(self, index): return self.children[index].deref if index >= 0 and index < len(self.children) else None | 331 | def get_child_at_index(self, index): return self.children[index].deref if index in range(len(self.children)) else None |
| 332 | | 332 | |
| 333 | # Define Zig Stage2 Compiler | 333 | # Define Zig Stage2 Compiler |
| 334 | | 334 | |
| ... | @@ -345,7 +345,7 @@ class TagAndPayload_SynthProvider: | ... | @@ -345,7 +345,7 @@ class TagAndPayload_SynthProvider: |
| 345 | def get_child_index(self, name): | 345 | def get_child_index(self, name): |
| 346 | try: return ('tag', 'payload').index(name) | 346 | try: return ('tag', 'payload').index(name) |
| 347 | except: return -1 | 347 | except: return -1 |
| 348 | def get_child_at_index(self, index): return (self.tag, self.payload)[index] if index >= 0 and index < 2 else None | 348 | def get_child_at_index(self, index): return (self.tag, self.payload)[index] if index in range(2) else None |
| 349 | | 349 | |
| 350 | def Inst_Ref_SummaryProvider(value, _=None): | 350 | def Inst_Ref_SummaryProvider(value, _=None): |
| 351 | members = value.type.enum_members | 351 | members = value.type.enum_members |
| ... | @@ -392,7 +392,7 @@ class TagOrPayloadPtr_SynthProvider: | ... | @@ -392,7 +392,7 @@ class TagOrPayloadPtr_SynthProvider: |
| 392 | def get_child_index(self, name): | 392 | def get_child_index(self, name): |
| 393 | try: return ('tag', 'payload').index(name) | 393 | try: return ('tag', 'payload').index(name) |
| 394 | except: return -1 | 394 | except: return -1 |
| 395 | def get_child_at_index(self, index): return (self.tag, self.payload)[index] if index >= 0 and index < 2 else None | 395 | def get_child_at_index(self, index): return (self.tag, self.payload)[index] if index in range(2) else None |
| 396 | | 396 | |
| 397 | def Module_Decl_name(decl): | 397 | def Module_Decl_name(decl): |
| 398 | error = lldb.SBError() | 398 | error = lldb.SBError() |
| ... | @@ -407,6 +407,71 @@ def Module_Decl_RenderFullyQualifiedName(decl): return '.'.join((Module_Namespac | ... | @@ -407,6 +407,71 @@ def Module_Decl_RenderFullyQualifiedName(decl): return '.'.join((Module_Namespac |
| 407 | | 407 | |
| 408 | def OwnerDecl_RenderFullyQualifiedName(payload): return Module_Decl_RenderFullyQualifiedName(payload.GetChildMemberWithName('owner_decl').GetChildMemberWithName('decl')) | 408 | def OwnerDecl_RenderFullyQualifiedName(payload): return Module_Decl_RenderFullyQualifiedName(payload.GetChildMemberWithName('owner_decl').GetChildMemberWithName('decl')) |
| 409 | | 409 | |
| | 410 | def InternPool_Find(thread): |
| | 411 | for frame in thread: |
| | 412 | ip = frame.FindVariable('ip') or frame.FindVariable('intern_pool') |
| | 413 | if ip: return ip |
| | 414 | mod = frame.FindVariable('mod') or frame.FindVariable('module') |
| | 415 | if mod: |
| | 416 | ip = mod.GetChildMemberWithName('intern_pool') |
| | 417 | if ip: return ip |
| | 418 | |
| | 419 | class InternPool_Index_SynthProvider: |
| | 420 | def __init__(self, value, _=None): self.value = value |
| | 421 | def update(self): |
| | 422 | try: |
| | 423 | index_type = self.value.type |
| | 424 | for helper in self.value.target.FindFunctions('%s.dbHelper' % index_type.name, lldb.eFunctionNameTypeFull): |
| | 425 | ptr_self_type, ptr_tag_to_encoding_map_type = helper.function.type.GetFunctionArgumentTypes() |
| | 426 | if ptr_self_type.GetPointeeType() == index_type: break |
| | 427 | else: return |
| | 428 | tag_to_encoding_map = {field.name: field.type for field in ptr_tag_to_encoding_map_type.GetPointeeType().fields} |
| | 429 | |
| | 430 | ip = InternPool_Find(self.value.thread) |
| | 431 | if not ip: return |
| | 432 | self.item = ip.GetChildMemberWithName('items').GetChildAtIndex(self.value.unsigned) |
| | 433 | extra = ip.GetChildMemberWithName('extra').GetChildMemberWithName('items') |
| | 434 | self.tag = self.item.GetChildMemberWithName('tag').Clone('tag') |
| | 435 | self.data = None |
| | 436 | self.trailing = None |
| | 437 | data = self.item.GetChildMemberWithName('data') |
| | 438 | encoding_type = tag_to_encoding_map[self.tag.value] |
| | 439 | dynamic_values = {} |
| | 440 | for encoding_field in encoding_type.fields: |
| | 441 | if encoding_field.name == 'data': |
| | 442 | if encoding_field.type.IsPointerType(): |
| | 443 | data_type = encoding_field.type.GetPointeeType() |
| | 444 | extra_index = data.unsigned |
| | 445 | self.data = extra.GetChildAtIndex(extra_index).Cast(data_type).Clone('data') |
| | 446 | extra_index += data_type.num_fields |
| | 447 | else: |
| | 448 | self.data = data.Cast(encoding_field.type).Clone('data') |
| | 449 | elif encoding_field.name == 'trailing': |
| | 450 | trailing_data = lldb.SBData() |
| | 451 | for trailing_field in encoding_field.type.fields: |
| | 452 | if trailing_field.type.IsAggregateType(): |
| | 453 | trailing_data.Append(extra.GetChildAtIndex(extra_index).address_of.data) |
| | 454 | len = dynamic_values['trailing.%s.len' % trailing_field.name].unsigned |
| | 455 | trailing_data.Append(lldb.SBData.CreateDataFromInt(len, trailing_data.GetAddressByteSize())) |
| | 456 | extra_index += len |
| | 457 | else: |
| | 458 | pass |
| | 459 | self.trailing = self.data.CreateValueFromData('trailing', trailing_data, encoding_field.type) |
| | 460 | else: |
| | 461 | path = encoding_field.type.GetPointeeType().name.removeprefix('%s::' % encoding_type.name).removeprefix('%s.' % encoding_type.name).partition('__')[0].split('.') |
| | 462 | if path[0] == 'data': |
| | 463 | dynamic_value = self.data |
| | 464 | for name in path[1:]: |
| | 465 | dynamic_value = dynamic_value.GetChildMemberWithName(name) |
| | 466 | dynamic_values[encoding_field.name] = dynamic_value |
| | 467 | except: pass |
| | 468 | def has_children(self): return True |
| | 469 | def num_children(self): return 2 + (self.trailing is not None) |
| | 470 | def get_child_index(self, name): |
| | 471 | try: return ('tag', 'data', 'trailing').index(name) |
| | 472 | except: return -1 |
| | 473 | def get_child_at_index(self, index): return (self.tag, self.data, self.trailing)[index] if index in range(3) else None |
| | 474 | |
| 410 | def type_Type_pointer(payload): | 475 | def type_Type_pointer(payload): |
| 411 | pointee_type = payload.GetChildMemberWithName('pointee_type') | 476 | pointee_type = payload.GetChildMemberWithName('pointee_type') |
| 412 | sentinel = payload.GetChildMemberWithName('sentinel').GetChildMemberWithName('child') | 477 | sentinel = payload.GetChildMemberWithName('sentinel').GetChildMemberWithName('child') |
| ... | @@ -616,8 +681,5 @@ def __lldb_init_module(debugger, _=None): | ... | @@ -616,8 +681,5 @@ def __lldb_init_module(debugger, _=None): |
| 616 | add(debugger, category='zig.stage2', regex=True, type=MultiArrayList_Entry('Air\\.Inst'), identifier='TagAndPayload', synth=True, inline_children=True, summary=True) | 681 | add(debugger, category='zig.stage2', regex=True, type=MultiArrayList_Entry('Air\\.Inst'), identifier='TagAndPayload', synth=True, inline_children=True, summary=True) |
| 617 | add(debugger, category='zig.stage2', regex=True, type='^Air\\.Inst\\.Data\\.Data__struct_[1-9][0-9]*$', inline_children=True, summary=True) | 682 | add(debugger, category='zig.stage2', regex=True, type='^Air\\.Inst\\.Data\\.Data__struct_[1-9][0-9]*$', inline_children=True, summary=True) |
| 618 | add(debugger, category='zig.stage2', type='Module.Decl::Module.Decl.Index', synth=True) | 683 | add(debugger, category='zig.stage2', type='Module.Decl::Module.Decl.Index', synth=True) |
| 619 | add(debugger, category='zig.stage2', type='type.Type', identifier='TagOrPayloadPtr', synth=True) | 684 | add(debugger, category='zig.stage2', type='InternPool.Index', synth=True) |
| 620 | add(debugger, category='zig.stage2', type='type.Type', summary=True) | | |
| 621 | add(debugger, category='zig.stage2', type='value.Value', identifier='TagOrPayloadPtr', synth=True) | | |
| 622 | add(debugger, category='zig.stage2', type='value.Value', summary=True) | | |
| 623 | add(debugger, category='zig.stage2', type='arch.x86_64.CodeGen.MCValue', identifier='zig_TaggedUnion', synth=True, inline_children=True, summary=True) | 685 | add(debugger, category='zig.stage2', type='arch.x86_64.CodeGen.MCValue', identifier='zig_TaggedUnion', synth=True, inline_children=True, summary=True) |