diff src/vim9script.c @ 20842:bacc2ab11810 v8.2.0973

patch 8.2.0973: Vim9: type is not checked when assigning to a script variable Commit: https://github.com/vim/vim/commit/34db91f7a47b7bd4aabf1e1dfbaa8a08278bf78d Author: Bram Moolenaar <Bram@vim.org> Date: Sat Jun 13 19:00:10 2020 +0200 patch 8.2.0973: Vim9: type is not checked when assigning to a script variable Problem: Vim9: type is not checked when assigning to a script variable. Solution: Check the type.
author Bram Moolenaar <Bram@vim.org>
date Sat, 13 Jun 2020 19:15:03 +0200
parents 0600ab7b9f09
children 1360541e8c74
line wrap: on
line diff
--- a/src/vim9script.c
+++ b/src/vim9script.c
@@ -488,5 +488,30 @@ vim9_declare_scriptvar(exarg_T *eap, cha
     return p;
 }
 
+/*
+ * Check if the type of script variable "dest" allows assigning "value".
+ */
+    void
+check_script_var_type(typval_T *dest, typval_T *value, char_u *name)
+{
+    scriptitem_T    *si = SCRIPT_ITEM(current_sctx.sc_sid);
+    int		    idx;
+
+    // Find the svar_T in sn_var_vals.
+    for (idx = 0; idx < si->sn_var_vals.ga_len; ++idx)
+    {
+	svar_T    *sv = ((svar_T *)si->sn_var_vals.ga_data) + idx;
+
+	if (sv->sv_tv == dest)
+	{
+	    if (sv->sv_const)
+		semsg(_(e_readonlyvar), name);
+	    else
+		check_type(sv->sv_type, typval2type(value), TRUE);
+	    return;
+	}
+    }
+    iemsg("check_script_var_type(): not found");
+}
 
 #endif // FEAT_EVAL