mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.0.1377: cannot call a dict function in autoloaded dict
Problem: Cannot call a dict function in autoloaded dict.
Solution: Call get_lval() passing the read-only flag.
6e65d594aa
This commit is contained in:
parent
bbbed9fc66
commit
3fd9ffd368
@ -2076,7 +2076,11 @@ static char_u *get_lval(char_u *const name, typval_T *const rettv,
|
||||
return p;
|
||||
}
|
||||
|
||||
v = find_var(lp->ll_name, lp->ll_name_len, &ht, flags & GLV_NO_AUTOLOAD);
|
||||
// Only pass &ht when we would write to the variable, it prevents autoload
|
||||
// as well.
|
||||
v = find_var(lp->ll_name, lp->ll_name_len,
|
||||
(flags & GLV_READ_ONLY) ? NULL : &ht,
|
||||
flags & GLV_NO_AUTOLOAD);
|
||||
if (v == NULL && !quiet) {
|
||||
emsgf(_("E121: Undefined variable: %.*s"),
|
||||
(int)lp->ll_name_len, lp->ll_name);
|
||||
@ -18322,9 +18326,9 @@ varnumber_T get_vim_var_nr(int idx) FUNC_ATTR_PURE
|
||||
return vimvars[idx].vv_nr;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get string v: variable value. Uses a static buffer, can only be used once.
|
||||
*/
|
||||
// Get string v: variable value. Uses a static buffer, can only be used once.
|
||||
// If the String variable has never been set, return an empty string.
|
||||
// Never returns NULL;
|
||||
char_u *get_vim_var_str(int idx) FUNC_ATTR_PURE FUNC_ATTR_NONNULL_RET
|
||||
{
|
||||
return (char_u *)tv_get_string(&vimvars[idx].vv_tv);
|
||||
@ -20360,7 +20364,7 @@ trans_function_name(
|
||||
}
|
||||
|
||||
// Note that TFN_ flags use the same values as GLV_ flags.
|
||||
end = get_lval((char_u *)start, NULL, &lv, false, skip, flags,
|
||||
end = get_lval((char_u *)start, NULL, &lv, false, skip, flags | GLV_READ_ONLY,
|
||||
lead > 2 ? 0 : FNE_CHECK_START);
|
||||
if (end == start) {
|
||||
if (!skip)
|
||||
|
7
src/nvim/testdir/sautest/autoload/foo.vim
Normal file
7
src/nvim/testdir/sautest/autoload/foo.vim
Normal file
@ -0,0 +1,7 @@
|
||||
let g:loaded_foo_vim += 1
|
||||
|
||||
let foo#bar = {}
|
||||
|
||||
func foo#bar.echo()
|
||||
let g:called_foo_bar_echo += 1
|
||||
endfunc
|
1
src/nvim/testdir/sautest/autoload/globone.vim
Normal file
1
src/nvim/testdir/sautest/autoload/globone.vim
Normal file
@ -0,0 +1 @@
|
||||
" used by Test_globpath()
|
1
src/nvim/testdir/sautest/autoload/globtwo.vim
Normal file
1
src/nvim/testdir/sautest/autoload/globtwo.vim
Normal file
@ -0,0 +1 @@
|
||||
" used by Test_globpath()
|
11
src/nvim/testdir/test_autoload.vim
Normal file
11
src/nvim/testdir/test_autoload.vim
Normal file
@ -0,0 +1,11 @@
|
||||
" Tests for autoload
|
||||
|
||||
set runtimepath=./sautest
|
||||
|
||||
func! Test_autoload_dict_func()
|
||||
let g:loaded_foo_vim = 0
|
||||
let g:called_foo_bar_echo = 0
|
||||
call g:foo#bar.echo()
|
||||
call assert_equal(1, g:loaded_foo_vim)
|
||||
call assert_equal(1, g:called_foo_bar_echo)
|
||||
endfunc
|
@ -17,6 +17,7 @@ function Test_glob()
|
||||
call assert_equal("", glob('Xxx\{'))
|
||||
call assert_equal("", glob('Xxx\$'))
|
||||
w! Xxx{
|
||||
" } to fix highlighting
|
||||
w! Xxx\$
|
||||
call assert_equal("Xxx{", glob('Xxx\{'))
|
||||
call assert_equal("Xxx$", glob('Xxx\$'))
|
||||
@ -25,9 +26,8 @@ function Test_glob()
|
||||
endfunction
|
||||
|
||||
function Test_globpath()
|
||||
let slash = (!exists('+shellslash') || &shellslash) ? '/' : '\'
|
||||
call assert_equal('sautest'.slash.'autoload'.slash.'footest.vim',
|
||||
\ globpath('sautest/autoload', '*.vim'))
|
||||
call assert_equal(['sautest'.slash.'autoload'.slash.'footest.vim'],
|
||||
\ globpath('sautest/autoload', '*.vim', 0, 1))
|
||||
call assert_equal(expand("sautest/autoload/globone.vim\nsautest/autoload/globtwo.vim"),
|
||||
\ globpath('sautest/autoload', 'glob*.vim'))
|
||||
call assert_equal([expand('sautest/autoload/globone.vim'), expand('sautest/autoload/globtwo.vim')],
|
||||
\ globpath('sautest/autoload', 'glob*.vim', 0, 1))
|
||||
endfunction
|
||||
|
Loading…
Reference in New Issue
Block a user