authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-12-20 16:37:25-05:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-12-20 22:51:20-05:00
log5776d8f27022926b0538e818c7408f760bf2d144
tree86a37034884bb9b227442490c5dfb50f3ed14670
parent5c76e08f494b7412c1b089cac90bda14e2a45c0b

lldb: add pretty printer for cau and nav indices


2 files changed, 131 insertions(+), 49 deletions(-)

src/InternPool.zig+85-41
...@@ -470,6 +470,8 @@ pub const Cau = struct {...@@ -470,6 +470,8 @@ pub const Cau = struct {
470 _ => @enumFromInt(@intFromEnum(opt)),470 _ => @enumFromInt(@intFromEnum(opt)),
471 };471 };
472 }472 }
473
474 const debug_state = InternPool.debug_state;
473 };475 };
474 pub fn toOptional(i: Cau.Index) Optional {476 pub fn toOptional(i: Cau.Index) Optional {
475 return @enumFromInt(@intFromEnum(i));477 return @enumFromInt(@intFromEnum(i));
...@@ -491,6 +493,8 @@ pub const Cau = struct {...@@ -491,6 +493,8 @@ pub const Cau = struct {
491 .index = @intFromEnum(cau_index) & ip.getIndexMask(u31),493 .index = @intFromEnum(cau_index) & ip.getIndexMask(u31),
492 };494 };
493 }495 }
496
497 const debug_state = InternPool.debug_state;
494 };498 };
495};499};
496500
...@@ -568,6 +572,8 @@ pub const Nav = struct {...@@ -568,6 +572,8 @@ pub const Nav = struct {
568 _ => @enumFromInt(@intFromEnum(opt)),572 _ => @enumFromInt(@intFromEnum(opt)),
569 };573 };
570 }574 }
575
576 const debug_state = InternPool.debug_state;
571 };577 };
572 pub fn toOptional(i: Nav.Index) Optional {578 pub fn toOptional(i: Nav.Index) Optional {
573 return @enumFromInt(@intFromEnum(i));579 return @enumFromInt(@intFromEnum(i));
...@@ -589,6 +595,8 @@ pub const Nav = struct {...@@ -589,6 +595,8 @@ pub const Nav = struct {
589 .index = @intFromEnum(nav_index) & ip.getIndexMask(u32),595 .index = @intFromEnum(nav_index) & ip.getIndexMask(u32),
590 };596 };
591 }597 }
598
599 const debug_state = InternPool.debug_state;
592 };600 };
593601
594 /// The compact in-memory representation of a `Nav`.602 /// The compact in-memory representation of a `Nav`.
...@@ -5271,17 +5279,26 @@ pub const Tag = enum(u8) {...@@ -5271,17 +5279,26 @@ pub const Tag = enum(u8) {
52715279
5272 .type_int_signed = .{ .summary = .@"i{.data%value}", .data = u32 },5280 .type_int_signed = .{ .summary = .@"i{.data%value}", .data = u32 },
5273 .type_int_unsigned = .{ .summary = .@"u{.data%value}", .data = u32 },5281 .type_int_unsigned = .{ .summary = .@"u{.data%value}", .data = u32 },
5274 .type_array_big = .{ .summary = .@"[{.payload.len1%value} << 32 | {.payload.len0%value}:{.payload.sentinel%summary}]{.payload.child%summary}", .payload = Array },5282 .type_array_big = .{
5283 .summary = .@"[{.payload.len1%value} << 32 | {.payload.len0%value}:{.payload.sentinel%summary}]{.payload.child%summary}",
5284 .payload = Array,
5285 },
5275 .type_array_small = .{ .summary = .@"[{.payload.len%value}]{.payload.child%summary}", .payload = Vector },5286 .type_array_small = .{ .summary = .@"[{.payload.len%value}]{.payload.child%summary}", .payload = Vector },
5276 .type_vector = .{ .summary = .@"@Vector({.payload.len%value}, {.payload.child%summary})", .payload = Vector },5287 .type_vector = .{ .summary = .@"@Vector({.payload.len%value}, {.payload.child%summary})", .payload = Vector },
5277 .type_pointer = .{ .summary = .@"*... {.payload.child%summary}", .payload = TypePointer },5288 .type_pointer = .{ .summary = .@"*... {.payload.child%summary}", .payload = TypePointer },
5278 .type_slice = .{ .summary = .@"[]... {.data.unwrapped.payload.child%summary}", .data = Index },5289 .type_slice = .{ .summary = .@"[]... {.data.unwrapped.payload.child%summary}", .data = Index },
5279 .type_optional = .{ .summary = .@"?{.data%summary}", .data = Index },5290 .type_optional = .{ .summary = .@"?{.data%summary}", .data = Index },
5280 .type_anyframe = .{ .summary = .@"anyframe->{.data%summary}", .data = Index },5291 .type_anyframe = .{ .summary = .@"anyframe->{.data%summary}", .data = Index },
5281 .type_error_union = .{ .summary = .@"{.payload.error_set_type%summary}!{.payload.payload_type%summary}", .payload = ErrorUnionType },5292 .type_error_union = .{
5293 .summary = .@"{.payload.error_set_type%summary}!{.payload.payload_type%summary}",
5294 .payload = ErrorUnionType,
5295 },
5282 .type_anyerror_union = .{ .summary = .@"anyerror!{.data%summary}", .data = Index },5296 .type_anyerror_union = .{ .summary = .@"anyerror!{.data%summary}", .data = Index },
5283 .type_error_set = .{ .summary = .@"error{...}", .payload = ErrorSet },5297 .type_error_set = .{ .summary = .@"error{...}", .payload = ErrorSet },
5284 .type_inferred_error_set = .{ .summary = .@"@typeInfo(@typeInfo(@TypeOf({.data%summary})).@\"fn\".return_type.?).error_union.error_set", .data = Index },5298 .type_inferred_error_set = .{
5299 .summary = .@"@typeInfo(@typeInfo(@TypeOf({.data%summary})).@\"fn\".return_type.?).error_union.error_set",
5300 .data = Index,
5301 },
5285 .type_enum_auto = .{5302 .type_enum_auto = .{
5286 .summary = .@"{.payload.name%summary#\"}",5303 .summary = .@"{.payload.name%summary#\"}",
5287 .payload = EnumAuto,5304 .payload = EnumAuto,
...@@ -5307,12 +5324,8 @@ pub const Tag = enum(u8) {...@@ -5307,12 +5324,8 @@ pub const Tag = enum(u8) {
5307 .type_opaque = .{5324 .type_opaque = .{
5308 .summary = .@"{.payload.name%summary#\"}",5325 .summary = .@"{.payload.name%summary#\"}",
5309 .payload = TypeOpaque,5326 .payload = TypeOpaque,
5310 .trailing = struct {5327 .trailing = struct { captures: []CaptureValue },
5311 captures: []CaptureValue,5328 .config = .{ .@"trailing.captures.len" = .@"payload.captures_len" },
5312 },
5313 .config = .{
5314 .@"trailing.captures.len" = .@"payload.captures_len",
5315 },
5316 },5329 },
5317 .type_struct = .{5330 .type_struct = .{
5318 .summary = .@"{.payload.name%summary#\"}",5331 .summary = .@"{.payload.name%summary#\"}",
...@@ -5438,17 +5451,50 @@ pub const Tag = enum(u8) {...@@ -5438,17 +5451,50 @@ pub const Tag = enum(u8) {
54385451
5439 .undef = .{ .summary = .@"@as({.data%summary}, undefined)", .data = Index },5452 .undef = .{ .summary = .@"@as({.data%summary}, undefined)", .data = Index },
5440 .simple_value = .{ .summary = .@"{.index%value#.}", .index = SimpleValue },5453 .simple_value = .{ .summary = .@"{.index%value#.}", .index = SimpleValue },
5441 .ptr_nav = .{ .payload = PtrNav },5454 .ptr_nav = .{
5442 .ptr_comptime_alloc = .{ .payload = PtrComptimeAlloc },5455 .summary = .@"@as({.payload.ty%summary}, @ptrFromInt(@intFromPtr(&{.payload.nav.fqn%summary#\"}) + ({.payload.byte_offset_a%value} << 32 | {.payload.byte_offset_b%value})))",
5443 .ptr_uav = .{ .payload = PtrUav },5456 .payload = PtrNav,
5444 .ptr_uav_aligned = .{ .payload = PtrUavAligned },5457 },
5445 .ptr_comptime_field = .{ .payload = PtrComptimeField },5458 .ptr_comptime_alloc = .{
5446 .ptr_int = .{ .payload = PtrInt },5459 .summary = .@"@as({.payload.ty%summary}, @ptrFromInt(@intFromPtr(&comptime_allocs[{.payload.index%summary}]) + ({.payload.byte_offset_a%value} << 32 | {.payload.byte_offset_b%value})))",
5447 .ptr_eu_payload = .{ .payload = PtrBase },5460 .payload = PtrComptimeAlloc,
5448 .ptr_opt_payload = .{ .payload = PtrBase },5461 },
5449 .ptr_elem = .{ .payload = PtrBaseIndex },5462 .ptr_uav = .{
5450 .ptr_field = .{ .payload = PtrBaseIndex },5463 .summary = .@"@as({.payload.ty%summary}, @ptrFromInt(@intFromPtr(&{.payload.val%summary}) + ({.payload.byte_offset_a%value} << 32 | {.payload.byte_offset_b%value})))",
5451 .ptr_slice = .{ .payload = PtrSlice },5464 .payload = PtrUav,
5465 },
5466 .ptr_uav_aligned = .{
5467 .summary = .@"@as({.payload.ty%summary}, @ptrFromInt(@intFromPtr(@as({.payload.orig_ty%summary}, &{.payload.val%summary})) + ({.payload.byte_offset_a%value} << 32 | {.payload.byte_offset_b%value})))",
5468 .payload = PtrUavAligned,
5469 },
5470 .ptr_comptime_field = .{
5471 .summary = .@"@as({.payload.ty%summary}, @ptrFromInt(@intFromPtr(&{.payload.field_val%summary}) + ({.payload.byte_offset_a%value} << 32 | {.payload.byte_offset_b%value})))",
5472 .payload = PtrComptimeField,
5473 },
5474 .ptr_int = .{
5475 .summary = .@"@as({.payload.ty%summary}, @ptrFromInt({.payload.byte_offset_a%value} << 32 | {.payload.byte_offset_b%value}))",
5476 .payload = PtrInt,
5477 },
5478 .ptr_eu_payload = .{
5479 .summary = .@"@as({.payload.ty%summary}, @ptrFromInt(@intFromPtr(&({.payload.base%summary} catch unreachable)) + ({.payload.byte_offset_a%value} << 32 | {.payload.byte_offset_b%value})))",
5480 .payload = PtrBase,
5481 },
5482 .ptr_opt_payload = .{
5483 .summary = .@"@as({.payload.ty%summary}, @ptrFromInt(@intFromPtr(&{.payload.base%summary}.?) + ({.payload.byte_offset_a%value} << 32 | {.payload.byte_offset_b%value})))",
5484 .payload = PtrBase,
5485 },
5486 .ptr_elem = .{
5487 .summary = .@"@as({.payload.ty%summary}, @ptrFromInt(@intFromPtr(&{.payload.base%summary}[{.payload.index%summary}]) + ({.payload.byte_offset_a%value} << 32 | {.payload.byte_offset_b%value})))",
5488 .payload = PtrBaseIndex,
5489 },
5490 .ptr_field = .{
5491 .summary = .@"@as({.payload.ty%summary}, @ptrFromInt(@intFromPtr(&{.payload.base%summary}[{.payload.index%summary}]) + ({.payload.byte_offset_a%value} << 32 | {.payload.byte_offset_b%value})))",
5492 .payload = PtrBaseIndex,
5493 },
5494 .ptr_slice = .{
5495 .summary = .@"{.payload.ptr%summary}[0..{.payload.len%summary}]",
5496 .payload = PtrSlice,
5497 },
5452 .opt_payload = .{ .summary = .@"@as({.payload.ty%summary}, {.payload.val%summary})", .payload = TypeValue },5498 .opt_payload = .{ .summary = .@"@as({.payload.ty%summary}, {.payload.val%summary})", .payload = TypeValue },
5453 .opt_null = .{ .summary = .@"@as({.data%summary}, null)", .data = Index },5499 .opt_null = .{ .summary = .@"@as({.data%summary}, null)", .data = Index },
5454 .int_u8 = .{ .summary = .@"@as(u8, {.data%value})", .data = u8 },5500 .int_u8 = .{ .summary = .@"@as(u8, {.data%value})", .data = u8 },
...@@ -5476,18 +5522,16 @@ pub const Tag = enum(u8) {...@@ -5476,18 +5522,16 @@ pub const Tag = enum(u8) {
5476 .float_c_longdouble_f80 = .{ .summary = .@"@as(c_longdouble, {.payload%value})", .payload = f80 },5522 .float_c_longdouble_f80 = .{ .summary = .@"@as(c_longdouble, {.payload%value})", .payload = f80 },
5477 .float_c_longdouble_f128 = .{ .summary = .@"@as(c_longdouble, {.payload%value})", .payload = f128 },5523 .float_c_longdouble_f128 = .{ .summary = .@"@as(c_longdouble, {.payload%value})", .payload = f128 },
5478 .float_comptime_float = .{ .summary = .@"{.payload%value}", .payload = f128 },5524 .float_comptime_float = .{ .summary = .@"{.payload%value}", .payload = f128 },
5479 .variable = .{ .payload = Variable },5525 .variable = .{ .summary = .@"{.payload.owner_nav.fqn%summary#\"}", .payload = Variable },
5480 .@"extern" = .{ .payload = Extern },5526 .@"extern" = .{ .summary = .@"{.payload.owner_nav.fqn%summary#\"}", .payload = Extern },
5481 .func_decl = .{5527 .func_decl = .{
5528 .summary = .@"{.payload.owner_nav.fqn%summary#\"}",
5482 .payload = FuncDecl,5529 .payload = FuncDecl,
5483 .trailing = struct {5530 .trailing = struct { inferred_error_set: ?Index },
5484 inferred_error_set: ?Index,5531 .config = .{ .@"trailing.inferred_error_set.?" = .@"payload.analysis.inferred_error_set" },
5485 },
5486 .config = .{
5487 .@"trailing.inferred_error_set.?" = .@"payload.analysis.inferred_error_set",
5488 },
5489 },5532 },
5490 .func_instance = .{5533 .func_instance = .{
5534 .summary = .@"{.payload.owner_nav.fqn%summary#\"}",
5491 .payload = FuncInstance,5535 .payload = FuncInstance,
5492 .trailing = struct {5536 .trailing = struct {
5493 inferred_error_set: ?Index,5537 inferred_error_set: ?Index,
...@@ -5498,30 +5542,26 @@ pub const Tag = enum(u8) {...@@ -5498,30 +5542,26 @@ pub const Tag = enum(u8) {
5498 .@"trailing.param_values.len" = .@"payload.ty.payload.params_len",5542 .@"trailing.param_values.len" = .@"payload.ty.payload.params_len",
5499 },5543 },
5500 },5544 },
5501 .func_coerced = .{ .payload = FuncCoerced },5545 .func_coerced = .{
5546 .summary = .@"@as(*const {.payload.ty%summary}, @ptrCast(&{.payload.func%summary})).*",
5547 .payload = FuncCoerced,
5548 },
5502 .only_possible_value = .{ .summary = .@"@as({.data%summary}, undefined)", .data = Index },5549 .only_possible_value = .{ .summary = .@"@as({.data%summary}, undefined)", .data = Index },
5503 .union_value = .{ .summary = .@"@as({.payload.ty%summary}, {})", .payload = Union },5550 .union_value = .{ .summary = .@"@as({.payload.ty%summary}, {})", .payload = Union },
5504 .bytes = .{ .summary = .@"@as({.payload.ty%summary}, {.payload.bytes%summary}.*)", .payload = Bytes },5551 .bytes = .{ .summary = .@"@as({.payload.ty%summary}, {.payload.bytes%summary}.*)", .payload = Bytes },
5505 .aggregate = .{5552 .aggregate = .{
5506 .summary = .@"@as({.payload.ty%summary}, .{...})",5553 .summary = .@"@as({.payload.ty%summary}, .{...})",
5507 .payload = Aggregate,5554 .payload = Aggregate,
5508 .trailing = struct {5555 .trailing = struct { elements: []Index },
5509 elements: []Index,5556 .config = .{ .@"trailing.elements.len" = .@"payload.ty.payload.fields_len" },
5510 },
5511 .config = .{
5512 .@"trailing.elements.len" = .@"payload.ty.payload.fields_len",
5513 },
5514 },5557 },
5515 .repeated = .{ .summary = .@"@as({.payload.ty%summary}, @splat({.payload.elem_val%summary}))", .payload = Repeated },5558 .repeated = .{ .summary = .@"@as({.payload.ty%summary}, @splat({.payload.elem_val%summary}))", .payload = Repeated },
55165559
5517 .memoized_call = .{5560 .memoized_call = .{
5561 .summary = .@"@memoize({.payload.func%summary})",
5518 .payload = MemoizedCall,5562 .payload = MemoizedCall,
5519 .trailing = struct {5563 .trailing = struct { arg_values: []Index },
5520 arg_values: []Index,5564 .config = .{ .@"trailing.arg_values.len" = .@"payload.args_len" },
5521 },
5522 .config = .{
5523 .@"trailing.arg_values.len" = .@"payload.args_len",
5524 },
5525 },5565 },
5526 };5566 };
5527 fn Payload(comptime tag: Tag) type {5567 fn Payload(comptime tag: Tag) type {
...@@ -6490,6 +6530,10 @@ pub fn activate(ip: *const InternPool) void {...@@ -6490,6 +6530,10 @@ pub fn activate(ip: *const InternPool) void {
6490 _ = OptionalString.debug_state;6530 _ = OptionalString.debug_state;
6491 _ = NullTerminatedString.debug_state;6531 _ = NullTerminatedString.debug_state;
6492 _ = OptionalNullTerminatedString.debug_state;6532 _ = OptionalNullTerminatedString.debug_state;
6533 _ = Cau.Index.debug_state;
6534 _ = Cau.Index.Optional.debug_state;
6535 _ = Nav.Index.debug_state;
6536 _ = Nav.Index.Optional.debug_state;
6493 std.debug.assert(debug_state.intern_pool == null);6537 std.debug.assert(debug_state.intern_pool == null);
6494 debug_state.intern_pool = ip;6538 debug_state.intern_pool = ip;
6495}6539}
tools/lldb_pretty_printers.py+46-8
...@@ -18,17 +18,14 @@ def create_struct(parent, name, struct_type, inits):...@@ -18,17 +18,14 @@ def create_struct(parent, name, struct_type, inits):
18 for field in struct_type.fields:18 for field in struct_type.fields:
19 field_size = field.type.size19 field_size = field.type.size
20 field_init = inits[field.name]20 field_init = inits[field.name]
21 field_init_type = type(field_init)21 if isinstance(field_init, int):
22 if field_init_type == bool:
23 field_bytes = bytes([field_init])
24 elif field_init_type == int:
25 match struct_data.byte_order:22 match struct_data.byte_order:
26 case lldb.eByteOrderLittle:23 case lldb.eByteOrderLittle:
27 byte_order = 'little'24 byte_order = 'little'
28 case lldb.eByteOrderBig:25 case lldb.eByteOrderBig:
29 byte_order = 'big'26 byte_order = 'big'
30 field_bytes = field_init.to_bytes(field_size, byte_order, signed=field.type.GetTypeFlags() & lldb.eTypeIsSigned != 0)27 field_bytes = field_init.to_bytes(field_size, byte_order, signed=field.type.GetTypeFlags() & lldb.eTypeIsSigned != 0)
31 elif field_init_type == lldb.SBValue:28 elif isinstance(field_init_type, lldb.SBValue):
32 field_bytes = field_init.data.uint829 field_bytes = field_init.data.uint8
33 else: return30 else: return
34 match struct_data.byte_order:31 match struct_data.byte_order:
...@@ -731,6 +728,7 @@ class root_InternPool_Local_List_SynthProvider:...@@ -731,6 +728,7 @@ class root_InternPool_Local_List_SynthProvider:
731expr_path_re = re.compile(r'\{([^}]+)%([^%#}]+)(?:#([^%#}]+))?\}')728expr_path_re = re.compile(r'\{([^}]+)%([^%#}]+)(?:#([^%#}]+))?\}')
732def root_InternPool_Index_SummaryProvider(value, _=None):729def root_InternPool_Index_SummaryProvider(value, _=None):
733 unwrapped = value.GetChildMemberWithName('unwrapped')730 unwrapped = value.GetChildMemberWithName('unwrapped')
731 if not unwrapped: return '' # .none
734 tag = unwrapped.GetChildMemberWithName('tag')732 tag = unwrapped.GetChildMemberWithName('tag')
735 tag_value = tag.value733 tag_value = tag.value
736 summary = tag.CreateValueFromType(tag.type).GetChildMemberWithName('encodings').GetChildMemberWithName(tag_value.removeprefix('.')).GetChildMemberWithName('summary')734 summary = tag.CreateValueFromType(tag.type).GetChildMemberWithName('encodings').GetChildMemberWithName(tag_value.removeprefix('.')).GetChildMemberWithName('summary')
...@@ -749,8 +747,8 @@ class root_InternPool_Index_SynthProvider:...@@ -749,8 +747,8 @@ class root_InternPool_Index_SynthProvider:
749 if wrapped == (1 << 32) - 1: return747 if wrapped == (1 << 32) - 1: return
750 unwrapped_type = self.value.type.FindDirectNestedType('Unwrapped')748 unwrapped_type = self.value.type.FindDirectNestedType('Unwrapped')
751 ip = self.value.CreateValueFromType(unwrapped_type).GetChildMemberWithName('debug_state').GetChildMemberWithName('intern_pool').GetNonSyntheticValue().GetChildMemberWithName('?')749 ip = self.value.CreateValueFromType(unwrapped_type).GetChildMemberWithName('debug_state').GetChildMemberWithName('intern_pool').GetNonSyntheticValue().GetChildMemberWithName('?')
752 tid_width, tid_shift_30 = ip.GetChildMemberWithName('tid_width').unsigned, ip.GetChildMemberWithName('tid_shift_30').unsigned750 tid_shift_30 = ip.GetChildMemberWithName('tid_shift_30').unsigned
753 self.unwrapped = create_struct(self.value, '.unwrapped', unwrapped_type, { 'tid': wrapped >> tid_shift_30 & (1 << tid_width) - 1, 'index': wrapped & (1 << tid_shift_30) - 1 })751 self.unwrapped = create_struct(self.value, '.unwrapped', unwrapped_type, { 'tid': wrapped >> tid_shift_30, 'index': wrapped & (1 << tid_shift_30) - 1 })
754 def has_children(self): return True752 def has_children(self): return True
755 def num_children(self): return 0753 def num_children(self): return 0
756 def get_child_index(self, name):754 def get_child_index(self, name):
...@@ -870,9 +868,9 @@ class root_InternPool_Index_Unwrapped_SynthProvider:...@@ -870,9 +868,9 @@ class root_InternPool_Index_Unwrapped_SynthProvider:
870 except: pass868 except: pass
871869
872def root_InternPool_String_SummaryProvider(value, _=None):870def root_InternPool_String_SummaryProvider(value, _=None):
871 wrapped = value.unsigned
873 ip = value.CreateValueFromType(value.type).GetChildMemberWithName('debug_state').GetChildMemberWithName('intern_pool').GetNonSyntheticValue().GetChildMemberWithName('?')872 ip = value.CreateValueFromType(value.type).GetChildMemberWithName('debug_state').GetChildMemberWithName('intern_pool').GetNonSyntheticValue().GetChildMemberWithName('?')
874 tid_shift_32 = ip.GetChildMemberWithName('tid_shift_32').unsigned873 tid_shift_32 = ip.GetChildMemberWithName('tid_shift_32').unsigned
875 wrapped = value.unsigned
876 locals_value = ip.GetChildMemberWithName('locals').GetSyntheticValue()874 locals_value = ip.GetChildMemberWithName('locals').GetSyntheticValue()
877 local_value = locals_value.child[wrapped >> tid_shift_32]875 local_value = locals_value.child[wrapped >> tid_shift_32]
878 if local_value is None:876 if local_value is None:
...@@ -882,6 +880,44 @@ def root_InternPool_String_SummaryProvider(value, _=None):...@@ -882,6 +880,44 @@ def root_InternPool_String_SummaryProvider(value, _=None):
882 string.format = lldb.eFormatCString880 string.format = lldb.eFormatCString
883 return string.value881 return string.value
884882
883class root_InternPool_Cau_Index_SynthProvider:
884 def __init__(self, value, _=None): self.value = value
885 def update(self):
886 self.cau = None
887 wrapped = self.value.unsigned
888 if wrapped == (1 << 32) - 1: return
889 ip = self.value.CreateValueFromType(self.value.type).GetChildMemberWithName('debug_state').GetChildMemberWithName('intern_pool').GetNonSyntheticValue().GetChildMemberWithName('?')
890 tid_shift_31 = ip.GetChildMemberWithName('tid_shift_31').unsigned
891 locals_value = ip.GetChildMemberWithName('locals').GetSyntheticValue()
892 local_value = locals_value.child[wrapped >> tid_shift_31]
893 if local_value is None:
894 wrapped = 0
895 local_value = locals_value.child[0]
896 self.cau = local_value.GetChildMemberWithName('shared').GetChildMemberWithName('caus').GetChildMemberWithName('view').GetChildMemberWithName('0').child[wrapped & (1 << tid_shift_31) - 1]
897 def has_children(self): return self.cau.GetNumChildren(1) > 0
898 def num_children(self): return self.cau.GetNumChildren()
899 def get_child_index(self, name): return self.cau.GetIndexOfChildWithName(name)
900 def get_child_at_index(self, index): return self.cau.GetChildAtIndex(index)
901
902class root_InternPool_Nav_Index_SynthProvider:
903 def __init__(self, value, _=None): self.value = value
904 def update(self):
905 self.nav = None
906 wrapped = self.value.unsigned
907 if wrapped == (1 << 32) - 1: return
908 ip = self.value.CreateValueFromType(self.value.type).GetChildMemberWithName('debug_state').GetChildMemberWithName('intern_pool').GetNonSyntheticValue().GetChildMemberWithName('?')
909 tid_shift_32 = ip.GetChildMemberWithName('tid_shift_32').unsigned
910 locals_value = ip.GetChildMemberWithName('locals').GetSyntheticValue()
911 local_value = locals_value.child[wrapped >> tid_shift_32]
912 if local_value is None:
913 wrapped = 0
914 local_value = locals_value.child[0]
915 self.nav = local_value.GetChildMemberWithName('shared').GetChildMemberWithName('navs').GetChildMemberWithName('view').child[wrapped & (1 << tid_shift_32) - 1]
916 def has_children(self): return self.nav.GetNumChildren(1) > 0
917 def num_children(self): return self.nav.GetNumChildren()
918 def get_child_index(self, name): return self.nav.GetIndexOfChildWithName(name)
919 def get_child_at_index(self, index): return self.nav.GetChildAtIndex(index)
920
885# Initialize921# Initialize
886922
887def add(debugger, *, category, regex=False, type, identifier=None, synth=False, inline_children=False, expand=False, summary=False):923def add(debugger, *, category, regex=False, type, identifier=None, synth=False, inline_children=False, expand=False, summary=False):
...@@ -937,3 +973,5 @@ def __lldb_init_module(debugger, _=None):...@@ -937,3 +973,5 @@ def __lldb_init_module(debugger, _=None):
937 add(debugger, category='zig', type='root.InternPool.Index', synth=True, summary=True)973 add(debugger, category='zig', type='root.InternPool.Index', synth=True, summary=True)
938 add(debugger, category='zig', type='root.InternPool.Index.Unwrapped', synth=True)974 add(debugger, category='zig', type='root.InternPool.Index.Unwrapped', synth=True)
939 add(debugger, category='zig', regex=True, type=r'^root\.InternPool\.(Optional)?(NullTerminated)?String$', identifier='root_InternPool_String', summary=True)975 add(debugger, category='zig', regex=True, type=r'^root\.InternPool\.(Optional)?(NullTerminated)?String$', identifier='root_InternPool_String', summary=True)
976 add(debugger, category='zig', regex=True, type=r'^root\.InternPool\.Cau\.Index(\.Optional)?$', identifier='root_InternPool_Cau_Index', synth=True)
977 add(debugger, category='zig', regex=True, type=r'^root\.InternPool\.Nav\.Index(\.Optional)?$', identifier='root_InternPool_Nav_Index', synth=True)