patch 8.2.0285: unused error message; cannot create s:var

Problem:    Unused error message. Cannot create s:var.
Solution:   Remove the error message. Make assignment to s:var work.
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 1fb08ab..ac721a8 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -65,6 +65,8 @@
   assert_equal('xxxyyy', s:appendToMe)
   s:addToMe += 222
   assert_equal(333, s:addToMe)
+  s:newVar = 'new'
+  assert_equal('new', s:newVar)
 enddef
 
 func Test_assignment_failure()
diff --git a/src/version.c b/src/version.c
index c09d556..9dc3c6f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    285,
+/**/
     284,
 /**/
     283,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 08cf0e6..45dbf43 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -3284,10 +3284,9 @@
 		}
 	    }
 	}
-	else if ((STRNCMP(arg, "s:", 2) == 0
-		    ? lookup_script(arg + 2, varlen - 2)
-		    : lookup_script(arg, varlen)) == OK
-				   || find_imported(arg, varlen, cctx) != NULL)
+	else if (STRNCMP(arg, "s:", 2) == 0
+		|| lookup_script(arg, varlen) == OK
+		|| find_imported(arg, varlen, cctx) != NULL)
 	{
 	    dest = dest_script;
 	    if (is_decl)
@@ -3566,7 +3565,7 @@
 		idx = get_script_item_idx(sid, rawname, TRUE);
 		// TODO: specific type
 		if (idx < 0)
-		    generate_OLDSCRIPT(cctx, ISN_STORES, rawname, sid, &t_any);
+		    generate_OLDSCRIPT(cctx, ISN_STORES, name, sid, &t_any);
 		else
 		    generate_VIM9SCRIPT(cctx, ISN_STORESCRIPT,
 							     sid, idx, &t_any);
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 399720a..6fad391 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -356,6 +356,20 @@
 }
 
 /*
+ * Store "tv" in variable "name".
+ * This is for s: and g: variables.
+ */
+    static void
+store_var(char_u *name, typval_T *tv)
+{
+    funccal_entry_T entry;
+
+    save_funccal(&entry);
+    set_var_const(name, NULL, tv, FALSE, 0);
+    restore_funccal();
+}
+
+/*
  * Execute a function by "name".
  * This can be a builtin function, user function or a funcref.
  */
@@ -556,6 +570,7 @@
 					       iptr->isn_arg.loadstore.ls_sid);
 		    char_u	*name = iptr->isn_arg.loadstore.ls_name;
 		    dictitem_T	*di = find_var_in_ht(ht, 0, name, TRUE);
+
 		    if (di == NULL)
 		    {
 			semsg(_(e_undefvar), name);
@@ -574,10 +589,9 @@
 	    // load g: variable
 	    case ISN_LOADG:
 		{
-		    dictitem_T *di;
-
-		    di = find_var_in_ht(get_globvar_ht(), 0,
+		    dictitem_T *di = find_var_in_ht(get_globvar_ht(), 0,
 						   iptr->isn_arg.string, TRUE);
+
 		    if (di == NULL)
 		    {
 			semsg(_("E121: Undefined variable: g:%s"),
@@ -617,12 +631,8 @@
 
 		    if (ga_grow(&ectx.ec_stack, 1) == FAIL)
 			goto failed;
-		    if (get_env_tv(&name, &optval, TRUE) == FAIL)
-		    {
-			semsg(_("E1060: Invalid environment variable name: %s"),
-							 iptr->isn_arg.string);
-			goto failed;
-		    }
+		    // name is always valid, checked when compiling
+		    (void)get_env_tv(&name, &optval, TRUE);
 		    *STACK_TV_BOT(0) = optval;
 		    ++ectx.ec_stack.ga_len;
 		}
@@ -653,16 +663,16 @@
 		    hashtab_T	*ht = &SCRIPT_VARS(
 					       iptr->isn_arg.loadstore.ls_sid);
 		    char_u	*name = iptr->isn_arg.loadstore.ls_name;
-		    dictitem_T	*di = find_var_in_ht(ht, 0, name, TRUE);
+		    dictitem_T	*di = find_var_in_ht(ht, 0, name + 2, TRUE);
 
-		    if (di == NULL)
-		    {
-			semsg(_(e_undefvar), name);
-			goto failed;
-		    }
 		    --ectx.ec_stack.ga_len;
-		    clear_tv(&di->di_tv);
-		    di->di_tv = *STACK_TV_BOT(0);
+		    if (di == NULL)
+			store_var(iptr->isn_arg.string, STACK_TV_BOT(0));
+		    else
+		    {
+			clear_tv(&di->di_tv);
+			di->di_tv = *STACK_TV_BOT(0);
+		    }
 		}
 		break;
 
@@ -750,14 +760,7 @@
 		    di = find_var_in_ht(get_globvar_ht(), 0,
 					       iptr->isn_arg.string + 2, TRUE);
 		    if (di == NULL)
-		    {
-			funccal_entry_T entry;
-
-			save_funccal(&entry);
-			set_var_const(iptr->isn_arg.string, NULL,
-						    STACK_TV_BOT(0), FALSE, 0);
-			restore_funccal();
-		    }
+			store_var(iptr->isn_arg.string, STACK_TV_BOT(0));
 		    else
 		    {
 			clear_tv(&di->di_tv);
@@ -1723,7 +1726,7 @@
 		    scriptitem_T *si = SCRIPT_ITEM(
 					       iptr->isn_arg.loadstore.ls_sid);
 
-		    smsg("%4d STORES s:%s in %s", current,
+		    smsg("%4d STORES %s in %s", current,
 					    iptr->isn_arg.string, si->sn_name);
 		}
 		break;