summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEnrico Granata <egranata@apple.com>2015-10-07 02:06:48 +0000
committerEnrico Granata <egranata@apple.com>2015-10-07 02:06:48 +0000
commitd54f7fb8eb3c0817d17c89640a8e3bcf0622c952 (patch)
treeb25c936a539cbd296db3e17bb38cd86bc2f9dd11
parentcbffa8cc97336946adcbd6b3b532f3c080cbf246 (diff)
downloadbcm5719-llvm-d54f7fb8eb3c0817d17c89640a8e3bcf0622c952.tar.gz
bcm5719-llvm-d54f7fb8eb3c0817d17c89640a8e3bcf0622c952.zip
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
-rw-r--r--lldb/include/lldb/DataFormatters/StringPrinter.h79
-rw-r--r--lldb/source/DataFormatters/StringPrinter.cpp17
-rw-r--r--lldb/source/Plugins/Language/CPlusPlus/CxxStringTypes.cpp12
-rw-r--r--lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp2
-rw-r--r--lldb/source/Plugins/Language/ObjC/NSString.cpp14
5 files changed, 95 insertions, 29 deletions
diff --git a/lldb/include/lldb/DataFormatters/StringPrinter.h b/lldb/include/lldb/DataFormatters/StringPrinter.h
index 401784d5d27..f11156d1d8d 100644
--- a/lldb/include/lldb/DataFormatters/StringPrinter.h
+++ b/lldb/include/lldb/DataFormatters/StringPrinter.h
@@ -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;
diff --git a/lldb/source/DataFormatters/StringPrinter.cpp b/lldb/source/DataFormatters/StringPrinter.cpp
index 3225168a2a3..98a9e1a5398 100644
--- a/lldb/source/DataFormatters/StringPrinter.cpp
+++ b/lldb/source/DataFormatters/StringPrinter.cpp
@@ -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;
diff --git a/lldb/source/Plugins/Language/CPlusPlus/CxxStringTypes.cpp b/lldb/source/Plugins/Language/CPlusPlus/CxxStringTypes.cpp
index 550592b0940..7e8d9582a2b 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/CxxStringTypes.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/CxxStringTypes.cpp
@@ -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);
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp
index 5928293789b..3eaebef152a 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp
@@ -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);
diff --git a/lldb/source/Plugins/Language/ObjC/NSString.cpp b/lldb/source/Plugins/Language/ObjC/NSString.cpp
index 94060c150f8..0717d6dcff9 100644
--- a/lldb/source/Plugins/Language/ObjC/NSString.cpp
+++ b/lldb/source/Plugins/Language/ObjC/NSString.cpp
@@ -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);
OpenPOWER on IntegriCloud