This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi! This patch on top of http://sources.redhat.com/ml/libc-hacker/2004-01/msg00000.html changes most of the const regex_t *preg passing around into passing re_dfa_t *dfa directly (with the exception of re_search_internal and its callers and set_regs). These functions were mainly interested just in preg->buffer (ie. dfa which is now passed around directly) and only rarely in preg->syntax (which makes sense to put into re_dfa_t). 2004-01-02 Jakub Jelinek <jakub@redhat.com> * posix/regex_internal.h (re_dfa_t): Add syntax field. * posix/regcomp.c (parse): Initialize dfa->syntax. * posix/regexec.c (acquire_init_state_context, prune_impossible_nodes, check_matching, check_halt_state_context, proceed_next_node, sift_states_iter_mb, sift_states_backward, update_cur_sifted_state, sift_states_bkref, transit_state, transit_state_sb, transit_state_mb, transit_state_bkref, get_subexp, get_subexp_sub, check_arrival, expand_bkref_cache, build_trtable): Remove preg argument, add dfa argument instead and remove dfa = preg->buffer initialization in the body. Adjust all callers. (check_node_accept_bytes, group_nodes_into_DFAstates, check_node_accept): Likewise. Use dfa->syntax instead of preg->syntax. (check_arrival_add_next_nodes): Remove preg argument. --- libc/posix/regex_internal.h.jj 2004-01-02 16:17:11.000000000 +0100 +++ libc/posix/regex_internal.h 2004-01-02 17:20:23.000000000 +0100 @@ -636,6 +636,7 @@ struct re_dfa_t unsigned int word_ops_used : 1; int mb_cur_max; bitset word_char; + reg_syntax_t syntax; #ifdef DEBUG char* re_str; #endif --- libc/posix/regcomp.c.jj 2004-01-02 15:42:56.000000000 +0100 +++ libc/posix/regcomp.c 2004-01-02 17:23:18.000000000 +0100 @@ -1955,6 +1955,7 @@ parse (regexp, preg, syntax, err) re_dfa_t *dfa = (re_dfa_t *) preg->buffer; bin_tree_t *tree, *eor, *root; re_token_t current_token; + dfa->syntax = syntax; fetch_token (¤t_token, regexp, syntax | RE_CARET_ANCHORS_HERE); tree = parse_reg_exp (regexp, preg, ¤t_token, syntax, 0, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) --- libc/posix/regexec.c.jj 2004-01-02 16:17:11.000000000 +0100 +++ libc/posix/regexec.c 2004-01-02 17:29:41.000000000 +0100 @@ -51,21 +51,21 @@ static int re_search_stub (struct re_pat static unsigned re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, int nregs, int regs_allocated) internal_function; static inline re_dfastate_t *acquire_init_state_context - (reg_errcode_t *err, const regex_t *preg, const re_match_context_t *mctx, + (reg_errcode_t *err, re_dfa_t *dfa, const re_match_context_t *mctx, int idx) __attribute ((always_inline)) internal_function; -static reg_errcode_t prune_impossible_nodes (const regex_t *preg, +static reg_errcode_t prune_impossible_nodes (re_dfa_t *dfa, re_match_context_t *mctx) internal_function; -static int check_matching (const regex_t *preg, re_match_context_t *mctx, +static int check_matching (re_dfa_t *dfa, re_match_context_t *mctx, int fl_longest_match) internal_function; static int check_halt_node_context (const re_dfa_t *dfa, int node, unsigned int context) internal_function; -static int check_halt_state_context (const regex_t *preg, +static int check_halt_state_context (re_dfa_t *dfa, const re_dfastate_t *state, const re_match_context_t *mctx, int idx) internal_function; static void update_regs (re_dfa_t *dfa, regmatch_t *pmatch, regmatch_t *prev_idx_match, int cur_node, int cur_idx, int nmatch) internal_function; -static int proceed_next_node (const regex_t *preg, int nregs, regmatch_t *regs, +static int proceed_next_node (re_dfa_t *dfa, int nregs, regmatch_t *regs, const re_match_context_t *mctx, int *pidx, int node, re_node_set *eps_via_nodes, struct re_fail_stack_t *fs) internal_function; @@ -82,15 +82,15 @@ static reg_errcode_t set_regs (const reg static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs) internal_function; #ifdef RE_ENABLE_I18N -static int sift_states_iter_mb (const regex_t *preg, +static int sift_states_iter_mb (re_dfa_t *dfa, const re_match_context_t *mctx, re_sift_context_t *sctx, int node_idx, int str_idx, int max_str_idx) internal_function; #endif /* RE_ENABLE_I18N */ -static reg_errcode_t sift_states_backward (const regex_t *preg, +static reg_errcode_t sift_states_backward (re_dfa_t *dfa, re_match_context_t *mctx, re_sift_context_t *sctx) internal_function; -static reg_errcode_t update_cur_sifted_state (const regex_t *preg, +static reg_errcode_t update_cur_sifted_state (re_dfa_t *dfa, re_match_context_t *mctx, re_sift_context_t *sctx, int str_idx, @@ -113,7 +113,7 @@ static reg_errcode_t check_subexp_limits re_node_set *limits, struct re_backref_cache_entry *bkref_ents, int str_idx) internal_function; -static reg_errcode_t sift_states_bkref (const regex_t *preg, +static reg_errcode_t sift_states_bkref (re_dfa_t *dfa, re_match_context_t *mctx, re_sift_context_t *sctx, int str_idx, re_node_set *dest_nodes) internal_function; @@ -121,7 +121,7 @@ static reg_errcode_t clean_state_log_if_ int next_state_log_idx) internal_function; static reg_errcode_t merge_state_array (re_dfa_t *dfa, re_dfastate_t **dst, re_dfastate_t **src, int num) internal_function; -static re_dfastate_t *transit_state (reg_errcode_t *err, const regex_t *preg, +static re_dfastate_t *transit_state (reg_errcode_t *err, re_dfa_t *dfa, re_match_context_t *mctx, re_dfastate_t *state) internal_function; static reg_errcode_t check_subexp_matching_top (re_dfa_t *dfa, @@ -129,34 +129,33 @@ static reg_errcode_t check_subexp_matchi re_node_set *cur_nodes, int str_idx) internal_function; #if 0 -static re_dfastate_t *transit_state_sb (reg_errcode_t *err, const regex_t *preg, +static re_dfastate_t *transit_state_sb (reg_errcode_t *err, re_dfa_t *dfa, re_dfastate_t *pstate, re_match_context_t *mctx) internal_function; #endif #ifdef RE_ENABLE_I18N -static reg_errcode_t transit_state_mb (const regex_t *preg, +static reg_errcode_t transit_state_mb (re_dfa_t *dfa, re_dfastate_t *pstate, re_match_context_t *mctx) internal_function; #endif /* RE_ENABLE_I18N */ -static reg_errcode_t transit_state_bkref (const regex_t *preg, +static reg_errcode_t transit_state_bkref (re_dfa_t *dfa, const re_node_set *nodes, re_match_context_t *mctx) internal_function; -static reg_errcode_t get_subexp (const regex_t *preg, re_match_context_t *mctx, +static reg_errcode_t get_subexp (re_dfa_t *dfa, re_match_context_t *mctx, int bkref_node, int bkref_str_idx) internal_function; -static reg_errcode_t get_subexp_sub (const regex_t *preg, +static reg_errcode_t get_subexp_sub (re_dfa_t *dfa, re_match_context_t *mctx, const re_sub_match_top_t *sub_top, re_sub_match_last_t *sub_last, int bkref_node, int bkref_str) internal_function; static int find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, int subexp_idx, int type) internal_function; -static reg_errcode_t check_arrival (const regex_t *preg, +static reg_errcode_t check_arrival (re_dfa_t *dfa, re_match_context_t *mctx, state_array_t *path, int top_node, int top_str, int last_node, int last_str, int type) internal_function; -static reg_errcode_t check_arrival_add_next_nodes (const regex_t *preg, - re_dfa_t *dfa, +static reg_errcode_t check_arrival_add_next_nodes (re_dfa_t *dfa, re_match_context_t *mctx, int str_idx, re_node_set *cur_nodes, @@ -168,26 +167,26 @@ static reg_errcode_t check_arrival_expan re_node_set *dst_nodes, int target, int ex_subexp, int type) internal_function; -static reg_errcode_t expand_bkref_cache (const regex_t *preg, +static reg_errcode_t expand_bkref_cache (re_dfa_t *dfa, re_match_context_t *mctx, re_node_set *cur_nodes, int cur_str, int last_str, int subexp_num, int type) internal_function; -static re_dfastate_t **build_trtable (const regex_t *dfa, +static re_dfastate_t **build_trtable (re_dfa_t *dfa, re_dfastate_t *state) internal_function; #ifdef RE_ENABLE_I18N -static int check_node_accept_bytes (const regex_t *preg, int node_idx, +static int check_node_accept_bytes (re_dfa_t *dfa, int node_idx, const re_string_t *input, int idx) internal_function; # ifdef _LIBC static unsigned int find_collation_sequence_value (const unsigned char *mbs, size_t name_len) internal_function; # endif /* _LIBC */ #endif /* RE_ENABLE_I18N */ -static int group_nodes_into_DFAstates (const regex_t *dfa, +static int group_nodes_into_DFAstates (re_dfa_t *dfa, const re_dfastate_t *state, re_node_set *states_node, bitset *states_ch) internal_function; -static int check_node_accept (const regex_t *preg, const re_token_t *node, +static int check_node_accept (re_dfa_t *dfa, const re_token_t *node, const re_match_context_t *mctx, int idx) internal_function; static reg_errcode_t extend_buffers (re_match_context_t *mctx) internal_function; @@ -741,7 +740,7 @@ re_search_internal (preg, string, length /* It seems to be appropriate one, then use the matcher. */ /* We assume that the matching starts from 0. */ mctx.state_log_top = mctx.nbkref_ents = mctx.max_mb_elem_len = 0; - match_last = check_matching (preg, &mctx, fl_longest_match); + match_last = check_matching (dfa, &mctx, fl_longest_match); if (match_last != -1) { if (BE (match_last == -2, 0)) @@ -755,13 +754,13 @@ re_search_internal (preg, string, length if ((!preg->no_sub && nmatch > 1) || dfa->nbackref) { re_dfastate_t *pstate = mctx.state_log[match_last]; - mctx.last_node = check_halt_state_context (preg, pstate, + mctx.last_node = check_halt_state_context (dfa, pstate, &mctx, match_last); } if ((!preg->no_sub && nmatch > 1 && dfa->has_plural_match) || dfa->nbackref) { - err = prune_impossible_nodes (preg, &mctx); + err = prune_impossible_nodes (dfa, &mctx); if (err == REG_NOERROR) break; if (BE (err != REG_NOMATCH, 0)) @@ -836,13 +835,12 @@ re_search_internal (preg, string, length } static reg_errcode_t -prune_impossible_nodes (preg, mctx) - const regex_t *preg; +prune_impossible_nodes (dfa, mctx) + re_dfa_t *dfa; re_match_context_t *mctx; { int halt_node, match_last; reg_errcode_t ret; - re_dfa_t *dfa = (re_dfa_t *)preg->buffer; re_dfastate_t **sifted_states; re_dfastate_t **lim_states = NULL; re_sift_context_t sctx; @@ -872,7 +870,7 @@ prune_impossible_nodes (preg, mctx) match_ctx_clear_flag (mctx); sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, match_last, 0); - ret = sift_states_backward (preg, mctx, &sctx); + ret = sift_states_backward (dfa, mctx, &sctx); re_node_set_free (&sctx.limits); if (BE (ret != REG_NOERROR, 0)) goto free_return; @@ -888,7 +886,7 @@ prune_impossible_nodes (preg, mctx) } } while (mctx->state_log[match_last] == NULL || !mctx->state_log[match_last]->halt); - halt_node = check_halt_state_context (preg, + halt_node = check_halt_state_context (dfa, mctx->state_log[match_last], mctx, match_last); } @@ -903,7 +901,7 @@ prune_impossible_nodes (preg, mctx) { sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, match_last, 0); - ret = sift_states_backward (preg, mctx, &sctx); + ret = sift_states_backward (dfa, mctx, &sctx); re_node_set_free (&sctx.limits); if (BE (ret != REG_NOERROR, 0)) goto free_return; @@ -925,14 +923,12 @@ prune_impossible_nodes (preg, mctx) since initial states may have constraints like "\<", "^", etc.. */ static inline re_dfastate_t * -acquire_init_state_context (err, preg, mctx, idx) +acquire_init_state_context (err, dfa, mctx, idx) reg_errcode_t *err; - const regex_t *preg; + re_dfa_t *dfa; const re_match_context_t *mctx; int idx; { - re_dfa_t *dfa = (re_dfa_t *) preg->buffer; - *err = REG_NOERROR; if (dfa->init_state->has_constraint) { @@ -969,19 +965,18 @@ acquire_init_state_context (err, preg, m index of the buffer. */ static int -check_matching (preg, mctx, fl_longest_match) - const regex_t *preg; +check_matching (dfa, mctx, fl_longest_match) + re_dfa_t *dfa; re_match_context_t *mctx; int fl_longest_match; { - re_dfa_t *dfa = (re_dfa_t *) preg->buffer; reg_errcode_t err; int match = 0; int match_last = -1; int cur_str_idx = re_string_cur_idx (&mctx->input); re_dfastate_t *cur_state; - cur_state = acquire_init_state_context (&err, preg, mctx, cur_str_idx); + cur_state = acquire_init_state_context (&err, dfa, mctx, cur_str_idx); /* An initial state must not be NULL(invalid state). */ if (BE (cur_state == NULL, 0)) return -2; @@ -998,7 +993,7 @@ check_matching (preg, mctx, fl_longest_m if (cur_state->has_backref) { - err = transit_state_bkref (preg, &cur_state->nodes, mctx); + err = transit_state_bkref (dfa, &cur_state->nodes, mctx); if (BE (err != REG_NOERROR, 0)) return err; } @@ -1008,7 +1003,7 @@ check_matching (preg, mctx, fl_longest_m if (BE (cur_state->halt, 0)) { if (!cur_state->has_constraint - || check_halt_state_context (preg, cur_state, mctx, cur_str_idx)) + || check_halt_state_context (dfa, cur_state, mctx, cur_str_idx)) { if (!fl_longest_match) return cur_str_idx; @@ -1022,7 +1017,7 @@ check_matching (preg, mctx, fl_longest_m while (!re_string_eoi (&mctx->input)) { - cur_state = transit_state (&err, preg, mctx, cur_state); + cur_state = transit_state (&err, dfa, mctx, cur_state); if (cur_state == NULL) /* Reached at the invalid state or an error. */ { cur_str_idx = re_string_cur_idx (&mctx->input); @@ -1051,7 +1046,7 @@ check_matching (preg, mctx, fl_longest_m /* Reached at a halt state. Check the halt state can satisfy the current context. */ if (!cur_state->has_constraint - || check_halt_state_context (preg, cur_state, mctx, + || check_halt_state_context (dfa, cur_state, mctx, re_string_cur_idx (&mctx->input))) { /* We found an appropriate halt state. */ @@ -1088,13 +1083,12 @@ static int check_halt_node_context (dfa, match the context, return the node. */ static int -check_halt_state_context (preg, state, mctx, idx) - const regex_t *preg; +check_halt_state_context (dfa, state, mctx, idx) + re_dfa_t *dfa; const re_dfastate_t *state; const re_match_context_t *mctx; int idx; { - re_dfa_t *dfa = (re_dfa_t *) preg->buffer; int i; unsigned int context; #ifdef DEBUG @@ -1113,15 +1107,14 @@ check_halt_state_context (preg, state, m of errors. */ static int -proceed_next_node (preg, nregs, regs, mctx, pidx, node, eps_via_nodes, fs) - const regex_t *preg; +proceed_next_node (dfa, nregs, regs, mctx, pidx, node, eps_via_nodes, fs) + re_dfa_t *dfa; regmatch_t *regs; const re_match_context_t *mctx; int nregs, *pidx, node; re_node_set *eps_via_nodes; struct re_fail_stack_t *fs; { - re_dfa_t *dfa = (re_dfa_t *)preg->buffer; int i, err, dest_node; dest_node = -1; if (IS_EPSILON_NODE (dfa->nodes[node].type)) @@ -1159,7 +1152,7 @@ proceed_next_node (preg, nregs, regs, mc #ifdef RE_ENABLE_I18N if (ACCEPT_MB_NODE (type)) - naccepted = check_node_accept_bytes (preg, node, &mctx->input, *pidx); + naccepted = check_node_accept_bytes (dfa, node, &mctx->input, *pidx); else #endif /* RE_ENABLE_I18N */ if (type == OP_BACK_REF) @@ -1192,7 +1185,7 @@ proceed_next_node (preg, nregs, regs, mc } if (naccepted != 0 - || check_node_accept (preg, dfa->nodes + node, mctx, *pidx)) + || check_node_accept (dfa, dfa->nodes + node, mctx, *pidx)) { dest_node = dfa->nexts[node]; *pidx = (naccepted == 0) ? *pidx + 1 : *pidx + naccepted; @@ -1322,7 +1315,7 @@ set_regs (preg, mctx, nmatch, pmatch, fl } /* Proceed to next node. */ - cur_node = proceed_next_node (preg, nmatch, pmatch, mctx, &idx, cur_node, + cur_node = proceed_next_node (dfa, nmatch, pmatch, mctx, &idx, cur_node, &eps_via_nodes, fs); if (BE (cur_node < 0, 0)) @@ -1438,13 +1431,12 @@ update_regs (dfa, pmatch, prev_idx_match ((state) != NULL && re_node_set_contains (&(state)->nodes, node)) static reg_errcode_t -sift_states_backward (preg, mctx, sctx) - const regex_t *preg; +sift_states_backward (dfa, mctx, sctx) + re_dfa_t *dfa; re_match_context_t *mctx; re_sift_context_t *sctx; { reg_errcode_t err; - re_dfa_t *dfa = (re_dfa_t *)preg->buffer; int null_cnt = 0; int str_idx = sctx->last_str_idx; re_node_set cur_dest; @@ -1460,7 +1452,7 @@ sift_states_backward (preg, mctx, sctx) err = re_node_set_init_1 (&cur_dest, sctx->last_node); if (BE (err != REG_NOERROR, 0)) return err; - err = update_cur_sifted_state (preg, mctx, sctx, str_idx, &cur_dest); + err = update_cur_sifted_state (dfa, mctx, sctx, str_idx, &cur_dest); if (BE (err != REG_NOERROR, 0)) goto free_return; @@ -1499,7 +1491,7 @@ sift_states_backward (preg, mctx, sctx) #ifdef RE_ENABLE_I18N /* If the node may accept `multi byte'. */ if (ACCEPT_MB_NODE (type)) - naccepted = sift_states_iter_mb (preg, mctx, sctx, prev_node, + naccepted = sift_states_iter_mb (dfa, mctx, sctx, prev_node, str_idx, sctx->last_str_idx); #endif /* RE_ENABLE_I18N */ @@ -1507,7 +1499,7 @@ sift_states_backward (preg, mctx, sctx) See update_cur_sifted_state(). */ if (!naccepted - && check_node_accept (preg, dfa->nodes + prev_node, mctx, + && check_node_accept (dfa, dfa->nodes + prev_node, mctx, str_idx) && STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + 1], dfa->nexts[prev_node])) @@ -1536,7 +1528,7 @@ sift_states_backward (preg, mctx, sctx) - It can epsilon transit to a node in CUR_DEST. - It is in CUR_SRC. And update state_log. */ - err = update_cur_sifted_state (preg, mctx, sctx, str_idx, &cur_dest); + err = update_cur_sifted_state (dfa, mctx, sctx, str_idx, &cur_dest); if (BE (err != REG_NOERROR, 0)) goto free_return; } @@ -1604,15 +1596,14 @@ merge_state_array (dfa, dst, src, num) } static reg_errcode_t -update_cur_sifted_state (preg, mctx, sctx, str_idx, dest_nodes) - const regex_t *preg; +update_cur_sifted_state (dfa, mctx, sctx, str_idx, dest_nodes) + re_dfa_t *dfa; re_match_context_t *mctx; re_sift_context_t *sctx; int str_idx; re_node_set *dest_nodes; { reg_errcode_t err; - re_dfa_t *dfa = (re_dfa_t *)preg->buffer; const re_node_set *candidates; candidates = ((mctx->state_log[str_idx] == NULL) ? &empty_set : &mctx->state_log[str_idx]->nodes); @@ -1643,7 +1634,7 @@ update_cur_sifted_state (preg, mctx, sct if ((mctx->state_log[str_idx] != NULL && mctx->state_log[str_idx]->has_backref)) { - err = sift_states_bkref (preg, mctx, sctx, str_idx, dest_nodes); + err = sift_states_bkref (dfa, mctx, sctx, str_idx, dest_nodes); if (BE (err != REG_NOERROR, 0)) return err; } @@ -1958,15 +1949,14 @@ check_subexp_limits (dfa, dest_nodes, ca } static reg_errcode_t -sift_states_bkref (preg, mctx, sctx, str_idx, dest_nodes) - const regex_t *preg; +sift_states_bkref (dfa, mctx, sctx, str_idx, dest_nodes) + re_dfa_t *dfa; re_match_context_t *mctx; re_sift_context_t *sctx; int str_idx; re_node_set *dest_nodes; { reg_errcode_t err; - re_dfa_t *dfa = (re_dfa_t *)preg->buffer; int node_idx, node; re_sift_context_t local_sctx; const re_node_set *candidates; @@ -2039,7 +2029,7 @@ sift_states_bkref (preg, mctx, sctx, str goto free_return; } cur_state = local_sctx.sifted_states[str_idx]; - err = sift_states_backward (preg, mctx, &local_sctx); + err = sift_states_backward (dfa, mctx, &local_sctx); if (BE (err != REG_NOERROR, 0)) goto free_return; if (sctx->limited_states != NULL) @@ -2082,16 +2072,15 @@ sift_states_bkref (preg, mctx, sctx, str #ifdef RE_ENABLE_I18N static int -sift_states_iter_mb (preg, mctx, sctx, node_idx, str_idx, max_str_idx) - const regex_t *preg; +sift_states_iter_mb (dfa, mctx, sctx, node_idx, str_idx, max_str_idx) + re_dfa_t *dfa; const re_match_context_t *mctx; re_sift_context_t *sctx; int node_idx, str_idx, max_str_idx; { - re_dfa_t *dfa = (re_dfa_t *) preg->buffer; int naccepted; /* Check the node can accept `multi byte'. */ - naccepted = check_node_accept_bytes (preg, node_idx, &mctx->input, str_idx); + naccepted = check_node_accept_bytes (dfa, node_idx, &mctx->input, str_idx); if (naccepted > 0 && str_idx + naccepted <= max_str_idx && !STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + naccepted], dfa->nexts[node_idx])) @@ -2114,13 +2103,12 @@ sift_states_iter_mb (preg, mctx, sctx, n update the destination of STATE_LOG. */ static re_dfastate_t * -transit_state (err, preg, mctx, state) +transit_state (err, dfa, mctx, state) reg_errcode_t *err; - const regex_t *preg; + re_dfa_t *dfa; re_match_context_t *mctx; re_dfastate_t *state; { - re_dfa_t *dfa = (re_dfa_t *) preg->buffer; re_dfastate_t **trtable, *next_state; unsigned char ch; int cur_idx; @@ -2146,7 +2134,7 @@ transit_state (err, preg, mctx, state) /* If the current state can accept multibyte. */ if (state->accept_mb) { - *err = transit_state_mb (preg, state, mctx); + *err = transit_state_mb (dfa, state, mctx); if (BE (*err != REG_NOERROR, 0)) return NULL; } @@ -2160,7 +2148,7 @@ transit_state (err, preg, mctx, state) trtable = state->trtable; if (trtable == NULL) { - trtable = build_trtable (preg, state); + trtable = build_trtable (dfa, state); if (trtable == NULL) { *err = REG_ESPACE; @@ -2186,7 +2174,7 @@ transit_state (err, preg, mctx, state) else { /* don't use transition table */ - next_state = transit_state_sb (err, preg, state, mctx); + next_state = transit_state_sb (err, dfa, state, mctx); if (BE (next_state == NULL && err != REG_NOERROR, 0)) return NULL; } @@ -2256,7 +2244,7 @@ transit_state (err, preg, mctx, state) /* If the next state has back references. */ if (next_state->has_backref) { - *err = transit_state_bkref (preg, &next_state->nodes, mctx); + *err = transit_state_bkref (dfa, &next_state->nodes, mctx); if (BE (*err != REG_NOERROR, 0)) return NULL; next_state = mctx->state_log[cur_idx]; @@ -2307,13 +2295,12 @@ check_subexp_matching_top (dfa, mctx, cu accepting the current input byte. */ static re_dfastate_t * -transit_state_sb (err, preg, state, mctx) +transit_state_sb (err, dfa, state, mctx) reg_errcode_t *err; - const regex_t *preg; + re_dfa_t *dfa; re_dfastate_t *state; re_match_context_t *mctx; { - re_dfa_t *dfa = (re_dfa_t *) preg->buffer; re_node_set next_nodes; re_dfastate_t *next_state; int node_cnt, cur_str_idx = re_string_cur_idx (&mctx->input); @@ -2325,7 +2312,7 @@ transit_state_sb (err, preg, state, mctx for (node_cnt = 0; node_cnt < state->nodes.nelem; ++node_cnt) { int cur_node = state->nodes.elems[node_cnt]; - if (check_node_accept (preg, dfa->nodes + cur_node, mctx, cur_str_idx)) + if (check_node_accept (dfa, dfa->nodes + cur_node, mctx, cur_str_idx)) { *err = re_node_set_merge (&next_nodes, dfa->eclosures + dfa->nexts[cur_node]); @@ -2349,13 +2336,12 @@ transit_state_sb (err, preg, state, mctx #ifdef RE_ENABLE_I18N static reg_errcode_t -transit_state_mb (preg, pstate, mctx) - const regex_t *preg; +transit_state_mb (dfa, pstate, mctx) + re_dfa_t *dfa; re_dfastate_t *pstate; re_match_context_t *mctx; { reg_errcode_t err; - re_dfa_t *dfa = (re_dfa_t *) preg->buffer; int i; for (i = 0; i < pstate->nodes.nelem; ++i) @@ -2378,7 +2364,7 @@ transit_state_mb (preg, pstate, mctx) /* How many bytes the node can accept? */ if (ACCEPT_MB_NODE (dfa->nodes[cur_node_idx].type)) - naccepted = check_node_accept_bytes (preg, cur_node_idx, &mctx->input, + naccepted = check_node_accept_bytes (dfa, cur_node_idx, &mctx->input, re_string_cur_idx (&mctx->input)); if (naccepted == 0) continue; @@ -2420,13 +2406,12 @@ transit_state_mb (preg, pstate, mctx) #endif /* RE_ENABLE_I18N */ static reg_errcode_t -transit_state_bkref (preg, nodes, mctx) - const regex_t *preg; +transit_state_bkref (dfa, nodes, mctx) + re_dfa_t *dfa; const re_node_set *nodes; re_match_context_t *mctx; { reg_errcode_t err; - re_dfa_t *dfa = (re_dfa_t *) preg->buffer; int i; int cur_str_idx = re_string_cur_idx (&mctx->input); @@ -2453,7 +2438,7 @@ transit_state_bkref (preg, nodes, mctx) /* `node' is a backreference. Check the substring which the substring matched. */ bkc_idx = mctx->nbkref_ents; - err = get_subexp (preg, mctx, node_idx, cur_str_idx); + err = get_subexp (dfa, mctx, node_idx, cur_str_idx); if (BE (err != REG_NOERROR, 0)) goto free_return; @@ -2518,7 +2503,7 @@ transit_state_bkref (preg, nodes, mctx) cur_str_idx); if (BE (err != REG_NOERROR, 0)) goto free_return; - err = transit_state_bkref (preg, new_dest_nodes, mctx); + err = transit_state_bkref (dfa, new_dest_nodes, mctx); if (BE (err != REG_NOERROR, 0)) goto free_return; } @@ -2536,13 +2521,12 @@ transit_state_bkref (preg, nodes, mctx) delay these checking for prune_impossible_nodes(). */ static reg_errcode_t -get_subexp (preg, mctx, bkref_node, bkref_str_idx) - const regex_t *preg; +get_subexp (dfa, mctx, bkref_node, bkref_str_idx) + re_dfa_t *dfa; re_match_context_t *mctx; int bkref_node, bkref_str_idx; { int subexp_num, sub_top_idx; - re_dfa_t *dfa = (re_dfa_t *) preg->buffer; const char *buf = (const char *) re_string_get_buffer (&mctx->input); /* Return if we have already checked BKREF_NODE at BKREF_STR_IDX. */ int cache_idx = search_cur_bkref_entry (mctx, bkref_str_idx); @@ -2585,7 +2569,7 @@ get_subexp (preg, mctx, bkref_node, bkre break; /* We don't need to search this sub expression any more. */ bkref_str_off += sl_str_diff; sl_str += sl_str_diff; - err = get_subexp_sub (preg, mctx, sub_top, sub_last, bkref_node, + err = get_subexp_sub (dfa, mctx, sub_top, sub_last, bkref_node, bkref_str_idx); /* Reload buf, since the preceding call might have reallocated @@ -2629,7 +2613,7 @@ get_subexp (preg, mctx, bkref_node, bkre } /* Can the OP_OPEN_SUBEXP node arrive the OP_CLOSE_SUBEXP node in the current context? */ - err = check_arrival (preg, mctx, sub_top->path, sub_top->node, + err = check_arrival (dfa, mctx, sub_top->path, sub_top->node, sub_top->str_idx, cls_node, sl_str, OP_CLOSE_SUBEXP); if (err == REG_NOMATCH) continue; @@ -2638,7 +2622,7 @@ get_subexp (preg, mctx, bkref_node, bkre sub_last = match_ctx_add_sublast (sub_top, cls_node, sl_str); if (BE (sub_last == NULL, 0)) return REG_ESPACE; - err = get_subexp_sub (preg, mctx, sub_top, sub_last, bkref_node, + err = get_subexp_sub (dfa, mctx, sub_top, sub_last, bkref_node, bkref_str_idx); if (err == REG_NOMATCH) continue; @@ -2654,8 +2638,8 @@ get_subexp (preg, mctx, bkref_node, bkre and SUB_LAST. */ static reg_errcode_t -get_subexp_sub (preg, mctx, sub_top, sub_last, bkref_node, bkref_str) - const regex_t *preg; +get_subexp_sub (dfa, mctx, sub_top, sub_last, bkref_node, bkref_str) + re_dfa_t *dfa; re_match_context_t *mctx; const re_sub_match_top_t *sub_top; re_sub_match_last_t *sub_last; @@ -2664,7 +2648,7 @@ get_subexp_sub (preg, mctx, sub_top, sub reg_errcode_t err; int to_idx; /* Can the subexpression arrive the back reference? */ - err = check_arrival (preg, mctx, &sub_last->path, sub_last->node, + err = check_arrival (dfa, mctx, &sub_last->path, sub_last->node, sub_last->str_idx, bkref_node, bkref_str, OP_OPEN_SUBEXP); if (err != REG_NOERROR) return err; @@ -2709,14 +2693,13 @@ find_subexp_node (dfa, nodes, subexp_idx Return REG_NOERROR if it can arrive, or REG_NOMATCH otherwise. */ static reg_errcode_t -check_arrival (preg, mctx, path, top_node, top_str, last_node, last_str, +check_arrival (dfa, mctx, path, top_node, top_str, last_node, last_str, type) - const regex_t *preg; + re_dfa_t *dfa; re_match_context_t *mctx; state_array_t *path; int top_node, top_str, last_node, last_str, type; { - re_dfa_t *dfa = (re_dfa_t *) preg->buffer; reg_errcode_t err; int subexp_num, backup_cur_idx, str_idx, null_cnt; re_dfastate_t *cur_state = NULL; @@ -2780,7 +2763,7 @@ check_arrival (preg, mctx, path, top_nod { if (next_nodes.nelem) { - err = expand_bkref_cache (preg, mctx, &next_nodes, str_idx, last_str, + err = expand_bkref_cache (dfa, mctx, &next_nodes, str_idx, last_str, subexp_num, type); if (BE ( err != REG_NOERROR, 0)) { @@ -2812,7 +2795,7 @@ check_arrival (preg, mctx, path, top_nod } if (cur_state) { - err = check_arrival_add_next_nodes (preg, dfa, mctx, str_idx, + err = check_arrival_add_next_nodes (dfa, mctx, str_idx, &cur_state->nodes, &next_nodes); if (BE (err != REG_NOERROR, 0)) { @@ -2829,7 +2812,7 @@ check_arrival (preg, mctx, path, top_nod re_node_set_free (&next_nodes); return err; } - err = expand_bkref_cache (preg, mctx, &next_nodes, str_idx, last_str, + err = expand_bkref_cache (dfa, mctx, &next_nodes, str_idx, last_str, subexp_num, type); if (BE ( err != REG_NOERROR, 0)) { @@ -2872,8 +2855,7 @@ check_arrival (preg, mctx, path, top_nod Can't we unify them? */ static reg_errcode_t -check_arrival_add_next_nodes (preg, dfa, mctx, str_idx, cur_nodes, next_nodes) - const regex_t *preg; +check_arrival_add_next_nodes (dfa, mctx, str_idx, cur_nodes, next_nodes) re_dfa_t *dfa; re_match_context_t *mctx; int str_idx; @@ -2894,7 +2876,7 @@ check_arrival_add_next_nodes (preg, dfa, /* If the node may accept `multi byte'. */ if (ACCEPT_MB_NODE (type)) { - naccepted = check_node_accept_bytes (preg, cur_node, &mctx->input, + naccepted = check_node_accept_bytes (dfa, cur_node, &mctx->input, str_idx); if (naccepted > 1) { @@ -2930,7 +2912,7 @@ check_arrival_add_next_nodes (preg, dfa, } #endif /* RE_ENABLE_I18N */ if (naccepted - || check_node_accept (preg, dfa->nodes + cur_node, mctx, + || check_node_accept (dfa, dfa->nodes + cur_node, mctx, str_idx)) { err = re_node_set_insert (next_nodes, dfa->nexts[cur_node]); @@ -3051,15 +3033,14 @@ check_arrival_expand_ecl_sub (dfa, dst_n in MCTX->BKREF_ENTS. */ static reg_errcode_t -expand_bkref_cache (preg, mctx, cur_nodes, cur_str, last_str, subexp_num, +expand_bkref_cache (dfa, mctx, cur_nodes, cur_str, last_str, subexp_num, type) - const regex_t *preg; + re_dfa_t *dfa; re_match_context_t *mctx; int cur_str, last_str, subexp_num, type; re_node_set *cur_nodes; { reg_errcode_t err; - re_dfa_t *dfa = (re_dfa_t *) preg->buffer; int cache_idx, cache_idx_start; /* The current state. */ @@ -3141,12 +3122,11 @@ expand_bkref_cache (preg, mctx, cur_node Return the new table if succeeded, otherwise return NULL. */ static re_dfastate_t ** -build_trtable (preg, state) - const regex_t *preg; +build_trtable (dfa, state) + re_dfa_t *dfa; re_dfastate_t *state; { reg_errcode_t err; - re_dfa_t *dfa = (re_dfa_t *) preg->buffer; int i, j, ch; unsigned int elem, mask; int dests_node_malloced = 0, dest_states_malloced = 0; @@ -3181,7 +3161,7 @@ build_trtable (preg, state) /* At first, group all nodes belonging to `state' into several destinations. */ - ndests = group_nodes_into_DFAstates (preg, state, dests_node, dests_ch); + ndests = group_nodes_into_DFAstates (dfa, state, dests_node, dests_ch); if (BE (ndests <= 0, 0)) { if (dests_node_malloced) @@ -3369,14 +3349,13 @@ out_free: to DEST_CH[i]. This function return the number of destinations. */ static int -group_nodes_into_DFAstates (preg, state, dests_node, dests_ch) - const regex_t *preg; +group_nodes_into_DFAstates (dfa, state, dests_node, dests_ch) + re_dfa_t *dfa; const re_dfastate_t *state; re_node_set *dests_node; bitset *dests_ch; { reg_errcode_t err; - const re_dfa_t *dfa = (re_dfa_t *) preg->buffer; int i, j, k; int ndests; /* Number of the destinations from `state'. */ bitset accepts; /* Characters a node can accept. */ @@ -3406,18 +3385,18 @@ group_nodes_into_DFAstates (preg, state, else #endif bitset_set_all (accepts); - if (!(preg->syntax & RE_DOT_NEWLINE)) + if (!(dfa->syntax & RE_DOT_NEWLINE)) bitset_clear (accepts, '\n'); - if (preg->syntax & RE_DOT_NOT_NULL) + if (dfa->syntax & RE_DOT_NOT_NULL) bitset_clear (accepts, '\0'); } #ifdef RE_ENABLE_I18N else if (type == OP_UTF8_PERIOD) { memset (accepts, 255, sizeof (unsigned int) * BITSET_UINTS / 2); - if (!(preg->syntax & RE_DOT_NEWLINE)) + if (!(dfa->syntax & RE_DOT_NEWLINE)) bitset_clear (accepts, '\n'); - if (preg->syntax & RE_DOT_NOT_NULL) + if (dfa->syntax & RE_DOT_NOT_NULL) bitset_clear (accepts, '\0'); } #endif @@ -3561,12 +3540,11 @@ group_nodes_into_DFAstates (preg, state, can only accept one byte. */ static int -check_node_accept_bytes (preg, node_idx, input, str_idx) - const regex_t *preg; +check_node_accept_bytes (dfa, node_idx, input, str_idx) + re_dfa_t *dfa; int node_idx, str_idx; const re_string_t *input; { - const re_dfa_t *dfa = (re_dfa_t *) preg->buffer; const re_token_t *node = dfa->nodes + node_idx; int char_len, elem_len; int i; @@ -3630,9 +3608,9 @@ check_node_accept_bytes (preg, node_idx, /* FIXME: I don't think this if is needed, as both '\n' and '\0' are char_len == 1. */ /* '.' accepts any one character except the following two cases. */ - if ((!(preg->syntax & RE_DOT_NEWLINE) && + if ((!(dfa->syntax & RE_DOT_NEWLINE) && re_string_byte_at (input, str_idx) == '\n') || - ((preg->syntax & RE_DOT_NOT_NULL) && + ((dfa->syntax & RE_DOT_NOT_NULL) && re_string_byte_at (input, str_idx) == '\0')) return 0; return char_len; @@ -3860,8 +3838,8 @@ find_collation_sequence_value (mbs, mbs_ byte of the INPUT. */ static int -check_node_accept (preg, node, mctx, idx) - const regex_t *preg; +check_node_accept (dfa, node, mctx, idx) + re_dfa_t *dfa; const re_token_t *node; const re_match_context_t *mctx; int idx; @@ -3890,8 +3868,8 @@ check_node_accept (preg, node, mctx, idx /* FALLTHROUGH */ #endif case OP_PERIOD: - return !((ch == '\n' && !(preg->syntax & RE_DOT_NEWLINE)) - || (ch == '\0' && (preg->syntax & RE_DOT_NOT_NULL))); + return !((ch == '\n' && !(dfa->syntax & RE_DOT_NEWLINE)) + || (ch == '\0' && (dfa->syntax & RE_DOT_NOT_NULL))); default: return 0; } Jakub
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |