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>
diff --git a/src/vim9class.c b/src/vim9class.c
index b19f8c9..9d17140 100644
--- a/src/vim9class.c
+++ b/src/vim9class.c
@@ -1558,9 +1558,9 @@
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 @@
}
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 @@
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 @@
}
}
- // 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)