summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ex_cmds.c11
-rw-r--r--src/ex_docmd.c3
-rw-r--r--src/ex_getln.c15
-rw-r--r--src/gui.c2
-rw-r--r--src/misc1.c3
-rw-r--r--src/normal.c2
-rw-r--r--src/option.c7
-rw-r--r--src/option.h3
-rw-r--r--src/proto/regexp.pro4
-rw-r--r--src/proto/search.pro2
-rw-r--r--src/quickfix.c5
-rw-r--r--src/regexp.c27
-rw-r--r--src/screen.c25
-rw-r--r--src/search.c33
-rw-r--r--src/spell.c2
-rw-r--r--src/structs.h3
-rw-r--r--src/syntax.c2
-rw-r--r--src/tag.c10
-rw-r--r--src/version.c2
-rw-r--r--src/vim.h20
20 files changed, 137 insertions, 44 deletions
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 46fcc9122..f207ee7e0 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -4446,7 +4446,8 @@ do_sub(eap)
#endif
); ++lnum)
{
- nmatch = vim_regexec_multi(&regmatch, curwin, curbuf, lnum, (colnr_T)0);
+ nmatch = vim_regexec_multi(&regmatch, curwin, curbuf, lnum,
+ (colnr_T)0, NULL);
if (nmatch)
{
colnr_T copycol;
@@ -4957,7 +4958,8 @@ skip:
|| (do_ask && !re_lookbehind(regmatch.regprog))
|| nmatch_tl > 0
|| (nmatch = vim_regexec_multi(&regmatch, curwin,
- curbuf, sub_firstlnum, matchcol)) == 0
+ curbuf, sub_firstlnum,
+ matchcol, NULL)) == 0
|| regmatch.startpos[0].lnum > 0)
{
if (new_start != NULL)
@@ -5022,7 +5024,7 @@ skip:
}
if (nmatch == -1 && !lastone)
nmatch = vim_regexec_multi(&regmatch, curwin, curbuf,
- sub_firstlnum, matchcol);
+ sub_firstlnum, matchcol, NULL);
/*
* 5. break if there isn't another match in this line
@@ -5252,7 +5254,8 @@ ex_global(eap)
for (lnum = eap->line1; lnum <= eap->line2 && !got_int; ++lnum)
{
/* a match on this line? */
- match = vim_regexec_multi(&regmatch, curwin, curbuf, lnum, (colnr_T)0);
+ match = vim_regexec_multi(&regmatch, curwin, curbuf, lnum,
+ (colnr_T)0, NULL);
if ((type == 'g' && match) || (type == 'v' && !match))
{
ml_setmarked(lnum);
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 6d036ff47..50c8f5841 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -3931,7 +3931,8 @@ get_address(ptr, skip, to_other_file)
curwin->w_cursor.col = 0;
searchcmdlen = 0;
if (!do_search(NULL, c, cmd, 1L,
- SEARCH_HIS + SEARCH_MSG + SEARCH_START))
+ SEARCH_HIS + SEARCH_MSG + SEARCH_START,
+ NULL))
{
curwin->w_cursor = pos;
cmd = NULL;
diff --git a/src/ex_getln.c b/src/ex_getln.c
index d43eb2a8f..b1f04d8d0 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -1709,6 +1709,9 @@ cmdline_changed:
if (p_is && !cmd_silent && (firstc == '/' || firstc == '?'))
{
pos_T end_pos;
+#ifdef FEAT_RELTIME
+ proftime_T tm;
+#endif
/* if there is a character waiting, search and redraw later */
if (char_avail())
@@ -1727,8 +1730,18 @@ cmdline_changed:
cursor_off(); /* so the user knows we're busy */
out_flush();
++emsg_off; /* So it doesn't beep if bad expr */
+#ifdef FEAT_RELTIME
+ /* Set the time limit to half a second. */
+ profile_setlimit(500L, &tm);
+#endif
i = do_search(NULL, firstc, ccline.cmdbuff, count,
- SEARCH_KEEP + SEARCH_OPT + SEARCH_NOOF + SEARCH_PEEK);
+ SEARCH_KEEP + SEARCH_OPT + SEARCH_NOOF + SEARCH_PEEK,
+#ifdef FEAT_RELTIME
+ &tm
+#else
+ NULL
+#endif
+ );
--emsg_off;
/* if interrupted while searching, behave like it failed */
if (got_int)
diff --git a/src/gui.c b/src/gui.c
index dd69e8d70..4bae5015d 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -5052,7 +5052,7 @@ gui_do_findrepl(flags, find_text, repl_text, down)
/* Search for the next match. */
i = msg_scroll;
do_search(NULL, down ? '/' : '?', ga.ga_data, 1L,
- SEARCH_MSG + SEARCH_MARK);
+ SEARCH_MSG + SEARCH_MARK, NULL);
msg_scroll = i; /* don't let an error message set msg_scroll */
}
diff --git a/src/misc1.c b/src/misc1.c
index 55c9bd589..df2ccaaf8 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -437,7 +437,8 @@ get_number_indent(lnum)
{
regmatch.rmm_ic = FALSE;
regmatch.rmm_maxcol = 0;
- if (vim_regexec_multi(&regmatch, curwin, curbuf, lnum, (colnr_T)0))
+ if (vim_regexec_multi(&regmatch, curwin, curbuf, lnum,
+ (colnr_T)0, NULL))
{
pos.lnum = regmatch.endpos[0].lnum + lnum;
pos.col = regmatch.endpos[0].col;
diff --git a/src/normal.c b/src/normal.c
index d5e8ead2a..eda2ad38a 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -6093,7 +6093,7 @@ normal_search(cap, dir, pat, opt)
curwin->w_set_curswant = TRUE;
i = do_search(cap->oap, dir, pat, cap->count1,
- opt | SEARCH_OPT | SEARCH_ECHO | SEARCH_MSG);
+ opt | SEARCH_OPT | SEARCH_ECHO | SEARCH_MSG, NULL);
if (i == 0)
clearop(cap->oap);
else
diff --git a/src/option.c b/src/option.c
index d0fc1b209..6ff0a218a 100644
--- a/src/option.c
+++ b/src/option.c
@@ -1991,6 +1991,13 @@ static struct vimoption
{"redraw", NULL, P_BOOL|P_VI_DEF,
(char_u *)NULL, PV_NONE,
{(char_u *)FALSE, (char_u *)0L}},
+ {"redrawtime", "rdt", P_NUM|P_VI_DEF,
+#ifdef FEAT_RELTIME
+ (char_u *)&p_rdt, PV_NONE,
+#else
+ (char_u *)NULL, PV_NONE,
+#endif
+ {(char_u *)2000L, (char_u *)0L}},
{"remap", NULL, P_BOOL|P_VI_DEF,
(char_u *)&p_remap, PV_NONE,
{(char_u *)TRUE, (char_u *)0L}},
diff --git a/src/option.h b/src/option.h
index 6208a1c2a..3818bcd85 100644
--- a/src/option.h
+++ b/src/option.h
@@ -633,6 +633,9 @@ EXTERN char_u *p_path; /* 'path' */
#ifdef FEAT_SEARCHPATH
EXTERN char_u *p_cdpath; /* 'cdpath' */
#endif
+#ifdef FEAT_RELTIME
+EXTERN long p_rdt; /* 'redrawtime' */
+#endif
EXTERN int p_remap; /* 'remap' */
EXTERN long p_report; /* 'report' */
#if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
diff --git a/src/proto/regexp.pro b/src/proto/regexp.pro
index df2fde40c..5cd1731c3 100644
--- a/src/proto/regexp.pro
+++ b/src/proto/regexp.pro
@@ -1,13 +1,13 @@
/* regexp.c */
-void free_regexp_stuff __ARGS((void));
int re_multiline __ARGS((regprog_T *prog));
int re_lookbehind __ARGS((regprog_T *prog));
char_u *skip_regexp __ARGS((char_u *startp, int dirc, int magic, char_u **newp));
regprog_T *vim_regcomp __ARGS((char_u *expr, int re_flags));
int vim_regcomp_had_eol __ARGS((void));
+void free_regexp_stuff __ARGS((void));
int vim_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
int vim_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
-long vim_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col));
+long vim_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm));
reg_extmatch_T *ref_extmatch __ARGS((reg_extmatch_T *em));
void unref_extmatch __ARGS((reg_extmatch_T *em));
char_u *regtilde __ARGS((char_u *source, int magic));
diff --git a/src/proto/search.pro b/src/proto/search.pro
index f7c993fb4..e77836af6 100644
--- a/src/proto/search.pro
+++ b/src/proto/search.pro
@@ -11,7 +11,7 @@ void reset_search_dir __ARGS((void));
void set_last_search_pat __ARGS((char_u *s, int idx, int magic, int setlast));
void last_pat_prog __ARGS((regmmatch_T *regmatch));
int searchit __ARGS((win_T *win, buf_T *buf, pos_T *pos, int dir, char_u *pat, long count, int options, int pat_use, linenr_T stop_lnum, proftime_T *tm));
-int do_search __ARGS((oparg_T *oap, int dirc, char_u *pat, long count, int options));
+int do_search __ARGS((oparg_T *oap, int dirc, char_u *pat, long count, int options, proftime_T *tm));
int search_for_exact_line __ARGS((buf_T *buf, pos_T *pos, int dir, char_u *pat));
int searchc __ARGS((cmdarg_T *cap, int t_cmd));
pos_T *findmatch __ARGS((oparg_T *oap, int initc));
diff --git a/src/quickfix.c b/src/quickfix.c
index 32c6cd08d..d2b24bb10 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -1803,7 +1803,8 @@ qf_jump(qi, dir, errornr, forceit)
/* Move the cursor to the first line in the buffer */
save_cursor = curwin->w_cursor;
curwin->w_cursor.lnum = 0;
- if (!do_search(NULL, '/', qf_ptr->qf_pattern, (long)1, SEARCH_KEEP))
+ if (!do_search(NULL, '/', qf_ptr->qf_pattern, (long)1,
+ SEARCH_KEEP, NULL))
curwin->w_cursor = save_cursor;
}
@@ -3159,7 +3160,7 @@ ex_vimgrep(eap)
{
col = 0;
while (vim_regexec_multi(&regmatch, curwin, buf, lnum,
- col) > 0)
+ col, NULL) > 0)
{
;
if (qf_add_entry(qi, &prevp,
diff --git a/src/regexp.c b/src/regexp.c
index 0cf575a5b..04e068d3d 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -3040,7 +3040,7 @@ typedef struct
} save_se_T;
static char_u *reg_getline __ARGS((linenr_T lnum));
-static long vim_regexec_both __ARGS((char_u *line, colnr_T col));
+static long vim_regexec_both __ARGS((char_u *line, colnr_T col, proftime_T *tm));
static long regtry __ARGS((regprog_T *prog, colnr_T col));
static void cleanup_subexpr __ARGS((void));
#ifdef FEAT_SYN_HL
@@ -3284,7 +3284,7 @@ vim_regexec(rmp, line, col)
ireg_icombine = FALSE;
#endif
ireg_maxcol = 0;
- return (vim_regexec_both(line, col) != 0);
+ return (vim_regexec_both(line, col, NULL) != 0);
}
#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
@@ -3308,7 +3308,7 @@ vim_regexec_nl(rmp, line, col)
ireg_icombine = FALSE;
#endif
ireg_maxcol = 0;
- return (vim_regexec_both(line, col) != 0);
+ return (vim_regexec_both(line, col, NULL) != 0);
}
#endif
@@ -3321,12 +3321,13 @@ vim_regexec_nl(rmp, line, col)
* match otherwise.
*/
long
-vim_regexec_multi(rmp, win, buf, lnum, col)
+vim_regexec_multi(rmp, win, buf, lnum, col, tm)
regmmatch_T *rmp;
win_T *win; /* window in which to search or NULL */
buf_T *buf; /* buffer in which to search */
linenr_T lnum; /* nr of line to start looking for match */
colnr_T col; /* column to start looking for match */
+ proftime_T *tm; /* timeout limit or NULL */
{
long r;
buf_T *save_curbuf = curbuf;
@@ -3346,7 +3347,7 @@ vim_regexec_multi(rmp, win, buf, lnum, col)
/* Need to switch to buffer "buf" to make vim_iswordc() work. */
curbuf = buf;
- r = vim_regexec_both(NULL, col);
+ r = vim_regexec_both(NULL, col, tm);
curbuf = save_curbuf;
return r;
@@ -3356,10 +3357,12 @@ vim_regexec_multi(rmp, win, buf, lnum, col)
* Match a regexp against a string ("line" points to the string) or multiple
* lines ("line" is NULL, use reg_getline()).
*/
+/*ARGSUSED*/
static long
-vim_regexec_both(line, col)
+vim_regexec_both(line, col, tm)
char_u *line;
colnr_T col; /* column to start looking for match */
+ proftime_T *tm; /* timeout limit or NULL */
{
regprog_T *prog;
char_u *s;
@@ -3502,6 +3505,9 @@ vim_regexec_both(line, col)
}
else
{
+#ifdef FEAT_RELTIME
+ int tm_count = 0;
+#endif
/* Messy cases: unanchored match. */
while (!got_int)
{
@@ -3550,6 +3556,15 @@ vim_regexec_both(line, col)
else
#endif
++col;
+#ifdef FEAT_RELTIME
+ /* Check for timeout once in a twenty times to avoid overhead. */
+ if (tm != NULL && ++tm_count == 20)
+ {
+ tm_count = 0;
+ if (profile_passed_limit(tm))
+ break;
+ }
+#endif
}
}
diff --git a/src/screen.c b/src/screen.c
index d39414687..8f8604508 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -848,11 +848,16 @@ win_update(wp)
cur->hl.buf = buf;
cur->hl.lnum = 0;
cur->hl.first_lnum = 0;
+# ifdef FEAT_RELTIME
+ /* Set the time limit to 'redrawtime'. */
+ profile_setlimit(p_rdt, &(cur->hl.tm));
+# endif
cur = cur->next;
}
search_hl.buf = buf;
search_hl.lnum = 0;
search_hl.first_lnum = 0;
+ /* time limit is set at the toplevel, for all windows */
#endif
#ifdef FEAT_LINEBREAK
@@ -6462,6 +6467,10 @@ start_search_hl()
{
last_pat_prog(&search_hl.rm);
search_hl.attr = hl_attr(HLF_L);
+# ifdef FEAT_RELTIME
+ /* Set the time limit to 'redrawtime'. */
+ profile_setlimit(p_rdt, &search_hl.tm);
+# endif
}
}
@@ -6587,6 +6596,14 @@ next_search_hl(win, shl, lnum, mincol)
called_emsg = FALSE;
for (;;)
{
+#ifdef FEAT_RELTIME
+ /* Stop searching after passing the time limit. */
+ if (profile_passed_limit(&(shl->tm)))
+ {
+ shl->lnum = 0; /* no match found in time */
+ break;
+ }
+#endif
/* Three situations:
* 1. No useful previous match: search from start of line.
* 2. Not Vi compatible or empty match: continue at next character.
@@ -6620,7 +6637,13 @@ next_search_hl(win, shl, lnum, mincol)
matchcol = shl->rm.endpos[0].col;
shl->lnum = lnum;
- nmatched = vim_regexec_multi(&shl->rm, win, shl->buf, lnum, matchcol);
+ nmatched = vim_regexec_multi(&shl->rm, win, shl->buf, lnum, matchcol,
+#ifdef FEAT_RELTIME
+ &(shl->tm)
+#else
+ NULL
+#endif
+ );
if (called_emsg)
{
/* Error while handling regexp: stop using this regexp. */
diff --git a/src/search.c b/src/search.c
index 035733b4a..4bbd3c33b 100644
--- a/src/search.c
+++ b/src/search.c
@@ -606,7 +606,13 @@ searchit(win, buf, pos, dir, pat, count, options, pat_use, stop_lnum, tm)
* Look for a match somewhere in line "lnum".
*/
nmatched = vim_regexec_multi(&regmatch, win, buf,
- lnum, (colnr_T)0);
+ lnum, (colnr_T)0,
+#ifdef FEAT_RELTIME
+ tm
+#else
+ NULL
+#endif
+ );
/* Abort searching on an error (e.g., out of stack). */
if (called_emsg)
break;
@@ -615,9 +621,9 @@ searchit(win, buf, pos, dir, pat, count, options, pat_use, stop_lnum, tm)
/* match may actually be in another line when using \zs */
matchpos = regmatch.startpos[0];
endpos = regmatch.endpos[0];
-# ifdef FEAT_EVAL
+#ifdef FEAT_EVAL
submatch = first_submatch(&regmatch);
-# endif
+#endif
/* Line me be past end of buffer for "\n\zs". */
if (lnum + matchpos.lnum > buf->b_ml.ml_line_count)
ptr = (char_u *)"";
@@ -693,7 +699,13 @@ searchit(win, buf, pos, dir, pat, count, options, pat_use, stop_lnum, tm)
if (ptr[matchcol] == NUL
|| (nmatched = vim_regexec_multi(&regmatch,
win, buf, lnum + matchpos.lnum,
- matchcol)) == 0)
+ matchcol,
+#ifdef FEAT_RELTIME
+ tm
+#else
+ NULL
+#endif
+ )) == 0)
{
match_ok = FALSE;
break;
@@ -799,7 +811,13 @@ searchit(win, buf, pos, dir, pat, count, options, pat_use, stop_lnum, tm)
if (ptr[matchcol] == NUL
|| (nmatched = vim_regexec_multi(&regmatch,
win, buf, lnum + matchpos.lnum,
- matchcol)) == 0)
+ matchcol,
+#ifdef FEAT_RELTIME
+ tm
+#else
+ NULL
+#endif
+ )) == 0)
break;
/* Need to get the line pointer again, a
@@ -977,12 +995,13 @@ first_submatch(rp)
* return 0 for failure, 1 for found, 2 for found and line offset added
*/
int
-do_search(oap, dirc, pat, count, options)
+do_search(oap, dirc, pat, count, options, tm)
oparg_T *oap; /* can be NULL */
int dirc; /* '/' or '?' */
char_u *pat;
long count;
int options;
+ proftime_T *tm; /* timeout limit or NULL */
{
pos_T pos; /* position of the last match */
char_u *searchstr;
@@ -1256,7 +1275,7 @@ do_search(oap, dirc, pat, count, options)
(SEARCH_KEEP + SEARCH_PEEK + SEARCH_HIS
+ SEARCH_MSG + SEARCH_START
+ ((pat != NULL && *pat == ';') ? 0 : SEARCH_NOOF))),
- RE_LAST, (linenr_T)0, NULL);
+ RE_LAST, (linenr_T)0, tm);
if (dircp != NULL)
*dircp = dirc; /* restore second '/' or '?' for normal_cmd() */
diff --git a/src/spell.c b/src/spell.c
index 8e9c6cb39..f45be18c2 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -10343,7 +10343,7 @@ ex_spellrepall(eap)
curwin->w_cursor.lnum = 0;
while (!got_int)
{
- if (do_search(NULL, '/', frompat, 1L, SEARCH_KEEP) == 0
+ if (do_search(NULL, '/', frompat, 1L, SEARCH_KEEP, NULL) == 0
|| u_save_cursor() == FAIL)
break;
diff --git a/src/structs.h b/src/structs.h
index 0a56d02e1..d6a8f72e3 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1717,6 +1717,9 @@ typedef struct
linenr_T first_lnum; /* first lnum to search for multi-line pat */
colnr_T startcol; /* in win_line() points to char where HL starts */
colnr_T endcol; /* in win_line() points to char where HL ends */
+#ifdef FEAT_RELTIME
+ proftime_T tm; /* for a time limit */
+#endif
} match_T;
/*
diff --git a/src/syntax.c b/src/syntax.c
index 5c2d1e4e9..3915d4348 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -3097,7 +3097,7 @@ syn_regexec(rmp, lnum, col)
colnr_T col;
{
rmp->rmm_maxcol = syn_buf->b_p_smc;
- if (vim_regexec_multi(rmp, syn_win, syn_buf, lnum, col) > 0)
+ if (vim_regexec_multi(rmp, syn_win, syn_buf, lnum, col, NULL) > 0)
{
rmp->startpos[0].lnum += lnum;
rmp->endpos[0].lnum += lnum;
diff --git a/src/tag.c b/src/tag.c
index d46239ca1..b1a7c5bb3 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -3191,7 +3191,8 @@ jumpto_tag(lbuf, forceit, keep_help)
#endif
save_lnum = curwin->w_cursor.lnum;
curwin->w_cursor.lnum = 0; /* start search before first line */
- if (do_search(NULL, pbuf[0], pbuf + 1, (long)1, search_options))
+ if (do_search(NULL, pbuf[0], pbuf + 1, (long)1,
+ search_options, NULL))
retval = OK;
else
{
@@ -3203,7 +3204,7 @@ jumpto_tag(lbuf, forceit, keep_help)
*/
p_ic = TRUE;
if (!do_search(NULL, pbuf[0], pbuf + 1, (long)1,
- search_options))
+ search_options, NULL))
{
/*
* Failed to find pattern, take a guess: "^func ("
@@ -3213,13 +3214,14 @@ jumpto_tag(lbuf, forceit, keep_help)
cc = *tagp.tagname_end;
*tagp.tagname_end = NUL;
sprintf((char *)pbuf, "^%s\\s\\*(", tagp.tagname);
- if (!do_search(NULL, '/', pbuf, (long)1, search_options))
+ if (!do_search(NULL, '/', pbuf, (long)1,
+ search_options, NULL))
{
/* Guess again: "^char * \<func (" */
sprintf((char *)pbuf, "^\\[#a-zA-Z_]\\.\\*\\<%s\\s\\*(",
tagp.tagname);
if (!do_search(NULL, '/', pbuf, (long)1,
- search_options))
+ search_options, NULL))
found = 0;
}
*tagp.tagname_end = cc;
diff --git a/src/version.c b/src/version.c
index d08daab53..e72bab76a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 236,
+/**/
235,
/**/
234,
diff --git a/src/vim.h b/src/vim.h
index bfbfde06e..02143d92d 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -1550,6 +1550,16 @@ int vim_memcmp __ARGS((void *, void *, size_t));
# define MB_MAXBYTES 21
#endif
+#if (defined(FEAT_PROFILE) || defined(FEAT_RELTIME)) && !defined(PROTO)
+# ifdef WIN3264
+typedef LARGE_INTEGER proftime_T;
+# else
+typedef struct timeval proftime_T;
+# endif
+#else
+typedef int proftime_T; /* dummy for function prototypes */
+#endif
+
/* Include option.h before structs.h, because the number of window-local and
* buffer-local options is used there. */
#include "option.h" /* options and default values */
@@ -1762,16 +1772,6 @@ typedef int VimClipboard; /* This is required for the prototypes. */
# define stat(a,b) (access(a,0) ? -1 : stat(a,b))
#endif
-#if (defined(FEAT_PROFILE) || defined(FEAT_RELTIME)) && !defined(PROTO)
-# ifdef WIN3264
-typedef LARGE_INTEGER proftime_T;
-# else
-typedef struct timeval proftime_T;
-# endif
-#else
-typedef int proftime_T; /* dummy for function prototypes */
-#endif
-
#include "ex_cmds.h" /* Ex command defines */
#include "proto.h" /* function prototypes */