Yes, there was a thread on lldb dev about it. After i get all the changes in to the newer one we can move the old one out On Tue, Aug 30, 2016 at 6:32 AM Pavel Labath <lab...@google.com> wrote:
> I think we should move the new file away from source/Utility. If it's > supposed to be used by debugserver only, we probably should move it to > tools/debugserver/source ? Right now, debugservers cmake file contains > a hack to be able to include these, so by doing that we will remove > that as well. > > Thoughts ? > > pl > > PS: judging by the CMakeLists.txt, the other file which is included in > such a funny way is source/Host/common/StringConvert.cpp > > > On 29 August 2016 at 20:46, Zachary Turner via lldb-commits > <lldb-commits@lists.llvm.org> wrote: > > Author: zturner > > Date: Mon Aug 29 14:45:59 2016 > > New Revision: 279997 > > > > URL: http://llvm.org/viewvc/llvm-project?rev=279997&view=rev > > Log: > > Copy StringExtractor to StdStringExtractor. > > > > I have some improvements to make to StringExtractor that require > > using LLVM. debugserver can't take a dependency on LLVM but uses > > this file, so I'm forking it off into StdStringExtractor and > > StringExtractor, so that StringExtractor can take advantage of > > some performance improvements and readability improvements that > > LLVM can provide. > > > > Added: > > lldb/trunk/include/lldb/Utility/StdStringExtractor.h > > lldb/trunk/source/Utility/StdStringExtractor.cpp > > Modified: > > lldb/trunk/source/Utility/CMakeLists.txt > > lldb/trunk/tools/debugserver/source/JSON.cpp > > lldb/trunk/tools/debugserver/source/JSON.h > > lldb/trunk/tools/debugserver/source/RNBRemote.cpp > > > > Added: lldb/trunk/include/lldb/Utility/StdStringExtractor.h > > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Utility/StdStringExtractor.h?rev=279997&view=auto > > > ============================================================================== > > --- lldb/trunk/include/lldb/Utility/StdStringExtractor.h (added) > > +++ lldb/trunk/include/lldb/Utility/StdStringExtractor.h Mon Aug 29 > 14:45:59 2016 > > @@ -0,0 +1,181 @@ > > +//===-- StdStringExtractor.h ------------------------------------*- C++ > -*-===// > > +// > > +// The LLVM Compiler Infrastructure > > +// > > +// This file is distributed under the University of Illinois Open Source > > +// License. See LICENSE.TXT for details. > > +// > > > +//===----------------------------------------------------------------------===// > > + > > +#ifndef utility_StdStringExtractor_h_ > > +#define utility_StdStringExtractor_h_ > > + > > +// C Includes > > +// C++ Includes > > +#include <string> > > +#include <stdint.h> > > + > > +// Other libraries and framework includes > > +// Project includes > > + > > +// Based on StringExtractor, with the added limitation that this file > should not > > +// take a dependency on LLVM, as it is used from debugserver. > > +class StdStringExtractor > > +{ > > +public: > > + > > + enum { > > + BigEndian = 0, > > + LittleEndian = 1 > > + }; > > + //------------------------------------------------------------------ > > + // Constructors and Destructors > > + //------------------------------------------------------------------ > > + StdStringExtractor(); > > + StdStringExtractor(const char *packet_cstr); > > + StdStringExtractor(const StdStringExtractor& rhs); > > + virtual ~StdStringExtractor(); > > + > > + //------------------------------------------------------------------ > > + // Operators > > + //------------------------------------------------------------------ > > + const StdStringExtractor& > > + operator=(const StdStringExtractor& rhs); > > + > > + // Returns true if the file position is still valid for the data > > + // contained in this string extractor object. > > + bool > > + IsGood() const > > + { > > + return m_index != UINT64_MAX; > > + } > > + > > + uint64_t > > + GetFilePos () const > > + { > > + return m_index; > > + } > > + > > + void > > + SetFilePos (uint32_t idx) > > + { > > + m_index = idx; > > + } > > + > > + void > > + Clear () > > + { > > + m_packet.clear(); > > + m_index = 0; > > + } > > + > > + void > > + SkipSpaces (); > > + > > + std::string & > > + GetStringRef () > > + { > > + return m_packet; > > + } > > + > > + const std::string & > > + GetStringRef () const > > + { > > + return m_packet; > > + } > > + > > + bool > > + Empty() > > + { > > + return m_packet.empty(); > > + } > > + > > + size_t > > + GetBytesLeft () > > + { > > + if (m_index < m_packet.size()) > > + return m_packet.size() - m_index; > > + return 0; > > + } > > + > > + char > > + GetChar (char fail_value = '\0'); > > + > > + char > > + PeekChar (char fail_value = '\0') > > + { > > + const char *cstr = Peek(); > > + if (cstr) > > + return cstr[0]; > > + return fail_value; > > + } > > + > > + int > > + DecodeHexU8(); > > + > > + uint8_t > > + GetHexU8 (uint8_t fail_value = 0, bool set_eof_on_fail = true); > > + > > + bool > > + GetHexU8Ex (uint8_t& ch, bool set_eof_on_fail = true); > > + > > + bool > > + GetNameColonValue (std::string &name, std::string &value); > > + > > + int32_t > > + GetS32 (int32_t fail_value, int base = 0); > > + > > + uint32_t > > + GetU32 (uint32_t fail_value, int base = 0); > > + > > + int64_t > > + GetS64 (int64_t fail_value, int base = 0); > > + > > + uint64_t > > + GetU64 (uint64_t fail_value, int base = 0); > > + > > + uint32_t > > + GetHexMaxU32 (bool little_endian, uint32_t fail_value); > > + > > + uint64_t > > + GetHexMaxU64 (bool little_endian, uint64_t fail_value); > > + > > + size_t > > + GetHexBytes (void *dst, size_t dst_len, uint8_t fail_fill_value); > > + > > + size_t > > + GetHexBytesAvail (void *dst, size_t dst_len); > > + > > + uint64_t > > + GetHexWithFixedSize (uint32_t byte_size, bool little_endian, > uint64_t fail_value); > > + > > + size_t > > + GetHexByteString (std::string &str); > > + > > + size_t > > + GetHexByteStringFixedLength (std::string &str, uint32_t > nibble_length); > > + > > + size_t > > + GetHexByteStringTerminatedBy (std::string &str, > > + char terminator); > > + > > + const char * > > + Peek () > > + { > > + if (m_index < m_packet.size()) > > + return m_packet.c_str() + m_index; > > + return nullptr; > > + } > > + > > +protected: > > + //------------------------------------------------------------------ > > + // For StdStringExtractor only > > + //------------------------------------------------------------------ > > + std::string m_packet; // The string in which to extract data. > > + uint64_t m_index; // When extracting data from a packet, this > index > > + // will march along as things get > extracted. If set > > + // to UINT64_MAX the end of the packet data > was > > + // reached when decoding information > > +}; > > + > > +#endif // utility_StringExtractor_h_ > > > > Modified: lldb/trunk/source/Utility/CMakeLists.txt > > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Utility/CMakeLists.txt?rev=279997&r1=279996&r2=279997&view=diff > > > ============================================================================== > > --- lldb/trunk/source/Utility/CMakeLists.txt (original) > > +++ lldb/trunk/source/Utility/CMakeLists.txt Mon Aug 29 14:45:59 2016 > > @@ -12,6 +12,7 @@ add_lldb_library(lldbUtility > > RegisterNumber.cpp > > SelectHelper.cpp > > SharingPtr.cpp > > + StdStringExtractor.cpp > > StringExtractor.cpp > > StringExtractorGDBRemote.cpp > > StringLexer.cpp > > > > Added: lldb/trunk/source/Utility/StdStringExtractor.cpp > > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Utility/StdStringExtractor.cpp?rev=279997&view=auto > > > ============================================================================== > > --- lldb/trunk/source/Utility/StdStringExtractor.cpp (added) > > +++ lldb/trunk/source/Utility/StdStringExtractor.cpp Mon Aug 29 14:45:59 > 2016 > > @@ -0,0 +1,502 @@ > > +//===-- StdStringExtractor.cpp ----------------------------------*- C++ > -*-===// > > +// > > +// The LLVM Compiler Infrastructure > > +// > > +// This file is distributed under the University of Illinois Open Source > > +// License. See LICENSE.TXT for details. > > +// > > > +//===----------------------------------------------------------------------===// > > + > > +#include "lldb/Utility/StdStringExtractor.h" > > + > > +// C Includes > > +#include <stdlib.h> > > + > > +// C++ Includes > > +// Other libraries and framework includes > > +// Project includes > > + > > +static inline int > > +xdigit_to_sint (char ch) > > +{ > > + if (ch >= 'a' && ch <= 'f') > > + return 10 + ch - 'a'; > > + if (ch >= 'A' && ch <= 'F') > > + return 10 + ch - 'A'; > > + if (ch >= '0' && ch <= '9') > > + return ch - '0'; > > + return -1; > > +} > > + > > +//---------------------------------------------------------------------- > > +// StdStringExtractor constructor > > +//---------------------------------------------------------------------- > > +StdStringExtractor::StdStringExtractor() : > > + m_packet(), > > + m_index (0) > > +{ > > +} > > + > > + > > +StdStringExtractor::StdStringExtractor(const char *packet_cstr) : > > + m_packet(), > > + m_index (0) > > +{ > > + if (packet_cstr) > > + m_packet.assign (packet_cstr); > > +} > > + > > + > > +//---------------------------------------------------------------------- > > +// StdStringExtractor copy constructor > > +//---------------------------------------------------------------------- > > +StdStringExtractor::StdStringExtractor(const StdStringExtractor& rhs) : > > + m_packet (rhs.m_packet), > > + m_index (rhs.m_index) > > +{ > > + > > +} > > + > > +//---------------------------------------------------------------------- > > +// StdStringExtractor assignment operator > > +//---------------------------------------------------------------------- > > +const StdStringExtractor& > > +StdStringExtractor::operator=(const StdStringExtractor& rhs) > > +{ > > + if (this != &rhs) > > + { > > + m_packet = rhs.m_packet; > > + m_index = rhs.m_index; > > + > > + } > > + return *this; > > +} > > + > > +//---------------------------------------------------------------------- > > +// Destructor > > +//---------------------------------------------------------------------- > > +StdStringExtractor::~StdStringExtractor() > > +{ > > +} > > + > > + > > +char > > +StdStringExtractor::GetChar (char fail_value) > > +{ > > + if (m_index < m_packet.size()) > > + { > > + char ch = m_packet[m_index]; > > + ++m_index; > > + return ch; > > + } > > + m_index = UINT64_MAX; > > + return fail_value; > > +} > > + > > +//---------------------------------------------------------------------- > > +// If a pair of valid hex digits exist at the head of the > > +// StdStringExtractor they are decoded into an unsigned byte and > returned > > +// by this function > > +// > > +// If there is not a pair of valid hex digits at the head of the > > +// StdStringExtractor, it is left unchanged and -1 is returned > > +//---------------------------------------------------------------------- > > +int > > +StdStringExtractor::DecodeHexU8() > > +{ > > + SkipSpaces(); > > + if (GetBytesLeft() < 2) > > + { > > + return -1; > > + } > > + const int hi_nibble = xdigit_to_sint(m_packet[m_index]); > > + const int lo_nibble = xdigit_to_sint(m_packet[m_index+1]); > > + if (hi_nibble == -1 || lo_nibble == -1) > > + { > > + return -1; > > + } > > + m_index += 2; > > + return (uint8_t)((hi_nibble << 4) + lo_nibble); > > +} > > + > > +//---------------------------------------------------------------------- > > +// Extract an unsigned character from two hex ASCII chars in the packet > > +// string, or return fail_value on failure > > +//---------------------------------------------------------------------- > > +uint8_t > > +StdStringExtractor::GetHexU8 (uint8_t fail_value, bool set_eof_on_fail) > > +{ > > + // On success, fail_value will be overwritten with the next > > + // character in the stream > > + GetHexU8Ex(fail_value, set_eof_on_fail); > > + return fail_value; > > +} > > + > > +bool > > +StdStringExtractor::GetHexU8Ex (uint8_t& ch, bool set_eof_on_fail) > > +{ > > + int byte = DecodeHexU8(); > > + if (byte == -1) > > + { > > + if (set_eof_on_fail || m_index >= m_packet.size()) > > + m_index = UINT64_MAX; > > + // ch should not be changed in case of failure > > + return false; > > + } > > + ch = (uint8_t)byte; > > + return true; > > +} > > + > > +uint32_t > > +StdStringExtractor::GetU32 (uint32_t fail_value, int base) > > +{ > > + if (m_index < m_packet.size()) > > + { > > + char *end = nullptr; > > + const char *start = m_packet.c_str(); > > + const char *cstr = start + m_index; > > + uint32_t result = static_cast<uint32_t>(::strtoul (cstr, &end, > base)); > > + > > + if (end && end != cstr) > > + { > > + m_index = end - start; > > + return result; > > + } > > + } > > + return fail_value; > > +} > > + > > +int32_t > > +StdStringExtractor::GetS32 (int32_t fail_value, int base) > > +{ > > + if (m_index < m_packet.size()) > > + { > > + char *end = nullptr; > > + const char *start = m_packet.c_str(); > > + const char *cstr = start + m_index; > > + int32_t result = static_cast<int32_t>(::strtol (cstr, &end, > base)); > > + > > + if (end && end != cstr) > > + { > > + m_index = end - start; > > + return result; > > + } > > + } > > + return fail_value; > > +} > > + > > + > > +uint64_t > > +StdStringExtractor::GetU64 (uint64_t fail_value, int base) > > +{ > > + if (m_index < m_packet.size()) > > + { > > + char *end = nullptr; > > + const char *start = m_packet.c_str(); > > + const char *cstr = start + m_index; > > + uint64_t result = ::strtoull (cstr, &end, base); > > + > > + if (end && end != cstr) > > + { > > + m_index = end - start; > > + return result; > > + } > > + } > > + return fail_value; > > +} > > + > > +int64_t > > +StdStringExtractor::GetS64 (int64_t fail_value, int base) > > +{ > > + if (m_index < m_packet.size()) > > + { > > + char *end = nullptr; > > + const char *start = m_packet.c_str(); > > + const char *cstr = start + m_index; > > + int64_t result = ::strtoll (cstr, &end, base); > > + > > + if (end && end != cstr) > > + { > > + m_index = end - start; > > + return result; > > + } > > + } > > + return fail_value; > > +} > > + > > + > > +uint32_t > > +StdStringExtractor::GetHexMaxU32 (bool little_endian, uint32_t > fail_value) > > +{ > > + uint32_t result = 0; > > + uint32_t nibble_count = 0; > > + > > + SkipSpaces(); > > + if (little_endian) > > + { > > + uint32_t shift_amount = 0; > > + while (m_index < m_packet.size() && ::isxdigit > (m_packet[m_index])) > > + { > > + // Make sure we don't exceed the size of a uint32_t... > > + if (nibble_count >= (sizeof(uint32_t) * 2)) > > + { > > + m_index = UINT64_MAX; > > + return fail_value; > > + } > > + > > + uint8_t nibble_lo; > > + uint8_t nibble_hi = xdigit_to_sint (m_packet[m_index]); > > + ++m_index; > > + if (m_index < m_packet.size() && ::isxdigit > (m_packet[m_index])) > > + { > > + nibble_lo = xdigit_to_sint (m_packet[m_index]); > > + ++m_index; > > + result |= ((uint32_t)nibble_hi << (shift_amount + 4)); > > + result |= ((uint32_t)nibble_lo << shift_amount); > > + nibble_count += 2; > > + shift_amount += 8; > > + } > > + else > > + { > > + result |= ((uint32_t)nibble_hi << shift_amount); > > + nibble_count += 1; > > + shift_amount += 4; > > + } > > + > > + } > > + } > > + else > > + { > > + while (m_index < m_packet.size() && ::isxdigit > (m_packet[m_index])) > > + { > > + // Make sure we don't exceed the size of a uint32_t... > > + if (nibble_count >= (sizeof(uint32_t) * 2)) > > + { > > + m_index = UINT64_MAX; > > + return fail_value; > > + } > > + > > + uint8_t nibble = xdigit_to_sint (m_packet[m_index]); > > + // Big Endian > > + result <<= 4; > > + result |= nibble; > > + > > + ++m_index; > > + ++nibble_count; > > + } > > + } > > + return result; > > +} > > + > > +uint64_t > > +StdStringExtractor::GetHexMaxU64 (bool little_endian, uint64_t > fail_value) > > +{ > > + uint64_t result = 0; > > + uint32_t nibble_count = 0; > > + > > + SkipSpaces(); > > + if (little_endian) > > + { > > + uint32_t shift_amount = 0; > > + while (m_index < m_packet.size() && ::isxdigit > (m_packet[m_index])) > > + { > > + // Make sure we don't exceed the size of a uint64_t... > > + if (nibble_count >= (sizeof(uint64_t) * 2)) > > + { > > + m_index = UINT64_MAX; > > + return fail_value; > > + } > > + > > + uint8_t nibble_lo; > > + uint8_t nibble_hi = xdigit_to_sint (m_packet[m_index]); > > + ++m_index; > > + if (m_index < m_packet.size() && ::isxdigit > (m_packet[m_index])) > > + { > > + nibble_lo = xdigit_to_sint (m_packet[m_index]); > > + ++m_index; > > + result |= ((uint64_t)nibble_hi << (shift_amount + 4)); > > + result |= ((uint64_t)nibble_lo << shift_amount); > > + nibble_count += 2; > > + shift_amount += 8; > > + } > > + else > > + { > > + result |= ((uint64_t)nibble_hi << shift_amount); > > + nibble_count += 1; > > + shift_amount += 4; > > + } > > + > > + } > > + } > > + else > > + { > > + while (m_index < m_packet.size() && ::isxdigit > (m_packet[m_index])) > > + { > > + // Make sure we don't exceed the size of a uint64_t... > > + if (nibble_count >= (sizeof(uint64_t) * 2)) > > + { > > + m_index = UINT64_MAX; > > + return fail_value; > > + } > > + > > + uint8_t nibble = xdigit_to_sint (m_packet[m_index]); > > + // Big Endian > > + result <<= 4; > > + result |= nibble; > > + > > + ++m_index; > > + ++nibble_count; > > + } > > + } > > + return result; > > +} > > + > > +size_t > > +StdStringExtractor::GetHexBytes (void *dst_void, size_t dst_len, > uint8_t fail_fill_value) > > +{ > > + uint8_t *dst = (uint8_t*)dst_void; > > + size_t bytes_extracted = 0; > > + while (bytes_extracted < dst_len && GetBytesLeft ()) > > + { > > + dst[bytes_extracted] = GetHexU8 (fail_fill_value); > > + if (IsGood()) > > + ++bytes_extracted; > > + else > > + break; > > + } > > + > > + for (size_t i = bytes_extracted; i < dst_len; ++i) > > + dst[i] = fail_fill_value; > > + > > + return bytes_extracted; > > +} > > + > > +//---------------------------------------------------------------------- > > +// Decodes all valid hex encoded bytes at the head of the > > +// StdStringExtractor, limited by dst_len. > > +// > > +// Returns the number of bytes successfully decoded > > +//---------------------------------------------------------------------- > > +size_t > > +StdStringExtractor::GetHexBytesAvail (void *dst_void, size_t dst_len) > > +{ > > + uint8_t *dst = (uint8_t*)dst_void; > > + size_t bytes_extracted = 0; > > + while (bytes_extracted < dst_len) > > + { > > + int decode = DecodeHexU8(); > > + if (decode == -1) > > + { > > + break; > > + } > > + dst[bytes_extracted++] = (uint8_t)decode; > > + } > > + return bytes_extracted; > > +} > > + > > +// Consume ASCII hex nibble character pairs until we have decoded > byte_size > > +// bytes of data. > > + > > +uint64_t > > +StdStringExtractor::GetHexWithFixedSize (uint32_t byte_size, bool > little_endian, uint64_t fail_value) > > +{ > > + if (byte_size <= 8 && GetBytesLeft() >= byte_size * 2) > > + { > > + uint64_t result = 0; > > + uint32_t i; > > + if (little_endian) > > + { > > + // Little Endian > > + uint32_t shift_amount; > > + for (i = 0, shift_amount = 0; > > + i < byte_size && IsGood(); > > + ++i, shift_amount += 8) > > + { > > + result |= ((uint64_t)GetHexU8() << shift_amount); > > + } > > + } > > + else > > + { > > + // Big Endian > > + for (i = 0; i < byte_size && IsGood(); ++i) > > + { > > + result <<= 8; > > + result |= GetHexU8(); > > + } > > + } > > + } > > + m_index = UINT64_MAX; > > + return fail_value; > > +} > > + > > +size_t > > +StdStringExtractor::GetHexByteString (std::string &str) > > +{ > > + str.clear(); > > + str.reserve(GetBytesLeft() / 2); > > + char ch; > > + while ((ch = GetHexU8()) != '\0') > > + str.append(1, ch); > > + return str.size(); > > +} > > + > > +size_t > > +StdStringExtractor::GetHexByteStringFixedLength (std::string &str, > uint32_t nibble_length) > > +{ > > + str.clear(); > > + > > + uint32_t nibble_count = 0; > > + for (const char *pch = Peek(); (nibble_count < nibble_length) && > (pch != nullptr); str.append(1, GetHexU8(0, false)), pch = Peek (), > nibble_count += 2) > > + {} > > + > > + return str.size(); > > +} > > + > > +size_t > > +StdStringExtractor::GetHexByteStringTerminatedBy (std::string &str, > > + char terminator) > > +{ > > + str.clear(); > > + char ch; > > + while ((ch = GetHexU8(0,false)) != '\0') > > + str.append(1, ch); > > + if (Peek() && *Peek() == terminator) > > + return str.size(); > > + > > + str.clear(); > > + return str.size(); > > +} > > + > > +bool > > +StdStringExtractor::GetNameColonValue (std::string &name, std::string > &value) > > +{ > > + // Read something in the form of NNNN:VVVV; where NNNN is any > character > > + // that is not a colon, followed by a ':' character, then a value > (one or > > + // more ';' chars), followed by a ';' > > + if (m_index < m_packet.size()) > > + { > > + const size_t colon_idx = m_packet.find (':', m_index); > > + if (colon_idx != std::string::npos) > > + { > > + const size_t semicolon_idx = m_packet.find (';', colon_idx); > > + if (semicolon_idx != std::string::npos) > > + { > > + name.assign (m_packet, m_index, colon_idx - m_index); > > + value.assign (m_packet, colon_idx + 1, semicolon_idx - > (colon_idx + 1)); > > + m_index = semicolon_idx + 1; > > + return true; > > + } > > + } > > + } > > + m_index = UINT64_MAX; > > + return false; > > +} > > + > > +void > > +StdStringExtractor::SkipSpaces () > > +{ > > + const size_t n = m_packet.size(); > > + while (m_index < n && isspace(m_packet[m_index])) > > + ++m_index; > > +} > > + > > > > Modified: lldb/trunk/tools/debugserver/source/JSON.cpp > > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/debugserver/source/JSON.cpp?rev=279997&r1=279996&r2=279997&view=diff > > > ============================================================================== > > --- lldb/trunk/tools/debugserver/source/JSON.cpp (original) > > +++ lldb/trunk/tools/debugserver/source/JSON.cpp Mon Aug 29 14:45:59 2016 > > @@ -319,7 +319,7 @@ JSONArray::GetNumElements () > > > > > > JSONParser::JSONParser (const char *cstr) : > > - StringExtractor(cstr) > > + StdStringExtractor(cstr) > > { > > } > > > > > > Modified: lldb/trunk/tools/debugserver/source/JSON.h > > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/debugserver/source/JSON.h?rev=279997&r1=279996&r2=279997&view=diff > > > ============================================================================== > > --- lldb/trunk/tools/debugserver/source/JSON.h (original) > > +++ lldb/trunk/tools/debugserver/source/JSON.h Mon Aug 29 14:45:59 2016 > > @@ -10,9 +10,9 @@ > > #ifndef utility_JSON_h_ > > #define utility_JSON_h_ > > > > -// This cross-project usage is fine as StringExtractor.h is entirely > > +// This cross-project usage is fine as StdStringExtractor.h is entirely > > // self-contained. > > -#include "lldb/Utility/StringExtractor.h" > > +#include "lldb/Utility/StdStringExtractor.h" > > > > // C includes > > #include <inttypes.h> > > @@ -338,7 +338,7 @@ public: > > Vector m_elements; > > }; > > > > -class JSONParser : public StringExtractor > > +class JSONParser : public StdStringExtractor > > { > > public: > > enum Token > > > > Modified: lldb/trunk/tools/debugserver/source/RNBRemote.cpp > > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/debugserver/source/RNBRemote.cpp?rev=279997&r1=279996&r2=279997&view=diff > > > ============================================================================== > > --- lldb/trunk/tools/debugserver/source/RNBRemote.cpp (original) > > +++ lldb/trunk/tools/debugserver/source/RNBRemote.cpp Mon Aug 29 > 14:45:59 2016 > > @@ -38,7 +38,7 @@ > > #include "RNBServices.h" > > #include "RNBSocket.h" > > #include "JSON.h" > > -#include "lldb/Utility/StringExtractor.h" > > +#include "lldb/Utility/StdStringExtractor.h" > > #include "MacOSX/Genealogy.h" > > #include "JSONGenerator.h" > > > > @@ -2329,7 +2329,7 @@ RNBRemote::HandlePacket_QSetSTDIO (const > > // QSetSTDIN > > // QSetSTDOUT > > // QSetSTDERR > > - StringExtractor packet(p); > > + StdStringExtractor packet(p); > > packet.SetFilePos (7); > > char ch = packet.GetChar(); > > while (packet.GetChar() != ':') > > @@ -2368,7 +2368,7 @@ RNBRemote::HandlePacket_QSetWorkingDir ( > > // Only set the working directory if we don't already have a process > > if (!m_ctx.HasValidProcessID()) > > { > > - StringExtractor packet(p += sizeof ("QSetWorkingDir:") - 1); > > + StdStringExtractor packet(p += sizeof ("QSetWorkingDir:") - 1); > > if (packet.GetHexByteString (m_ctx.GetWorkingDir())) > > { > > struct stat working_dir_stat; > > @@ -3473,7 +3473,7 @@ RNBRemote::HandlePacket_G (const char *p > > if (g_num_reg_entries == 0) > > InitializeRegisters (); > > > > - StringExtractor packet(p); > > + StdStringExtractor packet(p); > > packet.SetFilePos(1); // Skip the 'G' > > > > nub_process_t pid = m_ctx.ProcessID(); > > @@ -3540,10 +3540,10 @@ RNBRemoteShouldCancelCallback (void *not > > rnb_err_t > > RNBRemote::HandlePacket_AllocateMemory (const char *p) > > { > > - StringExtractor packet (p); > > + StdStringExtractor packet (p); > > packet.SetFilePos(2); // Skip the "_M" > > > > - nub_addr_t size = packet.GetHexMaxU64 (StringExtractor::BigEndian, > 0); > > + nub_addr_t size = packet.GetHexMaxU64 > (StdStringExtractor::BigEndian, 0); > > if (size != 0) > > { > > if (packet.GetChar() == ',') > > @@ -3590,9 +3590,9 @@ RNBRemote::HandlePacket_AllocateMemory ( > > rnb_err_t > > RNBRemote::HandlePacket_DeallocateMemory (const char *p) > > { > > - StringExtractor packet (p); > > + StdStringExtractor packet (p); > > packet.SetFilePos(2); // Skip the "_m" > > - nub_addr_t addr = packet.GetHexMaxU64 (StringExtractor::BigEndian, > INVALID_NUB_ADDRESS); > > + nub_addr_t addr = packet.GetHexMaxU64 > (StdStringExtractor::BigEndian, INVALID_NUB_ADDRESS); > > > > if (addr != INVALID_NUB_ADDRESS) > > { > > @@ -3669,7 +3669,7 @@ RNBRemote::HandlePacket_RestoreRegisterS > > return HandlePacket_ILLFORMED (__FILE__, __LINE__, p, "No > thread was is set with the Hg packet"); > > } > > > > - StringExtractor packet (p); > > + StdStringExtractor packet (p); > > packet.SetFilePos(strlen("QRestoreRegisterState:")); // Skip the > "QRestoreRegisterState:" > > const uint32_t save_id = packet.GetU32(0); > > > > @@ -4222,7 +4222,7 @@ RNBRemote::HandlePacket_P (const char *p > > > > nub_process_t pid = m_ctx.ProcessID(); > > > > - StringExtractor packet (p); > > + StdStringExtractor packet (p); > > > > const char cmd_char = packet.GetChar(); > > // Register ID is always in big endian > > @@ -4372,7 +4372,7 @@ RNBRemote::HandlePacket_GetProfileData ( > > if (pid == INVALID_NUB_PROCESS) > > return SendPacket ("OK"); > > > > - StringExtractor packet(p += sizeof ("qGetProfileData")); > > + StdStringExtractor packet(p += sizeof ("qGetProfileData")); > > DNBProfileDataScanType scan_type = eProfileAll; > > std::string name; > > std::string value; > > @@ -4408,7 +4408,7 @@ RNBRemote::HandlePacket_SetEnableAsyncPr > > if (pid == INVALID_NUB_PROCESS) > > return SendPacket ("OK"); > > > > - StringExtractor packet(p += sizeof ("QSetEnableAsyncProfiling")); > > + StdStringExtractor packet(p += sizeof ("QSetEnableAsyncProfiling")); > > bool enable = false; > > uint64_t interval_usec = 0; > > DNBProfileDataScanType scan_type = eProfileAll; > > > > > > _______________________________________________ > > lldb-commits mailing list > > lldb-commits@lists.llvm.org > > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits >
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits