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 /scripts/gendispatch.lua | |
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 'scripts/gendispatch.lua')
-rw-r--r-- | scripts/gendispatch.lua | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/scripts/gendispatch.lua b/scripts/gendispatch.lua index 94789e1ef0..397ccc9aaf 100644 --- a/scripts/gendispatch.lua +++ b/scripts/gendispatch.lua @@ -232,8 +232,14 @@ for i = 1, #functions do converted = 'arg_'..j local rt = real_type(param[1]) if rt ~= 'Object' then - output:write('\n if (args.items['..(j - 1)..'].type == kObjectType'..rt..') {') - output:write('\n '..converted..' = args.items['..(j - 1)..'].data.'..rt:lower()..';') + if rt:match('^Buffer$') or rt:match('^Window$') or rt:match('^Tabpage$') then + -- Buffer, Window, and Tabpage have a specific type, but are stored in integer + output:write('\n if (args.items['..(j - 1)..'].type == kObjectType'..rt..' && args.items['..(j - 1)..'].data.integer >= 0) {') + output:write('\n '..converted..' = (handle_T)args.items['..(j - 1)..'].data.integer;') + else + output:write('\n if (args.items['..(j - 1)..'].type == kObjectType'..rt..') {') + output:write('\n '..converted..' = args.items['..(j - 1)..'].data.'..rt:lower()..';') + end if rt:match('^Buffer$') or rt:match('^Window$') or rt:match('^Tabpage$') or rt:match('^Boolean$') then -- accept nonnegative integers for Booleans, Buffers, Windows and Tabpages output:write('\n } else if (args.items['..(j - 1)..'].type == kObjectTypeInteger && args.items['..(j - 1)..'].data.integer >= 0) {') |