diff --git a/7.3.1118 b/7.3.1118 new file mode 100644 index 0000000..84779d4 --- /dev/null +++ b/7.3.1118 @@ -0,0 +1,201 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.3.1118 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.3.1118 +Problem: Match failure rate is not very specific. +Solution: Tune the failure rate for match items. +Files: src/regexp_nfa.c + + +*** ../vim-7.3.1117/src/regexp_nfa.c 2013-06-05 11:05:12.000000000 +0200 +--- src/regexp_nfa.c 2013-06-05 11:41:09.000000000 +0200 +*************** +*** 3956,3980 **** + if (depth > 4) + return 1; + +! if (c == NFA_SPLIT) + { +! if (state->out->c == NFA_SPLIT || state->out1->c == NFA_SPLIT) + return 1; +! l = failure_chance(state->out, depth + 1); +! r = failure_chance(state->out1, depth + 1); +! return l < r ? l : r; +! } +! if (c == NFA_ANY) +! return 1; +! if (c > 0) +! return 99; +! if ((c >= NFA_MOPEN && c <= NFA_MOPEN9) + #ifdef FEAT_SYN_HL +! || (c >= NFA_ZOPEN && c <= NFA_ZOPEN9) + #endif +! || c == NFA_NOPEN) +! return failure_chance(state->out, depth + 1); +! /* something else */ + return 50; + } + +--- 3956,4093 ---- + if (depth > 4) + return 1; + +! switch (c) + { +! case NFA_SPLIT: +! if (state->out->c == NFA_SPLIT || state->out1->c == NFA_SPLIT) +! /* avoid recursive stuff */ +! return 1; +! /* two alternatives, use the lowest failure chance */ +! l = failure_chance(state->out, depth + 1); +! r = failure_chance(state->out1, depth + 1); +! return l < r ? l : r; +! +! case NFA_ANY: +! /* matches anything, unlikely to fail */ + return 1; +! case NFA_MATCH: +! /* empty match works always */ +! return 0; +! +! case NFA_BOL: +! case NFA_EOL: +! case NFA_BOF: +! case NFA_EOF: +! case NFA_NEWL: +! return 99; +! +! case NFA_BOW: +! case NFA_EOW: +! return 90; +! +! case NFA_MOPEN: +! case NFA_MOPEN1: +! case NFA_MOPEN2: +! case NFA_MOPEN3: +! case NFA_MOPEN4: +! case NFA_MOPEN5: +! case NFA_MOPEN6: +! case NFA_MOPEN7: +! case NFA_MOPEN8: +! case NFA_MOPEN9: +! #ifdef FEAT_SYN_HL +! case NFA_ZOPEN: +! case NFA_ZOPEN1: +! case NFA_ZOPEN2: +! case NFA_ZOPEN3: +! case NFA_ZOPEN4: +! case NFA_ZOPEN5: +! case NFA_ZOPEN6: +! case NFA_ZOPEN7: +! case NFA_ZOPEN8: +! case NFA_ZOPEN9: +! case NFA_ZCLOSE: +! case NFA_ZCLOSE1: +! case NFA_ZCLOSE2: +! case NFA_ZCLOSE3: +! case NFA_ZCLOSE4: +! case NFA_ZCLOSE5: +! case NFA_ZCLOSE6: +! case NFA_ZCLOSE7: +! case NFA_ZCLOSE8: +! case NFA_ZCLOSE9: +! #endif +! case NFA_NOPEN: +! case NFA_MCLOSE: +! case NFA_MCLOSE1: +! case NFA_MCLOSE2: +! case NFA_MCLOSE3: +! case NFA_MCLOSE4: +! case NFA_MCLOSE5: +! case NFA_MCLOSE6: +! case NFA_MCLOSE7: +! case NFA_MCLOSE8: +! case NFA_MCLOSE9: +! case NFA_NCLOSE: +! return failure_chance(state->out, depth + 1); +! +! case NFA_BACKREF1: +! case NFA_BACKREF2: +! case NFA_BACKREF3: +! case NFA_BACKREF4: +! case NFA_BACKREF5: +! case NFA_BACKREF6: +! case NFA_BACKREF7: +! case NFA_BACKREF8: +! case NFA_BACKREF9: + #ifdef FEAT_SYN_HL +! case NFA_ZREF1: +! case NFA_ZREF2: +! case NFA_ZREF3: +! case NFA_ZREF4: +! case NFA_ZREF5: +! case NFA_ZREF6: +! case NFA_ZREF7: +! case NFA_ZREF8: +! case NFA_ZREF9: + #endif +! /* backreferences don't match in many places */ +! return 94; +! +! case NFA_LNUM_GT: +! case NFA_LNUM_LT: +! case NFA_COL_GT: +! case NFA_COL_LT: +! case NFA_VCOL_GT: +! case NFA_VCOL_LT: +! case NFA_MARK_GT: +! case NFA_MARK_LT: +! #ifdef FEAT_VISUAL +! case NFA_VISUAL: +! #endif +! /* before/after positions don't match very often */ +! return 85; +! +! case NFA_LNUM: +! return 90; +! +! case NFA_CURSOR: +! case NFA_COL: +! case NFA_VCOL: +! case NFA_MARK: +! /* specific positions rarely match */ +! return 98; +! +! case NFA_COMPOSING: +! return 95; +! +! default: +! if (c > 0) +! /* character match fails often */ +! return 95; +! } +! +! /* something else, includes character classes */ + return 50; + } + +*** ../vim-7.3.1117/src/version.c 2013-06-05 11:05:12.000000000 +0200 +--- src/version.c 2013-06-05 11:41:58.000000000 +0200 +*************** +*** 730,731 **** +--- 730,733 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 1118, + /**/ + +-- +From "know your smileys": + :~) A man with a tape recorder up his nose + + /// Bram Moolenaar -- Bram@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 ///