mirror of
https://github.com/vim/vim.git
synced 2025-10-16 07:24:23 -04:00
updated for version 7.4.327
Problem: When 'verbose' is set to display the return value of a function, may get E724 repeatedly. Solution: Do not give an error for verbose messages. Abort conversion to string after an error.
This commit is contained in:
30
src/eval.c
30
src/eval.c
@@ -134,6 +134,9 @@ static int current_copyID = 0;
|
|||||||
#define COPYID_INC 2
|
#define COPYID_INC 2
|
||||||
#define COPYID_MASK (~0x1)
|
#define COPYID_MASK (~0x1)
|
||||||
|
|
||||||
|
/* Abort conversion to string after a recursion error. */
|
||||||
|
static int did_echo_string_emsg = FALSE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Array to hold the hashtab with variables local to each sourced script.
|
* Array to hold the hashtab with variables local to each sourced script.
|
||||||
* Each item holds a variable (nameless) that points to the dict_T.
|
* Each item holds a variable (nameless) that points to the dict_T.
|
||||||
@@ -6686,6 +6689,8 @@ list_join_inner(gap, l, sep, echo_style, copyID, join_gap)
|
|||||||
}
|
}
|
||||||
|
|
||||||
line_breakcheck();
|
line_breakcheck();
|
||||||
|
if (did_echo_string_emsg) /* recursion error, bail out */
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allocate result buffer with its total size, avoid re-allocation and
|
/* Allocate result buffer with its total size, avoid re-allocation and
|
||||||
@@ -7460,8 +7465,10 @@ dict2string(tv, copyID)
|
|||||||
if (s != NULL)
|
if (s != NULL)
|
||||||
ga_concat(&ga, s);
|
ga_concat(&ga, s);
|
||||||
vim_free(tofree);
|
vim_free(tofree);
|
||||||
if (s == NULL)
|
if (s == NULL || did_echo_string_emsg)
|
||||||
break;
|
break;
|
||||||
|
line_breakcheck();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (todo > 0)
|
if (todo > 0)
|
||||||
@@ -7619,9 +7626,16 @@ echo_string(tv, tofree, numbuf, copyID)
|
|||||||
|
|
||||||
if (recurse >= DICT_MAXNEST)
|
if (recurse >= DICT_MAXNEST)
|
||||||
{
|
{
|
||||||
EMSG(_("E724: variable nested too deep for displaying"));
|
if (!did_echo_string_emsg)
|
||||||
|
{
|
||||||
|
/* Only give this message once for a recursive call to avoid
|
||||||
|
* flooding the user with errors. And stop iterating over lists
|
||||||
|
* and dicts. */
|
||||||
|
did_echo_string_emsg = TRUE;
|
||||||
|
EMSG(_("E724: variable nested too deep for displaying"));
|
||||||
|
}
|
||||||
*tofree = NULL;
|
*tofree = NULL;
|
||||||
return NULL;
|
return (char_u *)"{E724}";
|
||||||
}
|
}
|
||||||
++recurse;
|
++recurse;
|
||||||
|
|
||||||
@@ -7689,7 +7703,8 @@ echo_string(tv, tofree, numbuf, copyID)
|
|||||||
*tofree = NULL;
|
*tofree = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
--recurse;
|
if (--recurse == 0)
|
||||||
|
did_echo_string_emsg = FALSE;
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23303,7 +23318,10 @@ call_user_func(fp, argcount, argvars, rettv, firstline, lastline, selfdict)
|
|||||||
msg_outnum((long)argvars[i].vval.v_number);
|
msg_outnum((long)argvars[i].vval.v_number);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
/* Do not want errors such as E724 here. */
|
||||||
|
++emsg_off;
|
||||||
s = tv2string(&argvars[i], &tofree, numbuf2, 0);
|
s = tv2string(&argvars[i], &tofree, numbuf2, 0);
|
||||||
|
--emsg_off;
|
||||||
if (s != NULL)
|
if (s != NULL)
|
||||||
{
|
{
|
||||||
if (vim_strsize(s) > MSG_BUF_CLEN)
|
if (vim_strsize(s) > MSG_BUF_CLEN)
|
||||||
@@ -23395,8 +23413,10 @@ call_user_func(fp, argcount, argvars, rettv, firstline, lastline, selfdict)
|
|||||||
|
|
||||||
/* The value may be very long. Skip the middle part, so that we
|
/* The value may be very long. Skip the middle part, so that we
|
||||||
* have some idea how it starts and ends. smsg() would always
|
* have some idea how it starts and ends. smsg() would always
|
||||||
* truncate it at the end. */
|
* truncate it at the end. Don't want errors such as E724 here. */
|
||||||
|
++emsg_off;
|
||||||
s = tv2string(fc->rettv, &tofree, numbuf2, 0);
|
s = tv2string(fc->rettv, &tofree, numbuf2, 0);
|
||||||
|
--emsg_off;
|
||||||
if (s != NULL)
|
if (s != NULL)
|
||||||
{
|
{
|
||||||
if (vim_strsize(s) > MSG_BUF_CLEN)
|
if (vim_strsize(s) > MSG_BUF_CLEN)
|
||||||
|
@@ -734,6 +734,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
327,
|
||||||
/**/
|
/**/
|
||||||
326,
|
326,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user