summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2012-02-05 23:10:30 +0100
committerBram Moolenaar <Bram@vim.org>2012-02-05 23:10:30 +0100
commitb3a6bbc7b6b1b4ff349300e41b8021f2265cb472 (patch)
tree788e283e7cfc98b29a54d0b5ee6f3c573f520d92
parent8d462f966657d7bdedc470a10e20b1b635d64576 (diff)
downloadvim-git-7.3.433.tar.gz
updated for version 7.3.433v7.3.433
Problem: Using continued lines in a Vim script can be slow. Solution: Instead of reallocating for every line use a growarray. (Yasuhiro Matsumoto)
-rw-r--r--src/ex_cmds2.c38
-rw-r--r--src/version.c2
2 files changed, 26 insertions, 14 deletions
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index 4b2564bbd..ddfe103b6 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -3439,22 +3439,32 @@ getsourceline(c, cookie, indent)
{
/* compensate for the one line read-ahead */
--sourcing_lnum;
- for (;;)
+
+ /* Get the next line and concatenate it when it starts with a
+ * backslash. We always need to read the next line, keep it in
+ * sp->nextline. */
+ sp->nextline = get_one_sourceline(sp);
+ if (sp->nextline != NULL && *(p = skipwhite(sp->nextline)) == '\\')
{
- sp->nextline = get_one_sourceline(sp);
- if (sp->nextline == NULL)
- break;
- p = skipwhite(sp->nextline);
- if (*p != '\\')
- break;
- s = alloc((unsigned)(STRLEN(line) + STRLEN(p)));
- if (s == NULL) /* out of memory */
- break;
- STRCPY(s, line);
- STRCAT(s, p + 1);
+ garray_T ga;
+
+ ga_init2(&ga, (int)sizeof(char_u), 200);
+ ga_concat(&ga, line);
+ ga_concat(&ga, p + 1);
+ for (;;)
+ {
+ vim_free(sp->nextline);
+ sp->nextline = get_one_sourceline(sp);
+ if (sp->nextline == NULL)
+ break;
+ p = skipwhite(sp->nextline);
+ if (*p != '\\')
+ break;
+ ga_concat(&ga, p + 1);
+ }
+ ga_append(&ga, NUL);
vim_free(line);
- line = s;
- vim_free(sp->nextline);
+ line = ga.ga_data;
}
}
diff --git a/src/version.c b/src/version.c
index c1c568d0a..7fd75fdef 100644
--- a/src/version.c
+++ b/src/version.c
@@ -715,6 +715,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 433,
+/**/
432,
/**/
431,