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>
diff --git a/src/vim9class.c b/src/vim9class.c
index 14d29c7..90cdb8e 100644
--- a/src/vim9class.c
+++ b/src/vim9class.c
@@ -2091,6 +2091,33 @@
}
/*
+ * 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.
*/