patch 8.2.4824: expression is evaluated multiple times
Problem: Expression is evaluated multiple times. Solution: Evaluate expression once and store the result. (closes #10278)
This commit is contained in:
11
src/map.c
11
src/map.c
@ -508,6 +508,7 @@ do_map(
|
||||
{
|
||||
int did_it = FALSE;
|
||||
int did_local = FALSE;
|
||||
int keyround1_simplfied = keyround == 1 && did_simplify;
|
||||
int round;
|
||||
int hash;
|
||||
int new_hash;
|
||||
@ -725,8 +726,7 @@ do_map(
|
||||
mpp = &(mp->m_next);
|
||||
continue;
|
||||
}
|
||||
if (did_simplify && keyround == 1
|
||||
&& !mp->m_simplified)
|
||||
if (keyround1_simplfied && !mp->m_simplified)
|
||||
break;
|
||||
// We reset the indicated mode bits. If nothing
|
||||
// is left the entry is deleted below.
|
||||
@ -779,8 +779,7 @@ do_map(
|
||||
mp->m_nowait = nowait;
|
||||
mp->m_silent = silent;
|
||||
mp->m_mode = mode;
|
||||
mp->m_simplified =
|
||||
did_simplify && keyround == 1;
|
||||
mp->m_simplified = keyround1_simplfied;
|
||||
#ifdef FEAT_EVAL
|
||||
mp->m_expr = expr;
|
||||
mp->m_script_ctx = current_sctx;
|
||||
@ -818,7 +817,7 @@ do_map(
|
||||
// delete entry
|
||||
if (!did_it)
|
||||
{
|
||||
if (!did_simplify || keyround == 2)
|
||||
if (!keyround1_simplfied)
|
||||
retval = 2; // no match
|
||||
}
|
||||
else if (*keys == Ctrl_C)
|
||||
@ -854,7 +853,7 @@ do_map(
|
||||
#ifdef FEAT_EVAL
|
||||
expr, /* sid */ -1, /* scriptversion */ 0, /* lnum */ 0,
|
||||
#endif
|
||||
did_simplify && keyround == 1) == FAIL)
|
||||
keyround1_simplfied) == FAIL)
|
||||
{
|
||||
retval = 4; // no mem
|
||||
goto theend;
|
||||
|
||||
@ -746,6 +746,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
4824,
|
||||
/**/
|
||||
4823,
|
||||
/**/
|
||||
|
||||
Reference in New Issue
Block a user