[vim] - patchlevel 1157
Karsten Hopp
karsten at fedoraproject.org
Thu Jun 13 22:34:14 UTC 2013
commit a2374c223d8b3695e1fbb2118c1b067d5cb55949
Author: Karsten Hopp <karsten at redhat.com>
Date: Fri Jun 14 00:28:43 2013 +0200
- patchlevel 1157
7.3.1157 | 165 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 165 insertions(+), 0 deletions(-)
---
diff --git a/7.3.1157 b/7.3.1157
new file mode 100644
index 0000000..6d34261
--- /dev/null
+++ b/7.3.1157
@@ -0,0 +1,165 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.1157
+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.1157
+Problem: New regexp engine fails on "\(\<command\)\@<=.*"
+Solution: Fix rule for postponing match. Further tune estimating whether
+ postponing works better. Add test.
+Files: src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+
+*** ../vim-7.3.1156/src/regexp_nfa.c 2013-06-09 20:50:56.000000000 +0200
+--- src/regexp_nfa.c 2013-06-10 16:28:58.000000000 +0200
+***************
+*** 4587,4592 ****
+--- 4587,4593 ----
+
+ /*
+ * Estimate the chance of a match with "state" failing.
++ * empty match: 0
+ * NFA_ANY: 1
+ * specific character: 99
+ */
+***************
+*** 4616,4622 ****
+--- 4617,4625 ----
+ case NFA_ANY:
+ /* matches anything, unlikely to fail */
+ return 1;
++
+ case NFA_MATCH:
++ case NFA_MCLOSE:
+ /* empty match works always */
+ return 0;
+
+***************
+*** 4664,4670 ****
+ case NFA_ZCLOSE9:
+ #endif
+ case NFA_NOPEN:
+- case NFA_MCLOSE:
+ case NFA_MCLOSE1:
+ case NFA_MCLOSE2:
+ case NFA_MCLOSE3:
+--- 4667,4672 ----
+***************
+*** 5095,5117 ****
+ case NFA_START_INVISIBLE_BEFORE:
+ case NFA_START_INVISIBLE_BEFORE_NEG:
+ {
+! int cout = t->state->out1->out->c;
+
+! /* Do it directly when what follows is possibly end of
+! * match (closing paren).
+! * Do it directly if there already is a PIM.
+! * Postpone when it is \@<= or \@<!, these are expensive.
+! * Otherwise first do the one that has the highest chance
+! * of failing. */
+! if ((cout >= NFA_MCLOSE && cout <= NFA_MCLOSE9)
+! #ifdef FEAT_SYN_HL
+! || (cout >= NFA_ZCLOSE && cout <= NFA_ZCLOSE9)
+ #endif
+! || t->pim.result != NFA_PIM_UNUSED
+! || (t->state->c != NFA_START_INVISIBLE_BEFORE
+! && t->state->c != NFA_START_INVISIBLE_BEFORE_NEG
+! && failure_chance(t->state->out1->out, 0)
+! < failure_chance(t->state->out, 0)))
+ {
+ /*
+ * First try matching the invisible match, then what
+--- 5097,5142 ----
+ case NFA_START_INVISIBLE_BEFORE:
+ case NFA_START_INVISIBLE_BEFORE_NEG:
+ {
+! int directly = FALSE;
+
+! #ifdef ENABLE_LOG
+! fprintf(log_fd, "Failure chance invisible: %d, what follows: %d\n",
+! failure_chance(t->state->out, 0),
+! failure_chance(t->state->out1->out, 0));
+ #endif
+! /* Do it directly when what follows is possibly the end of
+! * the match.
+! * Do it directly if there already is a PIM.
+! * Postpone when the invisible match is expensive or has a
+! * lower chance of failing. */
+! if (match_follows(t->state->out1->out, 0)
+! || t->pim.result != NFA_PIM_UNUSED)
+! directly = TRUE;
+! else
+! {
+! int ch_invisible = failure_chance(t->state->out, 0);
+! int ch_follows = failure_chance(t->state->out1->out, 0);
+!
+! if (t->state->c == NFA_START_INVISIBLE_BEFORE
+! || t->state->c == NFA_START_INVISIBLE_BEFORE_NEG)
+! {
+! /* "before" matches are very expensive when
+! * unbounded, always prefer what follows then,
+! * unless what follows will always match.
+! * Otherwise strongly prefer what follows. */
+! if (t->state->val <= 0 && ch_follows > 0)
+! directly = FALSE;
+! else
+! directly = ch_follows * 10 < ch_invisible;
+! }
+! else
+! {
+! /* normal invisible, first do the one with the
+! * highest failure chance */
+! directly = ch_follows < ch_invisible;
+! }
+! }
+! if (directly)
+ {
+ /*
+ * First try matching the invisible match, then what
+*** ../vim-7.3.1156/src/testdir/test64.in 2013-06-08 18:19:40.000000000 +0200
+--- src/testdir/test64.in 2013-06-10 16:19:49.000000000 +0200
+***************
+*** 392,397 ****
+--- 392,398 ----
+ :call add(tl, [2, '\v\C%(<Last Changed:\s+)@<=.*$', '" Last Changed: 1970', '1970'])
+ :call add(tl, [2, '\(foo\)\@<=\>', 'foobar'])
+ :call add(tl, [2, '\(foo\)\@<=\>', 'barfoo', '', 'foo'])
++ :call add(tl, [2, '\(foo\)\@<=.*', 'foobar', 'bar', 'foo'])
+ :"
+ :""""" \@>
+ :call add(tl, [2, '\(a*\)\@>a', 'aaaa'])
+*** ../vim-7.3.1156/src/testdir/test64.ok 2013-06-08 18:19:40.000000000 +0200
+--- src/testdir/test64.ok 2013-06-10 16:21:07.000000000 +0200
+***************
+*** 890,895 ****
+--- 890,898 ----
+ OK 0 - \(foo\)\@<=\>
+ OK 1 - \(foo\)\@<=\>
+ OK 2 - \(foo\)\@<=\>
++ OK 0 - \(foo\)\@<=.*
++ OK 1 - \(foo\)\@<=.*
++ OK 2 - \(foo\)\@<=.*
+ OK 0 - \(a*\)\@>a
+ OK 1 - \(a*\)\@>a
+ OK 2 - \(a*\)\@>a
+*** ../vim-7.3.1156/src/version.c 2013-06-09 20:50:56.000000000 +0200
+--- src/version.c 2013-06-10 16:23:57.000000000 +0200
+***************
+*** 730,731 ****
+--- 730,733 ----
+ { /* Add new patch number below this line */
++ /**/
++ 1157,
+ /**/
+
+--
+In a world without fences, who needs Gates and Windows?
+
+ /// 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