aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Edmund Lazo <janedmundlazo@hotmail.com>2018-09-09 17:50:48 -0400
committerJan Edmund Lazo <janedmundlazo@hotmail.com>2018-09-09 18:12:25 -0400
commit3fd9ffd36893cd82549956de6960282791573b87 (patch)
treebe3b9dc9c6ef074a9775148e1b4778fa3f3c9d89
parentbbbed9fc6613c5b69d4ed471ff60d31246c03e35 (diff)
downloadrneovim-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.c14
-rw-r--r--src/nvim/testdir/sautest/autoload/foo.vim7
-rw-r--r--src/nvim/testdir/sautest/autoload/globone.vim1
-rw-r--r--src/nvim/testdir/sautest/autoload/globtwo.vim1
-rw-r--r--src/nvim/testdir/test_autoload.vim11
-rw-r--r--src/nvim/testdir/test_escaped_glob.vim10
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