To: vim_dev@googlegroups.com Subject: Patch 7.3.1034 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.3.1034 Problem: New regexp code using strange multi-byte code. Solution: Use the normal code to advance and backup pointers. Files: src/regexp_nfa.c *** ../vim-7.3.1033/src/regexp_nfa.c 2013-05-28 22:03:13.000000000 +0200 --- src/regexp_nfa.c 2013-05-28 22:25:28.000000000 +0200 *************** *** 188,195 **** static int nfa_regcomp_start __ARGS((char_u*expr, int re_flags)); static int nfa_recognize_char_class __ARGS((char_u *start, char_u *end, int extra_newl)); static int nfa_emit_equi_class __ARGS((int c, int neg)); - static void nfa_inc __ARGS((char_u **p)); - static void nfa_dec __ARGS((char_u **p)); static int nfa_regatom __ARGS((void)); static int nfa_regpiece __ARGS((void)); static int nfa_regconcat __ARGS((void)); --- 188,193 ---- *************** *** 554,601 **** */ /* - * Increments the pointer "p" by one (multi-byte) character. - */ - static void - nfa_inc(p) - char_u **p; - { - #ifdef FEAT_MBYTE - if (has_mbyte) - mb_ptr2char_adv(p); - else - #endif - *p = *p + 1; - } - - /* - * Decrements the pointer "p" by one (multi-byte) character. - */ - static void - nfa_dec(p) - char_u **p; - { - #ifdef FEAT_MBYTE - char_u *p2, *oldp; - - if (has_mbyte) - { - oldp = *p; - /* Try to find the multibyte char that advances to the current - * position. */ - do - { - *p = *p - 1; - p2 = *p; - mb_ptr2char_adv(&p2); - } while (p2 != oldp); - } - #else - *p = *p - 1; - #endif - } - - /* * Parse the lowest level. * * An atom can be one of a long list of items. Many atoms match one character --- 552,557 ---- *************** *** 963,969 **** EMIT(NFA_OR); } regparse = endp; ! nfa_inc(®parse); return OK; } /* --- 919,925 ---- EMIT(NFA_OR); } regparse = endp; ! mb_ptr_adv(regparse); return OK; } /* *************** *** 978,984 **** { negated = TRUE; glue = NFA_CONCAT; ! nfa_inc(®parse); } if (*regparse == '-') { --- 934,940 ---- { negated = TRUE; glue = NFA_CONCAT; ! mb_ptr_adv(regparse); } if (*regparse == '-') { *************** *** 986,992 **** EMIT(startc); TRY_NEG(); EMIT_GLUE(); ! nfa_inc(®parse); } /* Emit the OR branches for each character in the [] */ emit_range = FALSE; --- 942,948 ---- EMIT(startc); TRY_NEG(); EMIT_GLUE(); ! mb_ptr_adv(regparse); } /* Emit the OR branches for each character in the [] */ emit_range = FALSE; *************** *** 1090,1096 **** { emit_range = TRUE; startc = oldstartc; ! nfa_inc(®parse); continue; /* reading the end of the range */ } --- 1046,1052 ---- { emit_range = TRUE; startc = oldstartc; ! mb_ptr_adv(regparse); continue; /* reading the end of the range */ } *************** *** 1110,1116 **** ) ) { ! nfa_inc(®parse); if (*regparse == 'n') startc = reg_string ? NL : NFA_NEWL; --- 1066,1072 ---- ) ) { ! mb_ptr_adv(regparse); if (*regparse == 'n') startc = reg_string ? NL : NFA_NEWL; *************** *** 1125,1131 **** /* TODO(RE) This needs more testing */ startc = coll_get_char(); got_coll_char = TRUE; ! nfa_dec(®parse); } else { --- 1081,1087 ---- /* TODO(RE) This needs more testing */ startc = coll_get_char(); got_coll_char = TRUE; ! mb_ptr_back(old_regparse, regparse); } else { *************** *** 1210,1226 **** EMIT_GLUE(); } ! nfa_inc(®parse); } /* while (p < endp) */ ! nfa_dec(®parse); if (*regparse == '-') /* if last, '-' is just a char */ { EMIT('-'); TRY_NEG(); EMIT_GLUE(); } ! nfa_inc(®parse); if (extra == ADD_NL) /* \_[] also matches \n */ { --- 1166,1182 ---- EMIT_GLUE(); } ! mb_ptr_adv(regparse); } /* while (p < endp) */ ! mb_ptr_back(old_regparse, regparse); if (*regparse == '-') /* if last, '-' is just a char */ { EMIT('-'); TRY_NEG(); EMIT_GLUE(); } ! mb_ptr_adv(regparse); if (extra == ADD_NL) /* \_[] also matches \n */ { *************** *** 1231,1237 **** /* skip the trailing ] */ regparse = endp; ! nfa_inc(®parse); if (negated == TRUE) { /* Mark end of negated char range */ --- 1187,1193 ---- /* skip the trailing ] */ regparse = endp; ! mb_ptr_adv(regparse); if (negated == TRUE) { /* Mark end of negated char range */ *** ../vim-7.3.1033/src/version.c 2013-05-28 22:03:13.000000000 +0200 --- src/version.c 2013-05-28 22:29:18.000000000 +0200 *************** *** 730,731 **** --- 730,733 ---- { /* Add new patch number below this line */ + /**/ + 1034, /**/ -- hundred-and-one symptoms of being an internet addict: 7. You finally do take that vacation, but only after buying a cellular modem and a laptop. /// 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 ///