mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 9.0.1838: Vim9: Cannot modify class member vars from def function
Problem: Vim9: Cannot modify class member vars from def function Solution: Add support for modifying class member variables from a def function closes: #12995 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
This commit is contained in:
committed by
Christian Brabandt
parent
b147d31489
commit
3775f777a6
@@ -33,9 +33,9 @@ parse_member(
|
||||
exarg_T *eap,
|
||||
char_u *line,
|
||||
char_u *varname,
|
||||
int has_public, // TRUE if "public" seen before "varname"
|
||||
int has_public, // TRUE if "public" seen before "varname"
|
||||
char_u **varname_end,
|
||||
garray_T *type_list,
|
||||
garray_T *type_list,
|
||||
type_T **type_ret,
|
||||
char_u **init_expr)
|
||||
{
|
||||
@@ -119,12 +119,12 @@ parse_member(
|
||||
*/
|
||||
static int
|
||||
add_member(
|
||||
garray_T *gap,
|
||||
char_u *varname,
|
||||
char_u *varname_end,
|
||||
int has_public,
|
||||
type_T *type,
|
||||
char_u *init_expr)
|
||||
garray_T *gap,
|
||||
char_u *varname,
|
||||
char_u *varname_end,
|
||||
int has_public,
|
||||
type_T *type,
|
||||
char_u *init_expr)
|
||||
{
|
||||
if (ga_grow(gap, 1) == FAIL)
|
||||
return FAIL;
|
||||
@@ -629,8 +629,8 @@ is_valid_constructor(ufunc_T *uf, int is_abstract, int has_static)
|
||||
*/
|
||||
static int
|
||||
update_member_method_lookup_table(
|
||||
class_T *ifcl,
|
||||
class_T *cl,
|
||||
class_T *ifcl,
|
||||
class_T *cl,
|
||||
garray_T *objmethods,
|
||||
int pobj_method_offset,
|
||||
int is_interface)
|
||||
@@ -1553,12 +1553,15 @@ cleanup:
|
||||
/*
|
||||
* Find member "name" in class "cl", set "member_idx" to the member index and
|
||||
* return its type.
|
||||
* When "is_object" is TRUE, then look for object members. Otherwise look for
|
||||
* class members.
|
||||
* When not found "member_idx" is set to -1 and t_any is returned.
|
||||
* Set *p_m ocmmember_T if not NULL
|
||||
*/
|
||||
type_T *
|
||||
class_member_type(
|
||||
class_T *cl,
|
||||
int is_object,
|
||||
char_u *name,
|
||||
char_u *name_end,
|
||||
int *member_idx,
|
||||
@@ -1566,10 +1569,14 @@ class_member_type(
|
||||
{
|
||||
*member_idx = -1; // not found (yet)
|
||||
size_t len = name_end - name;
|
||||
int member_count = is_object ? cl->class_obj_member_count
|
||||
: cl->class_class_member_count;
|
||||
ocmember_T *members = is_object ? cl->class_obj_members
|
||||
: cl->class_class_members;
|
||||
|
||||
for (int i = 0; i < cl->class_obj_member_count; ++i)
|
||||
for (int i = 0; i < member_count; ++i)
|
||||
{
|
||||
ocmember_T *m = cl->class_obj_members + i;
|
||||
ocmember_T *m = members + i;
|
||||
if (STRNCMP(m->ocm_name, name, len) == 0 && m->ocm_name[len] == NUL)
|
||||
{
|
||||
*member_idx = i;
|
||||
|
Reference in New Issue
Block a user