]> granicus.if.org Git - vim/commitdiff
updated for version 7.0072
authorBram Moolenaar <Bram@vim.org>
Wed, 18 May 2005 22:17:12 +0000 (22:17 +0000)
committerBram Moolenaar <Bram@vim.org>
Wed, 18 May 2005 22:17:12 +0000 (22:17 +0000)
13 files changed:
runtime/doc/change.txt
runtime/doc/diff.txt
runtime/doc/eval.txt
runtime/doc/tags
runtime/doc/usr_41.txt
src/Makefile
src/configure.in
src/gui_gtk.c
src/regexp.c
src/testdir/Make_amiga.mak
src/testdir/Make_dos.mak
src/testdir/test49.vim
src/version.h

index c507ccd4ab81f4e5ebd0d6fddc77f43ff2069cf0..85271b1c209ce5427c26585ba0202e9447bd6856 100644 (file)
@@ -1,4 +1,4 @@
-*change.txt*    For Vim version 7.0aa.  Last change: 2005 Apr 03
+*change.txt*    For Vim version 7.0aa.  Last change: 2005 Apr 26
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -748,8 +748,8 @@ either the first or second pattern in parentheses did not match, so either
 <
 
 Substitute with an expression                  *sub-replace-expression*
-
-When the substitute string starts with "\=" the remainer is interpreted as an
+                                               *sub-replace-\=*
+When the substitute string starts with "\=" the remainder is interpreted as an
 expression.  This does not work recursively: a substitute() function inside
 the expression cannot use "\=" for the substitute string.
 
index 391629ba70d3255667f04bc8ee5cbc54b853f586..7d6383126a4a0cb1526feee531ca7d244b9ca331 100644 (file)
@@ -1,4 +1,4 @@
-*diff.txt*      For Vim version 7.0aa.  Last change: 2005 Mar 08
+*diff.txt*      For Vim version 7.0aa.  Last change: 2005 Apr 26
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -161,6 +161,8 @@ buffer.  If you don't want a buffer to remain used for the diff do ":set
 nodiff" before hiding it.
 
                                                        *:diffu* *:diffupdate*
+:diffu[pdate]                  Update the diff highlighting and folds.
+
 Vim attempts to keep the differences updated when you make changes to the
 text.  This mostly takes care of inserted and deleted lines.  Changes within a
 line and more complicated changes do not cause the differences to be updated.
index d9020a741adcb2db0b742aff8ced24355620531e..84571bbc457ab0562bab308f1423dd279cd87737 100644 (file)
@@ -1,4 +1,4 @@
-*eval.txt*      For Vim version 7.0aa.  Last change: 2005 Apr 22
+*eval.txt*      For Vim version 7.0aa.  Last change: 2005 May 18
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -194,6 +194,10 @@ is an empty list.  If the second index is lower, this results in an error. >
        :echo mylist[2:1]               " result: []
        :echo mylist[2:0]               " error!
 
+NOTE: mylist[s:e] means using the variable "s:e" as index.  Watch out for
+using a single letter variable before the ":".  Insert a space when needed:
+mylist[s : e].
+
 
 List identity ~
                                                        *list-identity*
@@ -4596,14 +4600,14 @@ Using a script in the "autoload" directory is simpler, but requires using
 exactly the right file name.  A function that can be autoloaded has a name
 like this: >
 
-       :call filename:funcname()
+       :call filename#funcname()
 
 When such a function is called, and it is not defined yet, Vim will search the
 "autoload" directories in 'runtimepath' for a script file called
 "filename.vim".  For example "~/.vim/autoload/filename.vim".  That file should
 then define the function like this: >
 
-       function filename:funcname()
+       function filename#funcname()
           echo "Done!"
        endfunction
 
@@ -4611,10 +4615,10 @@ The file name and the name used before the colon in the function must match
 exactly, and the defined function must have the name exactly as it will be
 called.
 
-It is possible to use subdirectories.  Every colon in the function name works
-like a path separator.  Thus when calling a function: >
+It is possible to use subdirectories.  Every # in the function name works like
+a path separator.  Thus when calling a function: >
 
-       :call foo:bar:func()
+       :call foo#bar#func()
 
 Vim will look for the file "autoload/foo/bar.vim" in 'runtimepath'.
 
@@ -4623,13 +4627,13 @@ otherwise it looks like a scope, such as "s:".
 
 This also works when reading a variable that has not been set yet: >
 
-       :let l = foo:bar:lvar
+       :let l = foo#bar#lvar
 
 When assigning a value to such a variable nothing special happens.  This can
 be used to pass settings to the autoload script before it's loaded: >
 
-       :let foo:bar:toggle = 1
-       :call foo:bar:func()
+       :let foo#bar#toggle = 1
+       :call foo#bar#func()
 
 Note that when you make a mistake and call a function that is supposed to be
 defined in an autoload script, but the script doesn't actually define the
