mirror of
https://github.com/neovim/neovim.git
synced 2024-12-31 17:13:26 -07:00
6346987601
Problem: Many places in the code use `findoption()` to access an option using its name, even if the option index is available. This is very slow because it requires looping through the options array over and over. Solution: Use option index instead of name wherever possible. Also introduce an `OptIndex` enum which contains the index for every option as enum constants, this eliminates the need to pass static option names as strings.
76 lines
1.7 KiB
Lua
76 lines
1.7 KiB
Lua
local helpers = require('test.functional.helpers')(after_each)
|
|
local eq = helpers.eq
|
|
local exec_lua = helpers.exec_lua
|
|
local clear = helpers.clear
|
|
|
|
before_each(clear)
|
|
|
|
describe('ffi.cdef', function()
|
|
it('can use Neovim core functions', function()
|
|
if not exec_lua("return pcall(require, 'ffi')") then
|
|
pending('missing LuaJIT FFI')
|
|
end
|
|
|
|
eq(12, exec_lua[[
|
|
local ffi = require('ffi')
|
|
|
|
ffi.cdef('int curwin_col_off(void);')
|
|
|
|
vim.cmd('set number numberwidth=4 signcolumn=yes:4')
|
|
|
|
return ffi.C.curwin_col_off()
|
|
]])
|
|
|
|
eq(20, exec_lua[=[
|
|
local ffi = require('ffi')
|
|
|
|
ffi.cdef[[
|
|
typedef struct window_S win_T;
|
|
typedef struct {} stl_hlrec_t;
|
|
typedef struct {} StlClickRecord;
|
|
typedef struct {} statuscol_T;
|
|
typedef struct {} Error;
|
|
|
|
win_T *find_window_by_handle(int Window, Error *err);
|
|
|
|
int build_stl_str_hl(
|
|
win_T *wp,
|
|
char *out,
|
|
size_t outlen,
|
|
char *fmt,
|
|
int opt_idx,
|
|
int opt_scope,
|
|
int fillchar,
|
|
int maxwidth,
|
|
stl_hlrec_t **hltab,
|
|
StlClickRecord **tabtab,
|
|
statuscol_T *scp
|
|
);
|
|
]]
|
|
|
|
return ffi.C.build_stl_str_hl(
|
|
ffi.C.find_window_by_handle(0, ffi.new('Error')),
|
|
ffi.new('char[1024]'),
|
|
1024,
|
|
ffi.cast('char*', 'StatusLineOfLength20'),
|
|
-1,
|
|
0,
|
|
0,
|
|
0,
|
|
nil,
|
|
nil,
|
|
nil
|
|
)
|
|
]=])
|
|
|
|
-- Check that extern symbols are exported and accessible
|
|
eq(true, exec_lua[[
|
|
local ffi = require('ffi')
|
|
|
|
ffi.cdef('uint64_t display_tick;')
|
|
|
|
return ffi.C.display_tick >= 0
|
|
]])
|
|
end)
|
|
end)
|