mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 9.0.0547: looping over empty out_loop[] entries
Problem: Looping over empty out_loop[] entries. Solution: Store the array size.
This commit is contained in:
@@ -2126,6 +2126,7 @@ struct outer_S {
|
|||||||
// out_loop_stack
|
// out_loop_stack
|
||||||
short var_count; // number of variables defined in a loop
|
short var_count; // number of variables defined in a loop
|
||||||
} out_loop[MAX_LOOP_DEPTH];
|
} out_loop[MAX_LOOP_DEPTH];
|
||||||
|
int out_loop_size; // nr of used entries in out_loop[]
|
||||||
};
|
};
|
||||||
|
|
||||||
struct partial_S
|
struct partial_S
|
||||||
|
@@ -699,6 +699,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 */
|
||||||
|
/**/
|
||||||
|
547,
|
||||||
/**/
|
/**/
|
||||||
546,
|
546,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -1868,7 +1868,10 @@ fill_partial_and_closure(
|
|||||||
pt->pt_outer.out_loop[depth].var_count =
|
pt->pt_outer.out_loop[depth].var_count =
|
||||||
lvi->lvi_loop[depth].var_count;
|
lvi->lvi_loop[depth].var_count;
|
||||||
}
|
}
|
||||||
|
pt->pt_outer.out_loop_size = lvi->lvi_depth;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
pt->pt_outer.out_loop_size = 0;
|
||||||
|
|
||||||
// If the function currently executing returns and the closure is still
|
// If the function currently executing returns and the closure is still
|
||||||
// being referenced, we need to make a copy of the context (arguments
|
// being referenced, we need to make a copy of the context (arguments
|
||||||
@@ -5739,14 +5742,10 @@ call_def_function(
|
|||||||
if (partial != NULL)
|
if (partial != NULL)
|
||||||
{
|
{
|
||||||
outer_T *outer = get_pt_outer(partial);
|
outer_T *outer = get_pt_outer(partial);
|
||||||
int depth;
|
|
||||||
void *ptr = outer->out_stack;
|
|
||||||
|
|
||||||
// see if any stack was set
|
if (outer->out_stack == NULL && outer->out_loop_size == 0)
|
||||||
for (depth = 0; ptr == NULL && depth < MAX_LOOP_DEPTH; ++depth)
|
|
||||||
ptr = outer->out_loop[depth].stack;
|
|
||||||
if (ptr == NULL)
|
|
||||||
{
|
{
|
||||||
|
// no stack was set
|
||||||
if (current_ectx != NULL)
|
if (current_ectx != NULL)
|
||||||
{
|
{
|
||||||
if (current_ectx->ec_outer_ref != NULL
|
if (current_ectx->ec_outer_ref != NULL
|
||||||
|
Reference in New Issue
Block a user