From ef8d68de586d3a82492ec21077888449532ad950 Mon Sep 17 00:00:00 2001 From: Karsten Hopp Date: Aug 19 2015 15:14:34 +0000 Subject: - patchlevel 783 --- diff --git a/7.4.783 b/7.4.783 new file mode 100644 index 0000000..82ee889 --- /dev/null +++ b/7.4.783 @@ -0,0 +1,365 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.783 +Fcc: outbox +From: Bram Moolenaar +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 ///