[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 33/58] json: Have lexer call streamer directly
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PATCH v3 33/58] json: Have lexer call streamer directly |
Date: |
Thu, 23 Aug 2018 18:40:00 +0200 |
json_lexer_init() takes the function to process a token as an
argument. It's always json_message_process_token(). Makes the code
harder to understand for no actual gain. Drop the indirection.
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
include/qapi/qmp/json-lexer.h | 13 +++----------
include/qapi/qmp/json-streamer.h | 3 +++
qobject/json-lexer.c | 13 ++++++++-----
qobject/json-streamer.c | 6 +++---
4 files changed, 17 insertions(+), 18 deletions(-)
diff --git a/include/qapi/qmp/json-lexer.h b/include/qapi/qmp/json-lexer.h
index 66ccf0357c..44bcf2ca64 100644
--- a/include/qapi/qmp/json-lexer.h
+++ b/include/qapi/qmp/json-lexer.h
@@ -32,20 +32,13 @@ typedef enum json_token_type {
JSON_ERROR,
} JSONTokenType;
-typedef struct JSONLexer JSONLexer;
-
-typedef void (JSONLexerEmitter)(JSONLexer *, GString *,
- JSONTokenType, int x, int y);
-
-struct JSONLexer
-{
- JSONLexerEmitter *emit;
+typedef struct JSONLexer {
int state;
GString *token;
int x, y;
-};
+} JSONLexer;
-void json_lexer_init(JSONLexer *lexer, JSONLexerEmitter func);
+void json_lexer_init(JSONLexer *lexer);
void json_lexer_feed(JSONLexer *lexer, const char *buffer, size_t size);
diff --git a/include/qapi/qmp/json-streamer.h b/include/qapi/qmp/json-streamer.h
index cb808cf27d..7922e185a5 100644
--- a/include/qapi/qmp/json-streamer.h
+++ b/include/qapi/qmp/json-streamer.h
@@ -33,6 +33,9 @@ typedef struct JSONMessageParser
uint64_t token_size;
} JSONMessageParser;
+void json_message_process_token(JSONLexer *lexer, GString *input,
+ JSONTokenType type, int x, int y);
+
void json_message_parser_init(JSONMessageParser *parser,
void (*func)(JSONMessageParser *, GQueue *));
diff --git a/qobject/json-lexer.c b/qobject/json-lexer.c
index d9701f857b..17272a3874 100644
--- a/qobject/json-lexer.c
+++ b/qobject/json-lexer.c
@@ -14,6 +14,7 @@
#include "qemu/osdep.h"
#include "qemu-common.h"
#include "qapi/qmp/json-lexer.h"
+#include "qapi/qmp/json-streamer.h"
#define MAX_TOKEN_SIZE (64ULL << 20)
@@ -278,9 +279,8 @@ static const uint8_t json_lexer[][256] = {
},
};
-void json_lexer_init(JSONLexer *lexer, JSONLexerEmitter func)
+void json_lexer_init(JSONLexer *lexer)
{
- lexer->emit = func;
lexer->state = IN_START;
lexer->token = g_string_sized_new(3);
lexer->x = lexer->y = 0;
@@ -316,7 +316,8 @@ static void json_lexer_feed_char(JSONLexer *lexer, char ch,
bool flush)
case JSON_FLOAT:
case JSON_KEYWORD:
case JSON_STRING:
- lexer->emit(lexer, lexer->token, new_state, lexer->x, lexer->y);
+ json_message_process_token(lexer, lexer->token, new_state,
+ lexer->x, lexer->y);
/* fall through */
case JSON_SKIP:
g_string_truncate(lexer->token, 0);
@@ -336,7 +337,8 @@ static void json_lexer_feed_char(JSONLexer *lexer, char ch,
bool flush)
* never a valid ASCII/UTF-8 sequence, so this should reliably
* induce an error/flush state.
*/
- lexer->emit(lexer, lexer->token, JSON_ERROR, lexer->x, lexer->y);
+ json_message_process_token(lexer, lexer->token, JSON_ERROR,
+ lexer->x, lexer->y);
g_string_truncate(lexer->token, 0);
new_state = IN_START;
lexer->state = new_state;
@@ -351,7 +353,8 @@ static void json_lexer_feed_char(JSONLexer *lexer, char ch,
bool flush)
* this is a security consideration.
*/
if (lexer->token->len > MAX_TOKEN_SIZE) {
- lexer->emit(lexer, lexer->token, lexer->state, lexer->x, lexer->y);
+ json_message_process_token(lexer, lexer->token, lexer->state,
+ lexer->x, lexer->y);
g_string_truncate(lexer->token, 0);
lexer->state = IN_START;
}
diff --git a/qobject/json-streamer.c b/qobject/json-streamer.c
index 78dfff2aa0..9f57ebf2bd 100644
--- a/qobject/json-streamer.c
+++ b/qobject/json-streamer.c
@@ -34,8 +34,8 @@ static void json_message_free_tokens(JSONMessageParser
*parser)
}
}
-static void json_message_process_token(JSONLexer *lexer, GString *input,
- JSONTokenType type, int x, int y)
+void json_message_process_token(JSONLexer *lexer, GString *input,
+ JSONTokenType type, int x, int y)
{
JSONMessageParser *parser = container_of(lexer, JSONMessageParser, lexer);
JSONToken *token;
@@ -115,7 +115,7 @@ void json_message_parser_init(JSONMessageParser *parser,
parser->tokens = g_queue_new();
parser->token_size = 0;
- json_lexer_init(&parser->lexer, json_message_process_token);
+ json_lexer_init(&parser->lexer);
}
void json_message_parser_feed(JSONMessageParser *parser,
--
2.17.1
- [Qemu-devel] [PATCH v3 00/58] json: Fixes, error reporting improvements, cleanups, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 12/58] check-qjson: Cover UTF-8 in single quoted strings, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 34/58] json: Redesign the callback to consume JSON values, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 21/58] check-qjson: Document we expect invalid UTF-8 to be rejected, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 33/58] json: Have lexer call streamer directly,
Markus Armbruster <=
- [Qemu-devel] [PATCH v3 39/58] json: Pass lexical errors and limit violations to callback, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 26/58] json: Leave rejecting invalid escape sequences to parser, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 31/58] json: remove useless return value from lexer/parser, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 22/58] json: Reject invalid UTF-8 sequences, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 29/58] json: Fix \uXXXX for surrogate pairs, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 37/58] json: Rename token JSON_ESCAPE & friends to JSON_INTERP, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 44/58] json: Fix latent parser aborts at end of input, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 28/58] json: Reject invalid \uXXXX, fix \u0000, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 19/58] json: Revamp lexer documentation, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 17/58] json: Fix lexer to include the bad character in JSON_ERROR token, Markus Armbruster, 2018/08/23