diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2015-09-15 00:41:17 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2015-09-15 00:41:17 -0700 |
commit | 815f1dcda70f161b09813fc4fddc24c522ea71bf (patch) | |
tree | 5e51e4e0d8365cef1d4fc6f3a5f4f60cc7064ee0 | |
parent | 943b5baa2d54fc1cc90758429c8a69c288f70868 (diff) | |
download | txr-815f1dcda70f161b09813fc4fddc24c522ea71bf.tar.gz txr-815f1dcda70f161b09813fc4fddc24c522ea71bf.tar.bz2 txr-815f1dcda70f161b09813fc4fddc24c522ea71bf.zip |
Use alloca for some temporary arrays in regex module.
* regex.c (nfa_free): Use alloca for array of all states.
(nfa_run): Use alloca for move, closure and stack arrays.
-rw-r--r-- | regex.c | 16 |
1 files changed, 5 insertions, 11 deletions
@@ -36,6 +36,7 @@ #include <signal.h> #include <stdarg.h> #include "config.h" +#include ALLOCA_H #include "lib.h" #include "parser.h" #include "signal.h" @@ -1096,7 +1097,7 @@ static void nfa_collect_one(nfa_state_t *s, mem_t *ctx) static void nfa_free(nfa_t nfa, int nstates) { - nfa_state_t **all = coerce(nfa_state_t **, chk_malloc(nstates * sizeof *all)); + nfa_state_t **all = coerce(nfa_state_t **, alloca(nstates * sizeof *all)); nfa_state_t **pelem = all, *s = nfa.start; unsigned visited = s->a.visited + 1; int i; @@ -1107,8 +1108,6 @@ static void nfa_free(nfa_t nfa, int nstates) for (i = 0; i < nstates; i++) nfa_state_free(all[i]); - - free(all); } /* @@ -1242,9 +1241,9 @@ static cnum nfa_run(nfa_t nfa, int nstates, const wchar_t *str) { const wchar_t *last_accept_pos = 0, *ptr = str; unsigned visited = nfa.start->a.visited + 1; - nfa_state_t **move = coerce(nfa_state_t **, chk_malloc(nstates * sizeof *move)); - nfa_state_t **clos = coerce(nfa_state_t **, chk_malloc(nstates * sizeof *clos)); - nfa_state_t **stack = coerce(nfa_state_t **, chk_malloc(nstates * sizeof *stack)); + nfa_state_t **move = coerce(nfa_state_t **, alloca(nstates * sizeof *move)); + nfa_state_t **clos = coerce(nfa_state_t **, alloca(nstates * sizeof *clos)); + nfa_state_t **stack = coerce(nfa_state_t **, alloca(nstates * sizeof *stack)); int nmove = 1, nclos; int accept = 0; @@ -1273,11 +1272,6 @@ static cnum nfa_run(nfa_t nfa, int nstates, const wchar_t *str) } nfa.start->a.visited = visited; - - free(stack); - free(clos); - free(move); - return last_accept_pos ? last_accept_pos - str : -1; } |