Mercurial > vim
view src/create_nvcmdidxs.vim @ 27472:55613f0d59bc v8.2.4264
patch 8.2.4264: Vim9: can use old style autoload function name
Commit: https://github.com/vim/vim/commit/d8fe6d34bb582438142d7c1f73d0bd8537bb3a7a
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Jan 30 18:40:44 2022 +0000
patch 8.2.4264: Vim9: can use old style autoload function name
Problem: Vim9: can use old style autoload function name.
Solution: Give an error for old style autoload function name.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 30 Jan 2022 19:45:03 +0100 |
parents | 4050f0554902 |
children | ee1019e59bef |
line wrap: on
line source
vim9script # This script generates the table nv_cmd_idx[] which contains the index in # nv_cmds[] table (normal.c) for each of the command character supported in # normal/visual mode. # This is used to speed up the command lookup in nv_cmds[]. # # Script should be run using "make nvcmdidxs", every time the nv_cmds[] table # in src/normal.c changes. def Create_nvcmdidxs_table() var nv_cmdtbl: list<dict<number>> = [] # Generate the table of normal/visual mode command characters and their # corresponding index. var idx: number = 0 var ch: number while true ch = internal_get_nv_cmdchar(idx) if ch == -1 break endif add(nv_cmdtbl, {idx: idx, cmdchar: ch}) idx += 1 endwhile # sort the table by the command character sort(nv_cmdtbl, (a, b) => a.cmdchar - b.cmdchar) # Compute the highest index upto which the command character can be directly # used as an index. var nv_max_linear: number = 0 for i in range(nv_cmdtbl->len()) if i != nv_cmdtbl[i].cmdchar nv_max_linear = i - 1 break endif endfor # Generate a header file with the table var output: list<string> =<< trim END /* * Automatically generated code by the create_nvcmdidxs.vim script. * * Table giving the index in nv_cmds[] to lookup based on * the command character. */ // nv_cmd_idx[<normal mode command character>] => nv_cmds[] index static const unsigned short nv_cmd_idx[] = { END # Add each command character in comment and the corresponding index var tbl: list<string> = mapnew(nv_cmdtbl, (k, v) => ' /* ' .. printf('%5d', v.cmdchar) .. ' */ ' .. printf('%3d', v.idx) .. ',' ) output += tbl output += [ '};', '', '// The highest index for which', '// nv_cmds[idx].cmd_char == nv_cmd_idx[nv_cmds[idx].cmd_char]'] output += ['static const int nv_max_linear = ' .. nv_max_linear .. ';'] writefile(output, "nv_cmdidxs.h") enddef Create_nvcmdidxs_table() quit # vim: shiftwidth=2 sts=2 expandtab