Skip to content

Commit 723e129

Browse files
author
Enrico Granata
committed
<rdar://problem/13437949>
Making sure that CF*{Array|Dictionary}Ref provide synthetic children correctly. llvm-svn: 180074
1 parent b44bc7d commit 723e129

File tree

3 files changed

+6
-42
lines changed

3 files changed

+6
-42
lines changed

lldb/source/DataFormatters/FormatManager.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -900,6 +900,8 @@ FormatManager::LoadObjCFormatters()
900900
AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("NSArray"), ScriptedSyntheticChildren::Flags());
901901
AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("NSMutableArray"), ScriptedSyntheticChildren::Flags());
902902
AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("__NSCFArray"), ScriptedSyntheticChildren::Flags());
903+
AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("CFMutableArrayRef"), ScriptedSyntheticChildren::Flags());
904+
AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("CFArrayRef"), ScriptedSyntheticChildren::Flags());
903905

904906
AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("__NSDictionaryM"), ScriptedSyntheticChildren::Flags());
905907
AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("__NSDictionaryI"), ScriptedSyntheticChildren::Flags());

lldb/source/DataFormatters/NSArray.cpp

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,7 @@ m_data_32(NULL),
9797
m_data_64(NULL)
9898
{
9999
if (valobj_sp)
100-
{
101100
m_id_type = ClangASTType(valobj_sp->GetClangAST(),valobj_sp->GetClangAST()->ObjCBuiltinIdTy.getAsOpaquePtr());
102-
Update();
103-
}
104101
}
105102

106103
size_t
@@ -150,18 +147,12 @@ lldb_private::formatters::NSArrayMSyntheticFrontEnd::Update()
150147
return false;
151148
m_exe_ctx_ref = valobj_sp->GetExecutionContextRef();
152149
Error error;
153-
if (valobj_sp->IsPointerType())
154-
{
155-
valobj_sp = valobj_sp->Dereference(error);
156-
if (error.Fail() || !valobj_sp)
157-
return false;
158-
}
159150
error.Clear();
160151
lldb::ProcessSP process_sp(valobj_sp->GetProcessSP());
161152
if (!process_sp)
162153
return false;
163154
m_ptr_size = process_sp->GetAddressByteSize();
164-
uint64_t data_location = valobj_sp->GetAddressOf() + m_ptr_size;
155+
uint64_t data_location = valobj_sp->GetValueAsUnsigned(0) + m_ptr_size;
165156
if (m_ptr_size == 4)
166157
{
167158
m_data_32 = new DataDescriptor_32();
@@ -211,10 +202,7 @@ m_items(0),
211202
m_data_ptr(0)
212203
{
213204
if (valobj_sp)
214-
{
215205
m_id_type = ClangASTType(valobj_sp->GetClangAST(),valobj_sp->GetClangAST()->ObjCBuiltinIdTy.getAsOpaquePtr());
216-
Update();
217-
}
218206
}
219207

220208
lldb_private::formatters::NSArrayISyntheticFrontEnd::~NSArrayISyntheticFrontEnd ()
@@ -249,18 +237,12 @@ lldb_private::formatters::NSArrayISyntheticFrontEnd::Update()
249237
return false;
250238
m_exe_ctx_ref = valobj_sp->GetExecutionContextRef();
251239
Error error;
252-
if (valobj_sp->IsPointerType())
253-
{
254-
valobj_sp = valobj_sp->Dereference(error);
255-
if (error.Fail() || !valobj_sp)
256-
return false;
257-
}
258240
error.Clear();
259241
lldb::ProcessSP process_sp(valobj_sp->GetProcessSP());
260242
if (!process_sp)
261243
return false;
262244
m_ptr_size = process_sp->GetAddressByteSize();
263-
uint64_t data_location = valobj_sp->GetAddressOf() + m_ptr_size;
245+
uint64_t data_location = valobj_sp->GetValueAsUnsigned(0) + m_ptr_size;
264246
m_items = process_sp->ReadPointerFromMemory(data_location, error);
265247
if (error.Fail())
266248
return false;

lldb/source/DataFormatters/NSDictionary.cpp

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -255,8 +255,6 @@ m_data_32(NULL),
255255
m_data_64(NULL),
256256
m_pair_type()
257257
{
258-
if (valobj_sp)
259-
Update();
260258
}
261259

262260
lldb_private::formatters::NSDictionaryISyntheticFrontEnd::~NSDictionaryISyntheticFrontEnd ()
@@ -295,25 +293,17 @@ lldb_private::formatters::NSDictionaryISyntheticFrontEnd::Update()
295293
m_data_64 = NULL;
296294
m_ptr_size = 0;
297295
ValueObjectSP valobj_sp = m_backend.GetSP();
298-
if (!valobj_sp)
299-
return false;
300296
if (!valobj_sp)
301297
return false;
302298
m_exe_ctx_ref = valobj_sp->GetExecutionContextRef();
303299
Error error;
304-
if (valobj_sp->IsPointerType())
305-
{
306-
valobj_sp = valobj_sp->Dereference(error);
307-
if (error.Fail() || !valobj_sp)
308-
return false;
309-
}
310300
error.Clear();
311301
lldb::ProcessSP process_sp(valobj_sp->GetProcessSP());
312302
if (!process_sp)
313303
return false;
314304
m_ptr_size = process_sp->GetAddressByteSize();
315305
m_order = process_sp->GetByteOrder();
316-
uint64_t data_location = valobj_sp->GetAddressOf() + m_ptr_size;
306+
uint64_t data_location = valobj_sp->GetValueAsUnsigned(0) + m_ptr_size;
317307
if (m_ptr_size == 4)
318308
{
319309
m_data_32 = new DataDescriptor_32();
@@ -427,8 +417,6 @@ m_data_32(NULL),
427417
m_data_64(NULL),
428418
m_pair_type()
429419
{
430-
if (valobj_sp)
431-
Update ();
432420
}
433421

434422
lldb_private::formatters::NSDictionaryMSyntheticFrontEnd::~NSDictionaryMSyntheticFrontEnd ()
@@ -467,25 +455,17 @@ lldb_private::formatters::NSDictionaryMSyntheticFrontEnd::Update()
467455
m_data_32 = NULL;
468456
delete m_data_64;
469457
m_data_64 = NULL;
470-
if (!valobj_sp)
471-
return false;
472458
if (!valobj_sp)
473459
return false;
474460
m_exe_ctx_ref = valobj_sp->GetExecutionContextRef();
475461
Error error;
476-
if (valobj_sp->IsPointerType())
477-
{
478-
valobj_sp = valobj_sp->Dereference(error);
479-
if (error.Fail() || !valobj_sp)
480-
return false;
481-
}
482462
error.Clear();
483463
lldb::ProcessSP process_sp(valobj_sp->GetProcessSP());
484464
if (!process_sp)
485465
return false;
486466
m_ptr_size = process_sp->GetAddressByteSize();
487467
m_order = process_sp->GetByteOrder();
488-
uint64_t data_location = valobj_sp->GetAddressOf() + m_ptr_size;
468+
uint64_t data_location = valobj_sp->GetValueAsUnsigned(0) + m_ptr_size;
489469
if (m_ptr_size == 4)
490470
{
491471
m_data_32 = new DataDescriptor_32();

0 commit comments

Comments
 (0)