Mercurial > vim
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)