forked from aniani/vim
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.
This commit is contained in:
20
src/alloc.h
Normal file
20
src/alloc.h
Normal file
@@ -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;
|
@@ -1621,7 +1621,7 @@ EXTERN char *ignoredp;
|
|||||||
|
|
||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
/* set by alloc_fail(): ID */
|
/* 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 */
|
/* set by alloc_fail(), when zero alloc() returns NULL */
|
||||||
EXTERN int alloc_fail_countdown INIT(= -1);
|
EXTERN int alloc_fail_countdown INIT(= -1);
|
||||||
/* set by alloc_fail(), number of times alloc() returns NULL */
|
/* set by alloc_fail(), number of times alloc() returns NULL */
|
||||||
|
@@ -837,12 +837,11 @@ alloc(size)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* alloc() with an ID for alloc_fail().
|
* alloc() with an ID for alloc_fail().
|
||||||
* LAST_ID_USED: 5
|
|
||||||
*/
|
*/
|
||||||
char_u *
|
char_u *
|
||||||
alloc_id(size, id)
|
alloc_id(size, id)
|
||||||
unsigned size;
|
unsigned size;
|
||||||
int id UNUSED;
|
alloc_id_T id UNUSED;
|
||||||
{
|
{
|
||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
if (alloc_fail_id == id && alloc_does_fail())
|
if (alloc_fail_id == id && alloc_does_fail())
|
||||||
@@ -1001,13 +1000,12 @@ theend:
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* lalloc() with an ID for alloc_fail().
|
* lalloc() with an ID for alloc_fail().
|
||||||
* See LAST_ID_USED above.
|
|
||||||
*/
|
*/
|
||||||
char_u *
|
char_u *
|
||||||
lalloc_id(size, message, id)
|
lalloc_id(size, message, id)
|
||||||
long_u size;
|
long_u size;
|
||||||
int message;
|
int message;
|
||||||
int id UNUSED;
|
alloc_id_T id UNUSED;
|
||||||
{
|
{
|
||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
if (alloc_fail_id == id && alloc_does_fail())
|
if (alloc_fail_id == id && alloc_does_fail())
|
||||||
|
@@ -20,12 +20,12 @@ void adjust_cursor_col __ARGS((void));
|
|||||||
int leftcol_changed __ARGS((void));
|
int leftcol_changed __ARGS((void));
|
||||||
void vim_mem_profile_dump __ARGS((void));
|
void vim_mem_profile_dump __ARGS((void));
|
||||||
char_u *alloc __ARGS((unsigned size));
|
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_clear __ARGS((unsigned size));
|
||||||
char_u *alloc_check __ARGS((unsigned size));
|
char_u *alloc_check __ARGS((unsigned size));
|
||||||
char_u *lalloc_clear __ARGS((long_u size, int message));
|
char_u *lalloc_clear __ARGS((long_u size, int message));
|
||||||
char_u *lalloc __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 *mem_realloc __ARGS((void *ptr, size_t size));
|
||||||
void do_outofmem_msg __ARGS((long_u size));
|
void do_outofmem_msg __ARGS((long_u size));
|
||||||
void free_all_mem __ARGS((void));
|
void free_all_mem __ARGS((void));
|
||||||
|
@@ -43,6 +43,22 @@ set nomore
|
|||||||
" Output all messages in English.
|
" Output all messages in English.
|
||||||
lang mess C
|
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
|
" Source the test script. First grab the file name, in case the script
|
||||||
" navigates away.
|
" navigates away.
|
||||||
let testname = expand('%')
|
let testname = expand('%')
|
||||||
|
@@ -278,35 +278,35 @@ function Test_cbuffer()
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function Test_nomem()
|
function Test_nomem()
|
||||||
call alloc_fail(1, 0, 0)
|
call alloc_fail(GetAllocId('qf_dirname_start'), 0, 0)
|
||||||
try
|
try
|
||||||
vimgrep vim runtest.vim
|
vimgrep vim runtest.vim
|
||||||
catch
|
catch
|
||||||
call assert_true(v:exception =~ 'E342')
|
call assert_true(v:exception =~ 'E342')
|
||||||
endtry
|
endtry
|
||||||
|
|
||||||
call alloc_fail(2, 0, 0)
|
call alloc_fail(GetAllocId('qf_dirname_now'), 0, 0)
|
||||||
try
|
try
|
||||||
vimgrep vim runtest.vim
|
vimgrep vim runtest.vim
|
||||||
catch
|
catch
|
||||||
call assert_true(v:exception =~ 'E342')
|
call assert_true(v:exception =~ 'E342')
|
||||||
endtry
|
endtry
|
||||||
|
|
||||||
call alloc_fail(3, 0, 0)
|
call alloc_fail(GetAllocId('qf_namebuf'), 0, 0)
|
||||||
try
|
try
|
||||||
cfile runtest.vim
|
cfile runtest.vim
|
||||||
catch
|
catch
|
||||||
call assert_true(v:exception =~ 'E342')
|
call assert_true(v:exception =~ 'E342')
|
||||||
endtry
|
endtry
|
||||||
|
|
||||||
call alloc_fail(4, 0, 0)
|
call alloc_fail(GetAllocId('qf_errmsg'), 0, 0)
|
||||||
try
|
try
|
||||||
cfile runtest.vim
|
cfile runtest.vim
|
||||||
catch
|
catch
|
||||||
call assert_true(v:exception =~ 'E342')
|
call assert_true(v:exception =~ 'E342')
|
||||||
endtry
|
endtry
|
||||||
|
|
||||||
call alloc_fail(5, 0, 0)
|
call alloc_fail(GetAllocId('qf_pattern'), 0, 0)
|
||||||
try
|
try
|
||||||
cfile runtest.vim
|
cfile runtest.vim
|
||||||
catch
|
catch
|
||||||
|
@@ -741,6 +741,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1073,
|
||||||
/**/
|
/**/
|
||||||
1072,
|
1072,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -1765,6 +1765,8 @@ typedef int proftime_T; /* dummy for function prototypes */
|
|||||||
|
|
||||||
#include "structs.h" /* file that defines many structures */
|
#include "structs.h" /* file that defines many structures */
|
||||||
|
|
||||||
|
#include "alloc.h"
|
||||||
|
|
||||||
/* Values for "do_profiling". */
|
/* Values for "do_profiling". */
|
||||||
#define PROF_NONE 0 /* profiling not started */
|
#define PROF_NONE 0 /* profiling not started */
|
||||||
#define PROF_YES 1 /* profiling busy */
|
#define PROF_YES 1 /* profiling busy */
|
||||||
|
Reference in New Issue
Block a user