summaryrefslogtreecommitdiffstats
path: root/lldb
diff options
context:
space:
mode:
Diffstat (limited to 'lldb')
-rw-r--r--lldb/source/DataFormatters/FormatManager.cpp15
-rw-r--r--lldb/source/DataFormatters/ValueObjectPrinter.cpp5
-rw-r--r--lldb/test/functionalities/data-formatter/data-formatter-synthval/TestDataFormatterSynthVal.py3
-rw-r--r--lldb/test/functionalities/data-formatter/data-formatter-synthval/myIntSynthProvider.py2
4 files changed, 19 insertions, 6 deletions
diff --git a/lldb/source/DataFormatters/FormatManager.cpp b/lldb/source/DataFormatters/FormatManager.cpp
index 723e6c70cf3..bd4e58c7567 100644
--- a/lldb/source/DataFormatters/FormatManager.cpp
+++ b/lldb/source/DataFormatters/FormatManager.cpp
@@ -541,6 +541,7 @@ FormatManager::ShouldPrintAsOneLiner (ValueObject& valobj)
idx < valobj.GetNumChildren();
idx++)
{
+ bool is_synth_val = false;
ValueObjectSP child_sp(valobj.GetChildAtIndex(idx, true));
// something is wrong here - bail out
if (!child_sp)
@@ -548,7 +549,17 @@ FormatManager::ShouldPrintAsOneLiner (ValueObject& valobj)
// if we decided to define synthetic children for a type, we probably care enough
// to show them, but avoid nesting children in children
if (child_sp->GetSyntheticChildren().get() != nullptr)
- return false;
+ {
+ ValueObjectSP synth_sp(child_sp->GetSyntheticValue());
+ // wait.. wat? just get out of here..
+ if (!synth_sp)
+ return false;
+ // but if we only have them to provide a value, keep going
+ if (synth_sp->MightHaveChildren() == false && synth_sp->DoesProvideSyntheticValue())
+ is_synth_val = true;
+ else
+ return false;
+ }
total_children_name_len += child_sp->GetName().GetLength();
@@ -572,7 +583,7 @@ FormatManager::ShouldPrintAsOneLiner (ValueObject& valobj)
// ...and no summary...
// (if it had a summary and the summary wanted children, we would have bailed out anyway
// so this only makes us bail out if this has no summary and we would then print children)
- if (!child_sp->GetSummaryFormat())
+ if (!child_sp->GetSummaryFormat() && !is_synth_val) // but again only do that if not a synthetic valued child
return false; // then bail out
}
}
diff --git a/lldb/source/DataFormatters/ValueObjectPrinter.cpp b/lldb/source/DataFormatters/ValueObjectPrinter.cpp
index 126ff78c389..e7bebcbeb4f 100644
--- a/lldb/source/DataFormatters/ValueObjectPrinter.cpp
+++ b/lldb/source/DataFormatters/ValueObjectPrinter.cpp
@@ -591,9 +591,8 @@ ValueObjectPrinter::PrintChildrenOneLiner (bool hide_names)
for (uint32_t idx=0; idx<num_children; ++idx)
{
lldb::ValueObjectSP child_sp(synth_m_valobj->GetChildAtIndex(idx, true));
- lldb::ValueObjectSP child_dyn_sp = child_sp.get() ? child_sp->GetDynamicValue(options.m_use_dynamic) : child_sp;
- if (child_dyn_sp)
- child_sp = child_dyn_sp;
+ if (child_sp)
+ child_sp = child_sp->GetQualifiedRepresentationIfAvailable(options.m_use_dynamic, options.m_use_synthetic);
if (child_sp)
{
if (idx)
diff --git a/lldb/test/functionalities/data-formatter/data-formatter-synthval/TestDataFormatterSynthVal.py b/lldb/test/functionalities/data-formatter/data-formatter-synthval/TestDataFormatterSynthVal.py
index c5ff06b04b4..1fd0d8be8cf 100644
--- a/lldb/test/functionalities/data-formatter/data-formatter-synthval/TestDataFormatterSynthVal.py
+++ b/lldb/test/functionalities/data-formatter/data-formatter-synthval/TestDataFormatterSynthVal.py
@@ -87,6 +87,9 @@ class DataFormatterSynthValueTestCase(TestBase):
self.expect("frame variable x", substrs=['3'])
self.expect("frame variable x", substrs=['theValue = 3'], matching=False)
+
+ # check that an aptly defined synthetic provider does not affect one-lining
+ self.expect("expression struct S { myInt theInt{12}; }; S()", substrs = ['(theInt = 12)'])
if __name__ == '__main__':
import atexit
diff --git a/lldb/test/functionalities/data-formatter/data-formatter-synthval/myIntSynthProvider.py b/lldb/test/functionalities/data-formatter/data-formatter-synthval/myIntSynthProvider.py
index d37cb0ecc5f..c716836a673 100644
--- a/lldb/test/functionalities/data-formatter/data-formatter-synthval/myIntSynthProvider.py
+++ b/lldb/test/functionalities/data-formatter/data-formatter-synthval/myIntSynthProvider.py
@@ -10,7 +10,7 @@ class myIntSynthProvider(object):
return None
def update(self):
return False
- def might_have_children(self):
+ def has_children(self):
return False
def get_value(self):
return self.val
OpenPOWER on IntegriCloud