0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

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>
This commit is contained in:
Doug Kearns
2023-12-14 20:26:26 +01:00
committed by Christian Brabandt
parent 549f8c0b4e
commit 74da0ee0a2
8 changed files with 714 additions and 607 deletions

View File

@@ -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)