9 #include "clang/AST/DeclCXX.h"
32 ValueObjectSP *reason_sp, ValueObjectSP *userinfo_sp,
33 ValueObjectSP *reserved_sp) {
42 if (type_flags.
AllClear(eTypeHasValue)) {
51 size_t ptr_size = process_sp->GetAddressByteSize();
54 auto name = process_sp->ReadPointerFromMemory(ptr + 1 * ptr_size,
error);
57 auto reason = process_sp->ReadPointerFromMemory(ptr + 2 * ptr_size,
error);
60 auto userinfo = process_sp->ReadPointerFromMemory(ptr + 3 * ptr_size,
error);
63 auto reserved = process_sp->ReadPointerFromMemory(ptr + 4 * ptr_size,
error);
72 TypeSystemClangSP scratch_ts_sp =
73 ScratchTypeSystemClang::GetForTarget(process_sp->GetTarget());
81 *name_sp = ValueObject::CreateValueObjectFromData(
82 "name", name_isw.
GetAsData(process_sp->GetByteOrder()),
85 *reason_sp = ValueObject::CreateValueObjectFromData(
86 "reason", reason_isw.
GetAsData(process_sp->GetByteOrder()),
89 *userinfo_sp = ValueObject::CreateValueObjectFromData(
90 "userInfo", userinfo_isw.
GetAsData(process_sp->GetByteOrder()),
93 *reserved_sp = ValueObject::CreateValueObjectFromData(
94 "reserved", reserved_isw.
GetAsData(process_sp->GetByteOrder()),
102 lldb::ValueObjectSP reason_sp;
103 if (!
ExtractFields(valobj,
nullptr, &reason_sp,
nullptr,
nullptr))
107 stream.
Printf(
"No reason");
113 !reason_str_summary.
Empty()) {
133 case 0:
return m_name_sp;
134 case 1:
return m_reason_sp;
135 case 2:
return m_userinfo_sp;
136 case 3:
return m_reserved_sp;
138 return lldb::ValueObjectSP();
144 m_userinfo_sp.reset();
145 m_reserved_sp.reset();
147 return ExtractFields(m_backend, &m_name_sp, &m_reason_sp, &m_userinfo_sp,
163 if (name == g_name)
return 0;
164 if (name == g_reason)
return 1;
165 if (name == g_userInfo)
return 2;
166 if (name == g_reserved)
return 3;
180 lldb::ProcessSP process_sp(valobj_sp->GetProcessSP());
190 if (!descriptor.get() || !descriptor->IsValid())
193 const char *class_name = descriptor->GetClassName().GetCString();
195 if (!class_name || !*class_name)
198 if (!strcmp(class_name,
"NSException"))
200 else if (!strcmp(class_name,
"NSCFException"))
202 else if (!strcmp(class_name,
"__NSCFException"))