aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval.c
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2014-09-17 08:56:59 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2014-09-18 21:30:31 -0300
commit4a8b52ea08bb5cf501cd20bce4744ae6c7edd9b1 (patch)
treec7d53772706ed78bee255100b328db11e3dc867e /src/nvim/eval.c
parent67a16384a46c5eb51ba43d9150e95a1742cffbde (diff)
downloadrneovim-4a8b52ea08bb5cf501cd20bce4744ae6c7edd9b1.tar.gz
rneovim-4a8b52ea08bb5cf501cd20bce4744ae6c7edd9b1.tar.bz2
rneovim-4a8b52ea08bb5cf501cd20bce4744ae6c7edd9b1.zip
api/msgpack-rpc: Improve error infrastructure
- Add error type information to `Error` - Rename `set_api_error` to `api_set_error` for consistency with other api_* functions/macros. - Refactor the api_set_error macro to accept formatted strings and error types - Improve error messages - Wrap error messages with gettext macro - Refactor msgpack-rpc serialization to transform Error instances into [type, message] arrays - Add error type information to API metadata - Normalize nvim->client and client->nvim error handling(change channel_send_call to accept an Error pointer instead of the `errored` boolean pointer) - Use macro to initialize Error structures
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r--src/nvim/eval.c29
1 files changed, 11 insertions, 18 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 760457b54e..a119cd6eac 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -12471,25 +12471,18 @@ static void f_rpcrequest(typval_T *argvars, typval_T *rettv)
ADD(args, vim_to_object(tv));
}
- bool errored;
- Object result;
- if (!channel_send_call((uint64_t)argvars[0].vval.v_number,
- (char *)argvars[1].vval.v_string,
- args,
- &result,
- &errored)) {
- EMSG2(_(e_invarg2), "Channel doesn't exist");
- return;
- }
-
- if (errored) {
- vim_report_error(result.data.string);
+ Error err = ERROR_INIT;
+ Object result = channel_send_call((uint64_t)argvars[0].vval.v_number,
+ (char *)argvars[1].vval.v_string,
+ args,
+ &err);
+ if (err.set) {
+ vim_report_error(cstr_as_string(err.msg));
goto end;
}
-
- Error conversion_error = {.set = false};
- if (!object_to_vim(result, rettv, &conversion_error)) {
- EMSG(_("Error converting the call result"));
+
+ if (!object_to_vim(result, rettv, &err)) {
+ EMSG2(_("Error converting the call result: %s"), err.msg);
}
end:
@@ -19442,7 +19435,7 @@ static void script_host_eval(char *method, typval_T *argvars, typval_T *rettv)
return;
}
- Error err = {.set = false};
+ Error err = ERROR_INIT;
object_to_vim(result, rettv, &err);
api_free_object(result);