patch 7.4.2072
Problem: substitute() does not support a Funcref argument.
Solution: Support a Funcref like it supports a string starting with "\=".
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 00b1577..54b5a53 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -11061,14 +11061,21 @@
char_u *str = get_tv_string_chk(&argvars[0]);
char_u *pat = get_tv_string_buf_chk(&argvars[1], patbuf);
- char_u *sub = get_tv_string_buf_chk(&argvars[2], subbuf);
+ char_u *sub = NULL;
+ typval_T *expr = NULL;
char_u *flg = get_tv_string_buf_chk(&argvars[3], flagsbuf);
+ if (argvars[2].v_type == VAR_FUNC || argvars[2].v_type == VAR_PARTIAL)
+ expr = &argvars[2];
+ else
+ sub = get_tv_string_buf_chk(&argvars[2], subbuf);
+
rettv->v_type = VAR_STRING;
- if (str == NULL || pat == NULL || sub == NULL || flg == NULL)
+ if (str == NULL || pat == NULL || (sub == NULL && expr == NULL)
+ || flg == NULL)
rettv->vval.v_string = NULL;
else
- rettv->vval.v_string = do_string_sub(str, pat, sub, flg);
+ rettv->vval.v_string = do_string_sub(str, pat, sub, expr, flg);
}
/*