@@ -456,6 +456,8 @@ def has_children(self) -> bool:
456456
457457
458458class StdSliceSyntheticProvider :
459+ __slots__ = ["valobj" , "length" , "ptr" , "element_type" , "element_size" ]
460+
459461 def __init__ (self , valobj : SBValue , _dict : LLDBOpaque ):
460462 self .valobj = valobj
461463 self .update ()
@@ -472,7 +474,7 @@ def get_child_index(self, name: str) -> int:
472474
473475 def get_child_at_index (self , index : int ) -> SBValue :
474476 start = self .data_ptr .GetValueAsUnsigned ()
475- address = start + index * self .element_type_size
477+ address = start + index * self .element_size
476478 element = self .data_ptr .CreateValueFromAddress (
477479 "[%s]" % index , address , self .element_type
478480 )
@@ -483,12 +485,33 @@ def update(self):
483485 self .data_ptr = self .valobj .GetChildMemberWithName ("data_ptr" )
484486
485487 self .element_type = self .data_ptr .GetType ().GetPointeeType ()
486- self .element_type_size = self .element_type .GetByteSize ()
488+ self .element_size = self .element_type .GetByteSize ()
487489
488490 def has_children (self ) -> bool :
489491 return True
490492
491493
494+ class MSVCStdSliceSyntheticProvider (StdSliceSyntheticProvider ):
495+ def get_type_name (self ) -> str :
496+ name = self .valobj .GetTypeName ()
497+
498+ if name .startswith ("ref_mut" ):
499+ # remove "ref_mut$<slice2$<" and trailing "> >"
500+ name = name [17 :- 3 ]
501+ ref = "&mut "
502+ else :
503+ # remove "ref$<slice2$<" and trailing "> >"
504+ name = name [13 :- 3 ]
505+ ref = "&"
506+
507+ return "" .join ([ref , "[" , name , "]" ])
508+
509+ def StdSliceSummaryProvider (valobj , dict ):
510+ output = sequence_formatter ("[" , valobj , dict )
511+ output += "]"
512+ return output
513+
514+
492515class StdVecDequeSyntheticProvider :
493516 """Pretty-printer for alloc::collections::vec_deque::VecDeque<T>
494517
0 commit comments