commit 282dda643ae598d5c8e9f34c379d931563b4891b
parent ef5ab2bf76a8037c3ca87c08d4083e03686fd7a1
Author: Andrew Willette <willette.andrew1846@gmail.com>
Date: Wed, 30 Nov 2022 14:32:57 -0600
fix(ui-ext): log and clear error in ui_comp_event (#21147)
* fix: log and clear error in ui_comp_event
* fix: handling error in each map_foreach_value iteration
* fix: handling error decl in for_each loop
* fix: updating initerr to const, removing initerr free-ing
* fix: using ERROR_SET for error check
* fix: wrapping ERROR_INIT in parens to allow for including inside macro
Diffstat:
3 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/src/nvim/api/private/defs.h b/src/nvim/api/private/defs.h
@@ -12,7 +12,7 @@
#define ARRAY_DICT_INIT KV_INITIAL_VALUE
#define STRING_INIT { .data = NULL, .size = 0 }
#define OBJECT_INIT { .type = kObjectTypeNil }
-#define ERROR_INIT { .type = kErrorTypeNone, .msg = NULL }
+#define ERROR_INIT ((Error) { .type = kErrorTypeNone, .msg = NULL })
#define REMOTE_TYPE(type) typedef handle_T type
#define ERROR_SET(e) ((e)->type != kErrorTypeNone)
diff --git a/src/nvim/msgpack_rpc/unpacker.c b/src/nvim/msgpack_rpc/unpacker.c
@@ -186,7 +186,7 @@ void unpacker_init(Unpacker *p)
mpack_parser_init(&p->parser, 0);
p->parser.data.p = p;
mpack_tokbuf_init(&p->reader);
- p->unpack_error = (Error)ERROR_INIT;
+ p->unpack_error = ERROR_INIT;
p->arena = (Arena)ARENA_EMPTY;
}
diff --git a/src/nvim/ui_compositor.c b/src/nvim/ui_compositor.c
@@ -706,15 +706,18 @@ static void ui_comp_grid_resize(UI *ui, Integer grid, Integer width, Integer hei
static void ui_comp_event(UI *ui, char *name, Array args)
{
- Error err = ERROR_INIT;
UIEventCallback *event_cb;
bool handled = false;
-
map_foreach_value(&ui_event_cbs, event_cb, {
+ Error err = ERROR_INIT;
Object res = nlua_call_ref(event_cb->cb, name, args, false, &err);
if (res.type == kObjectTypeBoolean && res.data.boolean == true) {
handled = true;
}
+ if (ERROR_SET(&err)) {
+ ELOG("Error while executing ui_comp_event callback: %s", err.msg);
+ }
+ api_clear_error(&err);
})
if (!handled) {