summaryrefslogtreecommitdiffstats
path: root/base/json
diff options
context:
space:
mode:
authortfarina@chromium.org <tfarina@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-19 14:41:22 +0000
committertfarina@chromium.org <tfarina@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-19 14:41:22 +0000
commit6a808eb2f93e3b0b03a383115a21b742c9b901b2 (patch)
tree793ad39988f3472e6b8b718977c2f2eff49b7dac /base/json
parent0877d8b7ab3e70000023a608a7d214f17f22a8b0 (diff)
downloadchromium_src-6a808eb2f93e3b0b03a383115a21b742c9b901b2.zip
chromium_src-6a808eb2f93e3b0b03a383115a21b742c9b901b2.tar.gz
chromium_src-6a808eb2f93e3b0b03a383115a21b742c9b901b2.tar.bz2
base/json: Don't use static variables of user-defined type (i.e, std::wstring).
Instead use plain wchar_t array. BUG=83856 TEST=None R=tony@chromium.org Review URL: http://codereview.chromium.org/7624057 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@97458 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/json')
-rw-r--r--base/json/json_reader.cc34
-rw-r--r--base/json/json_reader.h2
2 files changed, 17 insertions, 19 deletions
diff --git a/base/json/json_reader.cc b/base/json/json_reader.cc
index b286995..bc7bcd0 100644
--- a/base/json/json_reader.cc
+++ b/base/json/json_reader.cc
@@ -13,12 +13,20 @@
#include "base/utf_string_conversions.h"
#include "base/values.h"
+namespace {
+
+const wchar_t kNullString[] = L"null";
+const wchar_t kTrueString[] = L"true";
+const wchar_t kFalseString[] = L"false";
+
+const int kStackLimit = 100;
+
+} // namespace
+
namespace base {
static const JSONReader::Token kInvalidToken(JSONReader::Token::INVALID_TOKEN,
0, 0);
-static const int kStackLimit = 100;
-
namespace {
// A helper method for ParseNumberToken. It reads an int from the end of
@@ -63,7 +71,7 @@ bool ReadHexDigits(JSONReader::Token& token, int digits) {
return true;
}
-} // anonymous namespace
+} // namespace
const char* JSONReader::kBadRootElementType =
"Root value must be an array or object.";
@@ -509,10 +517,6 @@ Value* JSONReader::DecodeString(const Token& token) {
}
JSONReader::Token JSONReader::ParseToken() {
- static const std::wstring kNullString(L"null");
- static const std::wstring kTrueString(L"true");
- static const std::wstring kFalseString(L"false");
-
EatWhitespaceAndComments();
Token token(Token::INVALID_TOKEN, 0, 0);
@@ -522,17 +526,17 @@ JSONReader::Token JSONReader::ParseToken() {
break;
case 'n':
- if (NextStringMatch(kNullString))
+ if (NextStringMatch(kNullString, arraysize(kNullString) - 1))
token = Token(Token::NULL_TOKEN, json_pos_, 4);
break;
case 't':
- if (NextStringMatch(kTrueString))
+ if (NextStringMatch(kTrueString, arraysize(kTrueString) - 1))
token = Token(Token::BOOL_TRUE, json_pos_, 4);
break;
case 'f':
- if (NextStringMatch(kFalseString))
+ if (NextStringMatch(kFalseString, arraysize(kFalseString) - 1))
token = Token(Token::BOOL_FALSE, json_pos_, 5);
break;
@@ -636,14 +640,8 @@ bool JSONReader::EatComment() {
return true;
}
-bool JSONReader::NextStringMatch(const std::wstring& str) {
- for (size_t i = 0; i < str.length(); ++i) {
- if ('\0' == *json_pos_)
- return false;
- if (*(json_pos_ + i) != str[i])
- return false;
- }
- return true;
+bool JSONReader::NextStringMatch(const wchar_t* str, size_t length) {
+ return wcsncmp(json_pos_, str, length) == 0;
}
void JSONReader::SetErrorCode(JsonParseError error,
diff --git a/base/json/json_reader.h b/base/json/json_reader.h
index f6ad9da..01b2a23 100644
--- a/base/json/json_reader.h
+++ b/base/json/json_reader.h
@@ -190,7 +190,7 @@ class BASE_EXPORT JSONReader {
bool EatComment();
// Checks if |json_pos_| matches str.
- bool NextStringMatch(const std::wstring& str);
+ bool NextStringMatch(const wchar_t* str, size_t length);
// Sets the error code that will be returned to the caller. The current
// line and column are determined and added into the final message.