mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
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.
This commit is contained in:
parent
23c1b2b018
commit
6e65d594aa
@ -2120,6 +2120,7 @@ test_arglist \
|
|||||||
test_assign \
|
test_assign \
|
||||||
test_autochdir \
|
test_autochdir \
|
||||||
test_autocmd \
|
test_autocmd \
|
||||||
|
test_autoload \
|
||||||
test_backspace_opt \
|
test_backspace_opt \
|
||||||
test_breakindent \
|
test_breakindent \
|
||||||
test_bufline \
|
test_bufline \
|
||||||
|
@ -1956,7 +1956,10 @@ get_lval(
|
|||||||
|
|
||||||
cc = *p;
|
cc = *p;
|
||||||
*p = NUL;
|
*p = NUL;
|
||||||
v = find_var(lp->ll_name, &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, (flags & GLV_READ_ONLY) ? NULL : &ht,
|
||||||
|
flags & GLV_NO_AUTOLOAD);
|
||||||
if (v == NULL && !quiet)
|
if (v == NULL && !quiet)
|
||||||
EMSG2(_(e_undefvar), lp->ll_name);
|
EMSG2(_(e_undefvar), lp->ll_name);
|
||||||
*p = cc;
|
*p = cc;
|
||||||
@ -6610,6 +6613,8 @@ get_vim_var_nr(int idx)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* 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 *
|
char_u *
|
||||||
get_vim_var_str(int idx)
|
get_vim_var_str(int idx)
|
||||||
|
@ -73,6 +73,7 @@ NEW_TESTS = test_arabic.res \
|
|||||||
test_assert.res \
|
test_assert.res \
|
||||||
test_autochdir.res \
|
test_autochdir.res \
|
||||||
test_autocmd.res \
|
test_autocmd.res \
|
||||||
|
test_autoload.res \
|
||||||
test_backspace_opt.res \
|
test_backspace_opt.res \
|
||||||
test_breakindent.res \
|
test_breakindent.res \
|
||||||
test_bufwintabinfo.res \
|
test_bufwintabinfo.res \
|
||||||
|
7
src/testdir/sautest/autoload/foo.vim
Normal file
7
src/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/testdir/sautest/autoload/globone.vim
Normal file
1
src/testdir/sautest/autoload/globone.vim
Normal file
@ -0,0 +1 @@
|
|||||||
|
" used by Test_globpath()
|
1
src/testdir/sautest/autoload/globtwo.vim
Normal file
1
src/testdir/sautest/autoload/globtwo.vim
Normal file
@ -0,0 +1 @@
|
|||||||
|
" used by Test_globpath()
|
11
src/testdir/test_autoload.vim
Normal file
11
src/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
|
@ -25,8 +25,8 @@ function Test_glob()
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function Test_globpath()
|
function Test_globpath()
|
||||||
call assert_equal("sautest/autoload/Test104.vim\nsautest/autoload/footest.vim",
|
call assert_equal("sautest/autoload/globone.vim\nsautest/autoload/globtwo.vim",
|
||||||
\ globpath('sautest/autoload', '*.vim'))
|
\ globpath('sautest/autoload', 'glob*.vim'))
|
||||||
call assert_equal(['sautest/autoload/Test104.vim', 'sautest/autoload/footest.vim'],
|
call assert_equal(['sautest/autoload/globone.vim', 'sautest/autoload/globtwo.vim'],
|
||||||
\ globpath('sautest/autoload', '*.vim', 0, 1))
|
\ globpath('sautest/autoload', 'glob*.vim', 0, 1))
|
||||||
endfunction
|
endfunction
|
||||||
|
@ -1594,7 +1594,7 @@ trans_function_name(
|
|||||||
start += lead;
|
start += lead;
|
||||||
|
|
||||||
/* Note that TFN_ flags use the same values as GLV_ flags. */
|
/* Note that TFN_ flags use the same values as GLV_ flags. */
|
||||||
end = get_lval(start, NULL, &lv, FALSE, skip, flags,
|
end = get_lval(start, NULL, &lv, FALSE, skip, flags | GLV_READ_ONLY,
|
||||||
lead > 2 ? 0 : FNE_CHECK_START);
|
lead > 2 ? 0 : FNE_CHECK_START);
|
||||||
if (end == start)
|
if (end == start)
|
||||||
{
|
{
|
||||||
|
@ -771,6 +771,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1377,
|
||||||
/**/
|
/**/
|
||||||
1376,
|
1376,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user