]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.433 v7.3.433
authorBram Moolenaar <Bram@vim.org>
Sun, 5 Feb 2012 22:10:30 +0000 (23:10 +0100)
committerBram Moolenaar <Bram@vim.org>
Sun, 5 Feb 2012 22:10:30 +0000 (23:10 +0100)
Problem:    Using continued lines in a Vim script can be slow.
Solution:   Instead of reallocating for every line use a growarray. (Yasuhiro
            Matsumoto)

src/ex_cmds2.c
src/version.c

index 4b2564bbd4b019bfdeef8ff350e04fac1d6a19c9..ddfe103b654819d33cd9ed612d7e2bfb9989884f 100644 (file)
@@ -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;
        }
     }
 
index c1c568d0af2f0e9d844b6fb9dc549bed378ad59b..7fd75fdef0d66a925e160f655959ae9a1cd488d0 100644 (file)
@@ -714,6 +714,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    433,
 /**/
     432,
 /**/