[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 52/60] json: Eliminate lexer state IN_WHITESPACE,
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PATCH v2 52/60] json: Eliminate lexer state IN_WHITESPACE, pseudo-token JSON_SKIP |
Date: |
Fri, 17 Aug 2018 17:05:51 +0200 |
Bonus: static json_lexer[] loses its unused elements. It shrinks from
8KiB to 4.75KiB for me.
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
include/qapi/qmp/json-lexer.h | 1 -
qobject/json-lexer.c | 26 +++++++++-----------------
2 files changed, 9 insertions(+), 18 deletions(-)
diff --git a/include/qapi/qmp/json-lexer.h b/include/qapi/qmp/json-lexer.h
index f3524de07a..1a2dbbb717 100644
--- a/include/qapi/qmp/json-lexer.h
+++ b/include/qapi/qmp/json-lexer.h
@@ -27,7 +27,6 @@ typedef enum {
JSON_KEYWORD,
JSON_STRING,
JSON_INTERPOL,
- JSON_SKIP,
JSON_END_OF_INPUT /* must be last */
} JSONTokenType;
diff --git a/qobject/json-lexer.c b/qobject/json-lexer.c
index 49e075a51e..431a1ede61 100644
--- a/qobject/json-lexer.c
+++ b/qobject/json-lexer.c
@@ -119,7 +119,6 @@ enum {
IN_SIGN,
IN_KEYWORD,
IN_INTERPOL,
- IN_WHITESPACE,
};
QEMU_BUILD_BUG_ON(JSON_ERROR != 0); /* json_lexer[] relies on this */
@@ -214,15 +213,6 @@ static const uint8_t json_lexer[][256] = {
['a' ... 'z'] = IN_KEYWORD,
},
- /* whitespace */
- [IN_WHITESPACE] = {
- TERMINAL(JSON_SKIP),
- [' '] = IN_WHITESPACE,
- ['\t'] = IN_WHITESPACE,
- ['\r'] = IN_WHITESPACE,
- ['\n'] = IN_WHITESPACE,
- },
-
/* interpolation */
[IN_INTERPOL] = {
TERMINAL(JSON_INTERPOL),
@@ -249,12 +239,16 @@ static const uint8_t json_lexer[][256] = {
[','] = JSON_COMMA,
[':'] = JSON_COLON,
['a' ... 'z'] = IN_KEYWORD,
- [' '] = IN_WHITESPACE,
- ['\t'] = IN_WHITESPACE,
- ['\r'] = IN_WHITESPACE,
- ['\n'] = IN_WHITESPACE,
+ [' '] = IN_START,
+ ['\t'] = IN_START,
+ ['\r'] = IN_START,
+ ['\n'] = IN_START,
},
[IN_START_INTERPOL]['%'] = IN_INTERPOL,
+ [IN_START_INTERPOL][' '] = IN_START_INTERPOL,
+ [IN_START_INTERPOL]['\t'] = IN_START_INTERPOL,
+ [IN_START_INTERPOL]['\r'] = IN_START_INTERPOL,
+ [IN_START_INTERPOL]['\n'] = IN_START_INTERPOL,
};
void json_lexer_init(JSONLexer *lexer, bool enable_interpolation)
@@ -279,7 +273,7 @@ static void json_lexer_feed_char(JSONLexer *lexer, char ch,
bool flush)
assert(lexer->state <= ARRAY_SIZE(json_lexer));
new_state = json_lexer[lexer->state][(uint8_t)ch];
char_consumed = !TERMINAL_NEEDED_LOOKAHEAD(lexer->state, new_state);
- if (char_consumed && !flush) {
+ if (char_consumed && new_state != lexer->start_state && !flush) {
g_string_append_c(lexer->token, ch);
}
@@ -297,8 +291,6 @@ static void json_lexer_feed_char(JSONLexer *lexer, char ch,
bool flush)
case JSON_STRING:
json_message_process_token(lexer, lexer->token, new_state,
lexer->x, lexer->y);
- /* fall through */
- case JSON_SKIP:
g_string_truncate(lexer->token, 0);
new_state = lexer->start_state;
break;
--
2.17.1
- [Qemu-devel] [PATCH v2 28/60] json: Fix \uXXXX for surrogate pairs, (continued)
- [Qemu-devel] [PATCH v2 28/60] json: Fix \uXXXX for surrogate pairs, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 21/60] json: Reject invalid UTF-8 sequences, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 24/60] json: Accept overlong \xC0\x80 as U+0000 ("modified UTF-8"), Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 13/60] check-qjson: Fix utf8_string() to test all invalid sequences, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 18/60] json: Revamp lexer documentation, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 27/60] json: Reject invalid \uXXXX, fix \u0000, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 36/60] json: Rename token JSON_ESCAPE & friends to JSON_INTERPOL, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 52/60] json: Eliminate lexer state IN_WHITESPACE, pseudo-token JSON_SKIP,
Markus Armbruster <=
- [Qemu-devel] [PATCH v2 20/60] check-qjson: Document we expect invalid UTF-8 to be rejected, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 35/60] json: Don't create JSON_ERROR tokens that won't be used, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 37/60] json: Treat unwanted interpolation as lexical error, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 29/60] check-qjson: Fix and enable utf8_string()'s disabled part, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 58/60] json: Keep interpolation state in JSONParserContext, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 60/60] json: Support %% in JSON strings when interpolating, Markus Armbruster, 2018/08/17