skuznetsov wrote: > Can you post a copy of a the python code for the synthetic child provider you > are creating and also how you are registering it with LLDB?
Here it is: ``` # Hash(K,V) class support providers class CrystalHashSyntheticProvider: def __init__(self, valobj, internal_dict): self.valobj = valobj self.extract_entries() def has_children(self): return True def num_children(self): size = self.valobj.GetChildMemberWithName("size").unsigned return size def get_child_index(self, name): name = name.lstrip('[').rstrip(']') if name == "size": return len(self._entries) + 1 if self._entries else 1 try: idx = next((index for index, obj in enumerate(self._entries) if getattr(self._entries, "key") == name), -1) return idx except: return -1 def get_child_at_index(self, index): if index > len(self.entries): return None if index == len(self.entries): return self.valobj.GetChildMemberWithName("size") entry = self.entries[index] key = entry.GetChildMemberWithName("key").GetSummary() value = entry.GetChildMemberWithName("value").deref return value.CreateChildAtOffset("[%s]" % key, 0, value.type) # return entry.CreateChildAtOffset("[%d]" % index, 0, entry.type) def extract_entries(self): if self.valobj.type.is_pointer: self.valobj = self.valobj.Dereference() self.size = 0 if self.valobj.GetChildMemberWithName("size").value is None else self.valobj.GetChildMemberWithName("size").unsigned self.entries = [] for index in range(self.size): try: valuePath = "entries[%d]" % index value = self.valobj.EvaluateExpression(valuePath) if value.type.is_pointer: value = value.deref self.entries.append(value) except Exception as e: print('Got exception %s' % (str(e))) return None print ("Created %d entries." % len(self.entries)) ``` https://github.com/llvm/llvm-project/pull/117755 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits