changeset 6007:ce284c205558 v7.4.344

updated for version 7.4.344 Problem: Unessecary initializations and other things related to matchaddpos(). Solution: Code cleanup. (Alexey Radkov)
author Bram Moolenaar <bram@vim.org>
date Wed, 25 Jun 2014 18:15:22 +0200
parents 458f55308d63
children 0d229e42670c
files runtime/doc/eval.txt src/screen.c src/version.c src/window.c
diffstat 4 files changed, 14 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -4391,17 +4391,17 @@ matchaddpos({group}, {pos}[, {priority}[
 		required, for example to highlight matching parentheses.
 
 		The list {pos} can contain one of these items:
-		- A number.  This while line will be highlighted.  The first
+		- A number.  This whole line will be highlighted.  The first
 		  line has number 1.
 		- A list with one number, e.g., [23]. The whole line with this
 		  number will be highlighted.
 		- A list with two numbers, e.g., [23, 11]. The first number is
-		  the line number, the second one the column number (first
-		  column is 1).  The character at this position will be
-		  highlighted.
+		  the line number, the second one is the column number (first
+		  column is 1, the value must correspond to the byte index as
+		  |col()| would return).  The character at this position will
+		  be highlighted.
 		- A list with three numbers, e.g., [23, 11, 3]. As above, but
-		  the third number gives the length of the highlight in screen
-		  cells.
+		  the third number gives the length of the highlight in bytes.
 		
 		The maximum number of positions is 8.
 
--- a/src/screen.c
+++ b/src/screen.c
@@ -7531,7 +7531,7 @@ next_search_hl_pos(shl, lnum, posmatch, 
     colnr_T	    mincol;	/* minimal column for a match */
 {
     int	    i;
-    int     bot = -1;
+    int	    bot = -1;
 
     shl->lnum = 0;
     for (i = posmatch->cur; i < MAXPOSMATCH; i++)
--- a/src/version.c
+++ b/src/version.c
@@ -735,6 +735,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    344,
+/**/
     343,
 /**/
     342,
--- a/src/window.c
+++ b/src/window.c
@@ -6813,7 +6813,6 @@ match_add(wp, grp, pat, prio, id, pos_li
     m->id = id;
     m->priority = prio;
     m->pattern = pat == NULL ? NULL : vim_strsave(pat);
-    m->pos.cur = 0;
     m->hlg_id = hlg_id;
     m->match.regprog = regprog;
     m->match.rmm_ic = FALSE;
@@ -6827,7 +6826,7 @@ match_add(wp, grp, pat, prio, id, pos_li
 	listitem_T	*li;
 	int		i;
 
-	for (i = 0, li = pos_list->lv_first; i < MAXPOSMATCH;
+	for (i = 0, li = pos_list->lv_first; li != NULL && i < MAXPOSMATCH;
 							i++, li = li->li_next)
 	{
 	    linenr_T	lnum = 0;
@@ -6837,11 +6836,6 @@ match_add(wp, grp, pat, prio, id, pos_li
 	    listitem_T	*subli;
 	    int		error = FALSE;
 
-	    if (li == NULL)
-	    {
-		m->pos.pos[i].lnum = 0;
-		break;
-	    }
 	    if (li->li_tv.v_type == VAR_LIST)
 	    {
 		subl = li->li_tv.vval.v_list;
@@ -6853,12 +6847,12 @@ match_add(wp, grp, pat, prio, id, pos_li
 		lnum = get_tv_number_chk(&subli->li_tv, &error);
 		if (error == TRUE)
 		    goto fail;
-		m->pos.pos[i].lnum = lnum;
 		if (lnum == 0)
 		{
 		    --i;
 		    continue;
 		}
+		m->pos.pos[i].lnum = lnum;
 		subli = subli->li_next;
 		if (subli != NULL)
 		{
@@ -6879,7 +6873,10 @@ match_add(wp, grp, pat, prio, id, pos_li
 	    else if (li->li_tv.v_type == VAR_NUMBER)
 	    {
 		if (li->li_tv.vval.v_number == 0)
+		{
+		    --i;
 		    continue;
+		}
 		m->pos.pos[i].lnum = li->li_tv.vval.v_number;
 		m->pos.pos[i].col = 0;
 		m->pos.pos[i].len = 0;