| Index: base/json/json_reader.h
|
| diff --git a/base/json/json_reader.h b/base/json/json_reader.h
|
| index 47598f42a6e2c230717421664bda044c28c4ad1a..aa0c2a72de189e50b87c1e300aec03368c59dd00 100644
|
| --- a/base/json/json_reader.h
|
| +++ b/base/json/json_reader.h
|
| @@ -82,7 +82,20 @@ class JSONReader {
|
| }
|
| };
|
|
|
| - // Error messages that can be returned.
|
| + // Error codes during parsing.
|
| + enum JsonParseError {
|
| + JSON_NO_ERROR = 0,
|
| + JSON_BAD_ROOT_ELEMENT_TYPE,
|
| + JSON_INVALID_ESCAPE,
|
| + JSON_SYNTAX_ERROR,
|
| + JSON_TRAILING_COMMA,
|
| + JSON_TOO_MUCH_NESTING,
|
| + JSON_UNEXPECTED_DATA_AFTER_ROOT,
|
| + JSON_UNSUPPORTED_ENCODING,
|
| + JSON_UNQUOTED_DICTIONARY_KEY,
|
| + };
|
| +
|
| + // String versions of parse error codes.
|
| static const char* kBadRootElementType;
|
| static const char* kInvalidEscape;
|
| static const char* kSyntaxError;
|
| @@ -100,17 +113,26 @@ class JSONReader {
|
| // objects and arrays even though this goes against the RFC.
|
| static Value* Read(const std::string& json, bool allow_trailing_comma);
|
|
|
| - // Reads and parses |json| like Read(). |error_message_out| is optional. If
|
| - // specified and NULL is returned, |error_message_out| will be populated with
|
| - // a string describing the error. Otherwise, |error_message_out| is
|
| - // unmodified.
|
| + // Reads and parses |json| like Read(). |error_code_out| and |error_msg_out|
|
| + // are optional. If specified and NULL is returned, they will be populated
|
| + // an error code and a formatted error message (including error location if
|
| + // appropriate). Otherwise, they will be unmodified.
|
| static Value* ReadAndReturnError(const std::string& json,
|
| bool allow_trailing_comma,
|
| - std::string* error_message_out);
|
| + int* error_code_out,
|
| + std::string* error_msg_out);
|
| +
|
| + // Converts a JSON parse error code into a human readable message.
|
| + // Returns an empty string if error_code is JSON_NO_ERROR.
|
| + static std::string ErrorCodeToString(JsonParseError error_code);
|
| +
|
| + // Returns the error code if the last call to JsonToValue() failed.
|
| + // Returns JSON_NO_ERROR otherwise.
|
| + JsonParseError error_code() const { return error_code_; }
|
|
|
| - // Returns the error message if the last call to JsonToValue() failed. If the
|
| - // last call did not fail, returns a valid empty string.
|
| - std::string error_message() { return error_message_; }
|
| + // Converts error_code_ to a human-readable string, including line and column
|
| + // numbers if appropriate.
|
| + std::string GetErrorMessage() const;
|
|
|
| // Reads and parses |json|, returning a Value. The caller owns the returned
|
| // instance. If |json| is not a properly formed JSON string, returns NULL and
|
| @@ -124,7 +146,7 @@ class JSONReader {
|
|
|
| private:
|
| static std::string FormatErrorMessage(int line, int column,
|
| - const char* description);
|
| + const std::string& description);
|
|
|
| DISALLOW_COPY_AND_ASSIGN(JSONReader);
|
|
|
| @@ -170,9 +192,9 @@ class JSONReader {
|
| // Checks if |json_pos_| matches str.
|
| bool NextStringMatch(const std::wstring& str);
|
|
|
| - // Creates the error message that will be returned to the caller. The current
|
| + // Sets the error code that will be returned to the caller. The current
|
| // line and column are determined and added into the final message.
|
| - void SetErrorMessage(const char* description, const wchar_t* error_pos);
|
| + void SetErrorCode(const JsonParseError error, const wchar_t* error_pos);
|
|
|
| // Pointer to the starting position in the input string.
|
| const wchar_t* start_pos_;
|
| @@ -186,8 +208,10 @@ class JSONReader {
|
| // A parser flag that allows trailing commas in objects and arrays.
|
| bool allow_trailing_comma_;
|
|
|
| - // Contains the error message for the last call to JsonToValue(), if any.
|
| - std::string error_message_;
|
| + // Contains the error code for the last call to JsonToValue(), if any.
|
| + JsonParseError error_code_;
|
| + int error_line_;
|
| + int error_col_;
|
| };
|
|
|
| } // namespace base
|
|
|