# HG changeset patch # User Bram Moolenaar # Date 1570392904 -7200 # Node ID c8a53c0daeedb1ff1052642a8c72fffca067e589 # Parent f1d9d3f76c98ffd6239afe44c8078f90de3ac8fc patch 8.1.2120: some MB_ macros are more complicated than necessary Commit: https://github.com/vim/vim/commit/1614a14901558ca091329315d14a7d5e1b53aa47 Author: Bram Moolenaar Date: Sun Oct 6 22:00:13 2019 +0200 patch 8.1.2120: some MB_ macros are more complicated than necessary Problem: Some MB_ macros are more complicated than necessary. (Dominique Pelle) Solution: Simplify the macros. Expand inline. diff --git a/src/beval.c b/src/beval.c --- a/src/beval.c +++ b/src/beval.c @@ -92,7 +92,7 @@ find_word_under_cursor( lbuf = ml_get_buf(curwin->w_buffer, VIsual.lnum, FALSE); len = epos->col - spos->col; if (*p_sel != 'e') - len += MB_PTR2LEN(lbuf + epos->col); + len += mb_ptr2len(lbuf + epos->col); lbuf = vim_strnsave(lbuf + spos->col, len); lnum = spos->lnum; col = spos->col; diff --git a/src/diff.c b/src/diff.c --- a/src/diff.c +++ b/src/diff.c @@ -744,7 +744,7 @@ diff_write_buffer(buf_T *buf, diffin_T * // xdiff doesn't support ignoring case, fold-case the text. c = PTR2CHAR(s); c = enc_utf8 ? utf_fold(c) : MB_TOLOWER(c); - orig_len = MB_PTR2LEN(s); + orig_len = mb_ptr2len(s); if (mb_char2bytes(c, cbuf) != orig_len) // TODO: handle byte length difference mch_memmove(ptr + len, s, orig_len); diff --git a/src/eval.c b/src/eval.c --- a/src/eval.c +++ b/src/eval.c @@ -6446,7 +6446,7 @@ do_string_sub( if (zero_width == regmatch.startp[0]) { /* avoid getting stuck on a match with an empty string */ - i = MB_PTR2LEN(tail); + i = mb_ptr2len(tail); mch_memmove((char_u *)ga.ga_data + ga.ga_len, tail, (size_t)i); ga.ga_len += i; diff --git a/src/evalfunc.c b/src/evalfunc.c --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -6454,7 +6454,7 @@ f_setcharsearch(typval_T *argvars, typva } else set_last_csearch(PTR2CHAR(csearch), - csearch, MB_PTR2LEN(csearch)); + csearch, mb_ptr2len(csearch)); } di = dict_find(d, (char_u *)"forward", -1); diff --git a/src/ex_getln.c b/src/ex_getln.c --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -2781,7 +2781,7 @@ redraw: } else { - len = MB_PTR2LEN(p); + len = mb_ptr2len(p); msg_outtrans_len(p, len); vcol += ptr2cells(p); p += len; diff --git a/src/filepath.c b/src/filepath.c --- a/src/filepath.c +++ b/src/filepath.c @@ -2613,9 +2613,9 @@ vim_fnamencmp(char_u *x, char_u *y, size && !(cx == '/' && cy == '\\') && !(cx == '\\' && cy == '/'))) break; - len -= MB_PTR2LEN(px); - px += MB_PTR2LEN(px); - py += MB_PTR2LEN(py); + len -= mb_ptr2len(px); + px += mb_ptr2len(px); + py += mb_ptr2len(py); } if (len == 0) return 0; @@ -3769,14 +3769,14 @@ pathcmp(const char *p, const char *q, in : c1 - c2; // no match } - i += MB_PTR2LEN((char_u *)p + i); - j += MB_PTR2LEN((char_u *)q + j); + i += mb_ptr2len((char_u *)p + i); + j += mb_ptr2len((char_u *)q + j); } if (s == NULL) // "i" or "j" ran into "maxlen" return 0; c1 = PTR2CHAR((char_u *)s + i); - c2 = PTR2CHAR((char_u *)s + i + MB_PTR2LEN((char_u *)s + i)); + c2 = PTR2CHAR((char_u *)s + i + mb_ptr2len((char_u *)s + i)); // ignore a trailing slash, but not "//" or ":/" if (c2 == NUL && i > 0 diff --git a/src/findfile.c b/src/findfile.c --- a/src/findfile.c +++ b/src/findfile.c @@ -1337,8 +1337,8 @@ ff_wc_equal(char_u *s1, char_u *s2) prev2 = prev1; prev1 = c1; - i += MB_PTR2LEN(s1 + i); - j += MB_PTR2LEN(s2 + j); + i += mb_ptr2len(s1 + i); + j += mb_ptr2len(s2 + j); } return s1[i] == s2[j]; } diff --git a/src/getchar.c b/src/getchar.c --- a/src/getchar.c +++ b/src/getchar.c @@ -2254,7 +2254,7 @@ handle_mapping( char_u *p2 = mb_unescape(&p1); if (has_mbyte && p2 != NULL - && MB_BYTE2LEN(tb_c1) > MB_PTR2LEN(p2)) + && MB_BYTE2LEN(tb_c1) > mb_ptr2len(p2)) mlen = 0; } diff --git a/src/highlight.c b/src/highlight.c --- a/src/highlight.c +++ b/src/highlight.c @@ -4392,7 +4392,7 @@ update_search_hl( && col >= shl->startcol && col < shl->endcol) { - int next_col = col + MB_PTR2LEN(*line + col); + int next_col = col + mb_ptr2len(*line + col); if (shl->endcol < next_col) shl->endcol = next_col; diff --git a/src/macros.h b/src/macros.h --- a/src/macros.h +++ b/src/macros.h @@ -229,12 +229,10 @@ * MB_COPY_CHAR(f, t): copy one char from "f" to "t" and advance the pointers. * PTR2CHAR(): get character from pointer. */ -/* Get the length of the character p points to, including composing chars */ -#define MB_PTR2LEN(p) (has_mbyte ? (*mb_ptr2len)(p) : (*p == NUL ? 0 : 1)) /* Advance multi-byte pointer, skip over composing chars. */ -#define MB_PTR_ADV(p) p += has_mbyte ? (*mb_ptr2len)(p) : (*p == NUL ? 0 : 1) +#define MB_PTR_ADV(p) p += (*mb_ptr2len)(p) /* Advance multi-byte pointer, do not skip over composing chars. */ -#define MB_CPTR_ADV(p) p += enc_utf8 ? utf_ptr2len(p) : has_mbyte ? (*mb_ptr2len)(p) : (*p == NUL ? 0 : 1) +#define MB_CPTR_ADV(p) p += enc_utf8 ? utf_ptr2len(p) : (*mb_ptr2len)(p) /* Backup multi-byte pointer. Only use with "p" > "s" ! */ #define MB_PTR_BACK(s, p) p -= has_mbyte ? ((*mb_head_off)(s, p - 1) + 1) : 1 /* get length of multi-byte char, not including composing chars */ diff --git a/src/ops.c b/src/ops.c --- a/src/ops.c +++ b/src/ops.c @@ -3223,7 +3223,7 @@ do_addsub( while (ptr[col] != NUL && !vim_isdigit(ptr[col]) && !(doalp && ASCII_ISALPHA(ptr[col]))) - col += MB_PTR2LEN(ptr + col); + col += mb_ptr2len(ptr + col); while (col > 0 && vim_isdigit(ptr[col - 1]) @@ -3242,7 +3242,7 @@ do_addsub( && !vim_isdigit(ptr[col]) && !(doalp && ASCII_ISALPHA(ptr[col]))) { - int mb_len = MB_PTR2LEN(ptr + col); + int mb_len = mb_ptr2len(ptr + col); col += mb_len; length -= mb_len; diff --git a/src/os_mswin.c b/src/os_mswin.c --- a/src/os_mswin.c +++ b/src/os_mswin.c @@ -1654,7 +1654,7 @@ mch_print_text_out(char_u *p, int len) /* This is wrong when printing spaces for a TAB. */ if (p[len] != NUL) { - wlen = MB_PTR2LEN(p + len); + wlen = mb_ptr2len(p + len); wp = enc_to_utf16(p + len, &wlen); if (wp != NULL) { diff --git a/src/popupmenu.c b/src/popupmenu.c --- a/src/popupmenu.c +++ b/src/popupmenu.c @@ -1151,7 +1151,7 @@ split_message(char_u *mesg, pumitem_T ** } } item->cells += ptr2cells(p); - p += MB_PTR2LEN(p); + p += mb_ptr2len(p); } item->bytelen = p - item->start; if (item->cells > max_cells) @@ -1195,7 +1195,7 @@ split_message(char_u *mesg, pumitem_T ** { cells = item->indent * 2; for (p = item->start + skip; p < item->start + item->bytelen; - p += MB_PTR2LEN(p)) + p += mb_ptr2len(p)) if ((cells += ptr2cells(p)) > BALLOON_MIN_WIDTH) break; thislen = p - (item->start + skip); diff --git a/src/search.c b/src/search.c --- a/src/search.c +++ b/src/search.c @@ -2078,7 +2078,7 @@ findmatchlimit( find_mps_values(&initc, &findc, &backwards, FALSE); if (findc) break; - pos.col += MB_PTR2LEN(linep + pos.col); + pos.col += mb_ptr2len(linep + pos.col); } if (!findc) { @@ -2657,14 +2657,14 @@ showmatch( if (PTR2CHAR(p) == c && (curwin->w_p_rl ^ p_ri)) break; #endif - p += MB_PTR2LEN(p) + 1; + p += mb_ptr2len(p) + 1; if (PTR2CHAR(p) == c #ifdef FEAT_RIGHTLEFT && !(curwin->w_p_rl ^ p_ri) #endif ) break; - p += MB_PTR2LEN(p); + p += mb_ptr2len(p); if (*p == NUL) return; } @@ -5633,7 +5633,7 @@ exit_matched: && action == ACTION_EXPAND && !(compl_cont_status & CONT_SOL) && *startp != NUL - && *(p = startp + MB_PTR2LEN(startp)) != NUL) + && *(p = startp + mb_ptr2len(startp)) != NUL) goto search_line; } line_breakcheck(); diff --git a/src/spell.c b/src/spell.c --- a/src/spell.c +++ b/src/spell.c @@ -2621,7 +2621,7 @@ spell_iswordp( if (has_mbyte) { - l = MB_PTR2LEN(p); + l = mb_ptr2len(p); s = p; if (l == 1) { diff --git a/src/spellsuggest.c b/src/spellsuggest.c --- a/src/spellsuggest.c +++ b/src/spellsuggest.c @@ -1782,7 +1782,7 @@ suggest_trie_walk( { int l; - l = MB_PTR2LEN(fword + sp->ts_fidx); + l = mb_ptr2len(fword + sp->ts_fidx); if (fword_ends) { // Copy the skipped character to preword. @@ -1937,7 +1937,7 @@ suggest_trie_walk( // Correct ts_fidx for the byte length of the // character (we didn't check that before). sp->ts_fidx = sp->ts_fcharstart - + MB_PTR2LEN( + + mb_ptr2len( fword + sp->ts_fcharstart); // For changing a composing character adjust // the score from SCORE_SUBST to @@ -2053,7 +2053,7 @@ suggest_trie_walk( if (has_mbyte) { c = mb_ptr2char(fword + sp->ts_fidx); - stack[depth].ts_fidx += MB_PTR2LEN(fword + sp->ts_fidx); + stack[depth].ts_fidx += mb_ptr2len(fword + sp->ts_fidx); if (enc_utf8 && utf_iscomposing(c)) stack[depth].ts_score -= SCORE_DEL - SCORE_DELCOMP; else if (c == mb_ptr2char(fword + stack[depth].ts_fidx)) @@ -2266,9 +2266,9 @@ suggest_trie_walk( p = fword + sp->ts_fidx; if (has_mbyte) { - n = MB_PTR2LEN(p); + n = mb_ptr2len(p); c = mb_ptr2char(p + n); - mch_memmove(p + MB_PTR2LEN(p + n), p, n); + mch_memmove(p + mb_ptr2len(p + n), p, n); mb_char2bytes(c, p); } else @@ -2354,11 +2354,11 @@ suggest_trie_walk( p = fword + sp->ts_fidx; if (has_mbyte) { - n = MB_PTR2LEN(p); + n = mb_ptr2len(p); c2 = mb_ptr2char(p + n); - fl = MB_PTR2LEN(p + n); + fl = mb_ptr2len(p + n); c = mb_ptr2char(p + n + fl); - tl = MB_PTR2LEN(p + n + fl); + tl = mb_ptr2len(p + n + fl); mch_memmove(p + fl + tl, p, n); mb_char2bytes(c, p); mb_char2bytes(c2, p + tl); @@ -2427,10 +2427,10 @@ suggest_trie_walk( p = fword + sp->ts_fidx; if (has_mbyte) { - n = MB_PTR2LEN(p); - n += MB_PTR2LEN(p + n); + n = mb_ptr2len(p); + n += mb_ptr2len(p + n); c = mb_ptr2char(p + n); - tl = MB_PTR2LEN(p + n); + tl = mb_ptr2len(p + n); mch_memmove(p + tl, p, n); mb_char2bytes(c, p); } @@ -2489,9 +2489,9 @@ suggest_trie_walk( if (has_mbyte) { c = mb_ptr2char(p); - tl = MB_PTR2LEN(p); - n = MB_PTR2LEN(p + tl); - n += MB_PTR2LEN(p + tl + n); + tl = mb_ptr2len(p); + n = mb_ptr2len(p + tl); + n += mb_ptr2len(p + tl + n); mch_memmove(p, p + tl, n); mb_char2bytes(c, p + n); } diff --git a/src/terminal.c b/src/terminal.c --- a/src/terminal.c +++ b/src/terminal.c @@ -5431,7 +5431,7 @@ f_term_scrape(typval_T *argvars, typval_ attrs = cellattr->attrs; fg = cellattr->fg; bg = cellattr->bg; - len = MB_PTR2LEN(p); + len = mb_ptr2len(p); mch_memmove(mbs, p, len); mbs[len] = NUL; p += len; diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2120, +/**/ 2119, /**/ 2118,