patch 8.2.2268: Vim9: list unpack seen as declaration

Problem:    Vim9: list unpack seen as declaration.
Solution:   Check for "var". (closes #7594)
diff --git a/src/evalvars.c b/src/evalvars.c
index 73b9f3d..94b857e 100644
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -912,7 +912,7 @@
     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 @@
     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 @@
     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 @@
 	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 @@
     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 @@
     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 @@
 
     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 @@
 
 	    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 @@
 
 	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())
 	{