Index: lldb/trunk/include/lldb/API/SBTypeSummary.h =================================================================== --- lldb/trunk/include/lldb/API/SBTypeSummary.h +++ lldb/trunk/include/lldb/API/SBTypeSummary.h @@ -69,6 +69,9 @@ public: SBTypeSummary(); + + // Native function summary formatter callback + typedef bool (*FormatCallback) (SBValue, SBTypeSummaryOptions, SBStream&); static SBTypeSummary CreateWithSummaryString (const char* data, @@ -81,6 +84,10 @@ static SBTypeSummary CreateWithScriptCode (const char* data, uint32_t options = 0); // see lldb::eTypeOption values + + static SBTypeSummary + CreateWithCallback (FormatCallback cb, + uint32_t options = 0); SBTypeSummary (const lldb::SBTypeSummary &rhs); Index: lldb/trunk/source/API/SBTypeSummary.cpp =================================================================== --- lldb/trunk/source/API/SBTypeSummary.cpp +++ lldb/trunk/source/API/SBTypeSummary.cpp @@ -146,6 +146,25 @@ return SBTypeSummary(TypeSummaryImplSP(new ScriptSummaryFormat(options, "", data))); } +SBTypeSummary +SBTypeSummary::CreateWithCallback (FormatCallback cb, uint32_t options) +{ + return SBTypeSummary( + TypeSummaryImplSP( + cb ? new CXXFunctionSummaryFormat(options, + [cb] (ValueObject& valobj, Stream& stm, const TypeSummaryOptions& opt) -> bool { + BStream stream; + if (!cb(SBValue(valobj.GetSP()), SBTypeSummaryOptions(&opt), stream)) + return false; + stm.Write(stream.GetData(), stream.GetSize()); + return true; + }, + "SBTypeSummary formatter callback" + ) : nullptr + ) + ); +} + SBTypeSummary::SBTypeSummary (const lldb::SBTypeSummary &rhs) : m_opaque_sp(rhs.m_opaque_sp) {