diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2018-09-11 08:33:21 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-11 08:33:21 +0200 |
commit | 036051b218760c6c8ff70b2ff347916acab993ff (patch) | |
tree | ae2968ec2ccbba182e889a05c0ea3f9ee4b1fa07 /src/nvim/eval.c | |
parent | 77628d90a42076982e4c659f252b9b7b19698f5d (diff) | |
parent | 39ab7cc6fb5948542f4ccc1d4067fdcca5183964 (diff) | |
download | rneovim-036051b218760c6c8ff70b2ff347916acab993ff.tar.gz rneovim-036051b218760c6c8ff70b2ff347916acab993ff.tar.bz2 rneovim-036051b218760c6c8ff70b2ff347916acab993ff.zip |
Merge pull request #8974 from janlazo/vim-8.0.1377
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r-- | src/nvim/eval.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 9f99ccc110..e031b594a3 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); @@ -18326,9 +18330,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); @@ -19820,7 +19824,7 @@ void ex_function(exarg_T *eap) // s:func script-local function name // g:func global function name, same as "func" p = eap->arg; - name = trans_function_name(&p, eap->skip, 0, &fudi, NULL); + name = trans_function_name(&p, eap->skip, TFN_NO_AUTOLOAD, &fudi, NULL); paren = (vim_strchr(p, '(') != NULL); if (name == NULL && (fudi.fd_dict == NULL || !paren) && !eap->skip) { /* @@ -20364,7 +20368,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) |