diff options
author | Enrico Granata <egranata@apple.com> | 2012-10-22 18:18:36 +0000 |
---|---|---|
committer | Enrico Granata <egranata@apple.com> | 2012-10-22 18:18:36 +0000 |
commit | e3e91517ffd7e63bcb5b9d196f85e2b09802b414 (patch) | |
tree | 16ba51bd013c2fb1d9753e2c6a6aae958202f892 /lldb/scripts/Python | |
parent | 2f758cf8bafb527e9a709043d9704449a5f767b8 (diff) | |
download | bcm5719-llvm-e3e91517ffd7e63bcb5b9d196f85e2b09802b414.tar.gz bcm5719-llvm-e3e91517ffd7e63bcb5b9d196f85e2b09802b414.zip |
<rdar://problem/12437442>
Given our implementation of ValueObjects we could have a scenario where a ValueObject has a dynamic type of Foo* at one point, and then its dynamic type changes to Bar*
If Bar* has synthetic children enabled, by the time we figure that out, our public API is already vending SBValues wrapping a DynamicVO, instead of a SyntheticVO and there was
no trivial way for us to change the SP inside an SBValue on the fly
This checkin reimplements SBValue in terms of a wrapper, ValueImpl, that allows this substitutions on-the-fly by overriding GetSP() to do The Right Thing (TM)
As an additional bonus, GetNonSyntheticValue() now works, and we can get rid of the ForceDisableSyntheticChildren idiom in ScriptInterpreterPython
Lastly, this checkin makes sure the synthetic VOs get the correct m_value and m_data from their parents (prevented summaries from working in some cases)
llvm-svn: 166426
Diffstat (limited to 'lldb/scripts/Python')
-rw-r--r-- | lldb/scripts/Python/interface/SBValue.i | 15 | ||||
-rw-r--r-- | lldb/scripts/Python/python-wrapper.swig | 1 |
2 files changed, 16 insertions, 0 deletions
diff --git a/lldb/scripts/Python/interface/SBValue.i b/lldb/scripts/Python/interface/SBValue.i index 70c3d807453..00d9b567d83 100644 --- a/lldb/scripts/Python/interface/SBValue.i +++ b/lldb/scripts/Python/interface/SBValue.i @@ -129,9 +129,24 @@ public: lldb::SBValue GetNonSyntheticValue (); + + lldb::DynamicValueType + GetPreferDynamicValue (); + + void + SetPreferDynamicValue (lldb::DynamicValueType use_dynamic); + + bool + GetPreferSyntheticValue (); + + void + SetPreferSyntheticValue (bool use_synthetic); bool IsDynamic(); + + bool + IsSynthetic (); const char * GetLocation (); diff --git a/lldb/scripts/Python/python-wrapper.swig b/lldb/scripts/Python/python-wrapper.swig index 113447ee910..a3aeefb1f77 100644 --- a/lldb/scripts/Python/python-wrapper.swig +++ b/lldb/scripts/Python/python-wrapper.swig @@ -336,6 +336,7 @@ LLDBSwigPythonCreateSyntheticProvider // I do not want the SBValue to be deallocated when going out of scope because python // has ownership of it and will manage memory for this object by itself lldb::SBValue *valobj_sb = new lldb::SBValue(valobj_sp); + valobj_sb->SetPreferSyntheticValue(false); PyObject *ValObj_PyObj = SWIG_NewPointerObj((void *)valobj_sb, SWIGTYPE_p_lldb__SBValue, 0); |