- patchlevel 783
This commit is contained in:
parent
792bd32ca2
commit
ef8d68de58
365
7.4.783
Normal file
365
7.4.783
Normal file
@ -0,0 +1,365 @@
|
||||
To: vim_dev@googlegroups.com
|
||||
Subject: Patch 7.4.783
|
||||
Fcc: outbox
|
||||
From: Bram Moolenaar <Bram@moolenaar.net>
|
||||
Mime-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
------------
|
||||
|
||||
Patch 7.4.783
|
||||
Problem: copy_chars() and copy_spaces() are inefficient.
|
||||
Solution: Use memset() instead. (Dominique Pelle)
|
||||
Files: src/ex_getln.c, src/misc2.c, src/ops.c, src/proto/misc2.pro,
|
||||
src/screen.c
|
||||
|
||||
|
||||
*** ../vim-7.4.782/src/ex_getln.c 2015-07-17 13:03:42.100357542 +0200
|
||||
--- src/ex_getln.c 2015-07-17 13:11:12.608078272 +0200
|
||||
***************
|
||||
*** 250,256 ****
|
||||
/* autoindent for :insert and :append */
|
||||
if (firstc <= 0)
|
||||
{
|
||||
! copy_spaces(ccline.cmdbuff, indent);
|
||||
ccline.cmdbuff[indent] = NUL;
|
||||
ccline.cmdpos = indent;
|
||||
ccline.cmdspos = indent;
|
||||
--- 250,256 ----
|
||||
/* autoindent for :insert and :append */
|
||||
if (firstc <= 0)
|
||||
{
|
||||
! vim_memset(ccline.cmdbuff, ' ', indent);
|
||||
ccline.cmdbuff[indent] = NUL;
|
||||
ccline.cmdpos = indent;
|
||||
ccline.cmdspos = indent;
|
||||
*** ../vim-7.4.782/src/misc2.c 2015-07-17 13:03:42.104357503 +0200
|
||||
--- src/misc2.c 2015-07-17 13:11:12.608078272 +0200
|
||||
***************
|
||||
*** 1600,1639 ****
|
||||
#endif
|
||||
|
||||
/*
|
||||
- * copy a space a number of times
|
||||
- */
|
||||
- void
|
||||
- copy_spaces(ptr, count)
|
||||
- char_u *ptr;
|
||||
- size_t count;
|
||||
- {
|
||||
- size_t i = count;
|
||||
- char_u *p = ptr;
|
||||
-
|
||||
- while (i--)
|
||||
- *p++ = ' ';
|
||||
- }
|
||||
-
|
||||
- #if defined(FEAT_VISUALEXTRA) || defined(PROTO)
|
||||
- /*
|
||||
- * Copy a character a number of times.
|
||||
- * Does not work for multi-byte characters!
|
||||
- */
|
||||
- void
|
||||
- copy_chars(ptr, count, c)
|
||||
- char_u *ptr;
|
||||
- size_t count;
|
||||
- int c;
|
||||
- {
|
||||
- size_t i = count;
|
||||
- char_u *p = ptr;
|
||||
-
|
||||
- while (i--)
|
||||
- *p++ = c;
|
||||
- }
|
||||
- #endif
|
||||
-
|
||||
- /*
|
||||
* delete spaces at the end of a string
|
||||
*/
|
||||
void
|
||||
--- 1600,1605 ----
|
||||
*** ../vim-7.4.782/src/ops.c 2015-07-17 13:03:42.108357465 +0200
|
||||
--- src/ops.c 2015-07-17 13:11:12.612078233 +0200
|
||||
***************
|
||||
*** 442,449 ****
|
||||
return;
|
||||
vim_memset(newp, NUL, (size_t)(bd.textcol + i + j + len));
|
||||
mch_memmove(newp, oldp, (size_t)bd.textcol);
|
||||
! copy_chars(newp + bd.textcol, (size_t)i, TAB);
|
||||
! copy_spaces(newp + bd.textcol + i, (size_t)j);
|
||||
/* the end */
|
||||
mch_memmove(newp + bd.textcol + i + j, bd.textstart, (size_t)len);
|
||||
}
|
||||
--- 442,449 ----
|
||||
return;
|
||||
vim_memset(newp, NUL, (size_t)(bd.textcol + i + j + len));
|
||||
mch_memmove(newp, oldp, (size_t)bd.textcol);
|
||||
! vim_memset(newp + bd.textcol, TAB, (size_t)i);
|
||||
! vim_memset(newp + bd.textcol + i, ' ', (size_t)j);
|
||||
/* the end */
|
||||
mch_memmove(newp + bd.textcol + i + j, bd.textstart, (size_t)len);
|
||||
}
|
||||
***************
|
||||
*** 535,541 ****
|
||||
if (newp == NULL)
|
||||
return;
|
||||
mch_memmove(newp, oldp, (size_t)(verbatim_copy_end - oldp));
|
||||
! copy_spaces(newp + (verbatim_copy_end - oldp), (size_t)fill);
|
||||
STRMOVE(newp + (verbatim_copy_end - oldp) + fill, non_white);
|
||||
}
|
||||
/* replace the line */
|
||||
--- 535,541 ----
|
||||
if (newp == NULL)
|
||||
return;
|
||||
mch_memmove(newp, oldp, (size_t)(verbatim_copy_end - oldp));
|
||||
! vim_memset(newp + (verbatim_copy_end - oldp), ' ', (size_t)fill);
|
||||
STRMOVE(newp + (verbatim_copy_end - oldp) + fill, non_white);
|
||||
}
|
||||
/* replace the line */
|
||||
***************
|
||||
*** 638,644 ****
|
||||
oldp += offset;
|
||||
|
||||
/* insert pre-padding */
|
||||
! copy_spaces(newp + offset, (size_t)spaces);
|
||||
|
||||
/* copy the new text */
|
||||
mch_memmove(newp + offset + spaces, s, (size_t)s_len);
|
||||
--- 638,644 ----
|
||||
oldp += offset;
|
||||
|
||||
/* insert pre-padding */
|
||||
! vim_memset(newp + offset, ' ', (size_t)spaces);
|
||||
|
||||
/* copy the new text */
|
||||
mch_memmove(newp + offset + spaces, s, (size_t)s_len);
|
||||
***************
|
||||
*** 647,653 ****
|
||||
if (spaces && !bdp->is_short)
|
||||
{
|
||||
/* insert post-padding */
|
||||
! copy_spaces(newp + offset + spaces, (size_t)(p_ts - spaces));
|
||||
/* We're splitting a TAB, don't copy it. */
|
||||
oldp++;
|
||||
/* We allowed for that TAB, remember this now */
|
||||
--- 647,653 ----
|
||||
if (spaces && !bdp->is_short)
|
||||
{
|
||||
/* insert post-padding */
|
||||
! vim_memset(newp + offset + spaces, ' ', (size_t)(p_ts - spaces));
|
||||
/* We're splitting a TAB, don't copy it. */
|
||||
oldp++;
|
||||
/* We allowed for that TAB, remember this now */
|
||||
***************
|
||||
*** 1831,1837 ****
|
||||
/* copy up to deleted part */
|
||||
mch_memmove(newp, oldp, (size_t)bd.textcol);
|
||||
/* insert spaces */
|
||||
! copy_spaces(newp + bd.textcol,
|
||||
(size_t)(bd.startspaces + bd.endspaces));
|
||||
/* copy the part after the deleted part */
|
||||
oldp += bd.textcol + bd.textlen;
|
||||
--- 1831,1837 ----
|
||||
/* copy up to deleted part */
|
||||
mch_memmove(newp, oldp, (size_t)bd.textcol);
|
||||
/* insert spaces */
|
||||
! vim_memset(newp + bd.textcol, ' ',
|
||||
(size_t)(bd.startspaces + bd.endspaces));
|
||||
/* copy the part after the deleted part */
|
||||
oldp += bd.textcol + bd.textlen;
|
||||
***************
|
||||
*** 2132,2138 ****
|
||||
mch_memmove(newp, oldp, (size_t)bd.textcol);
|
||||
oldp += bd.textcol + bd.textlen;
|
||||
/* insert pre-spaces */
|
||||
! copy_spaces(newp + bd.textcol, (size_t)bd.startspaces);
|
||||
/* insert replacement chars CHECK FOR ALLOCATED SPACE */
|
||||
/* -1/-2 is used for entering CR literally. */
|
||||
if (had_ctrl_v_cr || (c != '\r' && c != '\n'))
|
||||
--- 2132,2138 ----
|
||||
mch_memmove(newp, oldp, (size_t)bd.textcol);
|
||||
oldp += bd.textcol + bd.textlen;
|
||||
/* insert pre-spaces */
|
||||
! vim_memset(newp + bd.textcol, ' ', (size_t)bd.startspaces);
|
||||
/* insert replacement chars CHECK FOR ALLOCATED SPACE */
|
||||
/* -1/-2 is used for entering CR literally. */
|
||||
if (had_ctrl_v_cr || (c != '\r' && c != '\n'))
|
||||
***************
|
||||
*** 2146,2156 ****
|
||||
}
|
||||
else
|
||||
#endif
|
||||
! copy_chars(newp + STRLEN(newp), (size_t)numc, c);
|
||||
if (!bd.is_short)
|
||||
{
|
||||
/* insert post-spaces */
|
||||
! copy_spaces(newp + STRLEN(newp), (size_t)bd.endspaces);
|
||||
/* copy the part after the changed part */
|
||||
STRMOVE(newp + STRLEN(newp), oldp);
|
||||
}
|
||||
--- 2146,2156 ----
|
||||
}
|
||||
else
|
||||
#endif
|
||||
! vim_memset(newp + STRLEN(newp), c, (size_t)numc);
|
||||
if (!bd.is_short)
|
||||
{
|
||||
/* insert post-spaces */
|
||||
! vim_memset(newp + STRLEN(newp), ' ', (size_t)bd.endspaces);
|
||||
/* copy the part after the changed part */
|
||||
STRMOVE(newp + STRLEN(newp), oldp);
|
||||
}
|
||||
***************
|
||||
*** 2831,2837 ****
|
||||
mch_memmove(newp, oldp, (size_t)bd.textcol);
|
||||
offset = bd.textcol;
|
||||
# ifdef FEAT_VIRTUALEDIT
|
||||
! copy_spaces(newp + offset, (size_t)vpos.coladd);
|
||||
offset += vpos.coladd;
|
||||
# endif
|
||||
mch_memmove(newp + offset, ins_text, (size_t)ins_len);
|
||||
--- 2831,2837 ----
|
||||
mch_memmove(newp, oldp, (size_t)bd.textcol);
|
||||
offset = bd.textcol;
|
||||
# ifdef FEAT_VIRTUALEDIT
|
||||
! vim_memset(newp + offset, ' ', (size_t)vpos.coladd);
|
||||
offset += vpos.coladd;
|
||||
# endif
|
||||
mch_memmove(newp + offset, ins_text, (size_t)ins_len);
|
||||
***************
|
||||
*** 3272,3282 ****
|
||||
== NULL)
|
||||
return FAIL;
|
||||
y_current->y_array[y_idx] = pnew;
|
||||
! copy_spaces(pnew, (size_t)bd->startspaces);
|
||||
pnew += bd->startspaces;
|
||||
mch_memmove(pnew, bd->textstart, (size_t)bd->textlen);
|
||||
pnew += bd->textlen;
|
||||
! copy_spaces(pnew, (size_t)bd->endspaces);
|
||||
pnew += bd->endspaces;
|
||||
*pnew = NUL;
|
||||
return OK;
|
||||
--- 3272,3282 ----
|
||||
== NULL)
|
||||
return FAIL;
|
||||
y_current->y_array[y_idx] = pnew;
|
||||
! vim_memset(pnew, ' ', (size_t)bd->startspaces);
|
||||
pnew += bd->startspaces;
|
||||
mch_memmove(pnew, bd->textstart, (size_t)bd->textlen);
|
||||
pnew += bd->textlen;
|
||||
! vim_memset(pnew, ' ', (size_t)bd->endspaces);
|
||||
pnew += bd->endspaces;
|
||||
*pnew = NUL;
|
||||
return OK;
|
||||
***************
|
||||
*** 3690,3696 ****
|
||||
mch_memmove(ptr, oldp, (size_t)bd.textcol);
|
||||
ptr += bd.textcol;
|
||||
/* may insert some spaces before the new text */
|
||||
! copy_spaces(ptr, (size_t)bd.startspaces);
|
||||
ptr += bd.startspaces;
|
||||
/* insert the new text */
|
||||
for (j = 0; j < count; ++j)
|
||||
--- 3690,3696 ----
|
||||
mch_memmove(ptr, oldp, (size_t)bd.textcol);
|
||||
ptr += bd.textcol;
|
||||
/* may insert some spaces before the new text */
|
||||
! vim_memset(ptr, ' ', (size_t)bd.startspaces);
|
||||
ptr += bd.startspaces;
|
||||
/* insert the new text */
|
||||
for (j = 0; j < count; ++j)
|
||||
***************
|
||||
*** 3701,3712 ****
|
||||
/* insert block's trailing spaces only if there's text behind */
|
||||
if ((j < count - 1 || !shortline) && spaces)
|
||||
{
|
||||
! copy_spaces(ptr, (size_t)spaces);
|
||||
ptr += spaces;
|
||||
}
|
||||
}
|
||||
/* may insert some spaces after the new text */
|
||||
! copy_spaces(ptr, (size_t)bd.endspaces);
|
||||
ptr += bd.endspaces;
|
||||
/* move the text after the cursor to the end of the line. */
|
||||
mch_memmove(ptr, oldp + bd.textcol + delcount,
|
||||
--- 3701,3712 ----
|
||||
/* insert block's trailing spaces only if there's text behind */
|
||||
if ((j < count - 1 || !shortline) && spaces)
|
||||
{
|
||||
! vim_memset(ptr, ' ', (size_t)spaces);
|
||||
ptr += spaces;
|
||||
}
|
||||
}
|
||||
/* may insert some spaces after the new text */
|
||||
! vim_memset(ptr, ' ', (size_t)bd.endspaces);
|
||||
ptr += bd.endspaces;
|
||||
/* move the text after the cursor to the end of the line. */
|
||||
mch_memmove(ptr, oldp + bd.textcol + delcount,
|
||||
***************
|
||||
*** 4522,4528 ****
|
||||
if (spaces[t] > 0)
|
||||
{
|
||||
cend -= spaces[t];
|
||||
! copy_spaces(cend, (size_t)(spaces[t]));
|
||||
}
|
||||
mark_col_adjust(curwin->w_cursor.lnum + t, (colnr_T)0, (linenr_T)-t,
|
||||
(long)(cend - newp + spaces[t] - (curr - curr_start)));
|
||||
--- 4522,4528 ----
|
||||
if (spaces[t] > 0)
|
||||
{
|
||||
cend -= spaces[t];
|
||||
! vim_memset(cend, ' ', (size_t)(spaces[t]));
|
||||
}
|
||||
mark_col_adjust(curwin->w_cursor.lnum + t, (colnr_T)0, (linenr_T)-t,
|
||||
(long)(cend - newp + spaces[t] - (curr - curr_start)));
|
||||
*** ../vim-7.4.782/src/proto/misc2.pro 2014-08-10 13:34:59.064785459 +0200
|
||||
--- src/proto/misc2.pro 2015-07-17 13:11:12.612078233 +0200
|
||||
***************
|
||||
*** 37,44 ****
|
||||
char_u *vim_strnsave_up __ARGS((char_u *string, int len));
|
||||
void vim_strup __ARGS((char_u *p));
|
||||
char_u *strup_save __ARGS((char_u *orig));
|
||||
- void copy_spaces __ARGS((char_u *ptr, size_t count));
|
||||
- void copy_chars __ARGS((char_u *ptr, size_t count, int c));
|
||||
void del_trailing_spaces __ARGS((char_u *ptr));
|
||||
void vim_strncpy __ARGS((char_u *to, char_u *from, size_t len));
|
||||
void vim_strcat __ARGS((char_u *to, char_u *from, size_t tosize));
|
||||
--- 37,42 ----
|
||||
*** ../vim-7.4.782/src/screen.c 2015-06-10 12:16:41.926648740 +0200
|
||||
--- src/screen.c 2015-07-17 13:11:12.612078233 +0200
|
||||
***************
|
||||
*** 2833,2839 ****
|
||||
int fdc = compute_foldcolumn(wp, 0);
|
||||
|
||||
/* Init to all spaces. */
|
||||
! copy_spaces(p, (size_t)fdc);
|
||||
|
||||
level = win_foldinfo.fi_level;
|
||||
if (level > 0)
|
||||
--- 2833,2839 ----
|
||||
int fdc = compute_foldcolumn(wp, 0);
|
||||
|
||||
/* Init to all spaces. */
|
||||
! vim_memset(p, ' ', (size_t)fdc);
|
||||
|
||||
level = win_foldinfo.fi_level;
|
||||
if (level > 0)
|
||||
*** ../vim-7.4.782/src/version.c 2015-07-17 13:03:42.108357465 +0200
|
||||
--- src/version.c 2015-07-17 13:06:43.742631736 +0200
|
||||
***************
|
||||
*** 743,744 ****
|
||||
--- 743,746 ----
|
||||
{ /* Add new patch number below this line */
|
||||
+ /**/
|
||||
+ 783,
|
||||
/**/
|
||||
|
||||
--
|
||||
hundred-and-one symptoms of being an internet addict:
|
||||
228. You spend Saturday night making the counter on your home page
|
||||
pass that 2000 mark.
|
||||
|
||||
/// 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 ///
|
||||
Loading…
Reference in New Issue
Block a user