[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 51/56] json: Eliminate lexer state IN_ERROR and pseu
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PATCH 51/56] json: Eliminate lexer state IN_ERROR and pseudo-token JSON_MIN |
Date: |
Wed, 8 Aug 2018 14:03:29 +0200 |
Signed-off-by: Markus Armbruster <address@hidden>
---
include/qapi/qmp/json-lexer.h | 10 ++++------
qobject/json-lexer.c | 18 ++++++++----------
2 files changed, 12 insertions(+), 16 deletions(-)
diff --git a/include/qapi/qmp/json-lexer.h b/include/qapi/qmp/json-lexer.h
index 8058695e40..f3524de07a 100644
--- a/include/qapi/qmp/json-lexer.h
+++ b/include/qapi/qmp/json-lexer.h
@@ -14,10 +14,9 @@
#ifndef QEMU_JSON_LEXER_H
#define QEMU_JSON_LEXER_H
-
-typedef enum json_token_type {
- JSON_MIN = 100,
- JSON_LCURLY = JSON_MIN,
+typedef enum {
+ JSON_ERROR = 0, /* must be zero */
+ JSON_LCURLY,
JSON_RCURLY,
JSON_LSQUARE,
JSON_RSQUARE,
@@ -29,8 +28,7 @@ typedef enum json_token_type {
JSON_STRING,
JSON_INTERPOL,
JSON_SKIP,
- JSON_ERROR,
- JSON_END_OF_INPUT
+ JSON_END_OF_INPUT /* must be last */
} JSONTokenType;
typedef struct JSONLexer {
diff --git a/qobject/json-lexer.c b/qobject/json-lexer.c
index 823db3aef8..0332f9dbe1 100644
--- a/qobject/json-lexer.c
+++ b/qobject/json-lexer.c
@@ -101,8 +101,9 @@
* - Decoding and validating is left to the parser.
*/
-enum json_lexer_state {
- IN_ERROR = 0, /* must really be 0, see json_lexer[] */
+enum {
+ IN_START = JSON_END_OF_INPUT + 1,
+ IN_START_INTERPOL,
IN_DQ_STRING_ESCAPE,
IN_DQ_STRING,
IN_SQ_STRING_ESCAPE,
@@ -119,11 +120,9 @@ enum json_lexer_state {
IN_KEYWORD,
IN_INTERPOL,
IN_WHITESPACE,
- IN_START_INTERPOL,
- IN_START,
};
-QEMU_BUILD_BUG_ON((int)JSON_MIN <= (int)IN_START);
+QEMU_BUILD_BUG_ON(JSON_ERROR != 0); /* json_lexer[] relies on this */
#define TERMINAL(state) [0 ... 0x7F] = (state)
@@ -131,10 +130,10 @@ QEMU_BUILD_BUG_ON((int)JSON_MIN <= (int)IN_START);
from OLD_STATE required lookahead. This happens whenever the table
below uses the TERMINAL macro. */
#define TERMINAL_NEEDED_LOOKAHEAD(old_state, terminal) \
- (terminal != IN_ERROR && json_lexer[(old_state)][0] == (terminal))
+ (terminal != JSON_ERROR && json_lexer[(old_state)][0] == (terminal))
static const uint8_t json_lexer[][256] = {
- /* Relies on default initialization to IN_ERROR! */
+ /* Relies on default initialization to JSON_ERROR */
/* double quote string */
[IN_DQ_STRING_ESCAPE] = {
@@ -318,7 +317,7 @@ static void json_lexer_feed_char(JSONLexer *lexer, char ch,
bool flush)
g_string_truncate(lexer->token, 0);
new_state = lexer->start_state;
break;
- case IN_ERROR:
+ case JSON_ERROR:
/* XXX: To avoid having previous bad input leaving the parser in an
* unresponsive state where we consume unpredictable amounts of
* subsequent "good" input, percolate this error state up to the
@@ -335,8 +334,7 @@ static void json_lexer_feed_char(JSONLexer *lexer, char ch,
bool flush)
json_message_process_token(lexer, lexer->token, JSON_ERROR,
lexer->x, lexer->y);
g_string_truncate(lexer->token, 0);
- new_state = lexer->start_state;
- lexer->state = new_state;
+ lexer->state = lexer->start_state;
return;
default:
break;
--
2.17.1
- Re: [Qemu-devel] [PATCH 26/56] json: Simplify parse_string(), (continued)
- [Qemu-devel] [PATCH 31/56] json-parser: simplify and avoid JSONParserContext allocation, Markus Armbruster, 2018/08/08
- [Qemu-devel] [PATCH 43/56] qjson: Fix qobject_from_json() & friends for multiple values, Markus Armbruster, 2018/08/08
- [Qemu-devel] [PATCH 12/56] check-qjson: Simplify utf8_string(), Markus Armbruster, 2018/08/08
- [Qemu-devel] [PATCH 54/56] qobject: Drop superfluous includes of qemu-common.h, Markus Armbruster, 2018/08/08
- [Qemu-devel] [PATCH 53/56] json: Make JSONToken opaque outside json-parser.c, Markus Armbruster, 2018/08/08
- [Qemu-devel] [PATCH 51/56] json: Eliminate lexer state IN_ERROR and pseudo-token JSON_MIN,
Markus Armbruster <=
- [Qemu-devel] [PATCH 13/56] check-qjson: Fix utf8_string() to test all invalid sequences, Markus Armbruster, 2018/08/08
- [Qemu-devel] [PATCH 41/56] json: Nicer recovery from invalid leading zero, Markus Armbruster, 2018/08/08
- [Qemu-devel] [PATCH 10/56] check-qjson: Drop redundant string tests, Markus Armbruster, 2018/08/08