If a user specifies a format option to frame variable or expression, that format should prevail over whatever format(s) a summary specifies
(see test case for an example)
llvm-svn: 199857
diff --git a/lldb/source/DataFormatters/ValueObjectPrinter.cpp b/lldb/source/DataFormatters/ValueObjectPrinter.cpp
index 5c7f48b..f8a9151 100644
--- a/lldb/source/DataFormatters/ValueObjectPrinter.cpp
+++ b/lldb/source/DataFormatters/ValueObjectPrinter.cpp
@@ -282,17 +282,15 @@
std::string& summary,
std::string& error)
{
- if (options.m_format != eFormatDefault && options.m_format != m_valobj->GetFormat())
+ lldb::Format original_format;
+ bool custom_format = options.m_format != eFormatDefault && options.m_format != m_valobj->GetFormat();
+ if (custom_format)
{
- m_valobj->GetValueAsCString(options.m_format,
- value);
+ original_format = m_valobj->GetFormat();
+ m_valobj->SetFormat(options.m_format);
}
- else
- {
- const char* val_cstr = m_valobj->GetValueAsCString();
- if (val_cstr)
- value.assign(val_cstr);
- }
+ const char* val_cstr = m_valobj->GetValueAsCString();
+ value.assign(val_cstr ? val_cstr : "");
const char* err_cstr = m_valobj->GetError().AsCString();
if (err_cstr)
error.assign(err_cstr);
@@ -314,6 +312,8 @@
}
}
}
+ if (custom_format)
+ m_valobj->SetFormat(original_format);
}
bool