diff src/vim9class.c @ 33942:3bba09502b8d v9.0.2167

patch 9.0.2167: Vim9: not consistently using :var for declarations Commit: https://github.com/vim/vim/commit/74da0ee0a24799a312a3a8a65858237185ef7a23 Author: Doug Kearns <dougkearns@gmail.com> Date: Thu Dec 14 20:26:26 2023 +0100 patch 9.0.2167: Vim9: not consistently using :var for declarations Problem: Vim9-script object/class variable declarations use syntax that is inconsistent with the rest of the language. Solution: Use :var to declare object and class variables. closes: #13670 Signed-off-by: Doug Kearns <dougkearns@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Thu, 14 Dec 2023 20:30:06 +0100
parents bdd408288d95
children 45a50fd59a73
line wrap: on
line diff
--- a/src/vim9class.c
+++ b/src/vim9class.c
@@ -1558,9 +1558,9 @@ early_ret:
 	    has_public = TRUE;
 	    p = skipwhite(line + 6);
 
-	    if (STRNCMP(p, "this", 4) != 0 && STRNCMP(p, "static", 6) != 0)
+	    if (STRNCMP(p, "var", 3) != 0 && STRNCMP(p, "static", 6) != 0)
 	    {
-		emsg(_(e_public_must_be_followed_by_this_or_static));
+		emsg(_(e_public_must_be_followed_by_var_or_static));
 		break;
 	    }
 	}
@@ -1615,30 +1615,39 @@ early_ret:
 	    }
 	    has_static = TRUE;
 	    p = skipwhite(ps + 6);
+
+	    if (STRNCMP(p, "var", 3) != 0 && STRNCMP(p, "def", 3) != 0)
+	    {
+		emsg(_(e_static_must_be_followed_by_var_or_def));
+		break;
+	    }
 	}
 
 	// object members (public, read access, private):
-	//	"this._varname"
-	//	"this.varname"
-	//	"public this.varname"
-	if (STRNCMP(p, "this", 4) == 0)
+	//	"var _varname"
+	//	"var varname"
+	//	"public var varname"
+	// class members (public, read access, private):
+	//	"static var _varname"
+	//	"static var varname"
+	//	"public static var varname"
+	if (checkforcmd(&p, "var", 3))
 	{
-	    if (p[4] != '.' || !eval_isnamec1(p[5]))
-	    {
-		semsg(_(e_invalid_object_variable_declaration_str), p);
-		break;
-	    }
-	    if (has_static)
-	    {
-		emsg(_(e_static_cannot_be_followed_by_this));
-		break;
-	    }
-	    char_u *varname = p + 5;
+	    char_u *varname = p;
 	    char_u *varname_end = NULL;
 	    type_T *type = NULL;
 	    char_u *init_expr = NULL;
 	    int	    has_type = FALSE;
 
+	    if (!eval_isnamec1(*p))
+	    {
+		if (has_static)
+		    semsg(_(e_invalid_class_variable_declaration_str), line);
+		else
+		    semsg(_(e_invalid_object_variable_declaration_str), line);
+		break;
+	    }
+
 	    if (!is_class && *varname == '_')
 	    {
 		// private variables are not supported in an interface
@@ -1662,7 +1671,7 @@ early_ret:
 		vim_free(init_expr);
 		break;
 	    }
-	    if (add_member(&objmembers, varname, varname_end,
+	    if (add_member(has_static ? &classmembers : &objmembers, varname, varname_end,
 				has_public, has_type, type, init_expr) == FAIL)
 	    {
 		vim_free(init_expr);
@@ -1764,42 +1773,6 @@ early_ret:
 	    }
 	}
 
-	// class members
-	else if (has_static)
-	{
-	    // class members (public, read access, private):
-	    //	"static _varname"
-	    //	"static varname"
-	    //	"public static varname"
-	    char_u  *varname = p;
-	    char_u  *varname_end = NULL;
-	    int	    has_type = FALSE;
-	    type_T  *type = NULL;
-	    char_u  *init_expr = NULL;
-
-	    if (parse_member(eap, line, varname, has_public,
-		      &varname_end, &has_type, &type_list, &type,
-		      &init_expr) == FAIL)
-		break;
-	    if (is_reserved_varname(varname, varname_end))
-	    {
-		vim_free(init_expr);
-		break;
-	    }
-	    if (is_duplicate_variable(&classmembers, &objmembers, varname,
-								varname_end))
-	    {
-		vim_free(init_expr);
-		break;
-	    }
-	    if (add_member(&classmembers, varname, varname_end,
-			      has_public, has_type, type, init_expr) == FAIL)
-	    {
-		vim_free(init_expr);
-		break;
-	    }
-	}
-
 	else
 	{
 	    if (is_class)