summaryrefslogtreecommitdiffstats
path: root/src/vim9class.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vim9class.c')
-rw-r--r--src/vim9class.c31
1 files changed, 19 insertions, 12 deletions
diff --git a/src/vim9class.c b/src/vim9class.c
index 0e780fafab..9c7badccb2 100644
--- a/src/vim9class.c
+++ b/src/vim9class.c
@@ -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;