Commit 16773291 authored by Daniel Bratell's avatar Daniel Bratell Committed by Commit Bot

Deduplicated 3 JSON string constants, "null", "true" and "false"

Both JSONParser and JSONValues use constants for the strings
"null", "true" and "false". That is probably no problem since the
linker will merge identical strings, but since the constants had
the same names as well they caused collisions in jumbo builds.

This patch makes JSONParser use the JSONValues constants.

Change-Id: I27b01b354aa9cfeab0f8c636f22ecfbc2762a6bc
Reviewed-on: https://chromium-review.googlesource.com/577552Reviewed-by: default avatarIan Clelland <iclelland@chromium.org>
Commit-Queue: Daniel Bratell <bratell@opera.com>
Cr-Commit-Position: refs/heads/master@{#488654}
parent a7c6056c
......@@ -30,10 +30,6 @@ enum Token {
kInvalidToken,
};
const char* const kNullString = "null";
const char* const kTrueString = "true";
const char* const kFalseString = "false";
template <typename CharType>
bool ParseConstToken(const CharType* start,
const CharType* end,
......@@ -249,15 +245,15 @@ Token ParseToken(const CharType* start,
switch (*start) {
case 'n':
if (ParseConstToken(start, end, token_end, kNullString))
if (ParseConstToken(start, end, token_end, kJSONNullString))
return kNullToken;
break;
case 't':
if (ParseConstToken(start, end, token_end, kTrueString))
if (ParseConstToken(start, end, token_end, kJSONTrueString))
return kBoolTrue;
break;
case 'f':
if (ParseConstToken(start, end, token_end, kFalseString))
if (ParseConstToken(start, end, token_end, kJSONFalseString))
return kBoolFalse;
break;
case '[':
......
......@@ -40,10 +40,6 @@ namespace blink {
namespace {
const char* const kNullString = "null";
const char* const kTrueString = "true";
const char* const kFalseString = "false";
inline bool EscapeChar(UChar c, StringBuilder* dst) {
switch (c) {
case '\b':
......@@ -90,6 +86,10 @@ void WriteIndent(int depth, StringBuilder* output) {
} // anonymous namespace
const char* kJSONNullString = "null";
const char* kJSONTrueString = "true";
const char* kJSONFalseString = "false";
void EscapeStringForJSON(const String& str, StringBuilder* dst) {
for (unsigned i = 0; i < str.length(); ++i) {
UChar c = str[i];
......@@ -150,7 +150,7 @@ String JSONValue::ToPrettyJSONString() const {
void JSONValue::WriteJSON(StringBuilder* output) const {
DCHECK(type_ == kTypeNull);
output->Append(kNullString, 4);
output->Append(kJSONNullString, 4);
}
void JSONValue::PrettyWriteJSON(StringBuilder* output) const {
......@@ -198,12 +198,12 @@ void JSONBasicValue::WriteJSON(StringBuilder* output) const {
GetType() == kTypeDouble);
if (GetType() == kTypeBoolean) {
if (bool_value_)
output->Append(kTrueString, 4);
output->Append(kJSONTrueString, 4);
else
output->Append(kFalseString, 5);
output->Append(kJSONFalseString, 5);
} else if (GetType() == kTypeDouble) {
if (!std::isfinite(double_value_)) {
output->Append(kNullString, 4);
output->Append(kJSONNullString, 4);
return;
}
output->Append(Decimal::FromDouble(double_value_).ToString());
......
......@@ -289,6 +289,10 @@ class PLATFORM_EXPORT JSONArray : public JSONValue {
Vector<std::unique_ptr<JSONValue>> data_;
};
extern const char* kJSONNullString;
extern const char* kJSONTrueString;
extern const char* kJSONFalseString;
PLATFORM_EXPORT void EscapeStringForJSON(const String&, StringBuilder*);
void DoubleQuoteStringForJSON(const String&, StringBuilder*);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment