25 return (60 - (13 * (4 - i)));
29 return (32 - (13 * (2 - i)));
36 m_impl(), m_uint_star_type() {
38 m_backend.GetTargetSP()->GetArchitecture().GetAddressByteSize();
46 return m_impl.GetIndexAtIndex(idx, m_uint_star_type);
52 auto type_system = m_backend.GetCompilerType().GetTypeSystem();
56 auto ast = ScratchTypeSystemClang::GetForTarget(
57 *m_backend.GetExecutionContextRef().GetTargetSP());
61 m_uint_star_type = ast->GetPointerSizedIntType(
false);
66 ProcessSP process_sp = m_backend.GetProcessSP();
78 if (!descriptor.get() || !descriptor->IsValid())
81 uint64_t info_bits(0), value_bits(0), payload(0);
83 if (descriptor->GetTaggedPointerInfo(&info_bits, &value_bits, &payload)) {
84 m_impl.m_inlined.SetIndexes(payload, *process_sp);
85 m_impl.m_mode = Mode::Inlined;
90 bool has_indexes(
false), has_length(
false);
92 for (
size_t x = 0; x < descriptor->GetNumIVars(); x++) {
93 const auto &ivar = descriptor->GetIVarAtIndex(x);
94 if (ivar.m_name == g__indexes) {
97 }
else if (ivar.m_name == g__length) {
102 if (has_length && has_indexes)
106 if (has_length && has_indexes) {
107 m_impl.m_outsourced.m_indexes =
109 .GetSyntheticChildAtOffset(_indexes_id.
m_offset,
110 m_uint_star_type.GetPointerType(),
113 ValueObjectSP length_sp(m_backend.GetSyntheticChildAtOffset(
114 _length_id.
m_offset, m_uint_star_type,
true));
116 m_impl.m_outsourced.m_count = length_sp->GetValueAsUnsigned(0);
117 if (m_impl.m_outsourced.m_indexes)
118 m_impl.m_mode = Mode::Outsourced;
146 return m_inlined.GetNumIndexes();
147 case Mode::Outsourced:
148 return m_outsourced.m_count;
156 if (idx >= GetNumIndexes())
162 return m_inlined.GetIndexAtIndex(idx, desired_type);
163 case Mode::Outsourced:
164 return m_outsourced.GetIndexAtIndex(idx);
183 std::pair<uint64_t, bool> value(_indexAtPositionForInlinePayload(idx));
188 if (m_ptr_size == 8) {
189 Scalar scalar((
unsigned long long)value.first);
192 Scalar scalar((
unsigned int)value.first);
199 idx_name.
Printf(
"[%" PRIu64
"]", (uint64_t)idx);
201 return ValueObjectConstResult::Create(
215 uint64_t m_indexes = 0;
222 m_ptr_size = ptr_size;
224 m_count = ((m_indexes >> 3) & 0
x7);
226 m_count = ((m_indexes >> 3) & 0
x3);
231 static const uint64_t PACKED_INDEX_MASK = ((1 << 13) - 1);
232 if (m_ptr_size == 8) {
262 ValueObjectSP index_sp(m_indexes->GetSyntheticArrayMember(idx,
true));
289 case Mode::Outsourced:
290 m_outsourced.Clear();
295 m_mode = Mode::Invalid;
308 namespace formatters {
312 lldb::ValueObjectSP valobj_sp) {