1
0
forked from aniani/vim

patch 7.4.2072

Problem:    substitute() does not support a Funcref argument.
Solution:   Support a Funcref like it supports  a string starting with "\=".
This commit is contained in:
Bram Moolenaar
2016-07-19 19:10:51 +02:00
parent f562e72df7
commit 72ab729c3d
7 changed files with 82 additions and 17 deletions

View File

@@ -11061,14 +11061,21 @@ f_substitute(typval_T *argvars, typval_T *rettv)
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);
}
/*