index c923b6ccadc662a0b8964fa63e6c0b4a0fe921a4..3593dccc5ffb100b08626738b1e0615098302c39 100644 (file)
@@ -6292,6 +6292,7 @@ style-names       develop.txt     /*style-names*
 style-spaces   develop.txt     /*style-spaces*
 style-various  develop.txt     /*style-various*
 sub-menu-priority      gui.txt /*sub-menu-priority*
+sub-replace-\= change.txt      /*sub-replace-\\=*
 sub-replace-expression change.txt      /*sub-replace-expression*
 sub-replace-special    change.txt      /*sub-replace-special*
 submatch()     eval.txt        /*submatch()*
index e765b336cce72759c0e87ee7f7d608360eb94542..ebf44faaf1f2548d02a0d3d79e31d54d7d50364d 100644 (file)
@@ -1,4 +1,4 @@
-*usr_41.txt*   For Vim version 7.0aa.  Last change: 2005 Mar 25
+*usr_41.txt*   For Vim version 7.0aa.  Last change: 2005 May 18
 
                     VIM USER MANUAL - by Bram Moolenaar
 
@@ -2229,11 +2229,11 @@ Here you need to know that MyLibFunction() is defined in a script
 To make this a bit simpler Vim offers the autoload mechanism.  Then the
 example looks like this: >
 
-       call mylib:myfunction(arg)
+       call mylib#myfunction(arg)
 
 That's a lot simpler, isn't it?  Vim will recognize the function name and when
 it's not defined search for the script "autoload/mylib.vim" in 'runtimepath'.
-That script must define the "mylib:myfunction()" function.
+That script must define the "mylib#myfunction()" function.
 
 You can put many other functions in the mylib.vim script, you are free to
 organize your functions in library scripts.  But you must use function names
@@ -2243,7 +2243,7 @@ would not know what script to load.
 If you get really enthousiastic and write lots of library scripts, you may
 want to use subdirectories.  Example: >
 
-       call netlib:ftp:read('somefile')
+       call netlib#ftp#read('somefile')
 
 For Unix the library script used for this could be:
 
@@ -2251,7 +2251,7 @@ For Unix the library script used for this could be:
 
 Where the function is defined like this: >
 
-       function netlib:ftp:read(fname)
+       function netlib#ftp#read(fname)
                "  Read the file fname through ftp
        endfunction
 
@@ -2261,12 +2261,12 @@ exactly matches the subdirectory and script name.
 
 You can use the same mechanism for variables: >
 
-       let weekdays = dutch:weekdays
+       let weekdays = dutch#weekdays
 
 This will load the script "autoload/dutch.vim", which should contain something
 like: >
 
-       let dutch:weekdays = ['zondag', 'maandag', 'dinsdag', 'woensdag',
+       let dutch#weekdays = ['zondag', 'maandag', 'dinsdag', 'woensdag',
                \ 'donderdag', 'vrijdag', 'zaterdag']
 
 Further reading: |autoload|.
index f609466c07286f9c6eba94e92810f7a4ea4357eb..6ca8a6bf3bdbbff142b6ac3ded175c461d863aab 100644 (file)
@@ -1259,7 +1259,7 @@ POST_DEFS = $(X_CFLAGS) $(MZSCHEME_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) $(TCL
 
 ALL_CFLAGS = $(PRE_DEFS) $(CFLAGS) $(PROFILE_CFLAGS) $(POST_DEFS)
 
-LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) -Dinline= -D__extension__= -Dalloca=alloca
+LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) -Dinline= -D__extension__= -Dalloca=alloca -D"__attribute__(x)="
 
 DEPEND_CFLAGS = -DPROTO -DDEPEND -DFEAT_GUI $(LINT_CFLAGS)
 
index af18d880de876d7f698ef65288b986ed9f8f2cdc..27828850a775789deb2b0a62e9cbe4f5caae49f0 100644 (file)
@@ -1075,11 +1075,11 @@ else
   fi
 fi
 
-test "x$with_x" = xno -a "x$BEOS" != "xyes" -a "x$MACOSX" != "xyes" -a "x$QNX" != "xyes" && enable_gui=no
+test "x$with_x" = xno -a "x$MACOSX" != "xyes" -a "x$QNX" != "xyes" && enable_gui=no
 
 AC_MSG_CHECKING(--enable-gui argument)
 AC_ARG_ENABLE(gui,
- [  --enable-gui[=OPTS]     X11 GUI [default=auto] [OPTS=auto/no/gtk/gtk2/gnome/gnome2/kde/motif/athena/neXtaw/beos/photon/carbon]], , enable_gui="auto")
+ [  --enable-gui[=OPTS]     X11 GUI [default=auto] [OPTS=auto/no/gtk/gtk2/gnome/gnome2/kde/motif/athena/neXtaw/photon/carbon]], , enable_gui="auto")
 
 dnl Canonicalize the --enable-gui= argument so that it can be easily compared.
 dnl Do not use character classes for portability with old tools.
index 45271de07f2807a647dc419aa5803927942cbb9a..b237925556586e360ffa91935d11c8c079093fb2 100644 (file)
@@ -1209,7 +1209,11 @@ gui_mch_destroy_scrollbar(scrollbar_T *sb)
 /*
  * Implementation of the file selector related stuff
  */
