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:
committed by
Christian Brabandt
parent
549f8c0b4e
commit
74da0ee0a2
@@ -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)
|
||||
|
Reference in New Issue
Block a user