changeset 7545:4c922651fd78 v7.4.1073

commit https://github.com/vim/vim/commit/28fb79db6b52d1154e8dc63d227673648c2fce15 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Jan 9 22:28:33 2016 +0100 patch 7.4.1073 Problem: Alloc_id depends on numbers, may use the same one twice. It's not clear from the number what it's for. Solution: Use an enum. Add a function to lookup the enum value from the name.
author Christian Brabandt <cb@256bit.org>
date Sat, 09 Jan 2016 22:30:04 +0100
parents 25e3b1a99768
children deff32fcc77a
files src/alloc.h src/globals.h src/misc2.c src/proto/misc2.pro src/testdir/runtest.vim src/testdir/test_quickfix.vim src/version.c src/vim.h
diffstat 8 files changed, 50 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/src/alloc.h
@@ -0,0 +1,20 @@
+/* vi:set ts=8 sts=4 sw=4:
+ *
+ * VIM - Vi IMproved	by Bram Moolenaar
+ *
+ * Do ":help uganda"  in Vim to read copying and usage conditions.
+ * Do ":help credits" in Vim to see a list of people who contributed.
+ */
+
+/*
+ * alloc.h: enumeration of alloc IDs.
+ * Each entry must be on exactly one line, GetAllocId() depends on that.
+ */
+typedef enum {
+	aid_none = 0,
+	aid_qf_dirname_start,
+	aid_qf_dirname_now,
+	aid_qf_namebuf,
+	aid_qf_errmsg,
+	aid_qf_pattern,
+} alloc_id_T;
--- a/src/globals.h
+++ b/src/globals.h
@@ -1621,7 +1621,7 @@ EXTERN char *ignoredp;
 
 #ifdef FEAT_EVAL
 /* set by alloc_fail(): ID */
-EXTERN int  alloc_fail_id INIT(= 0);
+EXTERN alloc_id_T  alloc_fail_id INIT(= aid_none);
 /* set by alloc_fail(), when zero alloc() returns NULL */
 EXTERN int  alloc_fail_countdown INIT(= -1);
 /* set by alloc_fail(), number of times alloc() returns NULL */
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -837,12 +837,11 @@ alloc(size)
 
 /*
  * alloc() with an ID for alloc_fail().
- * LAST_ID_USED: 5
  */
     char_u *
 alloc_id(size, id)
     unsigned	size;
-    int		id UNUSED;
+    alloc_id_T	id UNUSED;
 {
 #ifdef FEAT_EVAL
     if (alloc_fail_id == id && alloc_does_fail())
@@ -1001,13 +1000,12 @@ theend:
 
 /*
  * lalloc() with an ID for alloc_fail().
- * See LAST_ID_USED above.
  */
     char_u *
 lalloc_id(size, message, id)
     long_u	size;
     int		message;
-    int		id UNUSED;
+    alloc_id_T	id UNUSED;
 {
 #ifdef FEAT_EVAL
     if (alloc_fail_id == id && alloc_does_fail())
--- a/src/proto/misc2.pro
+++ b/src/proto/misc2.pro
@@ -20,12 +20,12 @@ void adjust_cursor_col __ARGS((void));
 int leftcol_changed __ARGS((void));
 void vim_mem_profile_dump __ARGS((void));
 char_u *alloc __ARGS((unsigned size));
-char_u *alloc_id __ARGS((unsigned size, int id));
+char_u *alloc_id __ARGS((unsigned size, alloc_id_T id));
 char_u *alloc_clear __ARGS((unsigned size));
 char_u *alloc_check __ARGS((unsigned size));
 char_u *lalloc_clear __ARGS((long_u size, int message));
 char_u *lalloc __ARGS((long_u size, int message));
-char_u *lalloc_id __ARGS((long_u size, int message, int id));
+char_u *lalloc_id __ARGS((long_u size, int message, alloc_id_T id));
 void *mem_realloc __ARGS((void *ptr, size_t size));
 void do_outofmem_msg __ARGS((long_u size));
 void free_all_mem __ARGS((void));
--- a/src/testdir/runtest.vim
+++ b/src/testdir/runtest.vim
@@ -43,6 +43,22 @@ set nomore
 " Output all messages in English.
 lang mess C
 
+let s:srcdir = expand('%:p:h:h')
+
+" Support function: get the alloc ID by name.
+function GetAllocId(name)
+  exe 'split ' . s:srcdir . '/alloc.h'
+  /typedef enum/
+  let top = getline('.')
+  let lnum = search('aid_' . a:name . ',')
+  if lnum == 0
+    call add(v:errors, 'Alloc ID ' . a:name . ' not defined')
+  endif
+  close
+  return lnum - top
+endfunc
+
+
 " Source the test script.  First grab the file name, in case the script
 " navigates away.
 let testname = expand('%')
--- a/src/testdir/test_quickfix.vim
+++ b/src/testdir/test_quickfix.vim
@@ -278,35 +278,35 @@ function Test_cbuffer()
 endfunction
 
 function Test_nomem()
-  call alloc_fail(1, 0, 0)
+  call alloc_fail(GetAllocId('qf_dirname_start'), 0, 0)
   try
     vimgrep vim runtest.vim
   catch
     call assert_true(v:exception =~ 'E342')
   endtry
 
-  call alloc_fail(2, 0, 0)
+  call alloc_fail(GetAllocId('qf_dirname_now'), 0, 0)
   try
     vimgrep vim runtest.vim
   catch
     call assert_true(v:exception =~ 'E342')
   endtry
 
-  call alloc_fail(3, 0, 0)
+  call alloc_fail(GetAllocId('qf_namebuf'), 0, 0)
   try
     cfile runtest.vim
   catch
     call assert_true(v:exception =~ 'E342')
   endtry
 
-  call alloc_fail(4, 0, 0)
+  call alloc_fail(GetAllocId('qf_errmsg'), 0, 0)
   try
     cfile runtest.vim
   catch
     call assert_true(v:exception =~ 'E342')
   endtry
 
-  call alloc_fail(5, 0, 0)
+  call alloc_fail(GetAllocId('qf_pattern'), 0, 0)
   try
     cfile runtest.vim
   catch
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1073,
+/**/
     1072,
 /**/
     1071,
--- a/src/vim.h
+++ b/src/vim.h
@@ -1765,6 +1765,8 @@ typedef int proftime_T;	    /* dummy for
 
 #include "structs.h"	    /* file that defines many structures */
 
+#include "alloc.h"
+
 /* Values for "do_profiling". */
 #define PROF_NONE	0	/* profiling not started */
 #define PROF_YES	1	/* profiling busy */