+#if defined(HAVE_GTK2) && GTK_CHECK_VERSION(2,4,0)
+# define USE_FILE_CHOOSER
+#endif
 
+#ifndef USE_FILE_CHOOSER
 /*ARGSUSED*/
     static void
 browse_ok_cb(GtkWidget *widget, gpointer cbdata)
@@ -1258,6 +1262,7 @@ browse_destroy_cb(GtkWidget * widget)
 
     return FALSE;
 }
+#endif
 
 /*
  * Put up a file requester.
@@ -1278,7 +1283,9 @@ gui_mch_browse(int saving,
               char_u *initdir,
               char_u *filter)
 {
-    GtkFileSelection   *fs;    /* shortcut */
+#ifdef USE_FILE_CHOOSER
+    GtkWidget          *fc;
+#endif
     char_u             dirbuf[MAXPATHL];
     char_u             *p;
 
@@ -1286,12 +1293,56 @@ gui_mch_browse(int saving,
     title = CONVERT_TO_UTF8(title);
 # endif
 
-    if (!gui.filedlg)
+    /* Concatenate "initdir" and "dflt". */
+    if (initdir == NULL || *initdir == NUL)
+       mch_dirname(dirbuf, MAXPATHL);
+    else if (STRLEN(initdir) + 2 < MAXPATHL)
+       STRCPY(dirbuf, initdir);
+    else
+       dirbuf[0] = NUL;
+    /* Always need a trailing slash for a directory. */
+    add_pathsep(dirbuf);
+    if (dflt != NULL && *dflt != NUL
+                             && STRLEN(dirbuf) + 2 + STRLEN(dflt) < MAXPATHL)
+       STRCAT(dirbuf, dflt);
+
+    /* If our pointer is currently hidden, then we should show it. */
+    gui_mch_mousehide(FALSE);
+
+#ifdef USE_FILE_CHOOSER
+    /* We create the dialog each time, so that the button text can be "Open"
+     * or "Save" according to the action. */
+    fc = gtk_file_chooser_dialog_new((const gchar *)title,
+           GTK_WINDOW(gui.mainwin),
+           saving ? GTK_FILE_CHOOSER_ACTION_SAVE
+                                          : GTK_FILE_CHOOSER_ACTION_OPEN,
+           saving ? GTK_STOCK_SAVE : GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+           GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+           NULL);
+    gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(fc),
+                                                      (const gchar *)dirbuf);
+
+    gui.browse_fname = NULL;
+    if (gtk_dialog_run(GTK_DIALOG(fc)) == GTK_RESPONSE_ACCEPT)
+    {
+        char *filename;
+
+        filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fc));
+        gui.browse_fname = (char_u *)g_strdup(filename);
+        g_free(filename);
+    }
+    gtk_widget_destroy(GTK_WIDGET(fc));
+
+#else
+
+    if (gui.filedlg == NULL)
     {
+       GtkFileSelection        *fs;    /* shortcut */
+
        gui.filedlg = gtk_file_selection_new((const gchar *)title);
        gtk_window_set_modal(GTK_WINDOW(gui.filedlg), TRUE);
        gtk_window_set_transient_for(GTK_WINDOW(gui.filedlg),
-               GTK_WINDOW(gui.mainwin));
+                                                    GTK_WINDOW(gui.mainwin));
        fs = GTK_FILE_SELECTION(gui.filedlg);
 
        gtk_container_border_width(GTK_CONTAINER(fs), 4);
