Skip to content

Commit af7c901

Browse files
slackitocjdb
authored andcommitted
changes deque's pretty-printer to work with new __split_buffer
1 parent 7084c96 commit af7c901

File tree

1 file changed

+42
-12
lines changed

1 file changed

+42
-12
lines changed

lldb/examples/synthetic/libcxx.py

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
from enum import Enum
2+
from sys import stderr
3+
import sys
14
import lldb
25
import lldb.formatters.Logger
36

@@ -74,6 +77,40 @@ def stdstring_SummaryProvider(valobj, dict):
7477
return '"' + strval + '"'
7578

7679

80+
def get_buffer_data(parent):
81+
map_valobj = parent.valobj.GetChildMemberWithName("__map_")
82+
map_data = map_valobj.GetChildMemberWithName("__data_")
83+
if map_data.IsValid():
84+
return map_data
85+
86+
return map_valobj
87+
88+
89+
def get_buffer_end(buffer, begin):
90+
map_end = buffer.GetChildMemberWithName("__end_")
91+
if map_end.IsValid():
92+
return map_end.GetValueAsUnsigned(0)
93+
map_size = buffer.GetChildMemberWithName("__size_").GetValueAsUnsigned(0)
94+
return begin + map_size
95+
96+
97+
def get_buffer_endcap(parent, buffer, begin, has_compressed_pair_layout, is_size_based):
98+
if has_compressed_pair_layout:
99+
map_endcap = parent._get_value_of_compressed_pair(
100+
buffer.GetChildMemberWithName("__end_cap_")
101+
)
102+
else:
103+
map_endcap = buffer.GetChildMemberWithName("__cap_")
104+
if not map_endcap.IsValid():
105+
map_endcap = buffer.GetChildMemberWithName("__end_cap_")
106+
map_endcap = map_endcap.GetValueAsUnsigned(0)
107+
108+
if is_size_based:
109+
return begin + map_endcap
110+
111+
return map_endcap
112+
113+
77114
class stdvector_SynthProvider:
78115
def __init__(self, valobj, dict):
79116
logger = lldb.formatters.Logger.Logger()
@@ -755,23 +792,16 @@ def update(self):
755792
if self.block_size < 0:
756793
logger.write("block_size < 0")
757794
return
758-
map_ = self.valobj.GetChildMemberWithName("__map_")
759795
start = self.valobj.GetChildMemberWithName("__start_").GetValueAsUnsigned(0)
796+
797+
map_ = get_buffer_data(self)
798+
is_size_based = map_.GetChildMemberWithName("__size_").IsValid()
760799
first = map_.GetChildMemberWithName("__first_")
761800
map_first = first.GetValueAsUnsigned(0)
762801
self.map_begin = map_.GetChildMemberWithName("__begin_")
763802
map_begin = self.map_begin.GetValueAsUnsigned(0)
764-
map_end = map_.GetChildMemberWithName("__end_").GetValueAsUnsigned(0)
765-
766-
if has_compressed_pair_layout:
767-
map_endcap = self._get_value_of_compressed_pair(
768-
map_.GetChildMemberWithName("__end_cap_")
769-
)
770-
else:
771-
map_endcap = map_.GetChildMemberWithName("__cap_")
772-
if not map_endcap.IsValid():
773-
map_endcap = map_.GetChildMemberWithName("__end_cap_")
774-
map_endcap = map_endcap.GetValueAsUnsigned(0)
803+
map_end = get_buffer_end(map_, map_begin)
804+
map_endcap = get_buffer_endcap(self, map_, map_begin, has_compressed_pair_layout, is_size_based)
775805

776806
# check consistency
777807
if not map_first <= map_begin <= map_end <= map_endcap:

0 commit comments

Comments
 (0)