| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/json/json_reader.h" | 5 #include "base/json/json_reader.h" |
| 6 | 6 |
| 7 #include "base/float_util.h" | 7 #include "base/float_util.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/stringprintf.h" | 10 #include "base/stringprintf.h" |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 } | 212 } |
| 213 | 213 |
| 214 scoped_ptr<Value> node; | 214 scoped_ptr<Value> node; |
| 215 | 215 |
| 216 switch (token.type) { | 216 switch (token.type) { |
| 217 case Token::END_OF_INPUT: | 217 case Token::END_OF_INPUT: |
| 218 case Token::INVALID_TOKEN: | 218 case Token::INVALID_TOKEN: |
| 219 return NULL; | 219 return NULL; |
| 220 | 220 |
| 221 case Token::NULL_TOKEN: | 221 case Token::NULL_TOKEN: |
| 222 node.reset(Value::CreateNullValue()); | 222 node.reset(NullValue()); |
| 223 break; | 223 break; |
| 224 | 224 |
| 225 case Token::BOOL_TRUE: | 225 case Token::BOOL_TRUE: |
| 226 node.reset(Value::CreateBooleanValue(true)); | 226 node.reset(TrueValue()); |
| 227 break; | 227 break; |
| 228 | 228 |
| 229 case Token::BOOL_FALSE: | 229 case Token::BOOL_FALSE: |
| 230 node.reset(Value::CreateBooleanValue(false)); | 230 node.reset(FalseValue()); |
| 231 break; | 231 break; |
| 232 | 232 |
| 233 case Token::NUMBER: | 233 case Token::NUMBER: |
| 234 node.reset(DecodeNumber(token)); | 234 node.reset(DecodeNumber(token)); |
| 235 if (!node.get()) | 235 if (!node.get()) |
| 236 return NULL; | 236 return NULL; |
| 237 break; | 237 break; |
| 238 | 238 |
| 239 case Token::STRING: | 239 case Token::STRING: |
| 240 node.reset(DecodeString(token)); | 240 node.reset(DecodeString(token)); |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 } | 385 } |
| 386 | 386 |
| 387 return token; | 387 return token; |
| 388 } | 388 } |
| 389 | 389 |
| 390 Value* JSONReader::DecodeNumber(const Token& token) { | 390 Value* JSONReader::DecodeNumber(const Token& token) { |
| 391 const std::wstring num_string(token.begin, token.length); | 391 const std::wstring num_string(token.begin, token.length); |
| 392 | 392 |
| 393 int num_int; | 393 int num_int; |
| 394 if (StringToInt(WideToUTF8(num_string), &num_int)) | 394 if (StringToInt(WideToUTF8(num_string), &num_int)) |
| 395 return Value::CreateIntegerValue(num_int); | 395 return NumberValue::New(num_int); |
| 396 | 396 |
| 397 double num_double; | 397 double num_double; |
| 398 if (StringToDouble(WideToUTF8(num_string), &num_double) && | 398 if (StringToDouble(WideToUTF8(num_string), &num_double) && |
| 399 base::IsFinite(num_double)) | 399 base::IsFinite(num_double)) |
| 400 return Value::CreateDoubleValue(num_double); | 400 return NumberValue::New(num_double); |
| 401 | 401 |
| 402 return NULL; | 402 return NULL; |
| 403 } | 403 } |
| 404 | 404 |
| 405 JSONReader::Token JSONReader::ParseStringToken() { | 405 JSONReader::Token JSONReader::ParseStringToken() { |
| 406 Token token(Token::STRING, json_pos_, 1); | 406 Token token(Token::STRING, json_pos_, 1); |
| 407 wchar_t c = token.NextChar(); | 407 wchar_t c = token.NextChar(); |
| 408 while ('\0' != c) { | 408 while ('\0' != c) { |
| 409 if ('\\' == c) { | 409 if ('\\' == c) { |
| 410 ++token.length; | 410 ++token.length; |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 498 // We should only have valid strings at this point. If not, | 498 // We should only have valid strings at this point. If not, |
| 499 // ParseStringToken didn't do it's job. | 499 // ParseStringToken didn't do it's job. |
| 500 NOTREACHED(); | 500 NOTREACHED(); |
| 501 return NULL; | 501 return NULL; |
| 502 } | 502 } |
| 503 } else { | 503 } else { |
| 504 // Not escaped | 504 // Not escaped |
| 505 decoded_str.push_back(c); | 505 decoded_str.push_back(c); |
| 506 } | 506 } |
| 507 } | 507 } |
| 508 return Value::CreateStringValue(WideToUTF16Hack(decoded_str)); | 508 return StringValue::New(WideToUTF16Hack(decoded_str)); |
| 509 } | 509 } |
| 510 | 510 |
| 511 JSONReader::Token JSONReader::ParseToken() { | 511 JSONReader::Token JSONReader::ParseToken() { |
| 512 static const std::wstring kNullString(L"null"); | 512 static const std::wstring kNullString(L"null"); |
| 513 static const std::wstring kTrueString(L"true"); | 513 static const std::wstring kTrueString(L"true"); |
| 514 static const std::wstring kFalseString(L"false"); | 514 static const std::wstring kFalseString(L"false"); |
| 515 | 515 |
| 516 EatWhitespaceAndComments(); | 516 EatWhitespaceAndComments(); |
| 517 | 517 |
| 518 Token token(Token::INVALID_TOKEN, 0, 0); | 518 Token token(Token::INVALID_TOKEN, 0, 0); |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 665 ++column_number; | 665 ++column_number; |
| 666 } | 666 } |
| 667 } | 667 } |
| 668 | 668 |
| 669 error_line_ = line_number; | 669 error_line_ = line_number; |
| 670 error_col_ = column_number; | 670 error_col_ = column_number; |
| 671 error_code_ = error; | 671 error_code_ = error; |
| 672 } | 672 } |
| 673 | 673 |
| 674 } // namespace base | 674 } // namespace base |
| OLD | NEW |