diff src/evalvars.c @ 27108:92e2e96ff559 v8.2.4083

patch 8.2.4083: Vim9: no test for "vim9script autoload' using script variable Commit: https://github.com/vim/vim/commit/0e3e7ba05fa9cebe17d38def97ecd38a987d02ec Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jan 13 20:18:56 2022 +0000 patch 8.2.4083: Vim9: no test for "vim9script autoload' using script variable Problem: Vim9: no test for "vim9script autoload' and using script variable in the same script. Solution: Add a simple test. Fix uncovered problem.
author Bram Moolenaar <Bram@vim.org>
date Thu, 13 Jan 2022 21:30:04 +0100
parents 140102677c12
children 62b88e6cd791
line wrap: on
line diff
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -2874,6 +2874,32 @@ find_var(char_u *name, hashtab_T **htp, 
 	}
     }
 
+    // When using "vim9script autoload" script-local items are prefixed but can
+    // be used with s:name.
+    if (SCRIPT_ID_VALID(current_sctx.sc_sid)
+					   && name[0] == 's' && name[1] == ':')
+    {
+	scriptitem_T *si = SCRIPT_ITEM(current_sctx.sc_sid);
+
+	if (si->sn_autoload_prefix != NULL)
+	{
+	    char_u *auto_name = concat_str(si->sn_autoload_prefix, name + 2);
+
+	    if (auto_name != NULL)
+	    {
+		ht = &globvarht;
+		ret = find_var_in_ht(ht, *name, auto_name, TRUE);
+		if (ret != NULL)
+		{
+		    if (htp != NULL)
+			*htp = ht;
+		    return ret;
+		}
+	    }
+	    vim_free(auto_name);
+	}
+    }
+
     return NULL;
 }
 
@@ -3318,7 +3344,7 @@ set_var(
 }
 
 /*
- * Set variable "name" to value in "tv".
+ * Set variable "name" to value in "tv_arg".
  * When "sid" is non-zero "name" is in the script with this ID.
  * If the variable already exists and "is_const" is FALSE the value is updated.
  * Otherwise the variable is created.