Object provider_call(char *method, Array args) { Feature *f = pmap_get(cstr_t)(registered_providers, method); if (!f || !channel_exists(f->channel_id)) { char buf[256]; snprintf(buf, sizeof(buf), "Provider for method \"%s\" is not available", method); vim_report_error(cstr_as_string(buf)); api_free_array(args); return NIL; } Error err = ERROR_INIT; Object result = NIL = channel_send_call(f->channel_id, method, args, &err); if (err.set) { vim_report_error(cstr_as_string(err.msg)); api_free_object(result); return NIL; } return result; }
void api_free_array(Array value) { for (size_t i = 0; i < value.size; i++) { api_free_object(value.items[i]); } free(value.items); }
static void ui_bridge_cursor_styleset_event(void **argv) { UI *ui = UI(argv[0]); Object *styles = (Object *)argv[1]; ui->cursor_style_set(ui, styles->data.dictionary); api_free_object(*styles); xfree(styles); }
void api_free_dictionary(Dictionary value) { for (size_t i = 0; i < value.size; i++) { api_free_string(value.items[i].key); api_free_object(value.items[i].value); } free(value.items); }
static void ui_bridge_mode_info_set_event(void **argv) { UI *ui = UI(argv[0]); bool *enabled = argv[1]; Object *modes = argv[2]; ui->mode_info_set(ui, *enabled, modes->data.array); xfree(enabled); api_free_object(*modes); xfree(modes); }