1
0
forked from aniani/vim

patch 8.0.0520: using a function pointer while the function is known

Problem:    Using a function pointer instead of the actual function, which we
            know.
Solution:   Change mb_ functions to utf_ functions when already checked for
            Unicode. (Dominique Pelle, closes #1582)
This commit is contained in:
Bram Moolenaar
2017-03-29 17:30:27 +02:00
parent 0c078fc7db
commit ace95989ed
7 changed files with 21 additions and 19 deletions

View File

@@ -315,7 +315,7 @@ trunc_string(
for (;;) for (;;)
{ {
do do
half = half - (*mb_head_off)(s, s + half - 1) - 1; half = half - utf_head_off(s, s + half - 1) - 1;
while (half > 0 && utf_iscomposing(utf_ptr2char(s + half))); while (half > 0 && utf_iscomposing(utf_ptr2char(s + half)));
n = ptr2cells(s + half); n = ptr2cells(s + half);
if (len + n > room || half == 0) if (len + n > room || half == 0)

View File

@@ -1874,7 +1874,7 @@ vim_strchr(char_u *string, int c)
{ {
while (*p != NUL) while (*p != NUL)
{ {
int l = (*mb_ptr2len)(p); int l = utfc_ptr2len(p);
/* Avoid matching an illegal byte here. */ /* Avoid matching an illegal byte here. */
if (utf_ptr2char(p) == c && l > 1) if (utf_ptr2char(p) == c && l > 1)

View File

@@ -4732,7 +4732,7 @@ regmatch(
break; break;
} }
if (enc_utf8) if (enc_utf8)
opndc = mb_ptr2char(opnd); opndc = utf_ptr2char(opnd);
if (enc_utf8 && utf_iscomposing(opndc)) if (enc_utf8 && utf_iscomposing(opndc))
{ {
/* When only a composing char is given match at any /* When only a composing char is given match at any
@@ -4741,7 +4741,7 @@ regmatch(
for (i = 0; reginput[i] != NUL; for (i = 0; reginput[i] != NUL;
i += utf_ptr2len(reginput + i)) i += utf_ptr2len(reginput + i))
{ {
inpc = mb_ptr2char(reginput + i); inpc = utf_ptr2char(reginput + i);
if (!utf_iscomposing(inpc)) if (!utf_iscomposing(inpc))
{ {
if (i > 0) if (i > 0)
@@ -4750,7 +4750,7 @@ regmatch(
else if (opndc == inpc) else if (opndc == inpc)
{ {
/* Include all following composing chars. */ /* Include all following composing chars. */
len = i + mb_ptr2len(reginput + i); len = i + utfc_ptr2len(reginput + i);
status = RA_MATCH; status = RA_MATCH;
break; break;
} }

View File

@@ -1974,7 +1974,7 @@ collection:
nfa_do_multibyte: nfa_do_multibyte:
/* plen is length of current char with composing chars */ /* plen is length of current char with composing chars */
if (enc_utf8 && ((*mb_char2len)(c) if (enc_utf8 && ((*mb_char2len)(c)
!= (plen = (*mb_ptr2len)(old_regparse)) != (plen = utfc_ptr2len(old_regparse))
|| utf_iscomposing(c))) || utf_iscomposing(c)))
{ {
int i = 0; int i = 0;

View File

@@ -4119,7 +4119,7 @@ win_line(
c = c_extra; c = c_extra;
#ifdef FEAT_MBYTE #ifdef FEAT_MBYTE
mb_c = c; /* doesn't handle non-utf-8 multi-byte! */ mb_c = c; /* doesn't handle non-utf-8 multi-byte! */
if (enc_utf8 && (*mb_char2len)(c) > 1) if (enc_utf8 && utf_char2len(c) > 1)
{ {
mb_utf8 = TRUE; mb_utf8 = TRUE;
u8cc[0] = 0; u8cc[0] = 0;
@@ -4140,7 +4140,7 @@ win_line(
{ {
/* If the UTF-8 character is more than one byte: /* If the UTF-8 character is more than one byte:
* Decode it into "mb_c". */ * Decode it into "mb_c". */
mb_l = (*mb_ptr2len)(p_extra); mb_l = utfc_ptr2len(p_extra);
mb_utf8 = FALSE; mb_utf8 = FALSE;
if (mb_l > n_extra) if (mb_l > n_extra)
mb_l = 1; mb_l = 1;
@@ -4219,7 +4219,7 @@ win_line(
{ {
/* If the UTF-8 character is more than one byte: Decode it /* If the UTF-8 character is more than one byte: Decode it
* into "mb_c". */ * into "mb_c". */
mb_l = (*mb_ptr2len)(ptr); mb_l = utfc_ptr2len(ptr);
mb_utf8 = FALSE; mb_utf8 = FALSE;
if (mb_l > 1) if (mb_l > 1)
{ {
@@ -4612,7 +4612,7 @@ win_line(
} }
#ifdef FEAT_MBYTE #ifdef FEAT_MBYTE
mb_c = c; mb_c = c;
if (enc_utf8 && (*mb_char2len)(c) > 1) if (enc_utf8 && utf_char2len(c) > 1)
{ {
mb_utf8 = TRUE; mb_utf8 = TRUE;
u8cc[0] = 0; u8cc[0] = 0;
@@ -4634,7 +4634,7 @@ win_line(
} }
#ifdef FEAT_MBYTE #ifdef FEAT_MBYTE
mb_c = c; mb_c = c;
if (enc_utf8 && (*mb_char2len)(c) > 1) if (enc_utf8 && utf_char2len(c) > 1)
{ {
mb_utf8 = TRUE; mb_utf8 = TRUE;
u8cc[0] = 0; u8cc[0] = 0;
@@ -4765,7 +4765,7 @@ win_line(
saved_attr2 = char_attr; /* save current attr */ saved_attr2 = char_attr; /* save current attr */
#ifdef FEAT_MBYTE #ifdef FEAT_MBYTE
mb_c = c; mb_c = c;
if (enc_utf8 && (*mb_char2len)(c) > 1) if (enc_utf8 && utf_char2len(c) > 1)
{ {
mb_utf8 = TRUE; mb_utf8 = TRUE;
u8cc[0] = 0; u8cc[0] = 0;
@@ -4839,7 +4839,7 @@ win_line(
} }
#ifdef FEAT_MBYTE #ifdef FEAT_MBYTE
mb_c = c; mb_c = c;
if (enc_utf8 && (*mb_char2len)(c) > 1) if (enc_utf8 && utf_char2len(c) > 1)
{ {
mb_utf8 = TRUE; mb_utf8 = TRUE;
u8cc[0] = 0; u8cc[0] = 0;
@@ -5003,7 +5003,7 @@ win_line(
} }
# ifdef FEAT_MBYTE # ifdef FEAT_MBYTE
mb_c = c; mb_c = c;
if (enc_utf8 && (*mb_char2len)(c) > 1) if (enc_utf8 && utf_char2len(c) > 1)
{ {
mb_utf8 = TRUE; mb_utf8 = TRUE;
u8cc[0] = 0; u8cc[0] = 0;
@@ -5110,7 +5110,7 @@ win_line(
extra_attr = HL_ATTR(HLF_AT); extra_attr = HL_ATTR(HLF_AT);
} }
mb_c = c; mb_c = c;
if (enc_utf8 && (*mb_char2len)(c) > 1) if (enc_utf8 && utf_char2len(c) > 1)
{ {
mb_utf8 = TRUE; mb_utf8 = TRUE;
u8cc[0] = 0; u8cc[0] = 0;
@@ -5383,7 +5383,7 @@ win_line(
char_attr = HL_ATTR(HLF_AT); char_attr = HL_ATTR(HLF_AT);
#ifdef FEAT_MBYTE #ifdef FEAT_MBYTE
mb_c = c; mb_c = c;
if (enc_utf8 && (*mb_char2len)(c) > 1) if (enc_utf8 && utf_char2len(c) > 1)
{ {
mb_utf8 = TRUE; mb_utf8 = TRUE;
u8cc[0] = 0; u8cc[0] = 0;

View File

@@ -1208,7 +1208,7 @@ can_compound(slang_T *slang, char_u *word, char_u *flags)
/* Need to convert the single byte flags to utf8 characters. */ /* Need to convert the single byte flags to utf8 characters. */
p = uflags; p = uflags;
for (i = 0; flags[i] != NUL; ++i) for (i = 0; flags[i] != NUL; ++i)
p += mb_char2bytes(flags[i], p); p += utf_char2bytes(flags[i], p);
*p = NUL; *p = NUL;
p = uflags; p = uflags;
} }
@@ -5117,11 +5117,11 @@ suggest_trie_walk(
* SCORE_SUBCOMP. */ * SCORE_SUBCOMP. */
if (enc_utf8 if (enc_utf8
&& utf_iscomposing( && utf_iscomposing(
mb_ptr2char(tword utf_ptr2char(tword
+ sp->ts_twordlen + sp->ts_twordlen
- sp->ts_tcharlen)) - sp->ts_tcharlen))
&& utf_iscomposing( && utf_iscomposing(
mb_ptr2char(fword utf_ptr2char(fword
+ sp->ts_fcharstart))) + sp->ts_fcharstart)))
sp->ts_score -= sp->ts_score -=
SCORE_SUBST - SCORE_SUBCOMP; SCORE_SUBST - SCORE_SUBCOMP;

View File

@@ -764,6 +764,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
520,
/**/ /**/
519, 519,
/**/ /**/