mirror of
https://github.com/neovim/neovim.git
synced 2025-09-17 00:38:17 +00:00
Add automatic generation of headers
- The 'stripdecls.py' script replaces declarations in all headers by includes to generated headers. `ag '#\s*if(?!ndef NEOVIM_).*((?!#\s*endif).*\n)*#ifdef INCLUDE_GENERATED'` was used for this. - Add and integrate gendeclarations.lua into the build system to generate the required includes. - Add -Wno-unused-function - Made a bunch of old-style definitions ANSI This adds a requirement: all type and structure definitions must be present before INCLUDE_GENERATED_DECLARATIONS-protected include. Warning: mch_expandpath (path.h.generated.h) was moved manually. So far it is the only exception.
This commit is contained in:
@@ -58,37 +58,89 @@
|
||||
#define BUFSIZE 8192 /* size of normal write buffer */
|
||||
#define SMBUFSIZE 256 /* size of emergency write buffer */
|
||||
|
||||
static char_u *next_fenc(char_u **pp);
|
||||
static char_u *readfile_charconvert(char_u *fname, char_u *fenc,
|
||||
int *fdp);
|
||||
static void check_marks_read(void);
|
||||
#ifdef UNIX
|
||||
static void set_file_time(char_u *fname, time_t atime, time_t mtime);
|
||||
#endif
|
||||
static int set_rw_fname(char_u *fname, char_u *sfname);
|
||||
static int msg_add_fileformat(int eol_type);
|
||||
static void msg_add_eol(void);
|
||||
static int check_mtime(buf_T *buf, FileInfo *file_info);
|
||||
static int time_differs(long t1, long t2);
|
||||
static int apply_autocmds_exarg(event_T event, char_u *fname, char_u *fname_io,
|
||||
int force, buf_T *buf,
|
||||
exarg_T *eap);
|
||||
static int au_find_group(char_u *name);
|
||||
/*
|
||||
* The autocommands are stored in a list for each event.
|
||||
* Autocommands for the same pattern, that are consecutive, are joined
|
||||
* together, to avoid having to match the pattern too often.
|
||||
* The result is an array of Autopat lists, which point to AutoCmd lists:
|
||||
*
|
||||
* first_autopat[0] --> Autopat.next --> Autopat.next --> NULL
|
||||
* Autopat.cmds Autopat.cmds
|
||||
* | |
|
||||
* V V
|
||||
* AutoCmd.next AutoCmd.next
|
||||
* | |
|
||||
* V V
|
||||
* AutoCmd.next NULL
|
||||
* |
|
||||
* V
|
||||
* NULL
|
||||
*
|
||||
* first_autopat[1] --> Autopat.next --> NULL
|
||||
* Autopat.cmds
|
||||
* |
|
||||
* V
|
||||
* AutoCmd.next
|
||||
* |
|
||||
* V
|
||||
* NULL
|
||||
* etc.
|
||||
*
|
||||
* The order of AutoCmds is important, this is the order in which they were
|
||||
* defined and will have to be executed.
|
||||
*/
|
||||
typedef struct AutoCmd {
|
||||
char_u *cmd; /* The command to be executed (NULL
|
||||
when command has been removed) */
|
||||
char nested; /* If autocommands nest here */
|
||||
char last; /* last command in list */
|
||||
scid_T scriptID; /* script ID where defined */
|
||||
struct AutoCmd *next; /* Next AutoCmd in list */
|
||||
} AutoCmd;
|
||||
|
||||
# define AUGROUP_DEFAULT -1 /* default autocmd group */
|
||||
# define AUGROUP_ERROR -2 /* erroneous autocmd group */
|
||||
# define AUGROUP_ALL -3 /* all autocmd groups */
|
||||
typedef struct AutoPat {
|
||||
char_u *pat; /* pattern as typed (NULL when pattern
|
||||
has been removed) */
|
||||
regprog_T *reg_prog; /* compiled regprog for pattern */
|
||||
AutoCmd *cmds; /* list of commands to do */
|
||||
struct AutoPat *next; /* next AutoPat in AutoPat list */
|
||||
int group; /* group ID */
|
||||
int patlen; /* strlen() of pat */
|
||||
int buflocal_nr; /* !=0 for buffer-local AutoPat */
|
||||
char allow_dirs; /* Pattern may match whole path */
|
||||
char last; /* last pattern for apply_autocmds() */
|
||||
} AutoPat;
|
||||
|
||||
# define HAS_BW_FLAGS
|
||||
# define FIO_LATIN1 0x01 /* convert Latin1 */
|
||||
# define FIO_UTF8 0x02 /* convert UTF-8 */
|
||||
# define FIO_UCS2 0x04 /* convert UCS-2 */
|
||||
# define FIO_UCS4 0x08 /* convert UCS-4 */
|
||||
# define FIO_UTF16 0x10 /* convert UTF-16 */
|
||||
# define FIO_ENDIAN_L 0x80 /* little endian */
|
||||
# define FIO_NOCONVERT 0x2000 /* skip encoding conversion */
|
||||
# define FIO_UCSBOM 0x4000 /* check for BOM at start of file */
|
||||
# define FIO_ALL -1 /* allow all formats */
|
||||
/*
|
||||
* struct used to keep status while executing autocommands for an event.
|
||||
*/
|
||||
typedef struct AutoPatCmd {
|
||||
AutoPat *curpat; /* next AutoPat to examine */
|
||||
AutoCmd *nextcmd; /* next AutoCmd to execute */
|
||||
int group; /* group being used */
|
||||
char_u *fname; /* fname to match with */
|
||||
char_u *sfname; /* sfname to match with */
|
||||
char_u *tail; /* tail of fname */
|
||||
event_T event; /* current event */
|
||||
int arg_bufnr; /* initially equal to <abuf>, set to zero when
|
||||
buf is deleted */
|
||||
struct AutoPatCmd *next; /* chain of active apc-s for auto-invalidation*/
|
||||
} AutoPatCmd;
|
||||
|
||||
#define AUGROUP_DEFAULT -1 /* default autocmd group */
|
||||
#define AUGROUP_ERROR -2 /* erroneous autocmd group */
|
||||
#define AUGROUP_ALL -3 /* all autocmd groups */
|
||||
|
||||
#define HAS_BW_FLAGS
|
||||
#define FIO_LATIN1 0x01 /* convert Latin1 */
|
||||
#define FIO_UTF8 0x02 /* convert UTF-8 */
|
||||
#define FIO_UCS2 0x04 /* convert UCS-2 */
|
||||
#define FIO_UCS4 0x08 /* convert UCS-4 */
|
||||
#define FIO_UTF16 0x10 /* convert UTF-16 */
|
||||
#define FIO_ENDIAN_L 0x80 /* little endian */
|
||||
#define FIO_NOCONVERT 0x2000 /* skip encoding conversion */
|
||||
#define FIO_UCSBOM 0x4000 /* check for BOM at start of file */
|
||||
#define FIO_ALL -1 /* allow all formats */
|
||||
|
||||
/* When converting, a read() or write() may leave some bytes to be converted
|
||||
* for the next call. The value is guessed... */
|
||||
@@ -121,19 +173,14 @@ struct bw_info {
|
||||
# endif
|
||||
};
|
||||
|
||||
static int buf_write_bytes(struct bw_info *ip);
|
||||
|
||||
static linenr_T readfile_linenr(linenr_T linecnt, char_u *p,
|
||||
char_u *endp);
|
||||
static int ucs2bytes(unsigned c, char_u **pp, int flags);
|
||||
static int need_conversion(char_u *fenc);
|
||||
static int get_fio_flags(char_u *ptr);
|
||||
static char_u *check_for_bom(char_u *p, long size, int *lenp, int flags);
|
||||
static int make_bom(char_u *buf, char_u *name);
|
||||
static int move_lines(buf_T *frombuf, buf_T *tobuf);
|
||||
#ifdef TEMPDIRNAMES
|
||||
static void vim_settempdir(char_u *tempdir);
|
||||
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
||||
# include "fileio.c.generated.h"
|
||||
#endif
|
||||
|
||||
#ifdef UNIX
|
||||
#endif
|
||||
|
||||
|
||||
static char *e_auchangedbuf = N_(
|
||||
"E812: Autocommands changed buffer or buffer name");
|
||||
|
||||
@@ -5364,59 +5411,6 @@ void forward_slash(char_u *fname)
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* The autocommands are stored in a list for each event.
|
||||
* Autocommands for the same pattern, that are consecutive, are joined
|
||||
* together, to avoid having to match the pattern too often.
|
||||
* The result is an array of Autopat lists, which point to AutoCmd lists:
|
||||
*
|
||||
* first_autopat[0] --> Autopat.next --> Autopat.next --> NULL
|
||||
* Autopat.cmds Autopat.cmds
|
||||
* | |
|
||||
* V V
|
||||
* AutoCmd.next AutoCmd.next
|
||||
* | |
|
||||
* V V
|
||||
* AutoCmd.next NULL
|
||||
* |
|
||||
* V
|
||||
* NULL
|
||||
*
|
||||
* first_autopat[1] --> Autopat.next --> NULL
|
||||
* Autopat.cmds
|
||||
* |
|
||||
* V
|
||||
* AutoCmd.next
|
||||
* |
|
||||
* V
|
||||
* NULL
|
||||
* etc.
|
||||
*
|
||||
* The order of AutoCmds is important, this is the order in which they were
|
||||
* defined and will have to be executed.
|
||||
*/
|
||||
typedef struct AutoCmd {
|
||||
char_u *cmd; /* The command to be executed (NULL
|
||||
when command has been removed) */
|
||||
char nested; /* If autocommands nest here */
|
||||
char last; /* last command in list */
|
||||
scid_T scriptID; /* script ID where defined */
|
||||
struct AutoCmd *next; /* Next AutoCmd in list */
|
||||
} AutoCmd;
|
||||
|
||||
typedef struct AutoPat {
|
||||
char_u *pat; /* pattern as typed (NULL when pattern
|
||||
has been removed) */
|
||||
regprog_T *reg_prog; /* compiled regprog for pattern */
|
||||
AutoCmd *cmds; /* list of commands to do */
|
||||
struct AutoPat *next; /* next AutoPat in AutoPat list */
|
||||
int group; /* group ID */
|
||||
int patlen; /* strlen() of pat */
|
||||
int buflocal_nr; /* !=0 for buffer-local AutoPat */
|
||||
char allow_dirs; /* Pattern may match whole path */
|
||||
char last; /* last pattern for apply_autocmds() */
|
||||
} AutoPat;
|
||||
|
||||
static struct event_name {
|
||||
char *name; /* event name */
|
||||
event_T event; /* event number */
|
||||
@@ -5522,22 +5516,6 @@ static AutoPat *first_autopat[NUM_EVENTS] =
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
||||
};
|
||||
|
||||
/*
|
||||
* struct used to keep status while executing autocommands for an event.
|
||||
*/
|
||||
typedef struct AutoPatCmd {
|
||||
AutoPat *curpat; /* next AutoPat to examine */
|
||||
AutoCmd *nextcmd; /* next AutoCmd to execute */
|
||||
int group; /* group being used */
|
||||
char_u *fname; /* fname to match with */
|
||||
char_u *sfname; /* sfname to match with */
|
||||
char_u *tail; /* tail of fname */
|
||||
event_T event; /* current event */
|
||||
int arg_bufnr; /* initially equal to <abuf>, set to zero when
|
||||
buf is deleted */
|
||||
struct AutoPatCmd *next; /* chain of active apc-s for auto-invalidation*/
|
||||
} AutoPatCmd;
|
||||
|
||||
static AutoPatCmd *active_apc_list = NULL; /* stack of active autocommands */
|
||||
|
||||
/*
|
||||
@@ -5553,24 +5531,6 @@ static int current_augroup = AUGROUP_DEFAULT;
|
||||
|
||||
static int au_need_clean = FALSE; /* need to delete marked patterns */
|
||||
|
||||
static void show_autocmd(AutoPat *ap, event_T event);
|
||||
static void au_remove_pat(AutoPat *ap);
|
||||
static void au_remove_cmds(AutoPat *ap);
|
||||
static void au_cleanup(void);
|
||||
static int au_new_group(char_u *name);
|
||||
static void au_del_group(char_u *name);
|
||||
static event_T event_name2nr(char_u *start, char_u **end);
|
||||
static char_u *event_nr2name(event_T event);
|
||||
static char_u *find_end_event(char_u *arg, int have_group);
|
||||
static int event_ignored(event_T event);
|
||||
static int au_get_grouparg(char_u **argp);
|
||||
static int do_autocmd_event(event_T event, char_u *pat, int nested,
|
||||
char_u *cmd, int forceit,
|
||||
int group);
|
||||
static int apply_autocmds_group(event_T event, char_u *fname, char_u *fname_io,
|
||||
int force, int group, buf_T *buf,
|
||||
exarg_T *eap);
|
||||
static void auto_next_pat(AutoPatCmd *apc, int stop_at_last);
|
||||
|
||||
|
||||
static event_T last_event;
|
||||
@@ -7803,10 +7763,7 @@ file_pat_to_reg_pat (
|
||||
* Version of read() that retries when interrupted by EINTR (possibly
|
||||
* by a SIGWINCH).
|
||||
*/
|
||||
long read_eintr(fd, buf, bufsize)
|
||||
int fd;
|
||||
void *buf;
|
||||
size_t bufsize;
|
||||
long read_eintr(int fd, void *buf, size_t bufsize)
|
||||
{
|
||||
long ret;
|
||||
|
||||
@@ -7822,10 +7779,7 @@ size_t bufsize;
|
||||
* Version of write() that retries when interrupted by EINTR (possibly
|
||||
* by a SIGWINCH).
|
||||
*/
|
||||
long write_eintr(fd, buf, bufsize)
|
||||
int fd;
|
||||
void *buf;
|
||||
size_t bufsize;
|
||||
long write_eintr(int fd, void *buf, size_t bufsize)
|
||||
{
|
||||
long ret = 0;
|
||||
long wlen;
|
||||
|
Reference in New Issue
Block a user