diff options
author | Jan Edmund Lazo <janedmundlazo@hotmail.com> | 2018-09-09 17:50:48 -0400 |
---|---|---|
committer | Jan Edmund Lazo <janedmundlazo@hotmail.com> | 2018-09-09 18:12:25 -0400 |
commit | 3fd9ffd36893cd82549956de6960282791573b87 (patch) | |
tree | be3b9dc9c6ef074a9775148e1b4778fa3f3c9d89 | |
parent | bbbed9fc6613c5b69d4ed471ff60d31246c03e35 (diff) | |
download | rneovim-3fd9ffd36893cd82549956de6960282791573b87.tar.gz rneovim-3fd9ffd36893cd82549956de6960282791573b87.tar.bz2 rneovim-3fd9ffd36893cd82549956de6960282791573b87.zip |
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.
https://github.com/vim/vim/commit/6e65d594aa33be11f6074f26e9ff81b52504c62b
-rw-r--r-- | src/nvim/eval.c | 14 | ||||
-rw-r--r-- | src/nvim/testdir/sautest/autoload/foo.vim | 7 | ||||
-rw-r--r-- | src/nvim/testdir/sautest/autoload/globone.vim | 1 | ||||
-rw-r--r-- | src/nvim/testdir/sautest/autoload/globtwo.vim | 1 | ||||
-rw-r--r-- | src/nvim/testdir/test_autoload.vim | 11 | ||||
-rw-r--r-- | src/nvim/testdir/test_escaped_glob.vim | 10 |
6 files changed, 34 insertions, 10 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 541a255dcc..429e327028 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -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) diff --git a/src/nvim/testdir/sautest/autoload/foo.vim b/src/nvim/testdir/sautest/autoload/foo.vim new file mode 100644 index 0000000000..d7dcd5ce3d --- /dev/null +++ b/src/nvim/testdir/sautest/autoload/foo.vim @@ -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 diff --git a/src/nvim/testdir/sautest/autoload/globone.vim b/src/nvim/testdir/sautest/autoload/globone.vim new file mode 100644 index 0000000000..98c9a10582 --- /dev/null +++ b/src/nvim/testdir/sautest/autoload/globone.vim @@ -0,0 +1 @@ +" used by Test_globpath() diff --git a/src/nvim/testdir/sautest/autoload/globtwo.vim b/src/nvim/testdir/sautest/autoload/globtwo.vim new file mode 100644 index 0000000000..98c9a10582 --- /dev/null +++ b/src/nvim/testdir/sautest/autoload/globtwo.vim @@ -0,0 +1 @@ +" used by Test_globpath() diff --git a/src/nvim/testdir/test_autoload.vim b/src/nvim/testdir/test_autoload.vim new file mode 100644 index 0000000000..a92851f655 --- /dev/null +++ b/src/nvim/testdir/test_autoload.vim @@ -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 diff --git a/src/nvim/testdir/test_escaped_glob.vim b/src/nvim/testdir/test_escaped_glob.vim index 430317a23a..eaeac28d61 100644 --- a/src/nvim/testdir/test_escaped_glob.vim +++ b/src/nvim/testdir/test_escaped_glob.vim @@ -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 |