@@ -619,6 +619,49 @@ def get_child_at_index(self, index):
619619 )
620620
621621
622+ list_regex_llvm = re .compile (r"^(List::list\((?P<eltType>[a-zA-Z0-9_()]+)(,(?P<parSafe>(true|false)))?\))$" )
623+
624+ def ListRecognizer (sbtype , internal_dict ):
625+ typename = sbtype .GetName ()
626+ match = list_regex_llvm .match (typename )
627+ return match is not None
628+
629+ def ListSummary (valobj , internal_dict ):
630+ size = valobj .GetNonSyntheticValue ().GetChildMemberWithName ("_size" ).GetValueAsUnsigned ()
631+ return f"size = { size } "
632+
633+ class ListProvider :
634+ def __init__ (self , valobj , internal_dict ):
635+ self .valobj = valobj
636+
637+ self .synthetic_children = {}
638+ size = self .valobj .GetNonSyntheticValue ().GetChildMemberWithName ("_size" ).GetValueAsUnsigned ()
639+ for i in range (size ):
640+ element_name = f"[{ i } ]"
641+ element = self .valobj .CreateValueFromExpression (element_name , f"({ self .valobj .GetName ()} )._getRef({ i } )" )
642+ if element .IsValid ():
643+ self .synthetic_children [f"[{ i } ]" ] = element
644+
645+ def has_children (self ):
646+ return self .num_children () > 0
647+
648+ def num_children (self ):
649+ return len (self .synthetic_children )
650+
651+ def get_child_index (self , name ):
652+ if name in self .synthetic_children :
653+ return list (self .synthetic_children .keys ()).index (name )
654+ else :
655+ return - 1
656+
657+ def get_child_at_index (self , index ):
658+ if index < 0 or index >= self .num_children ():
659+ return None
660+ key = list (self .synthetic_children .keys ())[index ]
661+ child_obj = self .synthetic_children [key ]
662+ return child_obj
663+
664+
622665def DebugFunc_ResolveWidePointer (debugger , command , result , internal_dict ):
623666 """Resolve a wide pointer manually.
624667 Usage: RWP <wide pointer variable> [size]
@@ -689,11 +732,14 @@ def recognizer(func_name):
689732 "ManagedObjectProvider" ,
690733 recognizer ("ManagedObjectRecognizer" ),
691734 )
735+
736+ register ("ListSummary" , "ListProvider" , recognizer ("ListRecognizer" ))
737+
692738 # TODO: I can't decide if having a wide pointer summary/provider is useful
693739 # or just confusing
694740 # register("WidePointerSummary", "WidePointerProvider", regex("wide\\(.+\\)"))
695741 debugger .HandleCommand (
696- "command script add -f chpl_lldb_pretty_print.DebugFunc_ResolveWidePointer RWP"
742+ "command script add --overwrite - f chpl_lldb_pretty_print.DebugFunc_ResolveWidePointer RWP"
697743 )
698744
699745 # make sure int(8) and uint(8) show up as numbers, not characters
0 commit comments