forked from OSchip/llvm-project
Enable the StringPrinter to have prefixes that are strings instead of just a single character; and also introduce a comparable suffix mechanism
llvm-svn: 249506
This commit is contained in:
parent
cbffa8cc97
commit
d54f7fb8eb
|
@ -15,6 +15,7 @@
|
|||
#include "lldb/Core/DataExtractor.h"
|
||||
|
||||
#include <functional>
|
||||
#include <string>
|
||||
|
||||
namespace lldb_private {
|
||||
namespace formatters
|
||||
|
@ -45,7 +46,8 @@ namespace lldb_private {
|
|||
m_location(0),
|
||||
m_process_sp(),
|
||||
m_stream(NULL),
|
||||
m_prefix_token(0),
|
||||
m_prefix_token(),
|
||||
m_suffix_token(),
|
||||
m_quote('"'),
|
||||
m_source_size(0),
|
||||
m_needs_zero_termination(true),
|
||||
|
@ -98,16 +100,43 @@ namespace lldb_private {
|
|||
}
|
||||
|
||||
ReadStringAndDumpToStreamOptions&
|
||||
SetPrefixToken (char p)
|
||||
SetPrefixToken (const std::string& p)
|
||||
{
|
||||
m_prefix_token = p;
|
||||
return *this;
|
||||
}
|
||||
|
||||
char
|
||||
ReadStringAndDumpToStreamOptions&
|
||||
SetPrefixToken (std::nullptr_t)
|
||||
{
|
||||
m_prefix_token.clear();
|
||||
return *this;
|
||||
}
|
||||
|
||||
const char*
|
||||
GetPrefixToken () const
|
||||
{
|
||||
return m_prefix_token;
|
||||
return m_prefix_token.c_str();
|
||||
}
|
||||
|
||||
ReadStringAndDumpToStreamOptions&
|
||||
SetSuffixToken (const std::string& p)
|
||||
{
|
||||
m_suffix_token = p;
|
||||
return *this;
|
||||
}
|
||||
|
||||
ReadStringAndDumpToStreamOptions&
|
||||
SetSuffixToken (std::nullptr_t)
|
||||
{
|
||||
m_suffix_token.clear();
|
||||
return *this;
|
||||
}
|
||||
|
||||
const char*
|
||||
GetSuffixToken () const
|
||||
{
|
||||
return m_suffix_token.c_str();
|
||||
}
|
||||
|
||||
ReadStringAndDumpToStreamOptions&
|
||||
|
@ -206,7 +235,8 @@ namespace lldb_private {
|
|||
uint64_t m_location;
|
||||
lldb::ProcessSP m_process_sp;
|
||||
Stream* m_stream;
|
||||
char m_prefix_token;
|
||||
std::string m_prefix_token;
|
||||
std::string m_suffix_token;
|
||||
char m_quote;
|
||||
uint32_t m_source_size;
|
||||
bool m_needs_zero_termination;
|
||||
|
@ -223,7 +253,8 @@ namespace lldb_private {
|
|||
ReadBufferAndDumpToStreamOptions () :
|
||||
m_data(),
|
||||
m_stream(NULL),
|
||||
m_prefix_token(0),
|
||||
m_prefix_token(),
|
||||
m_suffix_token(),
|
||||
m_quote('"'),
|
||||
m_source_size(0),
|
||||
m_escape_non_printables(true),
|
||||
|
@ -263,16 +294,43 @@ namespace lldb_private {
|
|||
}
|
||||
|
||||
ReadBufferAndDumpToStreamOptions&
|
||||
SetPrefixToken (char p)
|
||||
SetPrefixToken (const std::string& p)
|
||||
{
|
||||
m_prefix_token = p;
|
||||
return *this;
|
||||
}
|
||||
|
||||
char
|
||||
ReadBufferAndDumpToStreamOptions&
|
||||
SetPrefixToken (std::nullptr_t)
|
||||
{
|
||||
m_prefix_token.clear();
|
||||
return *this;
|
||||
}
|
||||
|
||||
const char*
|
||||
GetPrefixToken () const
|
||||
{
|
||||
return m_prefix_token;
|
||||
return m_prefix_token.c_str();
|
||||
}
|
||||
|
||||
ReadBufferAndDumpToStreamOptions&
|
||||
SetSuffixToken (const std::string& p)
|
||||
{
|
||||
m_suffix_token = p;
|
||||
return *this;
|
||||
}
|
||||
|
||||
ReadBufferAndDumpToStreamOptions&
|
||||
SetSuffixToken (std::nullptr_t)
|
||||
{
|
||||
m_suffix_token.clear();
|
||||
return *this;
|
||||
}
|
||||
|
||||
const char*
|
||||
GetSuffixToken () const
|
||||
{
|
||||
return m_suffix_token.c_str();
|
||||
}
|
||||
|
||||
ReadBufferAndDumpToStreamOptions&
|
||||
|
@ -344,7 +402,8 @@ namespace lldb_private {
|
|||
private:
|
||||
DataExtractor m_data;
|
||||
Stream* m_stream;
|
||||
char m_prefix_token;
|
||||
std::string m_prefix_token;
|
||||
std::string m_suffix_token;
|
||||
char m_quote;
|
||||
uint32_t m_source_size;
|
||||
bool m_escape_non_printables;
|
||||
|
|
|
@ -272,7 +272,7 @@ DumpUTFBufferToStream (ConversionResult (*ConvertFunction) (const SourceDataType
|
|||
{
|
||||
Stream &stream(*dump_options.GetStream());
|
||||
if (dump_options.GetPrefixToken() != 0)
|
||||
stream.Printf("%c",dump_options.GetPrefixToken());
|
||||
stream.Printf("%s",dump_options.GetPrefixToken());
|
||||
if (dump_options.GetQuote() != 0)
|
||||
stream.Printf("%c",dump_options.GetQuote());
|
||||
auto data(dump_options.GetData());
|
||||
|
@ -372,6 +372,8 @@ DumpUTFBufferToStream (ConversionResult (*ConvertFunction) (const SourceDataType
|
|||
}
|
||||
if (dump_options.GetQuote() != 0)
|
||||
stream.Printf("%c",dump_options.GetQuote());
|
||||
if (dump_options.GetSuffixToken() != 0)
|
||||
stream.Printf("%s",dump_options.GetSuffixToken());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -392,6 +394,7 @@ lldb_private::formatters::StringPrinter::ReadBufferAndDumpToStreamOptions::ReadB
|
|||
{
|
||||
SetStream(options.GetStream());
|
||||
SetPrefixToken(options.GetPrefixToken());
|
||||
SetSuffixToken(options.GetSuffixToken());
|
||||
SetQuote(options.GetQuote());
|
||||
SetEscapeNonPrintables(options.GetEscapeNonPrintables());
|
||||
SetBinaryZeroIsTerminator(options.GetBinaryZeroIsTerminator());
|
||||
|
@ -433,11 +436,11 @@ StringPrinter::ReadStringAndDumpToStream<StringPrinter::StringElementType::ASCII
|
|||
if (my_error.Fail())
|
||||
return false;
|
||||
|
||||
char prefix_token = options.GetPrefixToken();
|
||||
const char* prefix_token = options.GetPrefixToken();
|
||||
char quote = options.GetQuote();
|
||||
|
||||
if (prefix_token != 0)
|
||||
options.GetStream()->Printf("%c%c",prefix_token,quote);
|
||||
options.GetStream()->Printf("%s%c",prefix_token,quote);
|
||||
else if (quote != 0)
|
||||
options.GetStream()->Printf("%c",quote);
|
||||
|
||||
|
@ -481,8 +484,12 @@ StringPrinter::ReadStringAndDumpToStream<StringPrinter::StringElementType::ASCII
|
|||
data++;
|
||||
}
|
||||
}
|
||||
|
||||
if (quote != 0)
|
||||
|
||||
const char* suffix_token = options.GetSuffixToken();
|
||||
|
||||
if (suffix_token != 0)
|
||||
options.GetStream()->Printf("%c%s",quote, suffix_token);
|
||||
else if (quote != 0)
|
||||
options.GetStream()->Printf("%c",quote);
|
||||
|
||||
return true;
|
||||
|
|
|
@ -53,7 +53,7 @@ lldb_private::formatters::Char16StringSummaryProvider (ValueObject& valobj, Stre
|
|||
options.SetLocation(valobj_addr);
|
||||
options.SetProcessSP(process_sp);
|
||||
options.SetStream(&stream);
|
||||
options.SetPrefixToken('u');
|
||||
options.SetPrefixToken("u");
|
||||
|
||||
if (!StringPrinter::ReadStringAndDumpToStream<StringPrinter::StringElementType::UTF16>(options))
|
||||
{
|
||||
|
@ -79,7 +79,7 @@ lldb_private::formatters::Char32StringSummaryProvider (ValueObject& valobj, Stre
|
|||
options.SetLocation(valobj_addr);
|
||||
options.SetProcessSP(process_sp);
|
||||
options.SetStream(&stream);
|
||||
options.SetPrefixToken('U');
|
||||
options.SetPrefixToken("U");
|
||||
|
||||
if (!StringPrinter::ReadStringAndDumpToStream<StringPrinter::StringElementType::UTF32>(options))
|
||||
{
|
||||
|
@ -113,7 +113,7 @@ lldb_private::formatters::WCharStringSummaryProvider (ValueObject& valobj, Strea
|
|||
options.SetLocation(valobj_addr);
|
||||
options.SetProcessSP(process_sp);
|
||||
options.SetStream(&stream);
|
||||
options.SetPrefixToken('L');
|
||||
options.SetPrefixToken("L");
|
||||
|
||||
switch (wchar_size)
|
||||
{
|
||||
|
@ -148,7 +148,7 @@ lldb_private::formatters::Char16SummaryProvider (ValueObject& valobj, Stream& st
|
|||
StringPrinter::ReadBufferAndDumpToStreamOptions options(valobj);
|
||||
options.SetData(data);
|
||||
options.SetStream(&stream);
|
||||
options.SetPrefixToken('u');
|
||||
options.SetPrefixToken("u");
|
||||
options.SetQuote('\'');
|
||||
options.SetSourceSize(1);
|
||||
options.SetBinaryZeroIsTerminator(false);
|
||||
|
@ -174,7 +174,7 @@ lldb_private::formatters::Char32SummaryProvider (ValueObject& valobj, Stream& st
|
|||
StringPrinter::ReadBufferAndDumpToStreamOptions options(valobj);
|
||||
options.SetData(data);
|
||||
options.SetStream(&stream);
|
||||
options.SetPrefixToken('U');
|
||||
options.SetPrefixToken("U");
|
||||
options.SetQuote('\'');
|
||||
options.SetSourceSize(1);
|
||||
options.SetBinaryZeroIsTerminator(false);
|
||||
|
@ -195,7 +195,7 @@ lldb_private::formatters::WCharSummaryProvider (ValueObject& valobj, Stream& str
|
|||
StringPrinter::ReadBufferAndDumpToStreamOptions options(valobj);
|
||||
options.SetData(data);
|
||||
options.SetStream(&stream);
|
||||
options.SetPrefixToken('L');
|
||||
options.SetPrefixToken("L");
|
||||
options.SetQuote('\'');
|
||||
options.SetSourceSize(1);
|
||||
options.SetBinaryZeroIsTerminator(false);
|
||||
|
|
|
@ -573,7 +573,7 @@ lldb_private::formatters::LibcxxWStringSummaryProvider (ValueObject& valobj, Str
|
|||
StringPrinter::ReadBufferAndDumpToStreamOptions options(valobj);
|
||||
options.SetData(extractor);
|
||||
options.SetStream(&stream);
|
||||
options.SetPrefixToken('L');
|
||||
options.SetPrefixToken("L");
|
||||
options.SetQuote('"');
|
||||
options.SetSourceSize(size);
|
||||
options.SetBinaryZeroIsTerminator(false);
|
||||
|
|
|
@ -156,7 +156,7 @@ lldb_private::formatters::NSStringSummaryProvider (ValueObject& valobj, Stream&
|
|||
options.SetLocation(location);
|
||||
options.SetProcessSP(process_sp);
|
||||
options.SetStream(&stream);
|
||||
options.SetPrefixToken('@');
|
||||
options.SetPrefixToken("@");
|
||||
options.SetQuote('"');
|
||||
options.SetSourceSize(explicit_length);
|
||||
options.SetNeedsZeroTermination(false);
|
||||
|
@ -171,7 +171,7 @@ lldb_private::formatters::NSStringSummaryProvider (ValueObject& valobj, Stream&
|
|||
options.SetLocation(location+1);
|
||||
options.SetProcessSP(process_sp);
|
||||
options.SetStream(&stream);
|
||||
options.SetPrefixToken('@');
|
||||
options.SetPrefixToken("@");
|
||||
options.SetSourceSize(explicit_length);
|
||||
options.SetNeedsZeroTermination(false);
|
||||
options.SetIgnoreMaxLength(summary_options.GetCapping() == TypeSummaryCapping::eTypeSummaryUncapped);
|
||||
|
@ -188,7 +188,7 @@ lldb_private::formatters::NSStringSummaryProvider (ValueObject& valobj, Stream&
|
|||
options.SetLocation(location);
|
||||
options.SetProcessSP(process_sp);
|
||||
options.SetStream(&stream);
|
||||
options.SetPrefixToken('@');
|
||||
options.SetPrefixToken("@");
|
||||
options.SetQuote('"');
|
||||
options.SetSourceSize(explicit_length);
|
||||
options.SetIgnoreMaxLength(summary_options.GetCapping() == TypeSummaryCapping::eTypeSummaryUncapped);
|
||||
|
@ -218,7 +218,7 @@ lldb_private::formatters::NSStringSummaryProvider (ValueObject& valobj, Stream&
|
|||
options.SetLocation(location);
|
||||
options.SetProcessSP(process_sp);
|
||||
options.SetStream(&stream);
|
||||
options.SetPrefixToken('@');
|
||||
options.SetPrefixToken("@");
|
||||
options.SetQuote('"');
|
||||
options.SetSourceSize(explicit_length);
|
||||
options.SetNeedsZeroTermination(has_explicit_length == false);
|
||||
|
@ -237,7 +237,7 @@ lldb_private::formatters::NSStringSummaryProvider (ValueObject& valobj, Stream&
|
|||
options.SetLocation(location);
|
||||
options.SetProcessSP(process_sp);
|
||||
options.SetStream(&stream);
|
||||
options.SetPrefixToken('@');
|
||||
options.SetPrefixToken("@");
|
||||
options.SetQuote('"');
|
||||
options.SetSourceSize(explicit_length);
|
||||
options.SetNeedsZeroTermination(has_explicit_length == false);
|
||||
|
@ -265,7 +265,7 @@ lldb_private::formatters::NSStringSummaryProvider (ValueObject& valobj, Stream&
|
|||
options.SetLocation(location);
|
||||
options.SetProcessSP(process_sp);
|
||||
options.SetStream(&stream);
|
||||
options.SetPrefixToken('@');
|
||||
options.SetPrefixToken("@");
|
||||
options.SetSourceSize(explicit_length);
|
||||
options.SetNeedsZeroTermination(!has_explicit_length);
|
||||
options.SetIgnoreMaxLength(summary_options.GetCapping() == TypeSummaryCapping::eTypeSummaryUncapped);
|
||||
|
@ -287,7 +287,7 @@ lldb_private::formatters::NSStringSummaryProvider (ValueObject& valobj, Stream&
|
|||
StringPrinter::ReadStringAndDumpToStreamOptions options(valobj);
|
||||
options.SetLocation(location);
|
||||
options.SetProcessSP(process_sp);
|
||||
options.SetPrefixToken('@');
|
||||
options.SetPrefixToken("@");
|
||||
options.SetStream(&stream);
|
||||
options.SetSourceSize(explicit_length);
|
||||
options.SetIgnoreMaxLength(summary_options.GetCapping() == TypeSummaryCapping::eTypeSummaryUncapped);
|
||||
|
|
Loading…
Reference in New Issue