diff options
| author | Walnut <39544927+Walnut356@users.noreply.github.com> | 2025-01-11 03:33:41 -0600 |
|---|---|---|
| committer | Walnut <39544927+Walnut356@users.noreply.github.com> | 2025-01-11 03:33:41 -0600 |
| commit | a3adcd24db6b25b1bf85ef8c3314ee9664c7228c (patch) | |
| tree | 1f8a7c486b991d8ede1287e7a885b175d040ee55 /src/etc/lldb_providers.py | |
| parent | 0bf0817dd50b2784c46660ce5778325053e2237d (diff) | |
| download | rust-a3adcd24db6b25b1bf85ef8c3314ee9664c7228c.tar.gz rust-a3adcd24db6b25b1bf85ef8c3314ee9664c7228c.zip | |
add alternate inner type lookup for hashmap/set when template args missing
Diffstat (limited to 'src/etc/lldb_providers.py')
| -rw-r--r-- | src/etc/lldb_providers.py | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/etc/lldb_providers.py b/src/etc/lldb_providers.py index a1470c4c1a4..b380db81eec 100644 --- a/src/etc/lldb_providers.py +++ b/src/etc/lldb_providers.py @@ -130,6 +130,23 @@ class EmptySyntheticProvider: def has_children(self) -> bool: return False +def get_template_args(type_name: str) -> List[str]: + params = [] + level = 0 + start = 0 + for i, c in enumerate(type_name): + if c == "<": + level += 1 + if level == 1: + start = i + 1 + elif c == ">": + level -= 1 + if level == 0: + params.append(type_name[start:i].strip()) + elif c == "," and level == 1: + params.append(type_name[start:i].strip()) + start = i + 1 + return params def SizeSummaryProvider(valobj: SBValue, _dict: LLDBOpaque) -> str: return "size=" + str(valobj.GetNumChildren()) @@ -1050,7 +1067,16 @@ class StdHashMapSyntheticProvider: ctrl = inner_table.GetChildMemberWithName("ctrl").GetChildAtIndex(0) self.size = inner_table.GetChildMemberWithName("items").GetValueAsUnsigned() - self.pair_type = table.type.template_args[0] + + template_args = table.type.template_args + + if template_args is None: + type_name = table.GetTypeName() + args = get_template_args(type_name) + self.pair_type = self.valobj.target.FindFirstType(args[0]) + else: + self.pair_type = template_args[0] + if self.pair_type.IsTypedefType(): self.pair_type = self.pair_type.GetTypedefedType() self.pair_type_size = self.pair_type.GetByteSize() |
