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 | |
| parent | 8b14227aa96cf1bfdfdf46e879837b0763073a1b (diff) | |
| download | rust-71b6d49282ee68a980aada44a65d4f6e8f1c8991.tar.gz rust-71b6d49282ee68a980aada44a65d4f6e8f1c8991.zip | |
add MSVC slice providers
| -rw-r--r-- | src/etc/lldb_commands | 2 | ||||
| -rw-r--r-- | src/etc/lldb_providers.py | 27 |
2 files changed, 27 insertions, 2 deletions
diff --git a/src/etc/lldb_commands b/src/etc/lldb_commands index 71968f2dbe6..23282d2d25b 100644 --- a/src/etc/lldb_commands +++ b/src/etc/lldb_commands @@ -44,4 +44,6 @@ type summary add -F lldb_lookup.summary_lookup -e -x -h "^core::num::([a-z_]+:: type summary add -F lldb_lookup.summary_lookup -e -x -h "^(std::([a-z_]+::)+)PathBuf$" --category Rust type summary add -F lldb_lookup.summary_lookup -e -x -h "^&(mut )?(std::([a-z_]+::)+)Path$" --category Rust type summary add -F lldb_lookup.TupleSummaryProvider -e -x -h "^tuple\$<.+>$" --category Rust +type summary add -F lldb_lookup.StdSliceSummaryProvider -e -x -h "^ref(_mut)?\$<slice2\$<.+> >" --category Rust +type synthetic add -l lldb_lookup.MSVCStdSliceSyntheticProvider -x "^ref(_mut)?\$<slice2\$<.+> >" --category Rust type category enable Rust 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> |
