diff options
author | Enrico Granata <egranata@apple.com> | 2015-10-07 02:06:48 +0000 |
---|---|---|
committer | Enrico Granata <egranata@apple.com> | 2015-10-07 02:06:48 +0000 |
commit | d54f7fb8eb3c0817d17c89640a8e3bcf0622c952 (patch) | |
tree | b25c936a539cbd296db3e17bb38cd86bc2f9dd11 | |
parent | cbffa8cc97336946adcbd6b3b532f3c080cbf246 (diff) | |
download | bcm5719-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.h | 79 | ||||
-rw-r--r-- | lldb/source/DataFormatters/StringPrinter.cpp | 17 | ||||
-rw-r--r-- | lldb/source/Plugins/Language/CPlusPlus/CxxStringTypes.cpp | 12 | ||||
-rw-r--r-- | lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp | 2 | ||||
-rw-r--r-- | lldb/source/Plugins/Language/ObjC/NSString.cpp | 14 |
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); |