mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
shada: fix write E5004 error on exit
Fix the problem of failing to write shada when the global variable contains Funcref or Partial.
This commit is contained in:
parent
dbc8ec9446
commit
9fc3949841
@ -2676,6 +2676,13 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer,
|
||||
if (name == NULL) {
|
||||
break;
|
||||
}
|
||||
switch (vartv.v_type) {
|
||||
case VAR_FUNC:
|
||||
case VAR_PARTIAL:
|
||||
continue;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
typval_T tgttv;
|
||||
tv_copy(&vartv, &tgttv);
|
||||
ShaDaWriteResult spe_ret;
|
||||
|
@ -494,14 +494,6 @@ $
|
||||
eq(0, exc_exec('wshada! ' .. shada_fname))
|
||||
end)
|
||||
|
||||
it('errors when a funcref is stored in a variable', function()
|
||||
nvim_command('let F = function("tr")')
|
||||
nvim_command('set shada+=!')
|
||||
eq('\nE5004: Error while dumping variable g:F, itself: attempt to dump function reference'
|
||||
.. '\nE574: Failed to write variable F',
|
||||
redir_exec('wshada'))
|
||||
end)
|
||||
|
||||
it('errors when a self-referencing list is stored in a variable', function()
|
||||
nvim_command('let L = []')
|
||||
nvim_command('call add(L, L)')
|
||||
|
@ -121,15 +121,27 @@ describe('ShaDa support code', function()
|
||||
meths.get_var('NESTEDVAR'))
|
||||
end)
|
||||
|
||||
it('errors and writes when a funcref is stored in a variable',
|
||||
it('ignore when a funcref is stored in a variable',
|
||||
function()
|
||||
nvim_command('let F = function("tr")')
|
||||
meths.set_var('U', '10')
|
||||
nvim_command('set shada+=!')
|
||||
eq('Vim(wshada):E5004: Error while dumping variable g:F, itself: attempt to dump function reference',
|
||||
exc_exec('wshada'))
|
||||
meths.set_option('shada', '')
|
||||
reset('set shada+=!')
|
||||
nvim_command('wshada')
|
||||
reset()
|
||||
nvim_command('set shada+=!')
|
||||
nvim_command('rshada')
|
||||
eq('10', meths.get_var('U'))
|
||||
end)
|
||||
|
||||
it('ignore when a partial is stored in a variable',
|
||||
function()
|
||||
nvim_command('let P = { -> 1 }')
|
||||
meths.set_var('U', '10')
|
||||
nvim_command('set shada+=!')
|
||||
nvim_command('wshada')
|
||||
reset()
|
||||
nvim_command('set shada+=!')
|
||||
nvim_command('rshada')
|
||||
eq('10', meths.get_var('U'))
|
||||
end)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user