diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-12-19 22:10:13 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-12-19 22:10:13 +0100 |
commit | 8f22f5c3aa0aa96e3843a57f29405625d8514c74 (patch) | |
tree | aea0a069118938db143470a21b3772e5e0995e5b | |
parent | 17f700ac8b55f27ddb519ecaa8acaa43fc1ae60a (diff) | |
download | vim-git-8f22f5c3aa0aa96e3843a57f29405625d8514c74.tar.gz |
patch 8.2.2165: Vim9: assignment to dict member does not workv8.2.2165
Problem: Vim9: assignment to dict member does not work.
Solution: Fix recognizing dict member. (closes #7484)
-rw-r--r-- | src/eval.c | 7 | ||||
-rw-r--r-- | src/evalvars.c | 3 | ||||
-rw-r--r-- | src/ex_docmd.c | 2 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim.h | 12 |
5 files changed, 20 insertions, 6 deletions
diff --git a/src/eval.c b/src/eval.c index 496e20875..f84491e04 100644 --- a/src/eval.c +++ b/src/eval.c @@ -874,6 +874,13 @@ get_lval( if (v == NULL) return NULL; + if (in_vim9script() && (flags & GLV_NO_DECL) == 0) + { + if (!quiet) + semsg(_(e_variable_already_declared), lp->ll_name); + return NULL; + } + /* * Loop until no more [idx] or .key is following. */ diff --git a/src/evalvars.c b/src/evalvars.c index 654eeff23..572e5d556 100644 --- a/src/evalvars.c +++ b/src/evalvars.c @@ -1464,7 +1464,8 @@ ex_let_one( { lval_T lv; - p = get_lval(arg, tv, &lv, FALSE, FALSE, 0, FNE_CHECK_START); + p = get_lval(arg, tv, &lv, FALSE, FALSE, + (flags & ASSIGN_NO_DECL) ? GLV_NO_DECL : 0, FNE_CHECK_START); if (p != NULL && lv.ll_name != NULL) { if (endchars != NULL && vim_strchr(endchars, diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 152eda6c6..95d4dd16b 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -3332,6 +3332,8 @@ find_ex_command( // When followed by "=" or "+=" then it is an assignment. ++emsg_silent; + if (*after == '.') + after = skipwhite(after + 1); if (skip_expr(&after, NULL) == OK) after = skipwhite(after); else diff --git a/src/version.c b/src/version.c index a97037d51..fe06be049 100644 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2165, +/**/ 2164, /**/ 2163, @@ -2536,16 +2536,18 @@ typedef enum { #define COPYID_MASK (~0x1) // Values for trans_function_name() argument: -#define TFN_INT 1 // internal function name OK -#define TFN_QUIET 2 // no error messages -#define TFN_NO_AUTOLOAD 4 // do not use script autoloading -#define TFN_NO_DEREF 8 // do not dereference a Funcref -#define TFN_READ_ONLY 16 // will not change the var +#define TFN_INT 0x01 // internal function name OK +#define TFN_QUIET 0x02 // no error messages +#define TFN_NO_AUTOLOAD 0x04 // do not use script autoloading +#define TFN_NO_DEREF 0x08 // do not dereference a Funcref +#define TFN_READ_ONLY 0x10 // will not change the var +#define TFN_NO_DECL 0x20 // only used for GLV_NO_DECL // Values for get_lval() flags argument: #define GLV_QUIET TFN_QUIET // no error messages #define GLV_NO_AUTOLOAD TFN_NO_AUTOLOAD // do not use script autoloading #define GLV_READ_ONLY TFN_READ_ONLY // will not change the var +#define GLV_NO_DECL TFN_NO_DECL // assignment without :var or :let #define DO_NOT_FREE_CNT 99999 // refcount for dict or list that should not // be freed. |