From 1134fdd1b369119d0d6992e3120bb5f7c788b697 Mon Sep 17 00:00:00 2001 From: Dylan Thacker-Smith Date: Thu, 28 Mar 2024 11:49:46 +0100 Subject: [PATCH] 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 Signed-off-by: Christian Brabandt --- src/drawline.c | 45 +++++++++++++++++++++++++-------------------- src/version.c | 2 ++ 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/drawline.c b/src/drawline.c index 8ec9e5f280..81577be42a 100644 --- a/src/drawline.c +++ b/src/drawline.c @@ -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; } diff --git a/src/version.c b/src/version.c index 3fcbb99811..7176d67b06 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 223, /**/ 222, /**/