1 Wed Jan 15 12:00:38 1997 Tom Lord <lord@rizla.lanminds.com>
3 * rxsuper.c (rx_superset_cons): reference count tweak.
5 * rxnode.c (rx_rexp_equal): fixed test for equality of
8 * rxgnucomp.h (enum RE_SYNTAX_BITS): turned the syntax
9 bits from "#define" into "enum" to ease debugging.
11 Mon Jan 13 10:07:39 1997 Tom Lord <lord@rizla.lanminds.com>
13 * rxsuper.c (rx_superset_cons):
14 While hash_store will protect cdr itself it might first allocate hash
15 tables and stuff which might cause it to be garbage collected before
16 it's protected -- (from Greg Stark)
18 * rxgnucomp.c (isa_blank): Test for ==, not != '\t'.
21 Tue Dec 3 00:33:27 1996 Tom Lord <lord@rizla.lanminds.com>
23 * rxposix.c (regnexec): When testing to consider freeing REGS,
24 watch out for PMATCH == NULL.
26 * rxspencer.c (rx_next_solution): In case r_parens: Before trying
27 to match a parenthesized subexpression, restore the corresponding
28 regs to their value prior to attempting the match. If the match
29 finally fails, be sure sure to restore the old values then, too.
31 Mon Dec 2 00:52:06 1996 Tom Lord <lord@rizla.lanminds.com>
33 * rxspencer.c (rx_next_solution): After "star_try_next_left_match:"...
34 Only return yes from a star expression whose subexpression fails if
35 the target string has 0 length.
37 * rxposix.c (regnexec, regncomp): reversed the order of
38 the string and string-length arguments to be more like
39 other functions (e.g. strncmp). (Suggested by Mike Haertel)
41 * inst-rxposix.h, rxgnucomp.h (REG_E*): moved declarations
42 of POSIX error codes into the posix header file.
44 * rxgnucomp.c (rx_parse): Don't permit a backreference to
45 an enclosing subexpression. This change returns some code that
46 was bogusly deleted somewhere along the line. This fixes
47 a bug that causes a pattern such as: ((.*)\1)x to core dump.
48 (Reported by Mike Haertel)
50 Sun Nov 24 04:24:13 1996 Tom Lord <lord@rizla.lanminds.com>
52 * rxposix.c (rx_regexec): Added a new optimization
53 that generalizes the fastmap. The new optimization is applied
54 if the length of the string exceeds RX_MANY_CASES.
56 Fri Nov 8 09:07:14 1996 Tom Lord <lord@rizla.lanminds.com>
58 * rxsuper.h (RX_DEFAULT_DFA_CACHE_SIZE):
59 * rxbasic.h (RX_DEFAULT_NFA_DELAY):
60 New macros so these values can be set at compile time.
62 Tue Nov 5 09:37:03 1996 Tom Lord <lord@rizla.lanminds.com>
64 * rxspencer.c (rx_make_solutions): watch out for solns->exp == NULL.
66 Eric Johnson (johnsone@uiuc.edu) detected this bug and
67 also performed useful testing of Rx memory management.
69 Tue Jun 18 11:44:46 1996 Tom Lord <lord@beehive>
71 * rxanal.c (rx_start_superstate): Don't release an old superstate
72 unless it is known that the new superstate has been successfully
75 Thu Jun 13 11:18:25 1996 Tom Lord <lord@beehive>
77 * rxspencer.c etc. (rx_next_solution et al.): remove all traces of rx_maybe
79 Wed May 22 12:28:22 1996 Tom Lord <lord@beehive>
81 * rxanal.c (rx_start_superstate): Preserve the invariant
82 that a locked superstate is never semifree.
84 Fri May 17 10:21:26 1996 Tom Lord <lord@beehive>
86 * rgx.c (scm_regexec): added match data support for
87 "#\c" -- the final_tag of the match (for the cut operator).
89 * rxspencer.c (rx_next_solution): propogate is_final data
90 up through the tree of solution streams.
92 * rxnfa.h (struct rx_nfa_state):
93 unsigned int is_final:1 => int is_final for the cut
96 * rxanal.c (rx_match_here_p):
97 * rxanal.c (rx_fit_p):
98 * rxanal.c (rx_longest): When a final state is detected,
99 propogate the value of the is_final flag back to the
100 caller. It may contain data generated by a "cut" operator.
102 * rxsuper.c (superset_allocator): when marking a superset
103 final, mark it with the maximum of the is_final fields
104 of the constituent nfa states (for the "cut" operator which
105 allows users to set that value).
107 * rxgnucomp.c (rx_parse): Replace "[[:set...:]]" with
108 "[[:cut n:]]". cut is regular but set is not, so cut
109 leads to much faster running patterns.
111 * rxnfa.c (rx_build_nfa): compile r_cut nodes. r_cut
112 nodes match the empty string and nothing more. A parameter
113 to the cut node determines whether the empty match leads
114 to a final state, or to a failure.
117 * rxsuper.c (release_superset_low):
118 * rxanal.c (rx_start_superstate): fixed the test for a cached
119 starting superset to reflect the simplified memory management
120 of `struct rx' (they are now explicitly freed using rx_free_rx)
121 and `struct rx_superset' (they are now ultimately freed using
122 free and not kept on a free-list). Now the `start_set' field
123 of a `struct rx' is only non-0 if it is valid.
125 Tue May 14 08:56:22 1996 Tom Lord <lord@beehive>
127 * rxspencer.h (typedef rx_contextfn): take an entire expression
128 tree instead of just a context type since for some context types,
129 parameters in the tree matter ([[:set...:]])
131 * rxstr.c (rx_str_contextfn): handle [[:set...:]] operator.
133 * rxgnucomp.c (rx_parse): added the [[:set n = x:]] construct
134 to make it easier to lex using regexps.
136 * rxposix.c (regnexec):
137 "This pattern (with 10 subexpressions and 9 backreferences) made no entries
138 in a match array of size 5." (from doug@plan9.att.com)
140 * rxgnucomp.c (rx_parse): new compilation state variable:
142 last_non_regular_expression When compiling, keep track of two, not
143 one point in the tree for concatenating new nodes. The
144 *last_non_regular_expression point is always the same as the
145 *last_expression or is a parent of that node. Concatenations of
146 regular constructs happen at last_expression, others at
147 last_non_regular_expression. The resulting trees have
148 "observable" constructs clustered near the root of the tree which
149 allows those optimizations that apply only to regular subtrees to
150 have a greater impact on overall performance.
153 * rxspencer.c (rx_next_solution): interval satisfaction test was wrong.
155 * rxanal.c (rx_posix_analyze_rexp): An interval is always observed (not truly
156 a regular expression).
158 * rxstr.c (rx_str_contextfn): "when you're doing
159 back-reference matching case insensitively (with REG_ICASE set),
160 you are supposed to also do the BR matching without paying attention
163 Mon May 13 09:59:48 1996 Tom Lord <lord@beehive>
165 * rxspencer.c (rx_next_solution): Don't construct
166 an NFA when comparing an r_string to some text --
167 just do a strcmp-like operation.
169 * rxgnucomp.c (rx_parse): new variable: n_members
170 An array keeping track of the size of csets generated
171 by inverting the translation table.
173 (rx_parse): validate_inv_tr and n_members were way to big --
174 each only needs CHAR_SET_SIZE elements.
176 Mon May 13 09:29:42 1996 Zachary Weinberg <zaw2@rabi.phys.columbia.edu>
178 * rxnode.c (rx_init_string): New data structure for strings --
179 part of the overall support for constant string optimization.
181 * rxnode.c (rx_mk_r_str etc.): a new type of rexp-node --
182 an abbreviation for a concatenation of characters.
184 * rxdbug.c (print_rexp): Added support for printing r_str nodes.
186 * rxgnucomp.c (rx_parse): initial support for constant strings.
190 Wed Jan 31 19:59:46 1996 Preston L. Bannister <pbannister@ca.mdis.com>
192 Changes to compile clean under MSVC 4.0 (w/o warnings).
193 Added makefile for MSVC 4.0 (librx.mak).
195 [! Changes marked *** were made differently from the submitted
196 patches -- the descriptions may not apply exactly.]
198 hashrexp.c: Added __STDC__ variant of function definition.
199 *** rxall.h: Pull in standard C header files.
200 *** Map bzero() to memset().
201 rxanal.c: Remove unused variable.
202 rxdbug.c: Added stdio include.
203 rxhash.c: Remove unused variable.
204 rxnfa.c: Remove {re,m}alloc definition.
205 rxposix.c: Remove unused variable.
206 *** Cast parameter nmatch declared as size_t to int on use.
207 *** Perhaps nmatch should be passed as int?
208 [made related variables size_t]
209 rxspencer.c: Add rxsimp.h include.
210 Remove unused variables and labels.
211 rxunfa.c: Remove unused variable.
214 Tue Jan 30 10:29:16 1996 Tom Lord <lord@beehive>
216 * rxsimp.c (rx_simple_rexp): move assignment out of if.
217 ("Preston L. Bannister" <preston@speed.net>)
219 * Makefile.in (CFLAGS, ALL_CFLAGS): rearranged to allow user
222 * rxposix.h: comment stuff after #endif.
223 (reported by Eric Backus <ericb@lsid.hp.com>)
225 Mon Jan 1 13:03:28 1996 Jason Molenda (crash@phydeaux.cygnus.com)
227 * rxbasic.c (rx_basic_make_solutions): argument called 'rexp' is
228 now called 'expression'. Argument 'str' should be unsigned char.
230 * rxbasic.h (rx_basic_make_solutions): argument 'str' should be
233 * rxsuper.h (rx_handle_cache_miss, rx_superstate_eclosure_union):
234 syntax error in prototypes. [Actually fixed in rxsuper.c, from which
235 that section of rxsuper.h is derived.]
237 * rxnode.c (rx_mk_r_cset): fix function decl.
239 Tue Jan 30 09:43:28 1996 Tom Lord <lord@beehive>
241 * rxposix.c (regnexec): pass rx_regexec "regs", not "pmatch".
242 "regs" is valid even if "pmatch" is NULL.
243 (Fixes testsuite bug "pragma" reported by John.Szetela@amd.com (John J. Szetela)
244 also fixes bug reported by Jongki Suwandi <jongkis@loc1.tandem.com>)
246 Fri Jan 26 14:23:20 1996 Tom Lord <lord@beehive>
248 * rxdbug.c (AT): Use the GCC feature only if HAVE_POSITIONAL_ARRAY_INITS
251 * Makefile.in: Fixed depends target to not include system
252 header files. Use @exec_prefix@. (Derek Clegg <Derek_Clegg@next.com>)
254 Thu Jan 4 16:13:07 1996 Tom Lord <lord@beehive>
256 * rxposix.c (rx_regexec): Don't bother checking to see if an
257 anchored pattern matches other than at the beginning of a string.
259 (rx_regmatch): Don't bother looking for matches that are the
260 wrong length if the overall length of the expression is known.
261 This duplicates an optimization already in rx_make_solutions and
262 rx_basic_make_solutions, but its worth it. The make_solutions
263 optimization applies to fixed length subexpressions of a variable
264 length expression. The regmatch optimization can avoid (in sed,
265 for example) many, many uneeded calls to make_solutions and
268 * rxspencer.c (rx_make_solutions, rx_basic_make_solutions): If the
269 expression is fixed length and that length doesn't match the
270 buffer, don't bother constructing a new solution stream -- just
271 return the canonical "no solution" stream.
274 Sat Dec 30 21:19:31 1995 Tom Lord <lord@beehive>
276 * *.[ch]: posixification and algorithmic improvement (thanks