Skip to content

Commit 1242ce6

Browse files
committed
[lldb] Name UnsafePointer's single child 'pointee'
1 parent 0f6e045 commit 1242ce6

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

lldb/source/Plugins/Language/Swift/SwiftUnsafeTypes.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ class SwiftUnsafeType {
2828
addr_t GetStartAddress() const { return m_start_addr; }
2929
CompilerType GetElementType() const { return m_elem_type; }
3030
UnsafePointerKind GetKind() const { return m_kind; }
31+
bool HasPointee() const {
32+
return m_count == 1 && m_kind == UnsafePointerKind::eSwiftUnsafePointer;
33+
}
3134
virtual bool Update() = 0;
3235

3336
virtual ~SwiftUnsafeType() = default;
@@ -525,6 +528,14 @@ bool lldb_private::formatters::swift::UnsafeTypeSyntheticFrontEnd::Update() {
525528
DataExtractor buffer_data(m_buffer_sp->GetBytes(),
526529
m_buffer_sp->GetByteSize(), m_order, m_ptr_size);
527530

531+
// UnsafePointer/UnsafeMutablePointer have a `pointee` property.
532+
if (m_unsafe_ptr->HasPointee()) {
533+
DataExtractor data(buffer_data, 0, m_element_stride);
534+
m_children.push_back(CreateValueObjectFromData(
535+
"pointee", data, m_exe_ctx_ref, element_type));
536+
return true;
537+
}
538+
528539
for (size_t i = 0; i < num_children; i++) {
529540
StreamString idx_name;
530541
idx_name.Printf("[%zu]", i);
@@ -544,6 +555,8 @@ bool lldb_private::formatters::swift::UnsafeTypeSyntheticFrontEnd::
544555

545556
size_t lldb_private::formatters::swift::UnsafeTypeSyntheticFrontEnd::
546557
GetIndexOfChildWithName(ConstString name) {
558+
if (m_unsafe_ptr->HasPointee() && name == "pointee")
559+
return 0;
547560
return UINT32_MAX;
548561
}
549562

lldb/test/API/functionalities/data-formatter/swift-unsafe/main.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,15 +75,24 @@ func main() {
7575
//% self.expect("frame variable -d run-target unsafe_ptr",
7676
//% patterns=[
7777
//% '\(UnsafePointer<(.*)\.ColorCode>\) unsafe_ptr = 0[xX][0-9a-fA-F]+ {',
78-
//% '\[0\] = RGB {',
78+
//% 'pointee = RGB {',
79+
//% 'RGB = \(0 = 155, 1 = 219, 2 = 255\)'
80+
//% ])
81+
//% self.expect("frame variable -d run-target unsafe_ptr.pointee",
82+
//% patterns=[
83+
//% 'pointee = RGB {',
7984
//% 'RGB = \(0 = 155, 1 = 219, 2 = 255\)'
8085
//% ])
8186

8287
var unsafe_mutable_ptr = UnsafeMutablePointer(&colors[1])
8388
//% self.expect("frame variable -d run-target unsafe_mutable_ptr",
8489
//% patterns=[
8590
//% '\(UnsafeMutablePointer<(.*)\.ColorCode>\) unsafe_mutable_ptr = 0[xX][0-9a-fA-F]+ {',
86-
//% '\[0\] = Hex \(Hex = 4539903\)'
91+
//% 'pointee = Hex \(Hex = 4539903\)'
92+
//% ])
93+
//% self.expect("frame variable -d run-target unsafe_mutable_ptr.pointee",
94+
//% patterns=[
95+
//% 'pointee = Hex \(Hex = 4539903\)'
8796
//% ])
8897

8998
let unsafe_raw_ptr = UnsafeRawPointer(&colors[0])

0 commit comments

Comments
 (0)