diff src/eval.c @ 21674:f303d6a01a3e v8.2.1387

patch 8.2.1387: Vim9: cannot assign to single letter variable with type Commit: https://github.com/vim/vim/commit/95dd9f2571f09a915674133c73b471b0ebbdcdbf Author: Bram Moolenaar <Bram@vim.org> Date: Fri Aug 7 19:28:08 2020 +0200 patch 8.2.1387: Vim9: cannot assign to single letter variable with type Problem: Vim9: cannot assign to single letter variable with type. Solution: Exclude the colon from the variable name. (closes https://github.com/vim/vim/issues/6647)
author Bram Moolenaar <Bram@vim.org>
date Fri, 07 Aug 2020 19:30:06 +0200
parents c3f6006bf0ba
children f41c646cb8b9
line wrap: on
line diff
--- a/src/eval.c
+++ b/src/eval.c
@@ -820,14 +820,23 @@ get_lval(
     {
 	lp->ll_name = name;
 
-	if (in_vim9script() && *p == ':')
+	if (in_vim9script())
 	{
-	    scriptitem_T *si = SCRIPT_ITEM(current_sctx.sc_sid);
-	    char_u	 *tp = skipwhite(p + 1);
-
-	    // parse the type after the name
-	    lp->ll_type = parse_type(&tp, &si->sn_type_list);
-	    lp->ll_name_end = tp;
+	    // "a: type" is declaring variable "a" with a type, not "a:".
+	    if (p == name + 2 && p[-1] == ':')
+	    {
+		--p;
+		lp->ll_name_end = p;
+	    }
+	    if (*p == ':')
+	    {
+		scriptitem_T *si = SCRIPT_ITEM(current_sctx.sc_sid);
+		char_u	 *tp = skipwhite(p + 1);
+
+		// parse the type after the name
+		lp->ll_type = parse_type(&tp, &si->sn_type_list);
+		lp->ll_name_end = tp;
+	    }
 	}
     }