Skip to content

Commit 54047ed

Browse files
committed
Unrolled build for #160842 in rollup 161434
Rollup merge of #160842 - Walnut356:slice_ptr, r=Mark-Simulacrum Apply `&[T]` visualizer to `*const [T]`, `*mut [T]` and `Box<[T]>` Same as #159834, but for slices instead of `str`. Once again, msvc is a bit hard to test at the moment so here is how the MSVC changes look: <img width="605" height="171" alt="image" src="https://github.com/user-attachments/assets/ac4bd27d-bcd1-4e9e-a443-2186d80e9503" />
2 parents 0cfa1c4 + fb8e117 commit 54047ed

2 files changed

Lines changed: 50 additions & 9 deletions

File tree

src/etc/lldb_lookup.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,14 +211,28 @@ def register_providers_compatibility():
211211
register(
212212
StdSliceSyntheticProvider,
213213
SizeSummaryProvider,
214-
r"^&(mut )?\[.+\]$",
214+
r"^((&(mut )?)|(\*(const|mut) ))\[.+\]$",
215+
)
216+
217+
# Box<[T]> GNU
218+
register(
219+
StdSliceSyntheticProvider,
220+
SizeSummaryProvider,
221+
r"^(alloc::([a-z_]+::)+)Box<\[.+\],.*>$",
215222
)
216223

217224
# slice MSVC
218225
register(
219226
MSVCStdSliceSyntheticProvider,
220227
StdSliceSummaryProvider,
221-
r"^ref(_mut)?\$<slice2\$<.+> >",
228+
r"^((ref(_mut)?)|(ptr_(const|mut)))\$<slice2\$<.+> >$",
229+
)
230+
231+
# Box<[T]> MSVC
232+
register(
233+
MSVCStdSliceSyntheticProvider,
234+
StdSliceSummaryProvider,
235+
r"^(alloc::([a-z_]+::)+)Box<slice2\$<.+>,.*>$",
222236
)
223237

224238
# OsString

src/etc/lldb_providers.py

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -963,6 +963,8 @@ def get_type_name(self) -> str:
963963

964964

965965
def MSVCEnumSummaryProvider(valobj: SBValue, _dict: LLDBOpaque) -> str:
966+
if valobj.TypeIsPointerType():
967+
valobj = valobj.Dereference()
966968
enum_synth = MSVCEnumSyntheticProvider(valobj.GetNonSyntheticValue(), _dict)
967969
variant_names: SBType = valobj.target.FindFirstType(
968970
f"{enum_synth.valobj.GetTypeName()}::VariantNames"
@@ -1182,19 +1184,44 @@ def has_children(self) -> bool:
11821184

11831185

11841186
class MSVCStdSliceSyntheticProvider(StdSliceSyntheticProvider):
1187+
type_name: Optional[str] = None
1188+
11851189
def get_type_name(self) -> str:
1190+
if self.type_name is not None:
1191+
return self.type_name
1192+
11861193
name = self.valobj.GetTypeName()
11871194

11881195
if name.startswith("ref_mut"):
1189-
# remove "ref_mut$<slice2$<" and trailing "> >"
1190-
name = name[17:-3]
1191-
ref = "&mut "
1196+
name = name[len("ref_mut$<slice2$<") :].rstrip("> ")
1197+
self.type_name = f"&mut [{name}]"
1198+
elif name.startswith("ref"):
1199+
name = name[len("ref$<slice2$<") :].rstrip("> ")
1200+
self.type_name = f"&[{name}]"
1201+
elif name.startswith("ptr_mut"):
1202+
name = name[len("ptr_mut$<slice2$<") :].rstrip("> ")
1203+
self.type_name = f"*mut [{name}]"
1204+
elif name.startswith("ptr_const"):
1205+
name = name[len("ptr_const$<slice2$<") :].rstrip("> ")
1206+
self.type_name = f"*const [{name}]"
1207+
elif name.startswith("alloc::boxed::Box"):
1208+
prefix_len = len("alloc::boxed::Box<slice2$<")
1209+
suffix_len = len(">,alloc::alloc::Global>")
1210+
if name.endswith(",alloc::alloc::Global>"):
1211+
name = name[prefix_len : len(name) - suffix_len]
1212+
1213+
self.type_name = f"Box<[{name}]>"
1214+
else:
1215+
[element_name, alloc_name] = name[prefix_len:].split(">", 1)
1216+
1217+
name = f"{element_name}{alloc_name}"
1218+
1219+
# alloc name contains the trailing ">", so we don't need to add it
1220+
self.type_name = f"Box<[{element_name}]{alloc_name}"
11921221
else:
1193-
# remove "ref$<slice2$<" and trailing "> >"
1194-
name = name[13:-3]
1195-
ref = "&"
1222+
self.type_name = name
11961223

1197-
return "".join([ref, "[", name, "]"])
1224+
return self.type_name
11981225

11991226

12001227
def StdSliceSummaryProvider(valobj, dict):

0 commit comments

Comments
 (0)