[vim] - patchlevel 1005

Karsten Hopp karsten at fedoraproject.org
Tue Jun 4 10:07:23 UTC 2013


commit 6d666be5d60d08fac9478e1f34c204b025c707f5
Author: Karsten Hopp <karsten at redhat.com>
Date:   Tue Jun 4 12:05:53 2013 +0200

    - patchlevel 1005

 7.3.1005 |  265 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 265 insertions(+), 0 deletions(-)
---
diff --git a/7.3.1005 b/7.3.1005
new file mode 100644
index 0000000..dbc05c2
--- /dev/null
+++ b/7.3.1005
@@ -0,0 +1,265 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.1005
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.1005
+Problem:    Get stuck on regexp "\n*" and on "%s/^\n\+/\r".
+Solution:   Fix handling of matching a line break. (idea by Hirohito Higashi)
+Files:	    src/regexp_nfa.c
+
+
+*** ../vim-7.3.1004/src/regexp_nfa.c	2013-05-21 22:00:42.000000000 +0200
+--- src/regexp_nfa.c	2013-05-22 22:53:08.000000000 +0200
+***************
+*** 2462,2468 ****
+      List		*l;	/* runtime state list */
+      nfa_state_T		*state;	/* state to update */
+      regsub_T		*m;	/* pointers to subexpressions */
+!     int			off;
+      int			lid;
+      int			*match;	/* found match? */
+  {
+--- 2462,2468 ----
+      List		*l;	/* runtime state list */
+      nfa_state_T		*state;	/* state to update */
+      regsub_T		*m;	/* pointers to subexpressions */
+!     int			off;	/* byte offset, when -1 go to next line */
+      int			lid;
+      int			*match;	/* found match? */
+  {
+***************
+*** 2585,2592 ****
+  	    {
+  		save.startpos[subidx] = m->startpos[subidx];
+  		save.endpos[subidx] = m->endpos[subidx];
+! 		m->startpos[subidx].lnum = reglnum;
+! 		m->startpos[subidx].col = (colnr_T)(reginput - regline + off);
+  	    }
+  	    else
+  	    {
+--- 2585,2601 ----
+  	    {
+  		save.startpos[subidx] = m->startpos[subidx];
+  		save.endpos[subidx] = m->endpos[subidx];
+! 		if (off == -1)
+! 		{
+! 		    m->startpos[subidx].lnum = reglnum + 1;
+! 		    m->startpos[subidx].col = 0;
+! 		}
+! 		else
+! 		{
+! 		    m->startpos[subidx].lnum = reglnum;
+! 		    m->startpos[subidx].col =
+! 					  (colnr_T)(reginput - regline + off);
+! 		}
+  	    }
+  	    else
+  	    {
+***************
+*** 2633,2640 ****
+  	    {
+  		save.startpos[subidx] = m->startpos[subidx];
+  		save.endpos[subidx] = m->endpos[subidx];
+! 		m->endpos[subidx].lnum = reglnum;
+! 		m->endpos[subidx].col = (colnr_T)(reginput - regline + off);
+  	    }
+  	    else
+  	    {
+--- 2642,2657 ----
+  	    {
+  		save.startpos[subidx] = m->startpos[subidx];
+  		save.endpos[subidx] = m->endpos[subidx];
+! 		if (off == -1)
+! 		{
+! 		    m->endpos[subidx].lnum = reglnum + 1;
+! 		    m->endpos[subidx].col = 0;
+! 		}
+! 		else
+! 		{
+! 		    m->endpos[subidx].lnum = reglnum;
+! 		    m->endpos[subidx].col = (colnr_T)(reginput - regline + off);
+! 		}
+  	    }
+  	    else
+  	    {
+***************
+*** 2834,2840 ****
+      int		match = FALSE;
+      int		flag = 0;
+      int		old_reglnum = -1;
+!     int		reginput_updated = FALSE;
+      thread_T	*t;
+      char_u	*old_reginput = NULL;
+      char_u	*old_regline = NULL;
+--- 2851,2857 ----
+      int		match = FALSE;
+      int		flag = 0;
+      int		old_reglnum = -1;
+!     int		go_to_nextline;
+      thread_T	*t;
+      char_u	*old_reginput = NULL;
+      char_u	*old_regline = NULL;
+***************
+*** 2917,2924 ****
+      /*
+       * Run for each character.
+       */
+!     do {
+! again:
+  #ifdef FEAT_MBYTE
+  	if (has_mbyte)
+  	{
+--- 2934,2941 ----
+      /*
+       * Run for each character.
+       */
+!     for (;;)
+!     {
+  #ifdef FEAT_MBYTE
+  	if (has_mbyte)
+  	{
+***************
+*** 2932,2938 ****
+--- 2949,2958 ----
+  	    n = 1;
+  	}
+  	if (c == NUL)
++ 	{
+  	    n = 0;
++ 	    go_to_nextline = FALSE;
++ 	}
+  
+  	/* swap lists */
+  	thislist = &list[flag];
+***************
+*** 3007,3013 ****
+  				(char *)t->sub.end[j]);
+  		fprintf(log_fd, "\n");
+  #endif
+! 		goto nextchar;		/* found the left-most longest match */
+  
+  	    case NFA_END_INVISIBLE:
+  		/* This is only encountered after a NFA_START_INVISIBLE node.
+--- 3027,3035 ----
+  				(char *)t->sub.end[j]);
+  		fprintf(log_fd, "\n");
+  #endif
+! 		/* Found the left-most longest match, do not look at any other
+! 		 * states at this position. */
+! 		goto nextchar;
+  
+  	    case NFA_END_INVISIBLE:
+  		/* This is only encountered after a NFA_START_INVISIBLE node.
+***************
+*** 3206,3220 ****
+  
+  	    case NFA_NEWL:
+  		if (!reg_line_lbr && REG_MULTI
+! 				&& c == NUL && reglnum <= reg_maxline)
+  		{
+! 		    if (reginput_updated == FALSE)
+! 		    {
+! 			reg_nextline();
+! 			reginput_updated = TRUE;
+! 		    }
+! 		    addstate(nextlist, t->state->out, &t->sub, n, listid + 1,
+! 								    &match);
+  		}
+  		break;
+  
+--- 3228,3240 ----
+  
+  	    case NFA_NEWL:
+  		if (!reg_line_lbr && REG_MULTI
+! 					&& c == NUL && reglnum <= reg_maxline)
+  		{
+! 		    go_to_nextline = TRUE;
+! 		    /* Pass -1 for the offset, which means taking the position
+! 		     * at the start of the next line. */
+! 		    addstate(nextlist, t->state->out, &t->sub, -1,
+! 							  listid + 1, &match);
+  		}
+  		break;
+  
+***************
+*** 3247,3254 ****
+  		break;
+  
+  	    case NFA_ANY:
+! 		/* Any printable char, not just any char. '\0' (end of input)
+! 		 * must not match */
+  		if (c > 0)
+  		    addstate(nextlist, t->state->out, &t->sub, n, listid + 1,
+  								    &match);
+--- 3267,3273 ----
+  		break;
+  
+  	    case NFA_ANY:
+! 		/* Any char except '\0', (end of input) does not match. */
+  		if (c > 0)
+  		    addstate(nextlist, t->state->out, &t->sub, n, listid + 1,
+  								    &match);
+***************
+*** 3433,3444 ****
+  	    addstate(nextlist, start, m, n, listid + 1, &match);
+  	}
+  
+- 	if (reginput_updated)
+- 	{
+- 	    reginput_updated = FALSE;
+- 	    goto again;
+- 	}
+- 
+  #ifdef ENABLE_LOG
+  	fprintf(log_fd, ">>> Thislist had %d states available: ", thislist->n);
+  	for (i = 0; i< thislist->n; i++)
+--- 3452,3457 ----
+***************
+*** 3447,3454 ****
+  #endif
+  
+  nextchar:
+! 	reginput += n;
+!     } while (c || reginput_updated);
+  
+  #ifdef ENABLE_LOG
+      if (log_fd != stderr)
+--- 3460,3474 ----
+  #endif
+  
+  nextchar:
+! 	/* Advance to the next character, or advance to the next line, or
+! 	 * finish. */
+! 	if (n != 0)
+! 	    reginput += n;
+! 	else if (go_to_nextline)
+! 	    reg_nextline();
+! 	else
+! 	    break;
+!     }
+  
+  #ifdef ENABLE_LOG
+      if (log_fd != stderr)
+*** ../vim-7.3.1004/src/version.c	2013-05-21 22:38:14.000000000 +0200
+--- src/version.c	2013-05-22 22:57:59.000000000 +0200
+***************
+*** 730,731 ****
+--- 730,733 ----
+  {   /* Add new patch number below this line */
++ /**/
++     1005,
+  /**/
+
+-- 
+"Lisp has all the visual appeal of oatmeal with nail clippings thrown in."
+                                                         -- Larry Wall
+
+ /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


More information about the scm-commits mailing list