Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1103)

Unified Diff: third_party/WebKit/Source/platform/inspector_protocol/Parser_cpp.template

Issue 2260233002: [DevTools] Migrate v8_inspector/public from String16 to String{View,Buffer}. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: styling Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/inspector_protocol/Parser_cpp.template
diff --git a/third_party/WebKit/Source/platform/inspector_protocol/Parser_cpp.template b/third_party/WebKit/Source/platform/inspector_protocol/Parser_cpp.template
index 34d8ff0720d046e736dd7a0ea2446a8ec80f27f7..c6449c8a7026b32aca98cf0c3bc9df9a75e77968 100644
--- a/third_party/WebKit/Source/platform/inspector_protocol/Parser_cpp.template
+++ b/third_party/WebKit/Source/platform/inspector_protocol/Parser_cpp.template
@@ -28,7 +28,40 @@ const char* const nullString = "null";
const char* const trueString = "true";
const char* const falseString = "false";
-bool parseConstToken(const UChar* start, const UChar* end, const UChar** tokenEnd, const char* token)
+bool isASCII(uint16_t c)
+{
+ return !(c & ~0x7F);
+}
+
+double charactersToDouble(const uint16_t* characters, size_t length, bool* ok)
+{
+ std::vector<char> buffer;
+ buffer.reserve(length + 1);
+ for (size_t i = 0; i < length; ++i) {
+ if (!isASCII(characters[i])) {
+ *ok = false;
+ return 0;
+ }
+ buffer.push_back(static_cast<char>(characters[i]));
+ }
+ buffer.push_back('\0');
+ char* endptr;
+ double result = std::strtod(buffer.data(), &endptr);
+ *ok = !(*endptr);
+ return result;
+}
+
+double charactersToDouble(const uint8_t* characters, size_t length, bool* ok)
+{
+ std::string buffer(reinterpret_cast<const char*>(characters), length);
+ char* endptr;
+ double result = std::strtod(buffer.data(), &endptr);
+ *ok = !(*endptr);
+ return result;
+}
+
+template<typename Char>
+bool parseConstToken(const Char* start, const Char* end, const Char** tokenEnd, const char* token)
{
while (start < end && *token != '\0' && *start++ == *token++) { }
if (*token != '\0')
@@ -37,7 +70,8 @@ bool parseConstToken(const UChar* start, const UChar* end, const UChar** tokenEn
return true;
}
-bool readInt(const UChar* start, const UChar* end, const UChar** tokenEnd, bool canHaveLeadingZeros)
+template<typename Char>
+bool readInt(const Char* start, const Char* end, const Char** tokenEnd, bool canHaveLeadingZeros)
{
if (start == end)
return false;
@@ -55,13 +89,14 @@ bool readInt(const UChar* start, const UChar* end, const UChar** tokenEnd, bool
return true;
}
-bool parseNumberToken(const UChar* start, const UChar* end, const UChar** tokenEnd)
+template<typename Char>
+bool parseNumberToken(const Char* start, const Char* end, const Char** tokenEnd)
{
// We just grab the number here. We validate the size in DecodeNumber.
// According to RFC4627, a valid number is: [minus] int [frac] [exp]
if (start == end)
return false;
- UChar c = *start;
+ Char c = *start;
if ('-' == c)
++start;
@@ -104,12 +139,13 @@ bool parseNumberToken(const UChar* start, const UChar* end, const UChar** tokenE
return true;
}
-bool readHexDigits(const UChar* start, const UChar* end, const UChar** tokenEnd, int digits)
+template<typename Char>
+bool readHexDigits(const Char* start, const Char* end, const Char** tokenEnd, int digits)
{
if (end - start < digits)
return false;
for (int i = 0; i < digits; ++i) {
- UChar c = *start++;
+ Char c = *start++;
if (!(('0' <= c && c <= '9') || ('a' <= c && c <= 'f') || ('A' <= c && c <= 'F')))
return false;
}
@@ -117,10 +153,11 @@ bool readHexDigits(const UChar* start, const UChar* end, const UChar** tokenEnd,
return true;
}
-bool parseStringToken(const UChar* start, const UChar* end, const UChar** tokenEnd)
+template<typename Char>
+bool parseStringToken(const Char* start, const Char* end, const Char** tokenEnd)
{
while (start < end) {
- UChar c = *start++;
+ Char c = *start++;
if ('\\' == c) {
c = *start++;
// Make sure the escaped char is valid.
@@ -154,7 +191,8 @@ bool parseStringToken(const UChar* start, const UChar* end, const UChar** tokenE
return false;
}
-bool skipComment(const UChar* start, const UChar* end, const UChar** commentEnd)
+template<typename Char>
+bool skipComment(const Char* start, const Char* end, const Char** commentEnd)
{
if (start == end)
return false;
@@ -177,7 +215,7 @@ bool skipComment(const UChar* start, const UChar* end, const UChar** commentEnd)
}
if (*start == '*') {
- UChar previous = '\0';
+ Char previous = '\0';
// Block comment, read until end marker.
for (++start; start < end; previous = *start++) {
if (previous == '*' && *start == '/') {
@@ -192,13 +230,14 @@ bool skipComment(const UChar* start, const UChar* end, const UChar** commentEnd)
return false;
}
-void skipWhitespaceAndComments(const UChar* start, const UChar* end, const UChar** whitespaceEnd)
+template<typename Char>
+void skipWhitespaceAndComments(const Char* start, const Char* end, const Char** whitespaceEnd)
{
while (start < end) {
if (String16::isSpaceOrNewLine(*start)) {
++start;
} else if (*start == '/') {
- const UChar* commentEnd;
+ const Char* commentEnd;
if (!skipComment(start, end, &commentEnd))
break;
start = commentEnd;
@@ -209,7 +248,8 @@ void skipWhitespaceAndComments(const UChar* start, const UChar* end, const UChar
*whitespaceEnd = start;
}
-Token parseToken(const UChar* start, const UChar* end, const UChar** tokenStart, const UChar** tokenEnd)
+template<typename Char>
+Token parseToken(const Char* start, const Char* end, const Char** tokenStart, const Char** tokenEnd)
{
skipWhitespaceAndComments(start, end, tokenStart);
start = *tokenStart;
@@ -270,7 +310,8 @@ Token parseToken(const UChar* start, const UChar* end, const UChar** tokenStart,
return InvalidToken;
}
-inline int hexToInt(UChar c)
+template<typename Char>
+int hexToInt(Char c)
{
if ('0' <= c && c <= '9')
return c - '0';
@@ -282,7 +323,8 @@ inline int hexToInt(UChar c)
return 0;
}
-bool decodeString(const UChar* start, const UChar* end, String16Builder* output)
+template<typename Char>
+bool decodeString(const Char* start, const Char* end, String16Builder* output)
{
while (start < end) {
UChar c = *start++;
@@ -335,7 +377,8 @@ bool decodeString(const UChar* start, const UChar* end, String16Builder* output)
return true;
}
-bool decodeString(const UChar* start, const UChar* end, String16* output)
+template<typename Char>
+bool decodeString(const Char* start, const Char* end, String16* output)
{
if (start == end) {
*output = "";
@@ -351,14 +394,15 @@ bool decodeString(const UChar* start, const UChar* end, String16* output)
return true;
}
-std::unique_ptr<Value> buildValue(const UChar* start, const UChar* end, const UChar** valueTokenEnd, int depth)
+template<typename Char>
+std::unique_ptr<Value> buildValue(const Char* start, const Char* end, const Char** valueTokenEnd, int depth)
{
if (depth > stackLimit)
return nullptr;
std::unique_ptr<Value> result;
- const UChar* tokenStart;
- const UChar* tokenEnd;
+ const Char* tokenStart;
+ const Char* tokenEnd;
Token token = parseToken(start, end, &tokenStart, &tokenEnd);
switch (token) {
case InvalidToken:
@@ -374,7 +418,7 @@ std::unique_ptr<Value> buildValue(const UChar* start, const UChar* end, const UC
break;
case Number: {
bool ok;
- double value = String16::charactersToDouble(tokenStart, tokenEnd - tokenStart, &ok);
+ double value = charactersToDouble(tokenStart, tokenEnd - tokenStart, &ok);
if (!ok)
return nullptr;
int number = static_cast<int>(value);
@@ -471,10 +515,11 @@ std::unique_ptr<Value> buildValue(const UChar* start, const UChar* end, const UC
return result;
}
-std::unique_ptr<Value> parseJSONInternal(const UChar* start, unsigned length)
+template<typename Char>
+std::unique_ptr<Value> parseJSONInternal(const Char* start, unsigned length)
{
- const UChar* end = start + length;
- const UChar *tokenEnd;
+ const Char* end = start + length;
+ const Char *tokenEnd;
std::unique_ptr<Value> value = buildValue(start, end, &tokenEnd, 0);
if (!value || tokenEnd != end)
return nullptr;
@@ -483,11 +528,21 @@ std::unique_ptr<Value> parseJSONInternal(const UChar* start, unsigned length)
} // anonymous namespace
+std::unique_ptr<Value> parseJSON(const uint16_t* characters, unsigned length)
+{
+ return parseJSONInternal<uint16_t>(characters, length);
+}
+
+std::unique_ptr<Value> parseJSON(const uint8_t* characters, unsigned length)
+{
+ return parseJSONInternal<uint8_t>(characters, length);
+}
+
std::unique_ptr<Value> parseJSON(const String16& json)
{
if (json.isEmpty())
return nullptr;
- return parseJSONInternal(json.characters16(), json.length());
+ return parseJSONInternal<uint16_t>(reinterpret_cast<const uint16_t*>(json.characters16()), json.length());
}
} // namespace protocol

Powered by Google App Engine
This is Rietveld 408576698