mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 10:45:16 -07:00
fix(msgpack): store grid line event as a value
This commit is contained in:
parent
8e5c48b08d
commit
60d1e3e471
@ -289,8 +289,9 @@ static void parse_msgpack(Channel *channel)
|
||||
if (p->type == kMessageTypeRedrawEvent) {
|
||||
// When exiting, ui_client_stop() has already been called, so don't handle UI events.
|
||||
if (ui_client_channel_id && !exiting) {
|
||||
if (p->grid_line_event) {
|
||||
ui_client_event_raw_line(p->grid_line_event);
|
||||
if (p->has_grid_line_event) {
|
||||
ui_client_event_raw_line(&p->grid_line_event);
|
||||
p->has_grid_line_event = false;
|
||||
} else if (p->ui_handler.fn != NULL && p->result.type == kObjectTypeArray) {
|
||||
p->ui_handler.fn(p->result.data.array);
|
||||
}
|
||||
|
@ -187,6 +187,8 @@ void unpacker_init(Unpacker *p)
|
||||
p->unpack_error = ERROR_INIT;
|
||||
|
||||
p->arena = (Arena)ARENA_EMPTY;
|
||||
|
||||
p->has_grid_line_event = false;
|
||||
}
|
||||
|
||||
void unpacker_teardown(Unpacker *p)
|
||||
@ -303,6 +305,7 @@ error:
|
||||
bool unpacker_advance(Unpacker *p)
|
||||
{
|
||||
assert(p->state >= 0);
|
||||
p->has_grid_line_event = false;
|
||||
if (p->state == 0) {
|
||||
if (!unpacker_parse_header(p)) {
|
||||
return false;
|
||||
@ -323,6 +326,7 @@ bool unpacker_advance(Unpacker *p)
|
||||
|
||||
if (p->state == 16) {
|
||||
// grid_line event already unpacked
|
||||
p->has_grid_line_event = true;
|
||||
goto done;
|
||||
} else {
|
||||
assert(p->state == 12);
|
||||
@ -378,7 +382,7 @@ bool unpacker_parse_redraw(Unpacker *p)
|
||||
|
||||
const char *data = p->read_ptr;
|
||||
size_t size = p->read_size;
|
||||
GridLineEvent *g = p->grid_line_event;
|
||||
GridLineEvent *g = &p->grid_line_event;
|
||||
|
||||
#define NEXT_TYPE(tok, typ) \
|
||||
result = mpack_rtoken(&data, &size, &tok); \
|
||||
@ -420,16 +424,10 @@ bool unpacker_parse_redraw(Unpacker *p)
|
||||
p->read_size = size;
|
||||
if (p->ui_handler.fn != ui_client_event_grid_line) {
|
||||
p->state = 12;
|
||||
if (p->grid_line_event) {
|
||||
arena_mem_free(arena_finish(&p->arena));
|
||||
p->grid_line_event = NULL;
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
p->state = 14;
|
||||
p->arena = (Arena)ARENA_EMPTY;
|
||||
p->grid_line_event = arena_alloc(&p->arena, sizeof *p->grid_line_event, true);
|
||||
g = p->grid_line_event;
|
||||
}
|
||||
FALLTHROUGH;
|
||||
|
||||
|
@ -37,7 +37,8 @@ struct Unpacker {
|
||||
int nevents;
|
||||
int ncalls;
|
||||
UIClientHandler ui_handler;
|
||||
GridLineEvent *grid_line_event;
|
||||
GridLineEvent grid_line_event;
|
||||
bool has_grid_line_event;
|
||||
};
|
||||
|
||||
// unrecovareble error. unpack_error should be set!
|
||||
|
Loading…
Reference in New Issue
Block a user