summaryrefslogtreecommitdiffstats
path: root/src/eval.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-08-04 23:04:39 +0200
committerBram Moolenaar <Bram@vim.org>2019-08-04 23:04:39 +0200
commitfcfe1a9b8950b8b211ab3b24d84b17c6847ea43f (patch)
treedaeeffb4dd96cdd7744597d9623d222404edd8e2 /src/eval.c
parent7a4ea1df2f85e00286c49db1145e3a38b35557f4 (diff)
patch 8.1.1816: cannot use a user defined function as a methodv8.1.1816
Problem: Cannot use a user defined function as a method. Solution: Pass the base as the first argument to the user defined function after "->". (partly by FUJIWARA Takuya)
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/eval.c b/src/eval.c
index 7875edeafe..16ced40603 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -4734,7 +4734,7 @@ eval7(
*arg = skipwhite(*arg);
/* Handle following '[', '(' and '.' for expr[expr], expr.name,
- * expr(expr). */
+ * expr(expr), expr->name(expr) */
if (ret == OK)
ret = handle_subscript(arg, rettv, evaluate, TRUE);
@@ -4824,7 +4824,7 @@ eval_method(
// Locate the method name.
name = *arg;
- for (len = 0; ASCII_ISALNUM(name[len]) || name[len] == '_'; ++len)
+ for (len = 0; eval_isnamec(name[len]); ++len)
;
if (len == 0)
{
@@ -4842,6 +4842,8 @@ eval_method(
}
*arg += len;
+ // TODO: if "name" is a function reference, resolve it.
+
vim_memset(&funcexe, 0, sizeof(funcexe));
funcexe.evaluate = evaluate;
funcexe.basetv = &base;