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

5 views
Skip to first unread message

Christian Brabandt

unread,
Mar 28, 2024, 7:00:13 AM3/28/24
to vim...@googlegroups.com
patch 9.1.0223: code duplication in loop to add active text properties

Commit: https://github.com/vim/vim/commit/1134fdd1b369119d0d6992e3120bb5f7c788b697
Author: Dylan Thacker-Smith <dylan.a...@gmail.com>
Date: Thu Mar 28 11:49:46 2024 +0100

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.a...@gmail.com>
Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/src/drawline.c b/src/drawline.c
index 8ec9e5f28..81577be42 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
+ int active;
+ textprop_T *tp = &text_props[text_prop_next];
+ if (tp->tp_col == MAXCOL)
+ {
+ 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
- || (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)
+ || (tp->tp_flags & TP_FLAG_ALIGN_BELOW);
+ }
+ }
+ else
{
- text_prop_idxs[text_props_active++] = text_prop_next;
+ 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 3fcbb9981..7176d67b0 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,
/**/
Reply all
Reply to author
Forward
0 new messages