diff options
author | James McCoy <jamessan@jamessan.com> | 2016-10-30 23:44:36 -0400 |
---|---|---|
committer | James McCoy <jamessan@jamessan.com> | 2016-11-02 10:06:27 -0400 |
commit | 37e64d79cc12ceded903a490c0d6edaa60950fc6 (patch) | |
tree | fefbc3a0cffa98fd4fafe7f149b919d08b84cbda /src/nvim/msgpack_rpc/helpers.c | |
parent | 87ff2682d7856c508311eeab5bd65c2505fc61d3 (diff) | |
download | rneovim-37e64d79cc12ceded903a490c0d6edaa60950fc6.tar.gz rneovim-37e64d79cc12ceded903a490c0d6edaa60950fc6.tar.bz2 rneovim-37e64d79cc12ceded903a490c0d6edaa60950fc6.zip |
object_to_vim: Fix buffer/window/tabpage conversion on BE systems
Since data.integer is a different (larger) integer type than
data.{buffer,window,tabpage}, we cannot abuse the union by using
data.integer to access the value for all 4 types. Instead, remove the
{buffer,window,tabpage} members and always use the integer member.
In order to accomodate this, perform distinct validation and coercion
between the Integer type and Buffer/Window/Tabpage types in
object_to_vim, msgpack_rpc helpers, and gendispatch.lua.
Diffstat (limited to 'src/nvim/msgpack_rpc/helpers.c')
-rw-r--r-- | src/nvim/msgpack_rpc/helpers.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/nvim/msgpack_rpc/helpers.c b/src/nvim/msgpack_rpc/helpers.c index 14e1c2d978..8c1f101deb 100644 --- a/src/nvim/msgpack_rpc/helpers.c +++ b/src/nvim/msgpack_rpc/helpers.c @@ -21,7 +21,7 @@ static msgpack_zone zone; static msgpack_sbuffer sbuffer; #define HANDLE_TYPE_CONVERSION_IMPL(t, lt) \ - bool msgpack_rpc_to_##lt(const msgpack_object *const obj, t *const arg) \ + bool msgpack_rpc_to_##lt(const msgpack_object *const obj, Integer *const arg) \ FUNC_ATTR_NONNULL_ALL \ { \ if (obj->type != MSGPACK_OBJECT_EXT \ @@ -44,12 +44,12 @@ static msgpack_sbuffer sbuffer; return true; \ } \ \ - void msgpack_rpc_from_##lt(t o, msgpack_packer *res) \ + void msgpack_rpc_from_##lt(Integer o, msgpack_packer *res) \ FUNC_ATTR_NONNULL_ARG(2) \ { \ msgpack_packer pac; \ msgpack_packer_init(&pac, &sbuffer, msgpack_sbuffer_write); \ - msgpack_pack_int64(&pac, o); \ + msgpack_pack_int64(&pac, (handle_T)o); \ msgpack_pack_ext(res, sbuffer.size, kObjectType##t); \ msgpack_pack_ext_body(res, sbuffer.data, sbuffer.size); \ msgpack_sbuffer_clear(&sbuffer); \ @@ -213,17 +213,17 @@ bool msgpack_rpc_to_object(const msgpack_object *const obj, Object *const arg) switch (cur.mobj->via.ext.type) { case kObjectTypeBuffer: { cur.aobj->type = kObjectTypeBuffer; - ret = msgpack_rpc_to_buffer(cur.mobj, &cur.aobj->data.buffer); + ret = msgpack_rpc_to_buffer(cur.mobj, &cur.aobj->data.integer); break; } case kObjectTypeWindow: { cur.aobj->type = kObjectTypeWindow; - ret = msgpack_rpc_to_window(cur.mobj, &cur.aobj->data.window); + ret = msgpack_rpc_to_window(cur.mobj, &cur.aobj->data.integer); break; } case kObjectTypeTabpage: { cur.aobj->type = kObjectTypeTabpage; - ret = msgpack_rpc_to_tabpage(cur.mobj, &cur.aobj->data.tabpage); + ret = msgpack_rpc_to_tabpage(cur.mobj, &cur.aobj->data.integer); break; } } @@ -369,15 +369,15 @@ void msgpack_rpc_from_object(const Object result, msgpack_packer *const res) break; } case kObjectTypeBuffer: { - msgpack_rpc_from_buffer(cur.aobj->data.buffer, res); + msgpack_rpc_from_buffer(cur.aobj->data.integer, res); break; } case kObjectTypeWindow: { - msgpack_rpc_from_window(cur.aobj->data.window, res); + msgpack_rpc_from_window(cur.aobj->data.integer, res); break; } case kObjectTypeTabpage: { - msgpack_rpc_from_tabpage(cur.aobj->data.tabpage, res); + msgpack_rpc_from_tabpage(cur.aobj->data.integer, res); break; } case kObjectTypeArray: { |