Mercurial > vim
diff src/vim9class.c @ 33227:3672d3d13524 v9.0.1888
patch 9.0.1888: Vim9: Problem trying to invoke class method
Commit: https://github.com/vim/vim/commit/342f4f626ed56921b1ef145ccaa05ba0a4b8ac01
Author: Yegappan Lakshmanan <yegappan@yahoo.com>
Date: Sat Sep 9 11:37:23 2023 +0200
patch 9.0.1888: Vim9: Problem trying to invoke class method
Problem: Vim9: Problem trying to invoke class method
Solution: Lookup the class method insider other classes
closes: #13055
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 09 Sep 2023 11:45:08 +0200 |
parents | 52b121d4feb5 |
children | 108d890d887f |
line wrap: on
line diff
--- a/src/vim9class.c +++ b/src/vim9class.c @@ -2091,6 +2091,33 @@ class_member_index(char_u *name, size_t } /* + * If "name[len]" is a class method in cctx->ctx_ufunc->uf_class return the + * index in class.class_class_functions[]. + * If "cl_ret" is not NULL set it to the class. + * Otherwise return -1. + */ + int +class_method_index(char_u *name, size_t len, class_T **cl_ret, cctx_T *cctx) +{ + if (cctx == NULL || cctx->ctx_ufunc == NULL + || cctx->ctx_ufunc->uf_class == NULL) + return -1; + class_T *cl = cctx->ctx_ufunc->uf_class; + + for (int i = 0; i < cl->class_class_function_count; ++i) + { + ufunc_T *fp = cl->class_class_functions[i]; + if (STRNCMP(name, fp->uf_name, len) == 0 && fp->uf_name[len] == NUL) + { + if (cl_ret != NULL) + *cl_ret = cl; + return i; + } + } + return -1; +} + +/* * Return TRUE if current context "cctx_arg" is inside class "cl". * Return FALSE if not. */