summaryrefslogtreecommitdiff
path: root/src/regexp_nfa.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/regexp_nfa.c')
-rw-r--r--src/regexp_nfa.c304
1 files changed, 113 insertions, 191 deletions
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c
index cbb3d308b..8bcf3bc41 100644
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -332,9 +332,9 @@ static int failure_chance(nfa_state_T *state, int depth);
* Return OK on success, FAIL otherwise.
*/
static int
-nfa_regcomp_start(expr, re_flags)
- char_u *expr;
- int re_flags; /* see vim_regcomp() */
+nfa_regcomp_start(
+ char_u *expr,
+ int re_flags) /* see vim_regcomp() */
{
size_t postfix_size;
int nstate_max;
@@ -370,9 +370,7 @@ nfa_regcomp_start(expr, re_flags)
* of the line.
*/
static int
-nfa_get_reganch(start, depth)
- nfa_state_T *start;
- int depth;
+nfa_get_reganch(nfa_state_T *start, int depth)
{
nfa_state_T *p = start;
@@ -434,9 +432,7 @@ nfa_get_reganch(start, depth)
* at start of the match.
*/
static int
-nfa_get_regstart(start, depth)
- nfa_state_T *start;
- int depth;
+nfa_get_regstart(nfa_state_T *start, int depth)
{
nfa_state_T *p = start;
@@ -520,8 +516,7 @@ nfa_get_regstart(start, depth)
* regstart. Otherwise return NULL.
*/
static char_u *
-nfa_get_match_text(start)
- nfa_state_T *start;
+nfa_get_match_text(nfa_state_T *start)
{
nfa_state_T *p = start;
int len = 0;
@@ -564,7 +559,7 @@ nfa_get_match_text(start)
* running above the estimated number of states.
*/
static int
-realloc_post_list()
+realloc_post_list(void)
{
int nstate_max = (int)(post_end - post_start);
int new_max = nstate_max + 1000;
@@ -594,10 +589,7 @@ realloc_post_list()
* need to be interpreted as [a-zA-Z].
*/
static int
-nfa_recognize_char_class(start, end, extra_newl)
- char_u *start;
- char_u *end;
- int extra_newl;
+nfa_recognize_char_class(char_u *start, char_u *end, int extra_newl)
{
# define CLASS_not 0x80
# define CLASS_af 0x40
@@ -744,8 +736,7 @@ nfa_recognize_char_class(start, end, extra_newl)
* NOTE! When changing this function, also update reg_equi_class()
*/
static int
-nfa_emit_equi_class(c)
- int c;
+nfa_emit_equi_class(int c)
{
#define EMIT2(c) EMIT(c); EMIT(NFA_CONCAT);
#ifdef FEAT_MBYTE
@@ -1118,7 +1109,7 @@ nfa_emit_equi_class(c)
* or \z( pattern \)
*/
static int
-nfa_regatom()
+nfa_regatom(void)
{
int c;
int charclass;
@@ -1890,7 +1881,7 @@ nfa_do_multibyte:
* or atom multi
*/
static int
-nfa_regpiece()
+nfa_regpiece(void)
{
int i;
int op;
@@ -2100,7 +2091,7 @@ nfa_regpiece()
* etc.
*/
static int
-nfa_regconcat()
+nfa_regconcat(void)
{
int cont = TRUE;
int first = TRUE;
@@ -2178,7 +2169,7 @@ nfa_regconcat()
* etc.
*/
static int
-nfa_regbranch()
+nfa_regbranch(void)
{
int ch;
int old_post_pos;
@@ -2225,8 +2216,8 @@ nfa_regbranch()
* etc.
*/
static int
-nfa_reg(paren)
- int paren; /* REG_NOPAREN, REG_PAREN, REG_NPAREN or REG_ZPAREN */
+nfa_reg(
+ int paren) /* REG_NOPAREN, REG_PAREN, REG_NPAREN or REG_ZPAREN */
{
int parno = 0;
@@ -2293,8 +2284,7 @@ nfa_reg(paren)
static char_u code[50];
static void
-nfa_set_code(c)
- int c;
+nfa_set_code(int c)
{
int addnl = FALSE;
@@ -2530,9 +2520,7 @@ static FILE *log_fd;
* Print the postfix notation of the current regexp.
*/
static void
-nfa_postfix_dump(expr, retval)
- char_u *expr;
- int retval;
+nfa_postfix_dump(char_u *expr, int retval)
{
int *p;
FILE *f;
@@ -2563,9 +2551,7 @@ nfa_postfix_dump(expr, retval)
* Print the NFA starting with a root node "state".
*/
static void
-nfa_print_state(debugf, state)
- FILE *debugf;
- nfa_state_T *state;
+nfa_print_state(FILE *debugf, nfa_state_T *state)
{
garray_T indent;
@@ -2576,10 +2562,7 @@ nfa_print_state(debugf, state)
}
static void
-nfa_print_state2(debugf, state, indent)
- FILE *debugf;
- nfa_state_T *state;
- garray_T *indent;
+nfa_print_state2(FILE *debugf, nfa_state_T *state, garray_T *indent)
{
char_u *p;
@@ -2640,8 +2623,7 @@ nfa_print_state2(debugf, state, indent)
* Print the NFA state machine.
*/
static void
-nfa_dump(prog)
- nfa_regprog_T *prog;
+nfa_dump(nfa_regprog_T *prog)
{
FILE *debugf = fopen(NFA_REGEXP_DUMP_LOG, "a");
@@ -2668,7 +2650,7 @@ nfa_dump(prog)
* Return the postfix string on success, NULL otherwise.
*/
static int *
-re2post()
+re2post(void)
{
if (nfa_reg(REG_NOPAREN) == FAIL)
return NULL;
@@ -2691,10 +2673,7 @@ static nfa_state_T *state_ptr; /* points to nfa_prog->state */
* Allocate and initialize nfa_state_T.
*/
static nfa_state_T *
-alloc_state(c, out, out1)
- int c;
- nfa_state_T *out;
- nfa_state_T *out1;
+alloc_state(int c, nfa_state_T *out, nfa_state_T *out1)
{
nfa_state_T *s;
@@ -2750,9 +2729,7 @@ static Frag_T st_pop(Frag_T **p, Frag_T *stack);
* Initialize a Frag_T struct and return it.
*/
static Frag_T
-frag(start, out)
- nfa_state_T *start;
- Ptrlist *out;
+frag(nfa_state_T *start, Ptrlist *out)
{
Frag_T n;
@@ -2765,8 +2742,8 @@ frag(start, out)
* Create singleton list containing just outp.
*/
static Ptrlist *
-list1(outp)
- nfa_state_T **outp;
+list1(
+ nfa_state_T **outp)
{
Ptrlist *l;
@@ -2779,9 +2756,7 @@ list1(outp)
* Patch the list of states at out to point to start.
*/
static void
-patch(l, s)
- Ptrlist *l;
- nfa_state_T *s;
+patch(Ptrlist *l, nfa_state_T *s)
{
Ptrlist *next;
@@ -2797,9 +2772,7 @@ patch(l, s)
* Join the two lists l1 and l2, returning the combination.
*/
static Ptrlist *
-append(l1, l2)
- Ptrlist *l1;
- Ptrlist *l2;
+append(Ptrlist *l1, Ptrlist *l2)
{
Ptrlist *oldl1;
@@ -2816,10 +2789,7 @@ append(l1, l2)
static Frag_T empty;
static void
-st_error(postfix, end, p)
- int *postfix UNUSED;
- int *end UNUSED;
- int *p UNUSED;
+st_error(int *postfix UNUSED, int *end UNUSED, int *p UNUSED)
{
#ifdef NFA_REGEXP_ERROR_LOG
FILE *df;
@@ -2868,10 +2838,7 @@ st_error(postfix, end, p)
* Push an item onto the stack.
*/
static void
-st_push(s, p, stack_end)
- Frag_T s;
- Frag_T **p;
- Frag_T *stack_end;
+st_push(Frag_T s, Frag_T **p, Frag_T *stack_end)
{
Frag_T *stackp = *p;
@@ -2885,9 +2852,7 @@ st_push(s, p, stack_end)
* Pop an item from the stack.
*/
static Frag_T
-st_pop(p, stack)
- Frag_T **p;
- Frag_T *stack;
+st_pop(Frag_T **p, Frag_T *stack)
{
Frag_T *stackp;
@@ -2903,9 +2868,7 @@ st_pop(p, stack)
* When unknown or unlimited return -1.
*/
static int
-nfa_max_width(startstate, depth)
- nfa_state_T *startstate;
- int depth;
+nfa_max_width(nfa_state_T *startstate, int depth)
{
int l, r;
nfa_state_T *state = startstate;
@@ -3128,10 +3091,7 @@ nfa_max_width(startstate, depth)
* Return the NFA start state on success, NULL otherwise.
*/
static nfa_state_T *
-post2nfa(postfix, end, nfa_calc_size)
- int *postfix;
- int *end;
- int nfa_calc_size;
+post2nfa(int *postfix, int *end, int nfa_calc_size)
{
int *p;
int mopen;
@@ -3667,8 +3627,7 @@ theend:
* After building the NFA program, inspect it to add optimization hints.
*/
static void
-nfa_postprocess(prog)
- nfa_regprog_T *prog;
+nfa_postprocess(nfa_regprog_T *prog)
{
int i;
int c;
@@ -3801,8 +3760,7 @@ static void log_subexpr(regsub_T *sub);
static char *pim_info(nfa_pim_T *pim);
static void
-log_subsexpr(subs)
- regsubs_T *subs;
+log_subsexpr(regsubs_T *subs)
{
log_subexpr(&subs->norm);
# ifdef FEAT_SYN_HL
@@ -3812,8 +3770,7 @@ log_subsexpr(subs)
}
static void
-log_subexpr(sub)
- regsub_T *sub;
+log_subexpr(regsub_T *sub)
{
int j;
@@ -3838,8 +3795,7 @@ log_subexpr(sub)
}
static char *
-pim_info(pim)
- nfa_pim_T *pim;
+pim_info(nfa_pim_T *pim)
{
static char buf[30];
@@ -3879,9 +3835,7 @@ static void addstate_here(nfa_list_T *l, nfa_state_T *state, regsubs_T *subs, nf
* Copy postponed invisible match info from "from" to "to".
*/
static void
-copy_pim(to, from)
- nfa_pim_T *to;
- nfa_pim_T *from;
+copy_pim(nfa_pim_T *to, nfa_pim_T *from)
{
to->result = from->result;
to->state = from->state;
@@ -3894,8 +3848,7 @@ copy_pim(to, from)
}
static void
-clear_sub(sub)
- regsub_T *sub;
+clear_sub(regsub_T *sub)
{
if (REG_MULTI)
/* Use 0xff to set lnum to -1 */
@@ -3910,9 +3863,7 @@ clear_sub(sub)
* Copy the submatches from "from" to "to".
*/
static void
-copy_sub(to, from)
- regsub_T *to;
- regsub_T *from;
+copy_sub(regsub_T *to, regsub_T *from)
{
to->in_use = from->in_use;
if (from->in_use > 0)
@@ -3933,9 +3884,7 @@ copy_sub(to, from)
* Like copy_sub() but exclude the main match.
*/
static void
-copy_sub_off(to, from)
- regsub_T *to;
- regsub_T *from;
+copy_sub_off(regsub_T *to, regsub_T *from)
{
if (to->in_use < from->in_use)
to->in_use = from->in_use;
@@ -3957,9 +3906,7 @@ copy_sub_off(to, from)
* Like copy_sub() but only do the end of the main match if \ze is present.
*/
static void
-copy_ze_off(to, from)
- regsub_T *to;
- regsub_T *from;
+copy_ze_off(regsub_T *to, regsub_T *from)
{
if (nfa_has_zend)
{
@@ -3984,9 +3931,7 @@ copy_ze_off(to, from)
* When using back-references also check the end position.
*/
static int
-sub_equal(sub1, sub2)
- regsub_T *sub1;
- regsub_T *sub2;
+sub_equal(regsub_T *sub1, regsub_T *sub2)
{
int i;
int todo;
@@ -4093,11 +4038,11 @@ report_state(char *action,
* positions as "subs".
*/
static int
-has_state_with_pos(l, state, subs, pim)
- nfa_list_T *l; /* runtime state list */
- nfa_state_T *state; /* state to update */
- regsubs_T *subs; /* pointers to subexpressions */
- nfa_pim_T *pim; /* postponed match or NULL */
+has_state_with_pos(
+ nfa_list_T *l, /* runtime state list */
+ nfa_state_T *state, /* state to update */
+ regsubs_T *subs, /* pointers to subexpressions */
+ nfa_pim_T *pim) /* postponed match or NULL */
{
nfa_thread_T *thread;
int i;
@@ -4122,9 +4067,7 @@ has_state_with_pos(l, state, subs, pim)
* set.
*/
static int
-pim_equal(one, two)
- nfa_pim_T *one;
- nfa_pim_T *two;
+pim_equal(nfa_pim_T *one, nfa_pim_T *two)
{
int one_unused = (one == NULL || one->result == NFA_PIM_UNUSED);
int two_unused = (two == NULL || two->result == NFA_PIM_UNUSED);
@@ -4149,9 +4092,7 @@ pim_equal(one, two)
* Return TRUE if "state" leads to a NFA_MATCH without advancing the input.
*/
static int
-match_follows(startstate, depth)
- nfa_state_T *startstate;
- int depth;
+match_follows(nfa_state_T *startstate, int depth)
{
nfa_state_T *state = startstate;
@@ -4244,10 +4185,10 @@ match_follows(startstate, depth)
* Return TRUE if "state" is already in list "l".
*/
static int
-state_in_list(l, state, subs)
- nfa_list_T *l; /* runtime state list */
- nfa_state_T *state; /* state to update */
- regsubs_T *subs; /* pointers to subexpressions */
+state_in_list(
+ nfa_list_T *l, /* runtime state list */
+ nfa_state_T *state, /* state to update */
+ regsubs_T *subs) /* pointers to subexpressions */
{
if (state->lastlist[nfa_ll_index] == l->id)
{
@@ -4262,12 +4203,12 @@ state_in_list(l, state, subs)
* Returns "subs_arg", possibly copied into temp_subs.
*/
static regsubs_T *
-addstate(l, state, subs_arg, pim, off)
- nfa_list_T *l; /* runtime state list */
- nfa_state_T *state; /* state to update */
- regsubs_T *subs_arg; /* pointers to subexpressions */
- nfa_pim_T *pim; /* postponed look-behind match */
- int off; /* byte offset, when -1 go to next line */
+addstate(
+ nfa_list_T *l, /* runtime state list */
+ nfa_state_T *state, /* state to update */
+ regsubs_T *subs_arg, /* pointers to subexpressions */
+ nfa_pim_T *pim, /* postponed look-behind match */
+ int off) /* byte offset, when -1 go to next line */
{
int subidx;
nfa_thread_T *thread;
@@ -4678,12 +4619,12 @@ skip_add:
* matters for alternatives.
*/
static void
-addstate_here(l, state, subs, pim, ip)
- nfa_list_T *l; /* runtime state list */
- nfa_state_T *state; /* state to update */
- regsubs_T *subs; /* pointers to subexpressions */
- nfa_pim_T *pim; /* postponed look-behind match */
- int *ip;
+addstate_here(
+ nfa_list_T *l, /* runtime state list */
+ nfa_state_T *state, /* state to update */
+ regsubs_T *subs, /* pointers to subexpressions */
+ nfa_pim_T *pim, /* postponed look-behind match */
+ int *ip)
{
int tlen = l->n;
int count;
@@ -4749,9 +4690,7 @@ addstate_here(l, state, subs, pim, ip)
* Check character class "class" against current character c.
*/
static int
-check_char_class(class, c)
- int class;
- int c;
+check_char_class(int class, int c)
{
switch (class)
{
@@ -4833,10 +4772,10 @@ check_char_class(class, c)
* Return TRUE if it matches.
*/
static int
-match_backref(sub, subidx, bytelen)
- regsub_T *sub; /* pointers to subexpressions */
- int subidx;
- int *bytelen; /* out: length of match in bytes */
+match_backref(
+ regsub_T *sub, /* pointers to subexpressions */
+ int subidx,
+ int *bytelen) /* out: length of match in bytes */
{
int len;
@@ -4900,9 +4839,9 @@ static int match_zref(int subidx, int *bytelen);
* Return TRUE if it matches.
*/
static int
-match_zref(subidx, bytelen)
- int subidx;
- int *bytelen; /* out: length of match in bytes */
+match_zref(
+ int subidx,
+ int *bytelen) /* out: length of match in bytes */
{
int len;
@@ -4930,9 +4869,7 @@ match_zref(subidx, bytelen)
* Only used for the recursive value lastlist[1].
*/
static void
-nfa_save_listids(prog, list)
- nfa_regprog_T *prog;
- int *list;
+nfa_save_listids(nfa_regprog_T *prog, int *list)
{
int i;
nfa_state_T *p;
@@ -4951,9 +4888,7 @@ nfa_save_listids(prog, list)
* Restore list IDs from "list" to all NFA states.
*/
static void
-nfa_restore_listids(prog, list)
- nfa_regprog_T *prog;
- int *list;
+nfa_restore_listids(nfa_regprog_T *prog, int *list)
{
int i;
nfa_state_T *p;
@@ -4967,10 +4902,7 @@ nfa_restore_listids(prog, list)
}
static int
-nfa_re_num_cmp(val, op, pos)
- long_u val;
- int op;
- long_u pos;
+nfa_re_num_cmp(long_u val, int op, long_u pos)
{
if (op == 1) return pos > val;
if (op == 2) return pos < val;
@@ -4986,13 +4918,13 @@ static int nfa_regmatch(nfa_regprog_T *prog, nfa_state_T *start, regsubs_T *subm
* position).
*/
static int
-recursive_regmatch(state, pim, prog, submatch, m, listids)
- nfa_state_T *state;
- nfa_pim_T *pim;
- nfa_regprog_T *prog;
- regsubs_T *submatch;
- regsubs_T *m;
- int **listids;
+recursive_regmatch(
+ nfa_state_T *state,
+ nfa_pim_T *pim,
+ nfa_regprog_T *prog,
+ regsubs_T *submatch,
+ regsubs_T *m,
+ int **listids)
{
int save_reginput_col = (int)(reginput - regline);
int save_reglnum = reglnum;
@@ -5168,9 +5100,7 @@ static long find_match_text(colnr_T startcol, int regstart, char_u *match_text);
* specific character: 99
*/
static int
-failure_chance(state, depth)
- nfa_state_T *state;
- int depth;
+failure_chance(nfa_state_T *state, int depth)
{
int c = state->c;
int l, r;
@@ -5330,9 +5260,7 @@ failure_chance(state, depth)
* Skip until the char "c" we know a match must start with.
*/
static int
-skip_to_start(c, colp)
- int c;
- colnr_T *colp;
+skip_to_start(int c, colnr_T *colp)
{
char_u *s;
@@ -5357,10 +5285,7 @@ skip_to_start(c, colp)
* Returns zero for no match, 1 for a match.
*/
static long
-find_match_text(startcol, regstart, match_text)
- colnr_T startcol;
- int regstart;
- char_u *match_text;
+find_match_text(colnr_T startcol, int regstart, char_u *match_text)
{
colnr_T col = startcol;
int c1, c2;
@@ -5426,11 +5351,11 @@ find_match_text(startcol, regstart, match_text)
* Note: Caller must ensure that: start != NULL.
*/
static int
-nfa_regmatch(prog, start, submatch, m)
- nfa_regprog_T *prog;
- nfa_state_T *start;
- regsubs_T *submatch;
- regsubs_T *m;
+nfa_regmatch(
+ nfa_regprog_T *prog,
+ nfa_state_T *start,
+ regsubs_T *submatch,
+ regsubs_T *m)
{
int result;
size_t size = 0;
@@ -6847,10 +6772,10 @@ theend:
* Returns <= 0 for failure, number of lines contained in the match otherwise.
*/
static long
-nfa_regtry(prog, col, tm)
- nfa_regprog_T *prog;
- colnr_T col;
- proftime_T *tm UNUSED; /* timeout limit or NULL */
+nfa_regtry(
+ nfa_regprog_T *prog,
+ colnr_T col,
+ proftime_T *tm UNUSED) /* timeout limit or NULL */
{
int i;
regsubs_T subs, m;
@@ -6986,10 +6911,10 @@ nfa_regtry(prog, col, tm)
* Returns <= 0 for failure, number of lines contained in the match otherwise.
*/
static long
-nfa_regexec_both(line, startcol, tm)
- char_u *line;
- colnr_T startcol; /* column to start looking for match */
- proftime_T *tm; /* timeout limit or NULL */
+nfa_regexec_both(
+ char_u *line,
+ colnr_T startcol, /* column to start looking for match */
+ proftime_T *tm) /* timeout limit or NULL */
{
nfa_regprog_T *prog;
long retval = 0L;
@@ -7096,9 +7021,7 @@ theend:
* Returns the program in allocated space. Returns NULL for an error.
*/
static regprog_T *
-nfa_regcomp(expr, re_flags)
- char_u *expr;
- int re_flags;
+nfa_regcomp(char_u *expr, int re_flags)
{
nfa_regprog_T *prog = NULL;
size_t prog_size;
@@ -7208,8 +7131,7 @@ fail:
* Free a compiled regexp program, returned by nfa_regcomp().
*/
static void
-nfa_regfree(prog)
- regprog_T *prog;
+nfa_regfree(regprog_T *prog)
{
if (prog != NULL)
{
@@ -7228,11 +7150,11 @@ nfa_regfree(prog)
* Returns <= 0 for failure, number of lines contained in the match otherwise.
*/
static int
-nfa_regexec_nl(rmp, line, col, line_lbr)
- regmatch_T *rmp;
- char_u *line; /* string to match against */
- colnr_T col; /* column to start looking for match */
- int line_lbr;
+nfa_regexec_nl(
+ regmatch_T *rmp,
+ char_u *line, /* string to match against */
+ colnr_T col, /* column to start looking for match */
+ int line_lbr)
{
reg_match = rmp;
reg_mmatch = NULL;
@@ -7275,13 +7197,13 @@ nfa_regexec_nl(rmp, line, col, line_lbr)
* FIXME if this behavior is not compatible.
*/
static long
-nfa_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 */
+nfa_regexec_multi(
+ 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 */
{
reg_match = NULL;
reg_mmatch = rmp;