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.ah.sm...@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.ah.sm...@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,
 /**/

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1rpnUL-00AxN7-TZ%40256bit.org.

Raspunde prin e-mail lui