@@ -1308,26 +1359,6 @@ gui_mch_browse(int saving,
     else
        gtk_window_set_title(GTK_WINDOW(gui.filedlg), (const gchar *)title);
 
-# ifdef HAVE_GTK2
-    CONVERT_TO_UTF8_FREE(title);
-# endif
-
-    /* if our pointer is currently hidden, then we should show it. */
-    gui_mch_mousehide(FALSE);
-
-    /* Concatenate "initdir" and "dflt". */
-    if (initdir == NULL || *initdir == NUL)
-       mch_dirname(dirbuf, MAXPATHL);
-    else if (STRLEN(initdir) + 2 < MAXPATHL)
-       STRCPY(dirbuf, initdir);
-    else
-       dirbuf[0] = NUL;
-    /* Always need a trailing slash for a directory. */
-    add_pathsep(dirbuf);
-    if (dflt != NULL && *dflt != NUL
-                             && STRLEN(dirbuf) + 2 + STRLEN(dflt) < MAXPATHL)
-       STRCAT(dirbuf, dflt);
-
     gtk_file_selection_set_filename(GTK_FILE_SELECTION(gui.filedlg),
                                                      (const gchar *)dirbuf);
 # ifndef HAVE_GTK2
@@ -1338,7 +1369,11 @@ gui_mch_browse(int saving,
     gtk_widget_show(gui.filedlg);
     while (gui.filedlg && GTK_WIDGET_DRAWABLE(gui.filedlg))
        gtk_main_iteration_do(TRUE);
+#endif
 
+# ifdef HAVE_GTK2
+    CONVERT_TO_UTF8_FREE(title);
+# endif
     if (gui.browse_fname == NULL)
        return NULL;
 
@@ -1422,6 +1457,7 @@ gui_mch_browsedir(
 }
 #endif
 
+
 #endif /* FEAT_BROWSE */
 
 #if defined(FEAT_GUI_DIALOG) && !defined(HAVE_GTK2)
@@ -3104,7 +3140,6 @@ gui_gtk_position_in_parent(
        pos_x = xP + wP - c_size.width - 2;
     /* Assume 'guiheadroom' indicates the title bar height... */
     if ((pos_y + c_size.height + p_ghr / 2) > (hP + yP))
-       pos_y = yP + hP - c_size.height - 2 - p_ghr / 2;
 
     gtk_widget_set_uposition(child, pos_x, pos_y);
 }
index 8a2643dcce903dbe045a734d5951000ad07cd117..d18198c243be68630a508480467bbf9f9eaa1744 100644 (file)
@@ -3073,6 +3073,81 @@ static linenr_T          reg_firstlnum;
 static linenr_T                reg_maxline;
 static int             reg_line_lbr;       /* "\n" in string is line break */
 
+/* Values for rs_state in regitem_T. */
+typedef enum regstate_E
+{
+    RS_NOPEN = 0       /* NOPEN and NCLOSE */
+    , RS_MOPEN         /* MOPEN + [0-9] */
+    , RS_MCLOSE                /* MCLOSE + [0-9] */
+#ifdef FEAT_SYN_HL
+    , RS_ZOPEN         /* ZOPEN + [0-9] */
+    , RS_ZCLOSE                /* ZCLOSE + [0-9] */
+#endif
+    , RS_BRANCH                /* BRANCH */
+    , RS_BRCPLX_MORE   /* BRACE_COMPLEX and trying one more match */
+    , RS_BRCPLX_LONG   /* BRACE_COMPLEX and trying longest match */
+    , RS_BRCPLX_SHORT  /* BRACE_COMPLEX and trying shortest match */
+    , RS_NOMATCH       /* NOMATCH */
+    , RS_BEHIND1       /* BEHIND / NOBEHIND matching rest */
+    , RS_BEHIND2       /* BEHIND / NOBEHIND matching behind part */
+    , RS_STAR_LONG     /* STAR/PLUS/BRACE_SIMPLE longest match */
+    , RS_STAR_SHORT    /* STAR/PLUS/BRACE_SIMPLE shortest match */
+} regstate_T;
+
+/*
+ * When there are alternatives a regstate_T is put on the regstack to remember
+ * what we are doing.
+ * Before it may be another type of item, depending on rs_state, to remember
+ * more things.
+ */
+typedef struct regitem_S
+{
+    regstate_T rs_state;       /* what we are doing, one of RS_ above */
+    char_u     *rs_scan;       /* current node in program */
+    union
+    {
+       save_se_T  sesave;
+       regsave_T  regsave;
+    } rs_un;                   /* room for saving reginput */
+    short      rs_no;          /* submatch nr */
+} regitem_T;
+
+static regitem_T *regstack_push __ARGS((regstate_T state, char_u *scan));
+static void regstack_pop __ARGS((char_u **scan));
+
+/* used for BEHIND and NOBEHIND matching */
+typedef struct regbehind_S
+{
+    regsave_T  save_after;
+    regsave_T  save_behind;
+} regbehind_T;
+
+/* used for STAR, PLUS and BRACE_SIMPLE matching */
+typedef struct regstar_S
+{
+    int                nextb;          /* next byte */
+    int                nextb_ic;       /* next byte reverse case */
+    long       count;
+    long       minval;
+    long       maxval;
+} regstar_T;
+
+/* used to store input position when a BACK was encountered, so that we now if
+ * we made any progress since the last time. */
+typedef struct backpos_S
+{
+    char_u     *bp_scan;       /* "scan" where BACK was encountered */
+    regsave_T  bp_pos;         /* last input position */
+} backpos_T;
+
+/*
+ * regstack and backpos are used by regmatch().  They are kept over calls to
+ * avoid invoking malloc() and free() often.
+ */
+static garray_T        regstack;       /* stack with regitem_T items, sometimes
+                                  preceded by regstar_T or regbehind_T. */
+static garray_T        backpos;        /* table with backpos_T for BACK */
+
 /*
  * Get pointer to the line "lnum", which is relative to "reg_firstlnum".
  */
@@ -3202,6 +3277,14 @@ vim_regexec_both(line, col)
 
     reg_tofree = NULL;
 
+    /* Init the regstack empty.  Use an item size of 1 byte, since we push
+     * different things onto it.  Use a large grow size to avoid reallocating
+     * it too often. */
+    ga_init2(&regstack, 1, 10000);
+
+    /* Init the backpos table empty. */
+    ga_init2(&backpos, sizeof(backpos_T), 10);
+
     if (REG_MULTI)
     {
        prog = reg_mmatch->regprog;
@@ -3360,8 +3443,10 @@ vim_regexec_both(line, col)
     }
 
 theend:
-    /* Didn't find a match. */
     vim_free(reg_tofree);
+    ga_clear(&regstack);
+    ga_clear(&backpos);
+
     return retval;
 }
 
@@ -3519,73 +3604,6 @@ reg_prev_class()
 static long    bl_minval;
 static long    bl_maxval;
 
-/* Values for rs_state in regitem_T. */
-typedef enum regstate_E
-{
-    RS_NOPEN = 0       /* NOPEN and NCLOSE */
-    , RS_MOPEN         /* MOPEN + [0-9] */
-    , RS_MCLOSE                /* MCLOSE + [0-9] */
-#ifdef FEAT_SYN_HL
-    , RS_ZOPEN         /* ZOPEN + [0-9] */
-    , RS_ZCLOSE                /* ZCLOSE + [0-9] */
-#endif
-    , RS_BRANCH                /* BRANCH */
-    , RS_BRCPLX_MORE   /* BRACE_COMPLEX and trying one more match */
-    , RS_BRCPLX_LONG   /* BRACE_COMPLEX and trying longest match */
-    , RS_BRCPLX_SHORT  /* BRACE_COMPLEX and trying shortest match */
-    , RS_NOMATCH       /* NOMATCH */
-    , RS_BEHIND1       /* BEHIND / NOBEHIND matching rest */
-    , RS_BEHIND2       /* BEHIND / NOBEHIND matching behind part */
-    , RS_STAR_LONG     /* STAR/PLUS/BRACE_SIMPLE longest match */
-    , RS_STAR_SHORT    /* STAR/PLUS/BRACE_SIMPLE shortest match */
-} regstate_T;
-
-/*
- * When there are alternatives a regstate_T is put on the regstack to remember
- * what we are doing.
- * Before it may be another type of item, depending on rs_state, to remember
- * more things.
- */
-typedef struct regitem_S
-{
-    regstate_T rs_state;       /* what we are doing, one of RS_ above */
-    char_u     *rs_scan;       /* current node in program */
-    union
-    {
-       save_se_T  sesave;
-       regsave_T  regsave;
-    } rs_un;                   /* room for saving reginput */
-    short      rs_no;          /* submatch nr */
-} regitem_T;
-
-static regitem_T *regstack_push __ARGS((garray_T *regstack, regstate_T state, char_u *scan));
-static void regstack_pop __ARGS((garray_T *regstack, char_u **scan));
-
-/* used for BEHIND and NOBEHIND matching */
-typedef struct regbehind_S
-{
-    regsave_T  save_after;
-    regsave_T  save_behind;
-} regbehind_T;
-
-/* used for STAR, PLUS and BRACE_SIMPLE matching */
-typedef struct regstar_S
-{
-    int                nextb;          /* next byte */
-    int                nextb_ic;       /* next byte reverse case */
-    long       count;
-    long       minval;
-    long       maxval;
-} regstar_T;
-
-/* used to store input position when a BACK was encountered, so that we now if
- * we made any progress since the last time. */
-typedef struct backpos_S
-{
-    char_u     *bp_scan;       /* "scan" where BACK was encountered */
-    regsave_T  bp_pos;         /* last input position */
-} backpos_T;
-
 /*
  * regmatch - main matching routine
  *
@@ -3608,8 +3626,6 @@ regmatch(scan)
   char_u       *next;          /* Next node. */
   int          op;
   int          c;
-  garray_T     regstack;       /* stack with regitem_T items, sometimes
-                                  preceded by regstar_T or regbehind_T. */
   regitem_T    *rp;
   int          no;
   int          status;         /* one of the RA_ values: */
@@ -3618,14 +3634,11 @@ regmatch(scan)
 #define RA_BREAK       3       /* break inner loop */
 #define RA_MATCH       4       /* successful match */
 #define RA_NOMATCH     5       /* didn't match */
-  garray_T     backpos;        /* table with backpos_T for BACK */
-
-  /* Init the regstack empty.  Use an item size of 1 byte, since we push
-   * different things onto it.  Use a large grow size to avoid reallocating
-   * it too often. */
-  ga_init2(&regstack, 1, 10000);
 
-  ga_init2(&backpos, sizeof(backpos_T), 10);
+  /* Init the regstack and backpos table empty.  They are initialized and
+   * freed in vim_regexec_both() to reduce malloc()/free() calls. */
+  regstack.ga_len = 0;
+  backpos.ga_len = 0;
 
   /*
    * Repeat until "regstack" is empty.
@@ -4133,7 +4146,7 @@ regmatch(scan)
            {
                no = op - MOPEN;
                cleanup_subexpr();
-               rp = regstack_push(&regstack, RS_MOPEN, scan);
+               rp = regstack_push(RS_MOPEN, scan);
                if (rp == NULL)
                    status = RA_FAIL;
                else
@@ -4148,7 +4161,7 @@ regmatch(scan)
 
          case NOPEN:       /* \%( */
          case NCLOSE:      /* \) after \%( */
-               if (regstack_push(&regstack, RS_NOPEN, scan) == NULL)
+               if (regstack_push(RS_NOPEN, scan) == NULL)
                    status = RA_FAIL;
                /* We simply continue and handle the result when done. */
                break;
@@ -4166,7 +4179,7 @@ regmatch(scan)
            {
                no = op - ZOPEN;
                cleanup_zsubexpr();
-               rp = regstack_push(&regstack, RS_ZOPEN, scan);
+               rp = regstack_push(RS_ZOPEN, scan);
                if (rp == NULL)
                    status = RA_FAIL;
                else
@@ -4193,7 +4206,7 @@ regmatch(scan)
            {
                no = op - MCLOSE;
                cleanup_subexpr();
-               rp = regstack_push(&regstack, RS_MCLOSE, scan);
+               rp = regstack_push(RS_MCLOSE, scan);
                if (rp == NULL)
                    status = RA_FAIL;
                else
@@ -4218,7 +4231,7 @@ regmatch(scan)
            {
                no = op - ZCLOSE;
                cleanup_zsubexpr();
-               rp = regstack_push(&regstack, RS_ZCLOSE, scan);
+               rp = regstack_push(RS_ZCLOSE, scan);
                if (rp == NULL)
                    status = RA_FAIL;
                else
@@ -4396,7 +4409,7 @@ regmatch(scan)
                    next = OPERAND(scan);       /* Avoid recursion. */
                else
                {
-                   rp = regstack_push(&regstack, RS_BRANCH, scan);
+                   rp = regstack_push(RS_BRANCH, scan);
                    if (rp == NULL)
                        status = RA_FAIL;
                    else
@@ -4446,7 +4459,7 @@ regmatch(scan)
                if (brace_count[no] <= (brace_min[no] <= brace_max[no]
                                             ? brace_min[no] : brace_max[no]))
                {
-                   rp = regstack_push(&regstack, RS_BRCPLX_MORE, scan);
+                   rp = regstack_push(RS_BRCPLX_MORE, scan);
                    if (rp == NULL)
                        status = RA_FAIL;
                    else
@@ -4465,7 +4478,7 @@ regmatch(scan)
                    /* Range is the normal way around, use longest match */
                    if (brace_count[no] <= brace_max[no])
                    {
-                       rp = regstack_push(&regstack, RS_BRCPLX_LONG, scan);
+                       rp = regstack_push(RS_BRCPLX_LONG, scan);
                        if (rp == NULL)
                            status = RA_FAIL;
                        else
@@ -4482,7 +4495,7 @@ regmatch(scan)
                    /* Range is backwards, use shortest match first */
                    if (brace_count[no] <= brace_min[no])
                    {
-                       rp = regstack_push(&regstack, RS_BRCPLX_SHORT, scan);
+                       rp = regstack_push(RS_BRCPLX_SHORT, scan);
                        if (rp == NULL)
                            status = RA_FAIL;
                        else
@@ -4562,7 +4575,7 @@ regmatch(scan)
                    else
                    {
                        regstack.ga_len += sizeof(regstar_T);
-                       rp = regstack_push(&regstack, rst.minval <= rst.maxval
+                       rp = regstack_push(rst.minval <= rst.maxval
                                        ? RS_STAR_LONG : RS_STAR_SHORT, scan);
                        if (rp == NULL)
                            status = RA_FAIL;
@@ -4582,7 +4595,7 @@ regmatch(scan)
          case NOMATCH:
          case MATCH:
          case SUBPAT:
-           rp = regstack_push(&regstack, RS_NOMATCH, scan);
+           rp = regstack_push(RS_NOMATCH, scan);
            if (rp == NULL)
                status = RA_FAIL;
            else
@@ -4607,7 +4620,7 @@ regmatch(scan)
            else
            {
                regstack.ga_len += sizeof(regbehind_T);
-               rp = regstack_push(&regstack, RS_BEHIND1, scan);
+               rp = regstack_push(RS_BEHIND1, scan);
                if (rp == NULL)
                    status = RA_FAIL;
                else
@@ -4675,7 +4688,7 @@ regmatch(scan)
        {
          case RS_NOPEN:
            /* Result is passed on as-is, simply pop the state. */
-           regstack_pop(&regstack, &scan);
+           regstack_pop(&scan);
            break;
 
          case RS_MOPEN:
@@ -4683,7 +4696,7 @@ regmatch(scan)
            if (status == RA_NOMATCH)
                restore_se(&rp->rs_un.sesave, &reg_startpos[rp->rs_no],
                                                  &reg_startp[rp->rs_no]);
-           regstack_pop(&regstack, &scan);
+           regstack_pop(&scan);
            break;
 
 #ifdef FEAT_SYN_HL
@@ -4692,7 +4705,7 @@ regmatch(scan)
            if (status == RA_NOMATCH)
                restore_se(&rp->rs_un.sesave, &reg_startzpos[rp->rs_no],
                                                 &reg_startzp[rp->rs_no]);
-           regstack_pop(&regstack, &scan);
+           regstack_pop(&scan);
            break;
 #endif
 
@@ -4701,7 +4714,7 @@ regmatch(scan)
            if (status == RA_NOMATCH)
                restore_se(&rp->rs_un.sesave, &reg_endpos[rp->rs_no],
                                                    &reg_endp[rp->rs_no]);
-           regstack_pop(&regstack, &scan);
+           regstack_pop(&scan);
            break;
 
 #ifdef FEAT_SYN_HL
@@ -4710,14 +4723,14 @@ regmatch(scan)
            if (status == RA_NOMATCH)
                restore_se(&rp->rs_un.sesave, &reg_endzpos[rp->rs_no],
                                                   &reg_endzp[rp->rs_no]);
-           regstack_pop(&regstack, &scan);
+           regstack_pop(&scan);
            break;
 #endif
 
          case RS_BRANCH:
            if (status == RA_MATCH)
                /* this branch matched, use it */
-               regstack_pop(&regstack, &scan);
+               regstack_pop(&scan);
            else
            {
                if (status != RA_BREAK)
@@ -4730,7 +4743,7 @@ regmatch(scan)
                {
                    /* no more branches, didn't find a match */
                    status = RA_NOMATCH;
-                   regstack_pop(&regstack, &scan);
+                   regstack_pop(&scan);
                }
                else
                {
@@ -4749,7 +4762,7 @@ regmatch(scan)
                reg_restore(&rp->rs_un.regsave, &backpos);
                --brace_count[rp->rs_no];       /* decrement match count */
            }
-           regstack_pop(&regstack, &scan);
+           regstack_pop(&scan);
            break;
 
          case RS_BRCPLX_LONG:
@@ -4762,7 +4775,7 @@ regmatch(scan)
                /* continue with the items after "\{}" */
                status = RA_CONT;
            }
-           regstack_pop(&regstack, &scan);
+           regstack_pop(&scan);
            if (status == RA_CONT)
                scan = regnext(scan);
            break;
@@ -4772,7 +4785,7 @@ regmatch(scan)
            if (status == RA_NOMATCH)
                /* There was no match, try to match one more item. */
                reg_restore(&rp->rs_un.regsave, &backpos);
-           regstack_pop(&regstack, &scan);
+           regstack_pop(&scan);
            if (status == RA_NOMATCH)
            {
                scan = OPERAND(scan);
@@ -4792,7 +4805,7 @@ regmatch(scan)
                if (rp->rs_no != SUBPAT)        /* zero-width */
                    reg_restore(&rp->rs_un.regsave, &backpos);
            }
-           regstack_pop(&regstack, &scan);
+           regstack_pop(&scan);
            if (status == RA_CONT)
                scan = regnext(scan);
            break;
@@ -4800,7 +4813,7 @@ regmatch(scan)
          case RS_BEHIND1:
            if (status == RA_NOMATCH)
            {
-               regstack_pop(&regstack, &scan);
+               regstack_pop(&scan);
                regstack.ga_len -= sizeof(regbehind_T);
            }
            else
@@ -4844,7 +4857,7 @@ regmatch(scan)
                else
                    /* But we didn't want a match. */
                    status = RA_NOMATCH;
-               regstack_pop(&regstack, &scan);
+               regstack_pop(&scan);
                regstack.ga_len -= sizeof(regbehind_T);
            }
            else
@@ -4897,7 +4910,7 @@ regmatch(scan)
                    }
                    else
                        status = RA_NOMATCH;
-                   regstack_pop(&regstack, &scan);
+                   regstack_pop(&scan);
                    regstack.ga_len -= sizeof(regbehind_T);
                }
            }
@@ -4910,7 +4923,7 @@ regmatch(scan)
 
                if (status == RA_MATCH)
                {
-                   regstack_pop(&regstack, &scan);
+                   regstack_pop(&scan);
                    regstack.ga_len -= sizeof(regstar_T);
                    break;
                }
@@ -4976,7 +4989,7 @@ regmatch(scan)
                if (status != RA_CONT)
                {
                    /* Failed. */
-                   regstack_pop(&regstack, &scan);
+                   regstack_pop(&scan);
                    regstack.ga_len -= sizeof(regstar_T);
                    status = RA_NOMATCH;
                }
@@ -5000,7 +5013,6 @@ regmatch(scan)
      */
     if (regstack.ga_len == 0 || status == RA_FAIL)
     {
-       ga_clear(&regstack);
        if (scan == NULL)
        {
            /*
@@ -5027,26 +5039,25 @@ regmatch(scan)
  * Returns pointer to new item.  Returns NULL when out of memory.
  */
     static regitem_T *
-regstack_push(regstack, state, scan)
-    garray_T   *regstack;
+regstack_push(state, scan)
     regstate_T state;
     char_u     *scan;
 {
     regitem_T  *rp;
 
-    if ((long)((unsigned)regstack->ga_len >> 10) >= p_mmp)
+    if ((long)((unsigned)regstack.ga_len >> 10) >= p_mmp)
     {
        EMSG(_(e_maxmempat));
        return NULL;
     }
-    if (ga_grow(regstack, sizeof(regitem_T)) == FAIL)
+    if (ga_grow(&regstack, sizeof(regitem_T)) == FAIL)
        return NULL;
 
-    rp = (regitem_T *)((char *)regstack->ga_data + regstack->ga_len);
+    rp = (regitem_T *)((char *)regstack.ga_data + regstack.ga_len);
     rp->rs_state = state;
     rp->rs_scan = scan;
 
-    regstack->ga_len += sizeof(regitem_T);
+    regstack.ga_len += sizeof(regitem_T);
     return rp;
 }
 
@@ -5054,16 +5065,15 @@ regstack_push(regstack, state, scan)
  * Pop an item from the regstack.
  */
     static void
-regstack_pop(regstack, scan)
-    garray_T   *regstack;
+regstack_pop(scan)
     char_u     **scan;
 {
     regitem_T  *rp;
 
-    rp = (regitem_T *)((char *)regstack->ga_data + regstack->ga_len) - 1;
+    rp = (regitem_T *)((char *)regstack.ga_data + regstack.ga_len) - 1;
     *scan = rp->rs_scan;
 
-    regstack->ga_len -= sizeof(regitem_T);
+    regstack.ga_len -= sizeof(regitem_T);
 }
 
 /*
index 5b147399378af795971909fa6e7d938844c87535..b6d9350422569052228af8ef5ea74b48aff2fb2c 100644 (file)
@@ -23,7 +23,8 @@ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
                test33.out test34.out test35.out test36.out test37.out \
                test38.out test39.out test40.out test41.out test42.out \
                test43.out test44.out test45.out test46.out test47.out \
-               test48.out test51.out test53.out test54.out test55.out
+               test48.out test51.out test53.out test54.out test55.out \
+               test56.out
 
 .SUFFIXES: .in .out
 
@@ -98,3 +99,4 @@ test51.out: test51.in
 test53.out: test53.in
 test54.out: test54.in
 test55.out: test55.in
+test56.out: test56.in
index d961e0a4526660d68d8bb7890d603ca75277aceb..f8816ec704dc0e7de5305b85846a20f581062f41 100644 (file)
@@ -17,7 +17,8 @@ SCRIPTS16 =   test1.out test19.out test20.out test22.out \
                test23.out test24.out test28.out test29.out \
                test35.out test36.out test43.out \
                test44.out test45.out test46.out test47.out \
-               test48.out test51.out test53.out test54.out test55.out
+               test48.out test51.out test53.out test54.out \
+               test55.out test56.out
 
 SCRIPTS =      test3.out test4.out test5.out test6.out test7.out \
                test8.out test9.out test11.out test13.out test14.out \
index 46a29ff5132fa273d4612e94dc9ea37972b39937..1b336de354d7bc7d7c083131a2b197ffaf020e26 100644 (file)
@@ -1,6 +1,6 @@
 " Vim script language tests
 " Author:      Servatius Brandt <Servatius.Brandt@fujitsu-siemens.com>
-" Last Change: 2005 Feb 03
+" Last Change: 2005 May 18
 
 "-------------------------------------------------------------------------------
 " Test environment                                                         {{{1
index 29155463d16ad53781a226b55b97b50865e70d02..487e09f5e412d8049e0335fd9ce7b5cc6dfeb50e 100644 (file)
@@ -36,5 +36,5 @@
 #define VIM_VERSION_NODOT      "vim70aa"
 #define VIM_VERSION_SHORT      "7.0aa"
 #define VIM_VERSION_MEDIUM     "7.0aa ALPHA"
-#define VIM_VERSION_LONG       "VIM - Vi IMproved 7.0aa ALPHA (2005 Apr 24)"
-#define VIM_VERSION_LONG_DATE  "VIM - Vi IMproved 7.0aa ALPHA (2005 Apr 24, compiled "
+#define VIM_VERSION_LONG       "VIM - Vi IMproved 7.0aa ALPHA (2005 May 18)"
+#define VIM_VERSION_LONG_DATE  "VIM - Vi IMproved 7.0aa ALPHA (2005 May 18, compiled "