patch 9.1.0223: code duplication in loop to add active text properties

Problem:  There are two dense conditions with duplication that needs to
          be kept in sync between the while loop break condition and the
          condition to skip certain text properties.
Solution: Refactor the loop by moving while loop conditions into the
          body of the while loop so they can be shared with skip
          conditions. `break` and an `active` variable are used to
          handle the outcome of these merged conditions.
          (Dylan Thacker-Smith)

closes: #14307

Signed-off-by: Dylan Thacker-Smith <dylan.ah.smith@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Dylan Thacker-Smith
2024-03-28 11:49:46 +01:00
committed by Christian Brabandt
parent fe0a76b2bc
commit b33b613308
2 changed files with 27 additions and 20 deletions

View File

@@ -2073,29 +2073,34 @@ win_line(
--bcol;
# endif
// Add any text property that starts in this column.
while (text_prop_next < text_prop_count
&& (text_props[text_prop_next].tp_col == MAXCOL
? (*ptr == NUL
|| (bcol == 0
&& (text_props[text_prop_next].tp_flags
& TP_FLAG_ALIGN_ABOVE)))
: bcol >= text_props[text_prop_next].tp_col - 1))
while (text_prop_next < text_prop_count)
{
// With 'nowrap' and not in the first screen line only "below"
// text prop can show.
if (text_props[text_prop_next].tp_col == MAXCOL
? (wp->w_p_wrap
|| wlv.row == startrow
|| (text_props[text_prop_next].tp_flags
& TP_FLAG_ALIGN_BELOW)
|| (bcol == 0
&& (text_props[text_prop_next].tp_flags
& TP_FLAG_ALIGN_ABOVE)))
: bcol <= text_props[text_prop_next].tp_col - 1
+ text_props[text_prop_next].tp_len)
int active;
textprop_T *tp = &text_props[text_prop_next];
if (tp->tp_col == MAXCOL)
{
text_prop_idxs[text_props_active++] = text_prop_next;
if (bcol == 0 && (tp->tp_flags & TP_FLAG_ALIGN_ABOVE))
active = TRUE;
else if (*ptr != NUL)
break;
else
{
// With 'nowrap' and not in the first screen line only "below"
// text prop can show.
active = wp->w_p_wrap
|| wlv.row == startrow
|| (tp->tp_flags & TP_FLAG_ALIGN_BELOW);
}
}
else
{
if (bcol < tp->tp_col - 1)
break;
active = bcol <= tp->tp_col - 1 + tp->tp_len;
}
if (active)
text_prop_idxs[text_props_active++] = text_prop_next;
++text_prop_next;
}

View File

@@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
223,
/**/
222,
/**/