diff options
| author | Walnut <39544927+Walnut356@users.noreply.github.com> | 2025-01-10 02:02:01 -0600 |
|---|---|---|
| committer | Walnut <39544927+Walnut356@users.noreply.github.com> | 2025-01-10 02:02:01 -0600 |
| commit | 71b6d49282ee68a980aada44a65d4f6e8f1c8991 (patch) | |
| tree | 30d6b03f37d81f75a0f5ad6c10b77adbecc69b53 /src/etc/lldb_providers.py | |
| parent | 8b14227aa96cf1bfdfdf46e879837b0763073a1b (diff) | |
| download | rust-71b6d49282ee68a980aada44a65d4f6e8f1c8991.tar.gz rust-71b6d49282ee68a980aada44a65d4f6e8f1c8991.zip | |
add MSVC slice providers
Diffstat (limited to 'src/etc/lldb_providers.py')
| -rw-r--r-- | src/etc/lldb_providers.py | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/src/etc/lldb_providers.py b/src/etc/lldb_providers.py index 9f2b2c85e65..7be40068b90 100644 --- a/src/etc/lldb_providers.py +++ b/src/etc/lldb_providers.py @@ -456,6 +456,8 @@ class StdVecSyntheticProvider: class StdSliceSyntheticProvider: + __slots__ = ["valobj", "length", "ptr", "element_type", "element_size"] + def __init__(self, valobj: SBValue, _dict: LLDBOpaque): self.valobj = valobj self.update() @@ -472,7 +474,7 @@ class StdSliceSyntheticProvider: def get_child_at_index(self, index: int) -> SBValue: start = self.data_ptr.GetValueAsUnsigned() - address = start + index * self.element_type_size + address = start + index * self.element_size element = self.data_ptr.CreateValueFromAddress( "[%s]" % index, address, self.element_type ) @@ -483,12 +485,33 @@ class StdSliceSyntheticProvider: self.data_ptr = self.valobj.GetChildMemberWithName("data_ptr") self.element_type = self.data_ptr.GetType().GetPointeeType() - self.element_type_size = self.element_type.GetByteSize() + self.element_size = self.element_type.GetByteSize() def has_children(self) -> bool: return True +class MSVCStdSliceSyntheticProvider(StdSliceSyntheticProvider): + def get_type_name(self) -> str: + name = self.valobj.GetTypeName() + + if name.startswith("ref_mut"): + # remove "ref_mut$<slice2$<" and trailing "> >" + name = name[17:-3] + ref = "&mut " + else: + # remove "ref$<slice2$<" and trailing "> >" + name = name[13:-3] + ref = "&" + + return "".join([ref, "[", name, "]"]) + +def StdSliceSummaryProvider(valobj, dict): + output = sequence_formatter("[", valobj, dict) + output += "]" + return output + + class StdVecDequeSyntheticProvider: """Pretty-printer for alloc::collections::vec_deque::VecDeque<T> |
