mirror of
https://github.com/vim/vim.git
synced 2025-09-29 04:34:16 -04:00
patch 8.2.2268: Vim9: list unpack seen as declaration
Problem: Vim9: list unpack seen as declaration. Solution: Check for "var". (closes #7594)
This commit is contained in:
@@ -912,7 +912,7 @@ ex_let_vars(
|
||||
int copy, // copy values from "tv", don't move
|
||||
int semicolon, // from skip_var_list()
|
||||
int var_count, // from skip_var_list()
|
||||
int flags, // ASSIGN_FINAL, ASSIGN_CONST, ASSIGN_NO_DECL
|
||||
int flags, // ASSIGN_FINAL, ASSIGN_CONST, etc.
|
||||
char_u *op)
|
||||
{
|
||||
char_u *arg = arg_start;
|
||||
@@ -1267,7 +1267,7 @@ ex_let_one(
|
||||
char_u *arg, // points to variable name
|
||||
typval_T *tv, // value to assign to variable
|
||||
int copy, // copy value from "tv"
|
||||
int flags, // ASSIGN_CONST, ASSIGN_FINAL, ASSIGN_NO_DECL
|
||||
int flags, // ASSIGN_CONST, ASSIGN_FINAL, etc.
|
||||
char_u *endchars, // valid chars after variable name or NULL
|
||||
char_u *op) // "+", "-", "." or NULL
|
||||
{
|
||||
@@ -1279,7 +1279,7 @@ ex_let_one(
|
||||
int opt_flags;
|
||||
char_u *tofree = NULL;
|
||||
|
||||
if (in_vim9script() && (flags & ASSIGN_NO_DECL) == 0
|
||||
if (in_vim9script() && (flags & (ASSIGN_NO_DECL | ASSIGN_DECL)) == 0
|
||||
&& (flags & (ASSIGN_CONST | ASSIGN_FINAL)) == 0
|
||||
&& vim_strchr((char_u *)"$@&", *arg) != NULL)
|
||||
{
|
||||
@@ -1476,7 +1476,8 @@ ex_let_one(
|
||||
lval_T lv;
|
||||
|
||||
p = get_lval(arg, tv, &lv, FALSE, FALSE,
|
||||
(flags & ASSIGN_NO_DECL) ? GLV_NO_DECL : 0, FNE_CHECK_START);
|
||||
(flags & (ASSIGN_NO_DECL | ASSIGN_DECL))
|
||||
? GLV_NO_DECL : 0, FNE_CHECK_START);
|
||||
if (p != NULL && lv.ll_name != NULL)
|
||||
{
|
||||
if (endchars != NULL && vim_strchr(endchars,
|
||||
@@ -3053,7 +3054,7 @@ set_var(
|
||||
typval_T *tv,
|
||||
int copy) // make copy of value in "tv"
|
||||
{
|
||||
set_var_const(name, NULL, tv, copy, ASSIGN_NO_DECL);
|
||||
set_var_const(name, NULL, tv, copy, ASSIGN_DECL);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -3067,7 +3068,7 @@ set_var_const(
|
||||
type_T *type,
|
||||
typval_T *tv_arg,
|
||||
int copy, // make copy of value in "tv"
|
||||
int flags) // ASSIGN_CONST, ASSIGN_FINAL, ASSIGN_NO_DECL
|
||||
int flags) // ASSIGN_CONST, ASSIGN_FINAL, etc.
|
||||
{
|
||||
typval_T *tv = tv_arg;
|
||||
typval_T bool_tv;
|
||||
@@ -3087,7 +3088,7 @@ set_var_const(
|
||||
|
||||
if (vim9script
|
||||
&& !is_script_local
|
||||
&& (flags & ASSIGN_NO_DECL) == 0
|
||||
&& (flags & (ASSIGN_NO_DECL | ASSIGN_DECL)) == 0
|
||||
&& (flags & (ASSIGN_CONST | ASSIGN_FINAL)) == 0
|
||||
&& name[1] == ':')
|
||||
{
|
||||
@@ -3126,7 +3127,7 @@ set_var_const(
|
||||
|
||||
if (is_script_local && vim9script)
|
||||
{
|
||||
if ((flags & ASSIGN_NO_DECL) == 0)
|
||||
if ((flags & (ASSIGN_NO_DECL | ASSIGN_DECL)) == 0)
|
||||
{
|
||||
semsg(_(e_redefining_script_item_str), name);
|
||||
goto failed;
|
||||
@@ -3200,8 +3201,15 @@ set_var_const(
|
||||
|
||||
clear_tv(&di->di_tv);
|
||||
}
|
||||
else // add a new variable
|
||||
else
|
||||
{
|
||||
// add a new variable
|
||||
if (vim9script && is_script_local && (flags & ASSIGN_NO_DECL))
|
||||
{
|
||||
semsg(_(e_unknown_variable_str), name);
|
||||
goto failed;
|
||||
}
|
||||
|
||||
// Can't add "v:" or "a:" variable.
|
||||
if (ht == &vimvarht || ht == get_funccal_args_ht())
|
||||
{
|
||||
|
Reference in New Issue
Block a user