Parallelize in_ifaddrhead operation
[dragonfly.git] / gnu / lib / libregex / ChangeLog
blobef919d276a7626409655e80b48903587e9eabacd
1 Fri Apr  2 17:31:59 1993  Jim Blandy  (jimb@totoro.cs.oberlin.edu)
3         * Released version 0.12.
5         * regex.c (regerror): If errcode is zero, that's not a valid
6         error code, according to POSIX, but return "Success."
8         * regex.c (regerror): Remember to actually fetch the message
9         from re_error_msg.
11         * regex.c (regex_compile): Don't use the trick for ".*\n" on
12         ".+\n".  Since the latter involves laying an extra choice
13         point, the backward jump isn't adjusted properly.
15 Thu Mar 25 21:35:18 1993  Jim Blandy  (jimb@totoro.cs.oberlin.edu)
17         * regex.c (regex_compile): In the handle_open and handle_close
18         sections, clear pending_exact to zero.
20 Tue Mar  9 12:03:07 1993  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)
22         * regex.c (re_search_2): In the loop which searches forward
23         using fastmap, don't forget to cast the character from the
24         string to an unsigned before using it as an index into the
25         translate map.
27 Thu Jan 14 15:41:46 1993  David J. MacKenzie  (djm@kropotkin.gnu.ai.mit.edu)
29         * regex.h: Never define const; let the callers do it.
30         configure.in: Don't define USING_AUTOCONF.
32 Wed Jan  6 20:49:29 1993  Jim Blandy  (jimb@geech.gnu.ai.mit.edu)
34         * regex.c (regerror): Abort if ERRCODE is out of range.
36 Sun Dec 20 16:19:10 1992  Jim Blandy  (jimb@totoro.cs.oberlin.edu)
38         * configure.in: Arrange to #define USING_AUTOCONF.
39         * regex.h: If USING_AUTOCONF is #defined, don't mess with
40         `const' at all; autoconf has taken care of it.
42 Mon Dec 14 21:40:39 1992  David J. MacKenzie  (djm@kropotkin.gnu.ai.mit.edu)
44         * regex.h (RE_SYNTAX_AWK): Fix typo.  From Arnold Robbins.
46 Sun Dec 13 20:35:39 1992  Jim Blandy  (jimb@totoro.cs.oberlin.edu)
48         * regex.c (compile_range): Fetch the range start and end by
49         casting the pattern pointer to an `unsigned char *' before
50         fetching through it.
52 Sat Dec 12 09:41:01 1992  Jim Blandy  (jimb@totoro.cs.oberlin.edu)
54         * regex.c: Undo change of 12/7/92; it's better for Emacs to
55         #define HAVE_CONFIG_H.
57 Fri Dec 11 22:00:34 1992  Jim Meyering (meyering@hal.gnu.ai.mit.edu)
59         * regex.c: Define and use isascii-protected ctype.h macros.
61 Fri Dec 11 05:10:38 1992  Jim Blandy  (jimb@totoro.cs.oberlin.edu)
63         * regex.c (re_match_2): Undo Karl's November 10th change; it
64         keeps the group in :\(.*\) from matching :/ properly.
66 Mon Dec  7 19:44:56 1992  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)
68         * regex.c: #include config.h if either HAVE_CONFIG_H or emacs
69         is #defined.
71 Tue Dec  1 13:33:17 1992  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)
73         * regex.c [HAVE_CONFIG_H]: Include config.h.
75 Wed Nov 25 23:46:02 1992  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)
77         * regex.c (regcomp): Add parens around bitwise & for clarity.
78         Initialize preg->allocated to prevent segv.
80 Tue Nov 24 09:22:29 1992  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)
82         * regex.c: Use HAVE_STRING_H, not USG.
83         * configure.in: Check for string.h, not USG.
85 Fri Nov 20 06:33:24 1992  Karl Berry  (karl@cs.umb.edu)
87         * regex.c (SIGN_EXTEND_CHAR) [VMS]: Back out of this change,
88         since Roland Roberts now says it was a localism.
90 Mon Nov 16 07:01:36 1992  Karl Berry  (karl@cs.umb.edu)
92         * regex.h (const) [!HAVE_CONST]: Test another cpp symbol (from
93           Autoconf) before zapping const.
95 Sun Nov 15 05:36:42 1992  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)
97         * regex.c, regex.h: Changes for VMS from Roland B Roberts
98         <roberts@nsrl31.nsrl.rochester.edu>.
100 Thu Nov 12 11:31:15 1992  Karl Berry  (karl@cs.umb.edu)
102         * Makefile.in (distfiles): Include INSTALL.
104 Tue Nov 10 09:29:23 1992  Karl Berry  (karl@cs.umb.edu)
106         * regex.c (re_match_2): At maybe_pop_jump, if at end of string
107           and pattern, just quit the matching loop.
109         * regex.c (LETTER_P): Rename to `WORDCHAR_P'.
111         * regex.c (AT_STRINGS_{BEG,END}): Take `d' as an arg; change
112           callers.
114         * regex.c (re_match_2) [!emacs]: In wordchar and notwordchar
115           cases, advance d.
117 Wed Nov  4 15:43:58 1992  Karl Berry  (karl@hal.gnu.ai.mit.edu)
119         * regex.h (const) [!__STDC__]: Don't define if it's already defined.
121 Sat Oct 17 19:28:19 1992  Karl Berry  (karl@cs.umb.edu)
123         * regex.c (bcmp, bcopy, bzero): Only #define if they are not
124           already #defined.
126         * configure.in: Use AC_CONST.
128 Thu Oct 15 08:39:06 1992  Karl Berry  (karl@cs.umb.edu)
130         * regex.h (const) [!const]: Conditionalize.
132 Fri Oct  2 13:31:42 1992  Karl Berry  (karl@cs.umb.edu)
134         * regex.h (RE_SYNTAX_ED): New definition.
136 Sun Sep 20 12:53:39 1992  Karl Berry  (karl@cs.umb.edu)
138         * regex.[ch]: remove traces of `longest_p' -- dumb idea to put
139           this into the pattern buffer, as it means parallelism loses.
141         * Makefile.in (config.status): use sh to run configure --no-create.
143         * Makefile.in (realclean): OK, don't remove configure.
145 Sat Sep 19 09:05:08 1992  Karl Berry  (karl@hayley)
147         * regex.c (PUSH_FAILURE_POINT, POP_FAILURE_POINT) [DEBUG]: keep
148           track of how many failure points we push and pop.
149         (re_match_2) [DEBUG]: declare variables for that, and print results.
150         (DEBUG_PRINT4): new macro.
152         * regex.h (re_pattern_buffer): new field `longest_p' (to
153           eliminate backtracking if the user doesn't need it).
154         * regex.c (re_compile_pattern): initialize it (to 1).
155         (re_search_2): set it to zero if register information is not needed.
156         (re_match_2): if it's set, don't backtrack.
158         * regex.c (re_search_2): update fastmap only after checking that
159           the pattern is anchored.
161         * regex.c (re_match_2): do more debugging at maybe_pop_jump.
163         * regex.c (re_search_2): cast result of TRANSLATE for use in
164           array subscript.
166 Thu Sep 17 19:47:16 1992  Karl Berry  (karl@geech.gnu.ai.mit.edu)
168         * Version 0.11.
170 Wed Sep 16 08:17:10 1992  Karl Berry  (karl@hayley)
172         * regex.c (INIT_FAIL_STACK): rewrite as statements instead of a
173           complicated comma expr, to avoid compiler warnings (and also
174           simplify).
175         (re_compile_fastmap, re_match_2): change callers.
177         * regex.c (POP_FAILURE_POINT): cast pop of regstart and regend
178           to avoid compiler warnings.
180         * regex.h (RE_NEWLINE_ORDINARY): remove this syntax bit, and
181           remove uses.
182         * regex.c (at_{beg,end}line_loc_p): go the last mile: remove
183           the RE_NEWLINE_ORDINARY case which made the ^ in \n^ be an anchor.
185 Tue Sep 15 09:55:29 1992  Karl Berry  (karl@hayley)
187         * regex.c (at_begline_loc_p): new fn.
188         (at_endline_loc_p): simplify at_endline_op_p.
189         (regex_compile): in ^/$ cases, call the above.
191         * regex.c (POP_FAILURE_POINT): rewrite the fn as a macro again,
192           as lord's profiling indicates the function is 20% of the time.
193         (re_match_2): callers changed.
195         * configure.in (AC_MEMORY_H): remove, since we never use memcpy et al.
197 Mon Sep 14 17:49:27 1992  Karl Berry  (karl@hayley)
199         * Makefile.in (makeargs): include MFLAGS.
201 Sun Sep 13 07:41:45 1992  Karl Berry  (karl@hayley)
203         * regex.c (regex_compile): in \1..\9 case, make it always
204           invalid to use \<digit> if there is no preceding <digit>th subexpr.
205         * regex.h (RE_NO_MISSING_BK_REF): remove this syntax bit.
207         * regex.c (regex_compile): remove support for invalid empty groups.
208         * regex.h (RE_NO_EMPTY_GROUPS): remove this syntax bit.
210         * regex.c (FREE_VARIABLES) [!REGEX_MALLOC]: define as alloca (0), 
211           to reclaim memory.
213         * regex.h (RE_SYNTAX_POSIX_SED): don't bother with this.
215 Sat Sep 12 13:37:21 1992  Karl Berry  (karl@hayley)
217         * README: incorporate emacs.diff.
219         * regex.h (_RE_ARGS) [!__STDC__]: define as empty parens.
221         * configure.in: add AC_ALLOCA.
223         * Put test files in subdir test, documentation in subdir doc.
224         Adjust Makefile.in and configure.in accordingly.
226 Thu Sep 10 10:29:11 1992  Karl Berry  (karl@hayley)
228         * regex.h (RE_SYNTAX_{POSIX_,}SED): new definitions.
230 Wed Sep  9 06:27:09 1992  Karl Berry  (karl@hayley)
232         * Version 0.10.
234 Tue Sep  8 07:32:30 1992  Karl Berry  (karl@hayley)
236         * xregex.texinfo: put the day of month into the date.
238         * Makefile.in (realclean): remove Texinfo-generated files.
239         (distclean): remove empty sorted index files.
240         (clean): remove dvi files, etc.
242         * configure.in: test for more Unix variants.
244         * fileregex.c: new file.
245         Makefile.in (fileregex): new target.
247         * iregex.c (main): move variable decls to smallest scope.
249         * regex.c (FREE_VARIABLES): free reg_{,info_}dummy.
250         (re_match_2): check that the allocation for those two succeeded.
252         * regex.c (FREE_VAR): replace FREE_NONNULL with this.
253         (FREE_VARIABLES): call it.
254         (re_match_2) [REGEX_MALLOC]: initialize all our vars to NULL.
256         * tregress.c (do_match): generalize simple_match.
257         (SIMPLE_NONMATCH): new macro.
258         (SIMPLE_MATCH): change from routine.
260         * Makefile.in (regex.texinfo): make file readonly, so we don't
261           edit it by mistake.
263         * many files (re_default_syntax): rename to `re_syntax_options';
264           call re_set_syntax instead of assigning to the variable where
265           possible.
267 Mon Sep  7 10:12:16 1992  Karl Berry  (karl@hayley)
269         * syntax.skel: don't use prototypes.
271         * {configure,Makefile}.in: new files.
273         * regex.c: include <string.h> `#if USG || STDC_HEADERS'; remove
274           obsolete test for `POSIX', and test for BSRTING.
275         Include <strings.h> if we are not USG or STDC_HEADERS.
276         Do not include <unistd.h>.  What did we ever need that for?
278         * regex.h (RE_NO_EMPTY_ALTS): remove this.
279         (RE_SYNTAX_AWK): remove from here, too.
280         * regex.c (regex_compile): remove the check.
281         * xregex.texinfo (Alternation Operator): update.
282         * other.c (test_others): remove tests for this.
284         * regex.h (RE_DUP_MAX): undefine if already defined.
286         * regex.h: (RE_SYNTAX_POSIX*): redo to allow more operators, and
287           define new syntaxes with the minimal set.
289         * syntax.skel (main): used sscanf instead of scanf.
291         * regex.h (RE_SYNTAX_*GREP): new definitions from mike.
293         * regex.c (regex_compile): initialize the upper bound of
294           intervals at the beginning of the interval, not the end.
295           (From pclink@qld.tne.oz.au.)
297         * regex.c (handle_bar): rename to `handle_alt', for consistency.
299         * regex.c ({store,insert}_{op1,op2}): new routines (except the last).
300         ({STORE,INSERT}_JUMP{,2}): macros to replace the old routines,
301          which took arguments in different orders, and were generally weird.
303         * regex.c (PAT_PUSH*): rename to `BUF_PUSH*' -- we're not
304           appending info to the pattern!
306 Sun Sep  6 11:26:49 1992  Karl Berry  (karl@hayley)
308         * regex.c (regex_compile): delete the variable
309           `following_left_brace', since we never use it.
311         * regex.c (print_compiled_pattern): don't print the fastmap if
312           it's null.
314         * regex.c (re_compile_fastmap): handle
315           `on_failure_keep_string_jump' like `on_failure_jump'.
317         * regex.c (re_match_2): in `charset{,_not' case, cast the bit
318           count to unsigned, not unsigned char, in case we have a full
319           32-byte bit list.
321         * tregress.c (simple_match): remove.
322         (simple_test): rename as `simple_match'.
323         (simple_compile): print the error string if the compile failed.
325         * regex.c (DO_RANGE): rewrite as a function, `compile_range', so
326           we can debug it.  Change pattern characters to unsigned char
327           *'s, and change the range variable to an unsigned.
328         (regex_compile): change calls.
330 Sat Sep  5 17:40:49 1992  Karl Berry  (karl@hayley)
332         * regex.h (_RE_ARGS): new macro to put in argument lists (if
333           ANSI) or omit them (if K&R); don't declare routines twice.
335         * many files (obscure_syntax): rename to `re_default_syntax'.
337 Fri Sep  4 09:06:53 1992  Karl Berry  (karl@hayley)
339         * GNUmakefile (extraclean): new target.
340         (realclean): delete the info files.
342 Wed Sep  2 08:14:42 1992  Karl Berry  (karl@hayley)
344         * regex.h: doc fix.
346 Sun Aug 23 06:53:15 1992  Karl Berry  (karl@hayley)
348         * regex.[ch] (re_comp): no const in the return type (from djm).
350 Fri Aug 14 07:25:46 1992  Karl Berry  (karl@hayley)
352         * regex.c (DO_RANGE): declare variables as unsigned chars, not
353           signed chars (from jimb).
355 Wed Jul 29 18:33:53 1992  Karl Berry  (karl@claude.cs.umb.edu)
357         * Version 0.9.
359         * GNUmakefile (distclean): do not remove regex.texinfo.
360         (realclean): remove it here.
362         * tregress.c (simple_test): initialize buf.buffer.
364 Sun Jul 26 08:59:38 1992  Karl Berry  (karl@hayley)
366         * regex.c (push_dummy_failure): new opcode and corresponding
367           case in the various routines.  Pushed at the end of
368           alternatives.
370         * regex.c (jump_past_next_alt): rename to `jump_past_alt', for
371           brevity.
372         (no_pop_jump): rename to `jump'.
374         * regex.c (regex_compile) [DEBUG]: terminate printing of pattern
375           with a newline.
377         * NEWS: new file.
379         * tregress.c (simple_{compile,match,test}): routines to simplify all
380           these little tests.
382         * tregress.c: test for matching as much as possible.
384 Fri Jul 10 06:53:32 1992  Karl Berry  (karl@hayley)
386         * Version 0.8.
388 Wed Jul  8 06:39:31 1992  Karl Berry  (karl@hayley)
390         * regex.c (SIGN_EXTEND_CHAR): #undef any previous definition, as
391           ours should always work properly.
393 Mon Jul  6 07:10:50 1992  Karl Berry  (karl@hayley)
395         * iregex.c (main) [DEBUG]: conditionalize the call to
396           print_compiled_pattern.
398         * iregex.c (main): initialize buf.buffer to NULL.
399         * tregress (test_regress): likewise.
401         * regex.c (alloca) [sparc]: #if on HAVE_ALLOCA_H instead.
403         * tregress.c (test_regress): didn't have jla's test quite right.
405 Sat Jul  4 09:02:12 1992  Karl Berry  (karl@hayley)
407         * regex.c (re_match_2): only REGEX_ALLOCATE all the register
408           vectors if the pattern actually has registers.
409         (match_end): new variable to avoid having to use best_regend[0].
411         * regex.c (IS_IN_FIRST_STRING): rename to FIRST_STRING_P.
413         * regex.c: doc fixes.
415         * tregess.c (test_regress): new fastmap test forwarded by rms.
417         * tregress.c (test_regress): initialize the fastmap field.
419         * tregress.c (test_regress): new test from jla that aborted
420           in re_search_2.
422 Fri Jul  3 09:10:05 1992  Karl Berry  (karl@hayley)
424         * tregress.c (test_regress): add tests for translating charsets,
425           from kaoru.
427         * GNUmakefile (common): add alloca.o.
428         * alloca.c: new file, copied from bison.
430         * other.c (test_others): remove var `buf', since it's no longer used.
432         * Below changes from ro@TechFak.Uni-Bielefeld.DE.
434         * tregress.c (test_regress): initialize buf.allocated.
436         * regex.c (re_compile_fastmap): initialize `succeed_n_p'.
438         * GNUmakefile (regex): depend on $(common).
440 Wed Jul  1 07:12:46 1992  Karl Berry  (karl@hayley)
442         * Version 0.7.
444         * regex.c: doc fixes.
446 Mon Jun 29 08:09:47 1992  Karl Berry  (karl@fosse)
448         * regex.c (pop_failure_point): change string vars to
449         `const char *' from `unsigned char *'.
451         * regex.c: consolidate debugging stuff.
452         (print_partial_compiled_pattern): avoid enum clash.
454 Mon Jun 29 07:50:27 1992  Karl Berry  (karl@hayley)
456         * xmalloc.c: new file.
457         * GNUmakefile (common): add it.
459         * iregex.c (print_regs): new routine (from jimb).
460         (main): call it.
462 Sat Jun 27 10:50:59 1992  Jim Blandy  (jimb@pogo.cs.oberlin.edu)
464         * xregex.c (re_match_2): When we have accepted a match and 
465         restored d from best_regend[0], we need to set dend
466         appropriately as well.
468 Sun Jun 28 08:48:41 1992  Karl Berry  (karl@hayley)
470         * tregress.c: rename from regress.c.
472         * regex.c (print_compiled_pattern): improve charset case to ease
473             byte-counting.
474           Also, don't distinguish between Emacs and non-Emacs
475            {not,}wordchar opcodes.
477         * regex.c (print_fastmap): move here.
478         * test.c: from here.
479         * regex.c (print_{{partial,}compiled_pattern,double_string}):
480           rename from ..._printer.  Change calls here and in test.c.
482         * regex.c: create from xregex.c and regexinc.c for once and for
483           all, and change the debug fns to be extern, instead of static.
484         * GNUmakefile: remove traces of xregex.c.
485         * test.c: put in externs, instead of including regexinc.c.
487         * xregex.c: move interactive main program and scanstring to iregex.c.
488         * iregex.c: new file.
489         * upcase.c, printchar.c: new files.
491         * various doc fixes and other cosmetic changes throughout.
493         * regexinc.c (compiled_pattern_printer): change variable name,
494           for consistency.
495         (partial_compiled_pattern_printer): print other info about the
496           compiled pattern, besides just the opcodes.
497         * xregex.c (regex_compile) [DEBUG]: print the compiled pattern
498           when we're done.
500         * xregex.c (re_compile_fastmap): in the duplicate case, set
501             `can_be_null' and return.
502           Also, set `bufp->can_be_null' according to a new variable,
503             `path_can_be_null'.
504           Also, rewrite main while loop to not test `p != NULL', since
505             we never set it that way.
506           Also, eliminate special `can_be_null' value for the endline case.
507         (re_search_2): don't test for the special value.
508        * regex.h (struct re_pattern_buffer): remove the definition.
510 Sat Jun 27 15:00:40 1992  Karl Berry  (karl@hayley)
512         * xregex.c (re_compile_fastmap): remove the `RE_' from
513             `REG_RE_MATCH_NULL_AT_END'.
514           Also, assert the fastmap in the pattern buffer is non-null.
515           Also, reset `succeed_n_p' after we've
516             paid attention to it, instead of every time through the loop.
517           Also, in the `anychar' case, only clear fastmap['\n'] if the
518            syntax says to, and don't return prematurely.
519           Also, rearrange cases in some semblance of a rational order.
520         * regex.h (REG_RE_MATCH_NULL_AT_END): remove the `RE_' from the name.
522         * other.c: take bug reports from here.
523         * regress.c: new file for them.
524         * GNUmakefile (test): add it.
525         * main.c (main): new possible test.
526         * test.h (test_type): new value in enum.
528 Thu Jun 25 17:37:43 1992  Karl Berry  (karl@hayley)
530         * xregex.c (scanstring) [test]: new function from jimb to allow some
531           escapes.
532         (main) [test]: call it (on the string, not the pattern).
534         * xregex.c (main): make return type `int'.
536 Wed Jun 24 10:43:03 1992  Karl Berry  (karl@hayley)
538         * xregex.c (pattern_offset_t): change to `int', for the benefit
539           of patterns which compile to more than 2^15 bytes.
541         * xregex.c (GET_BUFFER_SPACE): remove spurious braces.
543         * xregex.texinfo (Using Registers): put in a stub to ``document''
544           the new function.
545         * regex.h (re_set_registers) [!__STDC__]: declare.
546         * xregex.c (re_set_registers): declare K&R style (also move to a
547           different place in the file).
549 Mon Jun  8 18:03:28 1992  Jim Blandy  (jimb@pogo.cs.oberlin.edu)
551         * regex.h (RE_NREGS): Doc fix.
553         * xregex.c (re_set_registers): New function.
554         * regex.h (re_set_registers): Declaration for new function.
556 Fri Jun  5 06:55:18 1992  Karl Berry  (karl@hayley)
558         * main.c (main): `return 0' instead of `exit (0)'.  (From Paul Eggert)
560         * regexinc.c (SIGN_EXTEND_CHAR): cast to unsigned char.
561         (extract_number, EXTRACT_NUMBER): don't bother to cast here.
563 Tue Jun  2 07:37:53 1992  Karl Berry  (karl@hayley)
565         * Version 0.6.
567         * Change copyrights to `1985, 89, ...'.
569         * regex.h (REG_RE_MATCH_NULL_AT_END): new macro.
570         * xregex.c (re_compile_fastmap): initialize `can_be_null' to
571           `p==pend', instead of in the test at the top of the loop (as
572           it was, it was always being set).
573           Also, set `can_be_null'=1 if we would jump to the end of the
574             pattern in the `on_failure_jump' cases.
575         (re_search_2): check if `can_be_null' is 1, not nonzero.  This
576           was the original test in rms' regex; why did we change this?
578         * xregex.c (re_compile_fastmap): rename `is_a_succeed_n' to
579           `succeed_n_p'.
581 Sat May 30 08:09:08 1992  Karl Berry  (karl@hayley)
583         * xregex.c (re_compile_pattern): declare `regnum' as `unsigned',
584           not `regnum_t', for the benefit of those patterns with more
585           than 255 groups.
587         * xregex.c: rename `failure_stack' to `fail_stack', for brevity;
588           likewise for `match_nothing' to `match_null'.
590         * regexinc.c (REGEX_REALLOCATE): take both the new and old
591           sizes, and copy only the old bytes.
592         * xregex.c (DOUBLE_FAILURE_STACK): pass both old and new.
593         * This change from Thorsten Ohl.
595 Fri May 29 11:45:22 1992  Karl Berry  (karl@hayley)
597         * regexinc.c (SIGN_EXTEND_CHAR): define as `(signed char) c'
598           instead of relying on __CHAR_UNSIGNED__, to work with
599           compilers other than GCC.  From Per Bothner.
601         * main.c (main): change return type to `int'.
603 Mon May 18 06:37:08 1992  Karl Berry  (karl@hayley)
605         * regex.h (RE_SYNTAX_AWK): typo in RE_RE_UNMATCHED...
607 Fri May 15 10:44:46 1992  Karl Berry  (karl@hayley)
609         * Version 0.5.
611 Sun May  3 13:54:00 1992  Karl Berry  (karl@hayley)
613         * regex.h (struct re_pattern_buffer): now it's just `regs_allocated'.
614         (REGS_UNALLOCATED, REGS_REALLOCATE, REGS_FIXED): new constants.
615         * xregex.c (regexec, re_compile_pattern): set the field appropriately.
616         (re_match_2): and use it.  bufp can't be const any more.
618 Fri May  1 15:43:09 1992  Karl Berry  (karl@hayley)
620         * regexinc.c: unconditionally include <sys/types.h>, first.
622         * regex.h (struct re_pattern_buffer): rename
623           `caller_allocated_regs' to `regs_allocated_p'.
624         * xregex.c (re_compile_pattern): same change here.
625         (regexec): and here.
626         (re_match_2): reallocate registers if necessary.
628 Fri Apr 10 07:46:50 1992  Karl Berry  (karl@hayley)
630         * regex.h (RE_SYNTAX{_POSIX,}_AWK): new definitions from Arnold.
632 Sun Mar 15 07:34:30 1992  Karl Berry  (karl at hayley)
634         * GNUmakefile (dist): versionize regex.{c,h,texinfo}.
636 Tue Mar 10 07:05:38 1992  Karl Berry  (karl at hayley)
638         * Version 0.4.
640         * xregex.c (PUSH_FAILURE_POINT): always increment the failure id.
641         (DEBUG_STATEMENT) [DEBUG]: execute the statement even if `debug'==0.
643         * xregex.c (pop_failure_point): if the saved string location is
644           null, keep the current value.
645         (re_match_2): at fail, test for a dummy failure point by
646           checking the restored pattern value, not string value.
647         (re_match_2): new case, `on_failure_keep_string_jump'.
648         (regex_compile): output this opcode in the .*\n case.
649         * regexinc.c (re_opcode_t): define the opcode.
650         (partial_compiled_pattern_pattern): add the new case.
652 Mon Mar  9 09:09:27 1992  Karl Berry  (karl at hayley)
654         * xregex.c (regex_compile): optimize .*\n to output an
655           unconditional jump to the ., instead of pushing failure points
656           each time through the loop.
658         * xregex.c (DOUBLE_FAILURE_STACK): compute the maximum size
659           ourselves (and correctly); change callers.
661 Sun Mar  8 17:07:46 1992  Karl Berry  (karl at hayley)
663         * xregex.c (failure_stack_elt_t): change to `const char *', to
664           avoid warnings.
666         * regex.h (re_set_syntax): declare this.
668         * xregex.c (pop_failure_point) [DEBUG]: conditionally pass the
669           original strings and sizes; change callers.
671 Thu Mar  5 16:35:35 1992  Karl Berry  (karl at claude.cs.umb.edu)
673         * xregex.c (regnum_t): new type for register/group numbers.
674         (compile_stack_elt_t, regex_compile): use it.
676         * xregex.c (regexec): declare len as `int' to match re_search.
678         * xregex.c (re_match_2): don't declare p1 twice.
680         * xregex.c: change `while (1)' to `for (;;)' to avoid silly
681           compiler warnings.
683         * regex.h [__STDC__]: use #if, not #ifdef.
685         * regexinc.c (REGEX_REALLOCATE): cast the result of alloca to
686           (char *), to avoid warnings.
688         * xregex.c (regerror): declare variable as const.
690         * xregex.c (re_compile_pattern, re_comp): define as returning a const
691           char *.
692         * regex.h (re_compile_pattern, re_comp): likewise.
694 Thu Mar  5 15:57:56 1992  Karl Berry  (karl@hal)
696         * xregex.c (regcomp): declare `syntax' as unsigned.
698         * xregex.c (re_match_2): try to avoid compiler warnings about
699           unsigned comparisons.
701         * GNUmakefile (test-xlc): new target.
703         * regex.h (reg_errcode_t): remove trailing comma from definition.
704         * regexinc.c (re_opcode_t): likewise.
706 Thu Mar  5 06:56:07 1992  Karl Berry  (karl at hayley)
708         * GNUmakefile (dist): add version numbers automatically.
709         (versionfiles): new variable.
710         (regex.{c,texinfo}): don't add version numbers here.
711         * regex.h: put in placeholder instead of the version number.
713 Fri Feb 28 07:11:33 1992  Karl Berry  (karl at hayley)
715         * xregex.c (re_error_msg): declare const, since it is.
717 Sun Feb 23 05:41:57 1992  Karl Berry  (karl at fosse)
719         * xregex.c (PAT_PUSH{,_2,_3}, ...): cast args to avoid warnings.
720         (regex_compile, regexec): return REG_NOERROR, instead
721           of 0, on success.
722         (boolean): define as char, and #define false and true.
723         * regexinc.c (STREQ): cast the result.
725 Sun Feb 23 07:45:38 1992  Karl Berry  (karl at hayley)
727         * GNUmakefile (test-cc, test-hc, test-pcc): new targets.
729         * regex.inc (extract_number, extract_number_and_incr) [DEBUG]:
730           only define if we are debugging.
732         * xregex.c [_AIX]: do #pragma alloca first if necessary.
733         * regexinc.c [_AIX]: remove the #pragma from here.
735         * regex.h (reg_syntax_t): declare as unsigned, and redo the enum
736           as #define's again.  Some compilers do stupid things with enums.
738 Thu Feb 20 07:19:47 1992  Karl Berry  (karl at hayley)
740         * Version 0.3.
742         * xregex.c, regex.h (newline_anchor_match_p): rename to
743           `newline_anchor'; dumb idea to change the name.
745 Tue Feb 18 07:09:02 1992  Karl Berry  (karl at hayley)
747         * regexinc.c: go back to original, i.e., don't include
748           <string.h> or define strchr.
749         * xregex.c (regexec): don't bother with adding characters after
750           newlines to the fastmap; instead, just don't use a fastmap.
751         * xregex.c (regcomp): set the buffer and fastmap fields to zero.
753         * xregex.texinfo (GNU r.e. compiling): have to initialize more
754           than two fields.
756         * regex.h (struct re_pattern_buffer): rename `newline_anchor' to
757           `newline_anchor_match_p', as we're back to two cases.
758         * xregex.c (regcomp, re_compile_pattern, re_comp): change
759           accordingly.
760         (re_match_2): at begline and endline, POSIX is not a special
761           case anymore; just check newline_anchor_match_p.
763 Thu Feb 13 16:29:33 1992  Karl Berry  (karl at hayley)
765         * xregex.c (*empty_string*): rename to *null_string*, for brevity.
767 Wed Feb 12 06:36:22 1992  Karl Berry  (karl at hayley)
769         * xregex.c (re_compile_fastmap): at endline, don't set fastmap['\n'].
770         (re_match_2): rewrite the begline/endline cases to take account
771           of the new field newline_anchor.
773 Tue Feb 11 14:34:55 1992  Karl Berry  (karl at hayley)
775         * regexinc.c [!USG etc.]: include <strings.h> and define strchr
776           as index.
778         * xregex.c (re_search_2): when searching backwards, declare `c'
779           as a char and use casts when using it as an array subscript.
781         * xregex.c (regcomp): if REG_NEWLINE, set
782           RE_HAT_LISTS_NOT_NEWLINE.  Set the `newline_anchor' field
783           appropriately.
784         (regex_compile): compile [^...] as matching a \n according to
785           the syntax bit.
786         (regexec): if doing REG_NEWLINE stuff, compile a fastmap and add
787           characters after any \n's to the newline.
788         * regex.h (RE_HAT_LISTS_NOT_NEWLINE): new syntax bit.
789         (struct re_pattern_buffer): rename `posix_newline' to
790           `newline_anchor', define constants for its values.
792 Mon Feb 10 07:22:50 1992  Karl Berry  (karl at hayley)
794         * xregex.c (re_compile_fastmap): combine the code at the top and
795           bottom of the loop, as it's essentially identical.
797 Sun Feb  9 10:02:19 1992  Karl Berry  (karl at hayley)
799         * xregex.texinfo (POSIX Translate Tables): remove this, as it
800           doesn't match the spec.
802         * xregex.c (re_compile_fastmap): if we finish off a path, go
803           back to the top (to set can_be_null) instead of returning
804           immediately.
806         * xregex.texinfo: changes from bob.
808 Sat Feb  1 07:03:25 1992  Karl Berry  (karl at hayley)
810         * xregex.c (re_search_2): doc fix (from rms).
812 Fri Jan 31 09:52:04 1992  Karl Berry  (karl at hayley)
814         * xregex.texinfo (GNU Searching): clarify the range arg.
816         * xregex.c (re_match_2, at_endline_op_p): add extra parens to
817           get rid of GCC 2's (silly, IMHO) warning about && within ||.
819         * xregex.c (common_op_match_empty_string_p): use
820           MATCH_NOTHING_UNSET_VALUE, not -1.
822 Thu Jan 16 08:43:02 1992  Karl Berry  (karl at hayley)
824         * xregex.c (SET_REGS_MATCHED): only set the registers from
825           lowest to highest.
827         * regexinc.c (MIN): new macro.
828         * xregex.c (re_match_2): only check min (num_regs,
829           regs->num_regs) when we set the returned regs.
831         * xregex.c (re_match_2): set registers after the first
832           num_regs to -1 before we return.
834 Tue Jan 14 16:01:42 1992  Karl Berry  (karl at hayley)
836         * xregex.c (re_match_2): initialize max (RE_NREGS, re_nsub + 1)
837           registers (from rms).
839         * xregex.c, regex.h: don't abbreviate `19xx' to `xx'.
841         * regexinc.c [!emacs]: include <sys/types.h> before <unistd.h>.
842           (from ro@thp.Uni-Koeln.DE).
844 Thu Jan  9 07:23:00 1992  Karl Berry  (karl at hayley)
846         * xregex.c (*unmatchable): rename to `match_empty_string_p'.
847         (CAN_MATCH_NOTHING): rename to `REG_MATCH_EMPTY_STRING_P'.
849         * regexinc.c (malloc, realloc): remove prototypes, as they can
850           cause clashes (from rms).
852 Mon Jan  6 12:43:24 1992  Karl Berry  (karl at claude.cs.umb.edu)
854         * Version 0.2.
856 Sun Jan  5 10:50:38 1992  Karl Berry  (karl at hayley)
858         * xregex.texinfo: bring more or less up-to-date.
859         * GNUmakefile (regex.texinfo): generate from regex.h and
860           xregex.texinfo.
861         * include.awk: new file.
863         * xregex.c: change all calls to the fn extract_number_and_incr
864           to the macro.
866         * xregex.c (re_match_2) [emacs]: in at_dot, use PTR_CHAR_POS + 1,
867           instead of bf_* and sl_*.  Cast d to unsigned char *, to match
868           the declaration in Emacs' buffer.h.
869         [emacs19]: in before_dot, at_dot, and after_dot, likewise.
871         * regexinc.c: unconditionally include <sys/types.h>.
873         * regexinc.c (alloca) [!alloca]: Emacs config files sometimes
874           define this, so don't define it if it's already defined.
876 Sun Jan  5 06:06:53 1992  Karl Berry  (karl at fosse)
878         * xregex.c (re_comp): fix type conflicts with regex_compile (we
879           haven't been compiling this).
881         * regexinc.c (SIGN_EXTEND_CHAR): use `__CHAR_UNSIGNED__', not
882           `CHAR_UNSIGNED'.
884         * regexinc.c (NULL) [!NULL]: define it (as zero).
886         * regexinc.c (extract_number): remove the temporaries.
888 Sun Jan  5 07:50:14 1992  Karl Berry  (karl at hayley)
890         * regex.h (regerror) [!__STDC__]: return a size_t, not a size_t *.
892         * xregex.c (PUSH_FAILURE_POINT, ...): declare `destination' as
893           `char *' instead of `void *', to match alloca declaration.
895         * xregex.c (regerror): use `size_t' for the intermediate values
896           as well as the return type.
898         * xregex.c (regexec): cast the result of malloc.
900         * xregex.c (regexec): don't initialize `private_preg' in the
901           declaration, as old C compilers can't do that.
903         * xregex.c (main) [test]: declare printchar void.
905         * xregex.c (assert) [!DEBUG]: define this to do nothing, and
906           remove #ifdef DEBUG's from around asserts.
908         * xregex.c (re_match_2): remove error message when not debugging.
910 Sat Jan  4 09:45:29 1992  Karl Berry  (karl at hayley)
912         * other.c: test the bizarre duplicate case in re_compile_fastmap
913           that I just noticed.
915         * test.c (general_test): don't test registers beyond the end of
916           correct_regs, as well as regs.
918         * xregex.c (regex_compile): at handle_close, don't assign to
919           *inner_group_loc if we didn't push a start_memory (because the
920           group number was too big).  In fact, don't push or pop the
921           inner_group_offset in that case.
923         * regex.c: rename to xregex.c, since it's not the whole thing.
924         * regex.texinfo: likewise.
925         * GNUmakefile: change to match.
927         * regex.c [DEBUG]: only include <stdio.h> if debugging.
929         * regexinc.c (SIGN_EXTEND_CHAR) [CHAR_UNSIGNED]: if it's already
930           defined, don't redefine it.
932         * regex.c: define _GNU_SOURCE at the beginning.
933         * regexinc.c (isblank) [!isblank]: define it.
934         (isgraph) [!isgraph]: change conditional to this, and remove the
935           sequent stuff.
937         * regex.c (regex_compile): add `blank' character class.
939         * regex.c (regex_compile): don't use a uchar variable to loop
940           through all characters.
942         * regex.c (regex_compile): at '[', improve logic for checking
943           that we have enough space for the charset.
945         * regex.h (struct re_pattern_buffer): declare translate as char
946           * again.  We only use it as an array subscript once, I think.
948         * regex.c (TRANSLATE): new macro to cast the data character
949           before subscripting.
950         (num_internal_regs): rename to `num_regs'.
952 Fri Jan  3 07:58:01 1992  Karl Berry  (karl at hayley)
954         * regex.h (struct re_pattern_buffer): declare `allocated' and
955           `used' as unsigned long, since these are never negative.
957         * regex.c (compile_stack_element): rename to compile_stack_elt_t.
958         (failure_stack_element): similarly.
960         * regexinc.c (TALLOC, RETALLOC): new macros to simplify
961           allocation of arrays.
962           
963         * regex.h (re_*) [__STDC__]: don't declare string args unsigned
964           char *; that makes them incompatible with string constants.
965         (struct re_pattern_buffer): declare the pattern and translate
966           table as unsigned char *.
967         * regex.c (most routines): use unsigned char vs. char consistently.
969         * regex.h (re_compile_pattern): do not declare the length arg as
970           const.
971         * regex.c (re_compile_pattern): likewise.
973         * regex.c (POINTER_TO_REG): rename to `POINTER_TO_OFFSET'.
975         * regex.h (re_registers): declare `start' and `end' as
976           `regoff_t', instead of `int'.
978         * regex.c (regexec): if either of the malloc's for the register
979           information fail, return failure.
981         * regex.h (RE_NREGS): define this again, as 30 (from jla).
982         (RE_ALLOCATE_REGISTERS): remove this.
983         (RE_SYNTAX_*): remove it from definitions.
984         (re_pattern_buffer): remove `return_default_num_regs', add
985           `caller_allocated_regs'.
986         * regex.c (re_compile_pattern): clear no_sub and
987           caller_allocated_regs in the pattern.
988         (regcomp): set caller_allocated_regs.
989         (re_match_2): do all register allocation at the end of the
990           match; implement new semantics.
992         * regex.c (MAX_REGNUM): new macro.
993         (regex_compile): at handle_open and handle_close, if the group
994           number is too large, don't push the start/stop memory.
996 Thu Jan  2 07:56:10 1992  Karl Berry  (karl at hayley)
998         * regex.c (re_match_2): if the back reference is to a group that
999           never matched, then goto fail, not really_fail.  Also, don't
1000           test if the pattern can match the empty string.  Why did we
1001           ever do that?
1002         (really_fail): this label no longer needed.
1004         * regexinc.c [STDC_HEADERS]: use only this to test if we should
1005           include <stdlib.h>.
1007         * regex.c (DO_RANGE, regex_compile): translate in all cases
1008           except the single character after a \.
1010         * regex.h (RE_AWK_CLASS_HACK): rename to
1011           RE_BACKSLASH_ESCAPE_IN_LISTS.
1012         * regex.c (regex_compile): change use.
1014         * regex.c (re_compile_fastmap): do not translate the characters
1015           again; we already translated them at compilation.  (From ylo@ngs.fi.)
1017         * regex.c (re_match_2): in case for at_dot, invert sense of
1018           comparison and find the character number properly.  (From
1019           worley@compass.com.)
1020         (re_match_2) [emacs]: remove the cases for before_dot and
1021           after_dot, since there's no way to specify them, and the code
1022           is wrong (judging from this change).
1024 Wed Jan  1 09:13:38 1992  Karl Berry  (karl at hayley)
1026         * psx-{interf,basic,extend}.c, other.c: set `t' as the first
1027           thing, so that if we run them in sucession, general_test's
1028           kludge to see if we're doing POSIX tests works.
1030         * test.h (test_type): add `all_test'.
1031         * main.c: add case for `all_test'.
1033         * regexinc.c (partial_compiled_pattern_printer,
1034           double_string_printer): don't print anything if we're passed null.
1036         * regex.c (PUSH_FAILURE_POINT): do not scan for the highest and
1037           lowest active registers.
1038         (re_match_2): compute lowest/highest active regs at start_memory and
1039           stop_memory.
1040         (NO_{LOW,HIGH}EST_ACTIVE_REG): new sentinel values.
1041         (pop_failure_point): return the lowest/highest active reg values
1042           popped; change calls.
1044         * regex.c [DEBUG]: include <assert.h>.
1045         (various routines) [DEBUG]: change conditionals to assertions.
1047         * regex.c (DEBUG_STATEMENT): new macro.
1048         (PUSH_FAILURE_POINT): use it to increment num_regs_pushed.
1049         (re_match_2) [DEBUG]: only declare num_regs_pushed if DEBUG.
1051         * regex.c (*can_match_nothing): rename to *unmatchable.
1053         * regex.c (re_match_2): at stop_memory, adjust argument reading.
1055         * regex.h (re_pattern_buffer): declare `can_be_null' as a 2-bit
1056           bit field.
1058         * regex.h (re_pattern_buffer): declare `buffer' unsigned char *;
1059           no, dumb idea.  The pattern can have signed number.
1061         * regex.c (re_match_2): in maybe_pop_jump case, skip over the
1062           right number of args to the group operators, and don't do
1063           anything with endline if posix_newline is not set.
1065         * regex.c, regexinc.c (all the things we just changed): go back
1066           to putting the inner group count after the start_memory,
1067           because we need it in the on_failure_jump case in re_match_2.
1068           But leave it after the stop_memory also, since we need it
1069           there in re_match_2, and we don't have any way of getting back
1070           to the start_memory.
1072         * regexinc.c (partial_compiled_pattern_printer): adjust argument
1073           reading for start/stop_memory.
1074         * regex.c (re_compile_fastmap, group_can_match_nothing): likewise.
1076 Tue Dec 31 10:15:08 1991  Karl Berry  (karl at hayley)
1078         * regex.c (bits list routines): remove these.
1079         (re_match_2): get the number of inner groups from the pattern,
1080           instead of keeping track of it at start and stop_memory.
1081           Put the count after the stop_memory, not after the
1082           start_memory.
1083         (compile_stack_element): remove `fixup_inner_group' member,
1084           since we now put it in when we can compute it.
1085         (regex_compile): at handle_open, don't push the inner group
1086           offset, and at handle_close, don't pop it.
1088         * regex.c (level routines): remove these, and their uses in
1089           regex_compile.  This was another manifestation of having to find
1090           $'s that were endlines.
1092         * regex.c (regexec): this does searching, not matching (a
1093           well-disguised part of the standard).  So rewrite to use
1094           `re_search' instead of `re_match'.
1095         * psx-interf.c (test_regexec): add tests to, uh, match.
1097         * regex.h (RE_TIGHT_ALT): remove this; nobody uses it.
1098         * regex.c: remove the code that was supposed to implement it.
1100         * other.c (test_others): ^ and $ never match newline characters;
1101           RE_CONTEXT_INVALID_OPS doesn't affect anchors.
1103         * psx-interf.c (test_regerror): update for new error messages.
1105         * psx-extend.c: it's now ok to have an alternative be just a $,
1106           so remove all the tests which supposed that was invalid.
1108 Wed Dec 25 09:00:05 1991  Karl Berry  (karl at hayley)
1110         * regex.c (regex_compile): in handle_open, don't skip over ^ and
1111           $ when checking for an empty group.  POSIX has changed the
1112           grammar.
1113         * psx-extend.c (test_posix_extended): thus, move (^$) tests to
1114           valid section.
1116         * regexinc.c (boolean): move from here to test.h and regex.c.
1117         * test files: declare verbose, omit_register_tests, and
1118           test_should_match as boolean.
1120         * psx-interf.c (test_posix_c_interface): remove the `c_'.
1121         * main.c: likewise.
1123         * psx-basic.c (test_posix_basic): ^ ($) is an anchor after
1124           (before) an open (close) group.
1126         * regex.c (re_match_2): in endline, correct precedence of
1127           posix_newline condition.
1129 Tue Dec 24 06:45:11 1991  Karl Berry  (karl at hayley)
1131         * test.h: incorporate private-tst.h.  
1132         * test files: include test.h, not private-tst.h.
1134         * test.c (general_test): set posix_newline to zero if we are
1135           doing POSIX tests (unfortunately, it's difficult to call
1136           regcomp in this case, which is what we should really be doing).
1138         * regex.h (reg_syntax_t): make this an enumeration type which
1139           defines the syntax bits; renames re_syntax_t.
1141         * regex.c (at_endline_op_p): don't preincrement p; then if it's
1142           not an empty string op, we lose.
1144         * regex.h (reg_errcode_t): new enumeration type of the error
1145           codes.
1146         * regex.c (regex_compile): return that type.
1148         * regex.c (regex_compile): in [, initialize
1149           just_had_a_char_class to false; somehow I had changed this to
1150           true.
1152         * regex.h (RE_NO_CONSECUTIVE_REPEATS): remove this, since we
1153           don't use it, and POSIX doesn't require this behavior anymore.
1154         * regex.c (regex_compile): remove it from here.
1156         * regex.c (regex_compile): remove the no_op insertions for
1157           verify_and_adjust_endlines, since that doesn't exist anymore.
1159         * regex.c (regex_compile) [DEBUG]: use printchar to print the
1160           pattern, so unprintable bytes will print properly.
1162         * regex.c: move re_error_msg back.
1163         * test.c (general_test): print the compile error if the pattern
1164           was invalid.
1166 Mon Dec 23 08:54:53 1991  Karl Berry  (karl at hayley)
1168         * regexinc.c: move re_error_msg here.
1170         * regex.c (re_error_msg): the ``message'' for success must be
1171           NULL, to keep the interface to re_compile_pattern the same.
1172         (regerror): if the msg is null, use "Success".
1174         * rename most test files for consistency.  Change Makefile
1175           correspondingly.
1177         * test.c (most routines): add casts to (unsigned char *) when we
1178           call re_{match,search}{,_2}.
1180 Sun Dec 22 09:26:06 1991  Karl Berry  (karl at hayley)
1182         * regex.c (re_match_2): declare string args as unsigned char *
1183           again; don't declare non-pointer args const; declare the
1184           pattern buffer const.
1185         (re_match): likewise.
1186         (re_search_2, re_search): likewise, except don't declare the
1187           pattern const, since we make a fastmap.
1188         * regex.h [__STDC__]: change prototypes.
1190         * regex.c (regex_compile): return an error code, not a string.
1191         (re_err_list): new table to map from error codes to string.
1192         (re_compile_pattern): return an element of re_err_list.
1193         (regcomp): don't test all the strings.
1194         (regerror): just use the list.
1195         (put_in_buffer): remove this.
1197         * regex.c (equivalent_failure_points): remove this.
1199         * regex.c (re_match_2): don't copy the string arguments into
1200           non-const pointers.  We never alter the data.
1202         * regex.c (re_match_2): move assignment to `is_a_jump_n' out of
1203           the main loop.  Just initialize it right before we do
1204           something with it.
1206         * regex.[ch] (re_match_2): don't declare the int parameters const.
1208 Sat Dec 21 08:52:20 1991  Karl Berry  (karl at hayley)
1210         * regex.h (re_syntax_t): new type; declare to be unsigned
1211           (previously we used int, but since we do bit operations on
1212           this, unsigned is better, according to H&S).
1213         (obscure_syntax, re_pattern_buffer): use that type.
1214         * regex.c (re_set_syntax, regex_compile): likewise.
1216         * regex.h (re_pattern_buffer): new field `posix_newline'.
1217         * regex.c (re_comp, re_compile_pattern): set to zero.
1218         (regcomp): set to REG_NEWLINE.
1219         * regex.h (RE_HAT_LISTS_NOT_NEWLINE): remove this (we can just
1220           check `posix_newline' instead.)
1222         * regex.c (op_list_type, op_list, add_op): remove these.
1223         (verify_and_adjust_endlines): remove this.
1224         (pattern_offset_list_type, *pattern_offset* routines): and these.
1225           These things all implemented the nonleading/nontrailing position
1226           code, which was very long, had a few remaining problems, and
1227           is no longer needed.  So...
1229         * regexinc.c (STREQ): new macro to abbreviate strcmp(,)==0, for
1230           brevity.  Change various places in regex.c to use it.
1232         * regex{,inc}.c (enum regexpcode): change to a typedef
1233           re_opcode_t, for brevity.
1235         * regex.h (re_syntax_table) [SYNTAX_TABLE]: remove this; it
1236           should only be in regex.c, I think, since we don't define it
1237           in this case.  Maybe it should be conditional on !SYNTAX_TABLE?
1239         * regexinc.c (partial_compiled_pattern_printer): simplify and
1240           distinguish the emacs/not-emacs (not)wordchar cases.
1242 Fri Dec 20 08:11:38 1991  Karl Berry  (karl at hayley)
1244         * regexinc.c (regexpcode) [emacs]: only define the Emacs opcodes
1245           if we are ifdef emacs.
1247         * regex.c (BUF_PUSH*): rename to PAT_PUSH*.
1249         * regex.c (regex_compile): in $ case, go back to essentially the
1250           original code for deciding endline op vs. normal char.
1251         (at_endline_op_p): new routine.
1252         * regex.h (RE_ANCHORS_ONLY_AT_ENDS, RE_CONTEXT_INVALID_ANCHORS,
1253           RE_REPEATED_ANCHORS_AWAY, RE_NO_ANCHOR_AT_NEWLINE): remove
1254           these.  POSIX has simplified the rules for anchors in draft
1255           11.2.
1256         (RE_NEWLINE_ORDINARY): new syntax bit.
1257         (RE_CONTEXT_INDEP_ANCHORS): change description to be compatible
1258           with POSIX.
1259         * regex.texinfo (Syntax Bits): remove the descriptions.
1261 Mon Dec 16 08:12:40 1991  Karl Berry  (karl at hayley)
1263         * regex.c (re_match_2): in jump_past_next_alt, unconditionally
1264           goto no_pop.  The only register we were finding was one which
1265           enclosed the whole alternative expression, not one around an
1266           individual alternative.  So we were never doing what we
1267           thought we were doing, and this way makes (|a) against the
1268           empty string fail.
1270         * regex.c (regex_compile): remove `highest_ever_regnum', and
1271           don't restore regnum from the stack; just put it into a
1272           temporary to put into the stop_memory.  Otherwise, groups
1273           aren't numbered consecutively.
1275         * regex.c (is_in_compile_stack): rename to
1276           `group_in_compile_stack'; remove unnecessary test for the
1277           stack being empty.
1279         * regex.c (re_match_2): in on_failure_jump, skip no_op's before
1280           checking for the start_memory, in case we were called from
1281           succeed_n.
1283 Sun Dec 15 16:20:48 1991  Karl Berry  (karl at hayley)
1285         * regex.c (regex_compile): in duplicate case, use
1286           highest_ever_regnum instead of regnum, since the latter is
1287           reverted at stop_memory.
1289         * regex.c (re_match_2): in on_failure_jump, if the * applied to
1290           a group, save the information for that group and all inner
1291           groups (by making it active), even though we're not inside it
1292           yet.
1294 Sat Dec 14 09:50:59 1991  Karl Berry  (karl at hayley)
1296         * regex.c (PUSH_FAILURE_ITEM, POP_FAILURE_ITEM): new macros.
1297           Use them instead of copying the stack manipulating a zillion
1298           times.
1300         * regex.c (PUSH_FAILURE_POINT, pop_failure_point) [DEBUG]: save
1301           and restore a unique identification value for each failure point.
1303         * regexinc.c (partial_compiled_pattern_printer): don't print an
1304           extra / after duplicate commands.
1306         * regex.c (regex_compile): in back-reference case, allow a back
1307           reference to register `regnum'.  Otherwise, even `\(\)\1'
1308           fails, since regnum is 1 at the back-reference.
1310         * regex.c (re_match_2): in fail, don't examine the pattern if we
1311           restored to pend.
1313         * test_private.h: rename to private_tst.h.  Change includes.
1315         * regex.c (extend_bits_list): compute existing size for realloc
1316           in bytes, not blocks.
1318         * regex.c (re_match_2): in jump_past_next_alt, the for loop was
1319           missing its (empty) statement.  Even so, some register tests
1320           still fail, although in a different way than in the previous change.
1322 Fri Dec 13 15:55:08 1991  Karl Berry  (karl at hayley)
1324         * regex.c (re_match_2): in jump_past_next_alt, unconditionally
1325           goto no_pop, since we weren't properly detecting if the
1326           alternative matched something anyway.  No, we need to not jump
1327           to keep the register values correct; just change to not look at
1328           register zero and not test RE_NO_EMPTY_ALTS (which is a
1329           compile-time thing).
1331         * regex.c (SET_REGS_MATCHED): start the loop at 1, since we never
1332           care about register zero until the very end.  (I think.)
1334         * regex.c (PUSH_FAILURE_POINT, pop_failure_point): go back to
1335           pushing and popping the active registers, instead of only doing
1336           the registers before a group: (fooq|fo|o)*qbar against fooqbar
1337           fails, since we restore back into the middle of group 1, yet it
1338           isn't active, because the previous restore clobbered the active flag.
1340 Thu Dec 12 17:25:36 1991  Karl Berry  (karl at hayley)
1342         * regex.c (PUSH_FAILURE_POINT): do not call
1343           `equivalent_failure_points' after all; it causes the registers
1344           to be ``wrong'' (according to POSIX), and an infinite loop on
1345           `((a*)*)*' against `ab'.
1347         * regex.c (re_compile_fastmap): don't push `pend' on the failure
1348           stack.
1350 Tue Dec 10 10:30:03 1991  Karl Berry  (karl at hayley)
1352         * regex.c (PUSH_FAILURE_POINT): if pushing same failure point that
1353           is on the top of the stack, fail.
1354         (equivalent_failure_points): new routine.
1356         * regex.c (re_match_2): add debug statements for every opcode we
1357           execute.
1359         * regex.c (regex_compile/handle_close): restore
1360           `fixup_inner_group_count' and `regnum' from the stack.
1362 Mon Dec  9 13:51:15 1991  Karl Berry  (karl at hayley)
1364         * regex.c (PUSH_FAILURE_POINT): declare `this_reg' as int, so
1365           unsigned arithmetic doesn't happen when we don't want to save 
1366           the registers.
1368 Tue Dec  3 08:11:10 1991  Karl Berry  (karl at hayley)
1370         * regex.c (extend_bits_list): divide size by bits/block.
1372         * regex.c (init_bits_list): remove redundant assignmen to
1373           `bits_list_ptr'.
1375         * regexinc.c (partial_compiled_pattern_printer): don't do *p++
1376           twice in the same expr.
1378         * regex.c (re_match_2): at on_failure_jump, use the correct
1379           pattern positions for getting the stuff following the start_memory.
1381         * regex.c (struct register_info): remove the bits_list for the
1382           inner groups; make that a separate variable.
1384 Mon Dec  2 10:42:07 1991  Karl Berry  (karl at hayley)
1386         * regex.c (PUSH_FAILURE_POINT): don't pass `failure_stack' as an
1387           arg; change callers.
1389         * regex.c (PUSH_FAILURE_POINT): print items in order they are
1390           pushed.
1391         (pop_failure_point): likewise.
1393         * regex.c (main): prompt for the pattern and string.
1395         * regex.c (FREE_VARIABLES) [!REGEX_MALLOC]: declare as nothing;
1396           remove #ifdefs from around calls.
1398         * regex.c (extract_number, extract_number_and_incr): declare static.
1400         * regex.c: remove the canned main program.
1401         * main.c: new file.
1402         * Makefile (COMMON): add main.o.
1404 Tue Sep 24 06:26:51 1991  Kathy Hargreaves  (kathy at fosse)
1406         * regex.c (re_match_2): Made `pend' and `dend' not register variables.
1407           Only set string2 to string1 if string1 isn't null.
1408           Send address of p, d, regstart, regend, and reg_info to
1409           pop_failure_point.
1410           Put in more debug statements.
1412         * regex.c [debug]: Added global variable.
1413           (DEBUG_*PRINT*): Only print if `debug' is true.
1414           (DEBUG_DOUBLE_STRING_PRINTER): Changed DEBUG_STRING_PRINTER's
1415           name to this.
1416           Changed some comments.
1417           (PUSH_FAILURE_POINT): Moved and added some debugging statements.
1418           Was saving regstart on the stack twice instead of saving both
1419           regstart and regend; remedied this.
1420           [NUM_REGS_ITEMS]: Changed from 3 to 4, as now save lowest and
1421           highest active registers instead of highest used one.
1422           [NUM_NON_REG_ITEMS]: Changed name of NUM_OTHER_ITEMS to this.
1423           (NUM_FAILURE_ITEMS): Use active registers instead of number 0
1424           through highest used one.
1425           (re_match_2): Have pop_failure_point put things in the variables.
1426           (pop_failure_point): Have it do what the fail case in re_match_2 
1427           did with the failure stack, instead of throwing away the stuff
1428           popped off.  re_match_2 can ignore results when it doesn't
1429           need them.
1430           
1432 Thu Sep  5 13:23:28 1991  Kathy Hargreaves  (kathy at fosse)
1434         * regex.c (banner): Changed copyright years to be separate.
1435         
1436         * regex.c [CHAR_UNSIGNED]: Put __ at both ends of this name.
1437           [DEBUG, debug_count, *debug_p, DEBUG_PRINT_1, DEBUG_PRINT_2,
1438            DEBUG_COMPILED_PATTERN_PRINTER ,DEBUG_STRING_PRINTER]:
1439            defined these for debugging.
1440           (extract_number): Added this (debuggable) routine version of
1441           the macro EXTRACT_NUMBER.  Ditto for EXTRACT_NUMBER_AND_INCR.
1442           (re_compile_pattern): Set return_default_num_regs if the
1443           syntax bit RE_ALLOCATE_REGISTERS is set.
1444           [REGEX_MALLOC]: Renamed USE_ALLOCA to this.
1445           (BUF_POP): Got rid of this, as don't ever use it.
1446           (regex_compile): Made the type of `pattern' not be register.
1447           If DEBUG, print the pattern to compile.
1448           (re_match_2): If had a `$' in the pattern before a `^' then
1449           don't record the `^' as an anchor.
1450           Put (enum regexpcode) before references to b, as suggested
1451           [RE_NO_BK_BRACES]: Changed RE_NO_BK_CURLY_BRACES to this.
1452           (remove_pattern_offset): Removed this unused routine.
1453           (PUSH_FAILURE_POINT): Changed to only save active registers.
1454           Put in debugging statements.
1455           (re_compile_fastmap): Made `pattern' not a register variable.
1456           Use routine for extracting numbers instead of macro.
1457           (re_match_2): Made `p', `mcnt' and `mcnt2' not register variables.
1458           Added `num_regs_pushed' for debugging.
1459           Only malloc registers if the syntax bit RE_ALLOCATE_REGISTERS is set.
1460           Put in debug statements.
1461           Put the macro NOTE_INNER_GROUP's code inline, as it was the
1462           only called in one place.
1463           For debugging, extract numbers using routines instead of macros.
1464           In case fail: only restore pushed active registers, and added
1465           debugging statements.
1466           (pop_failure_point): Test for underfull stack.
1467           (group_can_match_nothing, common_op_can_match_nothing): For
1468           debugging, extract numbers using routines instead of macros.
1469           (regexec): Changed formal parameters to not be prototypes.
1470           Don't initialize `regs' or `private_preg' in their declarations.
1471           
1472 Tue Jul 23 18:38:36 1991  Kathy Hargreaves  (kathy at hayley)
1474         * regex.h [RE_CONTEX_INDEP_OPS]: Moved the anchor stuff out of
1475           this bit.
1476           [RE_UNMATCHED_RIGHT_PAREN_ORD]: Defined this bit.
1477           [RE_CONTEXT_INVALID_ANCHORS]: Defined this bit.
1478           [RE_CONTEXT_INDEP_ANCHORS]: Defined this bit.
1479           Added RE_CONTEXT_INDEP_ANCHORS to all syntaxes which had
1480           RE_CONTEXT_INDEP_OPS. 
1481           Took RE_ANCHORS_ONLY_AT_ENDS out of the POSIX basic syntax.
1482           Added RE_UNMATCHED_RIGHT_PAREN_ORD to the POSIX extended
1483           syntax.
1484           Took RE_REPEATED_ANCHORS_AWAY out of the POSIX extended syntax.
1485           Defined REG_NOERROR (which will probably have to go away again).
1486           Changed the type `off_t' to `regoff_t'.
1488         * regex.c: Changed some commments.
1489           (regex_compile): Added variable `had_an_endline' to keep track
1490           of if hit a `$' since the beginning of the pattern or the last
1491           alternative (if any).
1492           Changed RE_CONTEXT_INVALID_OPS and RE_CONTEXT_INDEP_OPS to
1493           RE_CONTEXT_INVALID_ANCHORS and RE_CONTEXT_INDEP_ANCHORS where
1494           appropriate. 
1495           Put a `no_op' in the pattern if a repeat is only zero or one
1496           times; in this case and if it is many times (whereupon a jump
1497           backwards is pushed instead), keep track of the operator for
1498           verify_and_adjust_endlines.
1499           If RE_UNMATCHED_RIGHT_PAREN is set, make an unmatched
1500           close-group operator match `)'.
1501           Changed all error exits to exit (1).
1502           (remove_pattern_offset): Added this routine, but don't use it.
1503           (verify_and_adjust_endlines): At top of routine, if initialize
1504           routines run out of memory, return true after setting
1505           enough_memory false.
1506           At end of endline, et al. case, don't set *p to no_op.
1507           Repetition operators also set the level and active groups'
1508           match statuses, unless RE_REPEATED_ANCHORS_AWAY is set.
1509           (get_group_match_status): Put a return in front of call to get_bit.
1510           (re_compile_fastmap): Changed is_a_succeed_n to a boolean.
1511           If at end of pattern, then if the failure stack isn't empty,
1512           go back to the failure point.
1513           In *jump* case, only pop the stack if what's on top of it is
1514           where we've just jumped to.
1515           (re_search_2): Return -2 instead of val if val is -2.
1516           (group_can_match_nothing, alternative_can_match_nothing,
1517           common_op_can-match_nothing): Now pass in reg_info for the
1518           `duplicate' case.
1519           (re_match_2): Don't skip over the next alternative also if
1520           empty alternatives aren't allowed.
1521           In fail case, if failed to a backwards jump that's part of a
1522           repetition loop, pop the current failure point and use the
1523           next one.
1524           (pop_failure_point): Check that there's as many register items
1525           on the failure stack as the stack says there are.
1526           (common_op_can_match_nothing): Added variables `ret' and
1527           `reg_no' so can set reg_info for the group encountered.
1528           Also break without doing anything if hit a no_op or the other
1529           kinds of `endline's.
1530           If not done already, set reg_info in start_memory case.
1531           Put in no_pop_jump for an optimized succeed_n of zero repetitions.
1532           In succeed_n case, if the number isn't zero, then return false.
1533           Added `duplicate' case.
1534           
1535 Sat Jul 13 11:27:38 1991  Kathy Hargreaves  (kathy at hayley)
1537         * regex.h (REG_NOERROR): Added this error code definition.
1538         
1539         * regex.c: Took some redundant parens out of macros.
1540           (enum regexpcode): Added jump_past_next_alt.
1541           Wrapped some macros in `do..while (0)'.
1542           Changed some comments.
1543           (regex_compile): Use `fixup_alt_jump' instead of `fixup_jump'.
1544           Use `maybe_pop_jump' instead of `maybe_pop_failure_jump'.
1545           Use `jump_past_next_alt' instead of `no_pop_jump' when at the
1546           end of an alternative.
1547           (re_match_2): Used REGEX_ALLOCATE for the registers stuff.
1548           In stop_memory case: Add more boolean tests to see if the
1549           group is in a loop.
1550           Added jump_past_next_alt case, which doesn't jump over the
1551           next alternative if the last one didn't match anything.
1552           Unfortunately, to make this work with, e.g., `(a+?*|b)*'
1553           against `bb', I also had to pop the alternative's failure
1554           point, which in turn broke backtracking!
1555           In fail case: Detect a dummy failure point by looking at
1556           failure_stack.avail - 2, not stack[-2].
1557           (pop_failure_point): Only pop if the stack isn't empty; don't
1558           give an error if it is.  (Not sure yet this is correct.)
1559           (group_can_match_nothing): Make it return a boolean instead of int.
1560           Make it take an argument indicating the end of where it should look.
1561           If find a group that can match nothing, set the pointer
1562           argument to past the group in the pattern.  
1563           Took out cases which can share with alternative_can_match_nothing
1564           and call common_op_can_match_nothing.
1565           Took ++ out of switch, so could call common_op_can_match_nothing.
1566           Wrote lots more for on_failure_jump case to handle alternatives.
1567           Main loop now doesn't look for matching stop_memory, but
1568           rather the argument END; return true if hit the matching
1569           stop_memory; this way can call itself for inner groups.
1570           (alternative_can_match_nothing): Added for alternatives.
1571           (common_op_can_match_nothing):  Added for previous two routines' 
1572           common operators.
1573           (regerror): Returns a message saying there's no error if gets
1574           sent REG_NOERROR.
1575           
1576 Wed Jul  3 10:43:15 1991  Kathy Hargreaves  (kathy at hayley)
1578         * regex.c: Removed unnecessary enclosing parens from several macros.
1579           Put `do..while (0)' around a few.
1580           Corrected some comments.
1581           (INIT_FAILURE_STACK_SIZE): Deleted in favor of using
1582           INIT_FAILURE_ALLOC.
1583           (INIT_FAILURE_STACK, DOUBLE_FAILURE_STACK, PUSH_PATTERN_OP,
1584           PUSH_FAILURE_POINT): Made routines of the same name (but with all
1585           lowercase letters) into these macros, so could use `alloca'
1586           when USE_ALLOCA is defined.  The reason is stated below for
1587           bits lists.  Deleted analogous routines.
1588           (re_compile_fastmap): Added variable void *destination for
1589           PUSH_PATTERN_OP.
1590           (re_match_2): Added variable void *destination for REGEX_REALLOCATE.
1591           Used the failure stack macros in place of the routines.
1592           Detected a dummy failure point by inspecting the failure stack's
1593           (avail - 2)th element, not failure_stack.stack[-2].  This bug
1594           arose when used the failure stack macros instead of the routines.
1596         * regex.c [USE_ALLOCA]: Put this conditional around previous
1597           alloca stuff and defined these to work differently depending
1598           on whether or not USE_ALLOCA is defined:
1599           (REGEX_ALLOCATE): Uses either `alloca' or `malloc'.
1600           (REGEX_REALLOCATE): Uses either `alloca' or `realloc'.
1601           (INIT_BITS_LIST, EXTEND_BITS_LIST, SET_BIT_TO_VALUE): Defined
1602           macro versions of routines with the same name (only with all
1603           lowercase letters) so could use `alloc' in re_match_2.  This
1604           is to prevent core leaks when C-g is used in Emacs and to make
1605           things faster and avoid storage fragmentation.  These things
1606           have to be macros because the results of `alloca' go away with
1607           the routine by which it's called.  
1608           (BITS_BLOCK_SIZE, BITS_BLOCK, BITS_MASK): Moved to above the
1609           above-mentioned macros instead of before the routines defined
1610           below regex_compile.
1611           (set_bit_to_value): Compacted some code.
1612           (reg_info_type): Changed inner_groups field to be bits_list_type 
1613           so could be arbitrarily long and thus handle arbitrary nesting.
1614           (NOTE_INNER_GROUP): Put `do...while (0)' around it so could
1615           use as a statement.  
1616           Changed code to use bits lists.
1617           Added variable void *destination for REGEX_REALLOCATE (whose call
1618           is several levels in).
1619           Changed variable name of `this_bit' to `this_reg'.
1620           (FREE_VARIABLES): Only define and use if USE_ALLOCA is defined.
1621           (re_match_2): Use REGEX_ALLOCATE instead of malloc.
1622           Instead of setting INNER_GROUPS of reg_info to zero, have to
1623           use INIT_BITS_LIST and return -2 (and free variables if
1624           USE_ALLOCA isn't defined) if it fails.
1626 Fri Jun 28 13:45:07 1991  Karl Berry  (karl at hayley)
1628         * regex.c (re_match_2): set value of `dend' when we restore `d'.
1630         * regex.c: remove declaration of alloca.
1632         * regex.c (MISSING_ISGRAPH): rename to `ISGRAPH_MISSING'.
1634         * regex.h [_POSIX_SOURCE]: remove these conditionals; always
1635           define POSIX stuff.
1636         * regex.c (_POSIX_SOURCE): change conditionals to use `POSIX'
1637           instead.
1639 Sat Jun  1 16:56:50 1991  Kathy Hargreaves  (kathy at hayley)
1641         * regex.*: Changed RE_CONTEXTUAL_* to RE_CONTEXT_*,
1642           RE_TIGHT_VBAR to RE_TIGHT_ALT, RE_NEWLINE_OR to
1643           RE_NEWLINE_ALT, and RE_DOT_MATCHES_NEWLINE to RE_DOT_NEWLINE.
1645 Wed May 29 09:24:11 1991  Karl Berry  (karl at hayley)
1647         * regex.texinfo (POSIX Pattern Buffers): cross-reference the
1648           correct node name (Match-beginning-of-line, not ..._line).
1649           (Syntax Bits): put @code around all syntax bits.
1651 Sat May 18 16:29:58 1991  Karl Berry  (karl at hayley)
1653         * regex.c (global): add casts to keep broken compilers from
1654           complaining about malloc and realloc calls.
1656         * regex.c (isgraph) [MISSING_ISGRAPH]: change test to this,
1657           instead of `#ifndef isgraph', since broken compilers can't
1658           have both a macro and a symbol by the same name.
1660         * regex.c (re_comp, re_exec) [_POSIX_SOURCE]: do not define.
1661         (regcomp, regfree, regexec, regerror) [_POSIX_SOURCE && !emacs]:
1662          only define in this case.
1664 Mon May  6 17:37:04 1991  Kathy Hargreaves  (kathy at hayley)
1666         * regex.h (re_search, re_search_2): Changed BUFFER to not be const.
1668         * regex.c (re_compile_pattern): `^' is in a leading position if
1669           it precedes a newline.
1670           (various routines): Added or changed header comments.
1671           (double_pattern_offsets_list): Changed name from 
1672           `extend_pattern_offsets_list'.
1673           (adjust_pattern_offsets_list): Changed return value from
1674           unsigned to void.
1675           (verify_and_adjust_endlines): Now returns `true' and `false'
1676           instead of 1 and 0.
1677           `$' is in a leading position if it follows a newline.
1678           (set_bit_to_value, get_bit_value): Exit with error if POSITION < 0 
1679           so now calling routines don't have to.
1680           (init_failure_stack, inspect_failure_stack_top,
1681           pop_failure_stack_top, push_pattern_op, double_failure_stack):
1682           Now return value unsigned instead of boolean.
1683           (re_search, re_search_2): Changed BUFP to not be const.
1684           (re_search_2): Added variable const `private_bufp' to send to
1685           re_match_2. 
1686           (push_failure_point): Made return value unsigned instead of boolean.
1688 Sat May  4 15:32:22 1991  Kathy Hargreaves  (kathy at hayley)
1690         * regex.h (re_compile_fastmap): Added extern for this.
1691           Changed some comments.
1692           
1693         * regex.c (re_compile_pattern): In case handle_bar: put invalid
1694           pattern test before levels matching stuff.
1695           Changed some commments.
1696           Added optimizing test for detecting an empty alternative that
1697           ends with a trailing '$' at the end of the pattern.
1698           (re_compile_fastmap): Moved failure_stack stuff to before this
1699           so could use it.  Made its stack dynamic.
1700           Made it return an int so that it could return -2 if its stack
1701           couldn't be allocated.
1702           Added to header comment (about the return values).
1703           (init_failure_stack): Wrote so both re_match_2 and
1704           re_compile_fastmap could use it similar stacks.
1705           (double_failure_stack): Added for above reasons.
1706           (push_pattern_op): Wrote for re_compile_fastmap.
1707           (re_search_2): Now return -2 if re_compile_fastmap does.
1708           (re_match_2): Made regstart and regend type failure_stack_element*.
1709           (push_failure_point): Made pattern_place and string_place type
1710           failure_stack_element*.
1711           Call double_failure_stack now.
1712           Return true instead of 1.
1714 Wed May  1 12:57:21 1991  Kathy Hargreaves  (kathy at hayley)
1716         * regex.c (remove_intervening_anchors): Avoid erroneously making
1717           ops into no_op's by making them no_op only when they're beglines.
1718           (verify_and_adjust_endlines): Don't make '$' a normal character 
1719           if it's before a newline.  
1720           Look for the endline op in *p, not p[1].
1721           (failure_stack_element): Added this declaration.
1722           (failure_stack_type): Added this declaration.
1723           (INIT_FAILURE_STACK_SIZE, FAILURE_STACK_EMPTY, 
1724           FAILURE_STACK_PTR_EMPTY, REMAINING_AVAIL_SLOTS): Added for
1725           failure stack.
1726           (FAILURE_ITEM_SIZE, PUSH_FAILURE_POINT): Deleted.
1727           (FREE_VARIABLES): Now free failure_stack.stack instead of stackb.
1728           (re_match_2): deleted variables `initial_stack', `stackb',
1729           `stackp', and `stacke' and added `failure_stack' to replace them.
1730           Replaced calls to PUSH_FAILURE_POINT with those to
1731           push_failure_point.
1732           (push_failure_point): Added for re_match_2.
1733           (pop_failure_point): Rewrote to use a failure_stack_type of stack.
1734           (can_match_nothing): Moved definition to below re_match_2.
1735           (bcmp_translate): Moved definition to below re_match_2.
1737 Mon Apr 29 14:20:54 1991  Kathy Hargreaves  (kathy at hayley)
1739         * regex.c (enum regexpcode): Added codes endline_before_newline
1740           and repeated_endline_before_newline so could detect these
1741           types of endlines in the intermediate stages of a compiled
1742           pattern.
1743           (INIT_FAILURE_ALLOC): Renamed NFAILURES to this and set it to 5.
1744           (BUF_PUSH): Put `do {...} while 0' around this.
1745           (BUF_PUSH_2): Defined this to cut down on expansion of EXTEND_BUFFER.
1746           (regex_compile): Changed some comments.
1747           Now push endline_before_newline if find a `$' before a newline
1748           in the pattern.
1749           If a `$' might turn into an ordinary character, set laststart
1750           to point to it.
1751           In '^' case, if syntax bit RE_TIGHT_VBAR is set, then for `^'
1752           to be in a leading position, it must be first in the pattern.
1753           Don't have to check in one of the else clauses that it's not set.
1754           If RE_CONTEXTUAL_INDEP_OPS isn't set but RE_ANCHORS_ONLY_AT_ENDS 
1755           is, make '^' a normal character if it isn't first in the pattern. 
1756           Can only detect at the end if a '$' after an alternation op is a
1757           trailing one, so can't immediately detect empty alternatives
1758           if a '$' follows a vbar.
1759           Added a picture of the ``success jumps'' in alternatives.
1760           Have to set bufp->used before calling verify_and_adjust_endlines.
1761           Also do it before returning all error strings.
1762           (remove_intervening_anchors): Now replaces the anchor with
1763           repeated_endline_before_newline if it's an endline_before_newline.
1764           (verify_and_adjust_endlines): Deleted SYNTAX parameter (could
1765           use bufp's) and added GROUP_FORWARD_MATCH_STATUS so could
1766           detect back references referring to empty groups.
1767           Added variable `bend' to point past the end of the pattern buffer. 
1768           Added variable `previous_p' so wouldn't have to reinspect the
1769           pattern buffer to see what op we just looked at.
1770           Added endline_before_newline and repeated_endline_before_newline
1771           cases.
1772           When checking if in a trailing position, added case where '$'
1773           has to be at the pattern's end if either of the syntax bits
1774           RE_ANCHORS_ONLY_AT_ENDS or RE_TIGHT_VBAR are set.
1775           Since `endline' can have the intermediate form `endline_in_repeat', 
1776           have to change it to `endline' if RE_REPEATED_ANCHORS_AWAY
1777           isn't set.
1778           Now disallow empty alternatives with trailing endlines in them
1779           if RE_NO_EMPTY_ALTS is set.
1780           Now don't make '$' an ordinary character if it precedes a newline.
1781           Don't make it an ordinary character if it's before a newline.
1782           Back references now affect the level matching something only if
1783           they refer to nonempty groups.
1784           (can_match_nothing): Now increment p1 in the switch, which
1785           changes many of the cases, but makes the code more like what
1786           it was derived from.
1787           Adjust the return statement to reflect above.
1788           (struct register_info): Made `can_match_nothing' field an int
1789           instead of a bit so could have -1 in it if never set.
1790           (MAX_FAILURE_ITEMS): Changed name from MAX_NUM_FAILURE_ITEMS.
1791           (FAILURE_ITEM_SIZE): Defined how much space a failure items uses.
1792           (PUSH_FAILURE_POINT): Changed variable `last_used_reg's name
1793           to `highest_used_reg'.
1794           Added variable `num_stack_items' and changed `len's name to
1795           `stack_length'. 
1796           Test failure stack limit in terms of number of items in it, not 
1797           in terms of its length.  rms' fix tested length against number
1798           of items, which was a misunderstanding.
1799           Use `realloc' instead of `alloca' to extend the failure stack.
1800           Use shifts instead of multiplying by 2.
1801           (FREE_VARIABLES): Free `stackb' instead of `initial_stack', as
1802           might may have been reallocated.
1803           (re_match_2): When mallocing `initial_stack', now multiply
1804           the number of items wanted (what was there before) by
1805           FAILURE_ITEM_SIZE.
1806           (pop_failure_point): Need this procedure form of the macro of
1807           the same name for debugging, so left it in and deleted the
1808           macro.
1809           (recomp): Don't free the pattern buffer's translate field.
1810           
1811 Mon Apr 15 09:47:47 1991  Kathy Hargreaves  (kathy at hayley)
1813         * regex.h (RE_DUP_MAX): Moved to outside of #ifdef _POSIX_SOURCE.
1814         * regex.c (#include <sys/types.h>): Removed #ifdef _POSIX_SOURCE
1815           condition. 
1816           (malloc, realloc): Made return type void* #ifdef __STDC__.
1817           (enum regexpcode): Added endline_in_repeat for the compiler's
1818           use; this never ends up on the final compiled pattern.
1819           (INIT_PATTERN_OFFSETS_LIST_SIZE): Initial size for
1820           pattern_offsets_list_type. 
1821           (pattern_offset_type): Type for pattern offsets.
1822           (pattern_offsets_list_type): Type for keeping a list of
1823           pattern offsets.  
1824           (anchor_list_type): Changed to above type.
1825           (PATTERN_OFFSETS_LIST_PTR_FULL): Tests if a pattern offsets
1826           list is full.
1827           (ANCHOR_LIST_PTR_FULL): Changed to above.
1828           (BIT_BLOCK_SIZE): Changed to BITS_BLOCK_SIZE and moved to
1829           above bits list routines below regex_compile.
1830           (op_list_type): Defined to be pattern_offsets_list_type.
1831           (compile_stack_type): Changed offsets to be
1832           pattern_offset_type instead of unsigned.
1833           (pointer): Changed the name of all structure fields from this
1834           to `avail'.
1835           (COMPILE_STACK_FULL): Changed so the stack is full if `avail'
1836           is equal to `size' instead of `size' - 1.
1837           (GET_BUFFER_SPACE): Changed `>=' to `>' in the while statement.
1838           (regex_compile): Added variable `enough_memory' so could check
1839           that routine that verifies '$' positions could return an
1840           allocation error.
1841           (group_count): Deleted this variable, as `regnum' already does
1842           this work.
1843           (op_list): Added this variable to keep track of operations
1844           needed for verifying '$' positions.
1845           (anchor_list): Now initialize using routine
1846           `init_pattern_offsets_list'. 
1847           Consolidated the three bits_list initializations.
1848           In case '$': Instead of trying to go past constructs which can
1849           follow '$', merely detect the special case where it has to be
1850           at the pattern's end, fix up any fixup jumps if necessary,
1851           record the anchor if necessary and add an `endline' (and
1852           possibly two `no-op's) to the pattern; will call a routine at
1853           the end to verify if it's in a valid position or not.
1854           (init_pattern_offsets_list): Added to initialize pattern
1855           offsets lists.
1856           (extend_anchor_list): Renamed this extend_pattern_offsets_list
1857           and renamed parameters and internal variables appropriately.
1858           (add_pattern_offset): Added this routine which both
1859           record_anchor_position and add_op call.
1860           (adjust_pattern_offsets_list): Add this routine to adjust by
1861           some increment all the pattern offsets a list of such after a
1862           given position.
1863           (record_anchor_position): Now send in offset instead of
1864           calculating it and just call add_pattern_offset.
1865           (adjust_anchor_list): Replaced by above routine.
1866           (remove_intervening_anchors): If the anchor is an `endline'
1867           then replace it with `endline_in_repeat' instead of `no_op'.
1868           (add_op):  Added this routine to call in regex_compile
1869           wherever push something relevant to verifying '$' positions.
1870           (verify_and_adjust_endlines): Added routine to (1) verify that
1871           '$'s in a pattern buffer (represented by `endline') were in
1872           valid positions and (2) whether or not they were anchors.  
1873           (BITS_BLOCK_SIZE): Renamed BIT_BLOCK_SIZE and moved to right
1874           above bits list routines.
1875           (BITS_BLOCK): Defines which array element of a bits list the
1876           bit corresponding to a given position is in.
1877           (BITS_MASK): Has a 1 where the bit (in a bit list array element)
1878           for a given position is.
1879           
1880 Mon Apr  1 12:09:06 1991  Kathy Hargreaves  (kathy at hayley)
1882         * regex.c (BIT_BLOCK_SIZE): Defined this for using with
1883           bits_list_type, abstracted from level_list_type so could use
1884           for more things than just the level match status.
1885           (regex_compile): Renamed `level_list' variable to
1886           `level_match_status'. 
1887           Added variable `group_match_status' of type bits_list_type.
1888           Kept track of whether or not for all groups any of them
1889           matched other than the empty string, so detect if a back
1890           reference in front of a '^' made it nonleading or not.
1891           Do this by setting a match status bit for all active groups
1892           whenever leave a group that matches other than the empty string.
1893           Could detect which groups are active by going through the
1894           stack each time, but or-ing a bits list of active groups with
1895           a bits list of group match status is faster, so make a bits
1896           list of active groups instead.
1897           Have to check that '^' isn't in a leading position before
1898           going to normal_char.
1899           Whenever set level match status of the current level, also set
1900           the match status of all active groups.
1901           Increase the group count and make that group active whenever
1902           open a group.
1903           When close a group, only set the next level down if the
1904           current level matches other than the empty string, and make
1905           the current group inactive.
1906           At a back reference, only set a level's match status if the
1907           group to which the back reference refers matches other than
1908           the empty string.
1909           (init_bits_list): Added to initialize a bits list.
1910           (get_level_value): Deleted this.  (Made into
1911           get_level_match_status.)
1912           (extend_bits_list): Added to extend a bits list.  (Made this
1913           from deleted routine `extend_level_list'.)
1914           (get_bit): Added to get a bit value from a bits list.  (Made
1915           this from deleted routine `get_level_value'.)
1916           (set_bit_to_value): Added to set a bit in a bits list.  (Made
1917           this from deleted routine `set_level_value'.)
1918           (get_level_match_status): Added this to get the match status
1919           of a given level.  (Made from get_level_value.)
1920           (set_this_level, set_next_lower_level): Made all routines
1921           which set bits extend the bits list if necessary, thus they
1922           now return an unsigned value to indicate whether or not the
1923           reallocation failed.
1924           (increase_level): No longer extends the level list.
1925           (make_group_active): Added to mark as active a given group in
1926           an active groups list.
1927           (make_group_inactive): Added to mark as inactive a given group
1928           in an active groups list.
1929           (set_match_status_of_active_groups): Added to set the match
1930           status of all currently active groups.
1931           (get_group_match_status): Added to get a given group's match status.
1932           (no_levels_match_anything): Removed the paramenter LEVEL.
1933           (PUSH_FAILURE_POINT): Added rms' bug fix and changed RE_NREGS
1934           to num_internal_regs.
1935           
1936 Sun Mar 31 09:04:30 1991  Kathy Hargreaves  (kathy at hayley)
1938         * regex.h (RE_ANCHORS_ONLY_AT_ENDS): Added syntax so could
1939           constrain '^' and '$' to only be anchors if at the beginning
1940           and end of the pattern.
1941           (RE_SYNTAX_POSIX_BASIC): Added the above bit.
1942           
1943         * regex.c (enum regexcode): Changed `unused' to `no_op'.
1944           (this_and_lower_levels_match_nothing): Deleted forward reference.
1945           (regex_compile): case '^': if the syntax bit RE_ANCHORS_ONLY_AT_ENDS
1946           is set, then '^' is only an anchor if at the beginning of the
1947           pattern; only record anchor position if the syntax bit
1948           RE_REPEATED_ANCHORS_AWAY is set; the '^' is a normal char if
1949           the syntax bit RE_ANCHORS_ONLY_AT_END is set and we're not at
1950           the beginning of the pattern (and neither RE_CONTEXTUAL_INDEP_OPS
1951           nor RE_CONTEXTUAL_INDEP_OPS syntax bits are set).
1952           Only adjust the anchor list if the syntax bit
1953           RE_REPEATED_ANCHORS_AWAY is set.
1955         * regex.c (level_list_type): Use to detect when '^' is
1956           in a leading position.  
1957           (regex_compile): Added level_list_type level_list variable in
1958           which we keep track of whether or not a grouping level (in its
1959           current or most recent incarnation) matches anything besides the
1960           empty string.  Set the bit for the i-th level when detect it
1961           should match something other than the empty string and the bit
1962           for the (i-1)-th level when leave the i-th group.  Clear all
1963           bits for the i-th and higher levels if none of 0--(i - 1)-th's
1964           bits are set when encounter an alternation operator on that
1965           level.  If no levels are set when hit a '^', then it is in a
1966           leading position.  We keep track of which level we're at by
1967           increasing a variable current_level whenever we encounter an
1968           open-group operator and decreasing it whenever we encounter a
1969           close-group operator.
1970           Have to adjust the anchor list contents whenever insert
1971           something ahead of them (such as on_failure_jump's) in the
1972           pattern. 
1973           (adjust_anchor_list): Adjusts the offsets in an anchor list by
1974           a given increment starting at a given start position.
1975           (get_level_value): Returns the bit setting of a given level.
1976           (set_level_value): Sets the bit of a given level to a given value.
1977           (set_this_level): Sets (to 1) the bit of a given level.
1978           (set_next_lower_level): Sets (to 1) the bit of (LEVEL - 1) for a
1979           given LEVEL.
1980           (clear_this_and_higher_levels): Clears the bits for a given
1981           level and any higher levels.
1982           (extend_level_list): Adds sizeof(unsigned) more bits to a level list.
1983           (increase_level): Increases by 1 the value of a given level variable.
1984           (decrease_level): Decreases by 1 the value of a given level variable.
1985           (lower_levels_match_nothing): Checks if any levels lower than
1986           the given one match anything.
1987           (no_levels_match_anything): Checks if any levels match anything.
1988           (re_match_2): At case wordbeg: before looking at d-1, check that
1989           we're not at the string's beginning.
1990           At case wordend: Added some illuminating parentheses.
1991         
1992 Mon Mar 25 13:58:51 1991  Kathy Hargreaves  (kathy at hayley)
1994         * regex.h (RE_NO_ANCHOR_AT_NEWLINE): Changed syntax bit name
1995           from RE_ANCHOR_NOT_NEWLINE because an anchor never matches the
1996           newline itself, just the empty string either before or after it.
1997           (RE_REPEATED_ANCHORS_AWAY): Added this syntax bit for ignoring
1998           anchors inside groups which are operated on by repetition
1999           operators. 
2000           (RE_DOT_MATCHES_NEWLINE): Added this bit so the match-any-character
2001           operator could match a newline when it's set.
2002           (RE_SYNTAX_POSIX_BASIC): Set RE_DOT_MATCHES_NEWLINE in this.
2003           (RE_SYNTAX_POSIX_EXTENDED): Set RE_DOT_MATCHES_NEWLINE and 
2004           RE_REPEATED_ANCHORS_AWAY in this.
2005           (regerror): Changed prototypes to new POSIX spec.
2007         * regex.c (anchor_list_type): Added so could null out anchors inside
2008           repeated groups.
2009           (ANCHOR_LIST_PTR_FULL): Added for above type.
2010           (compile_stack_element): Changed name from stack_element.
2011           (compile_stack_type): Changed name from compile_stack.
2012           (INIT_COMPILE_STACK_SIZE): Changed name from INIT_STACK_SIZE.
2013           (COMPILE_STACK_EMPTY): Changed name from STACK_EMPTY.
2014           (COMPILE_STACK_FULL): Changed name from STACK_FULL.
2015           (regex_compile): Changed SYNTAX parameter to non-const.
2016           Changed variable name `stack' to `compile_stack'.
2017           If syntax bit RE_REPEATED_ANCHORS_AWAY is set, then naively put
2018           anchors in a list when encounter them and then set them to
2019           `unused' when detect they are within a group operated on by a
2020           repetition operator.  Need something more sophisticated than
2021           this, as they should only get set to `unused' if they are in
2022           positions where they would be anchors.  Also need a better way to
2023           detect contextually invalid anchors.
2024           Changed some commments.
2025           (is_in_compile_stack): Changed name from `is_in_stack'.
2026           (extend_anchor_list): Added to do anchor stuff.
2027           (record_anchor_position): Added to do anchor stuff.
2028           (remove_intervening_anchors): Added to do anchor stuff.
2029           (re_match_2): Now match a newline with the match-any-character
2030           operator if RE_DOT_MATCHES_NEWLINE is set.
2031           Compacted some code.
2032           (regcomp): Added new POSIX newline information to the header
2033           commment. 
2034           If REG_NEWLINE cflag is set, then now unset RE_DOT_MATCHES_NEWLINE
2035           in syntax.
2036           (put_in_buffer): Added to do new POSIX regerror spec.  Called
2037           by regerror.
2038           (regerror): Changed to take a pattern buffer, error buffer and
2039           its size, and return type `size_t', the size of the full error
2040           message, and the first ERRBUF_SIZE - 1 characters of the full
2041           error message in the error buffer.
2042           
2043 Wed Feb 27 16:38:33 1991  Kathy Hargreaves  (kathy at hayley)
2045         * regex.h (#include <sys/types.h>): Removed this as new POSIX
2046           standard has the user include it.
2047           (RE_SYNTAX_POSIX_BASIC and RE_SYNTAX_POSIX_EXTENDED): Removed
2048           RE_HAT_LISTS_NOT_NEWLINE as new POSIX standard has the cflag
2049           REG_NEWLINE now set this.  Similarly, added syntax bit
2050           RE_ANCHOR_NOT_NEWLINE as this is now unset by REG_NEWLINE.
2051           (RE_SYNTAX_POSIX_BASIC): Removed syntax bit
2052           RE_NO_CONSECUTIVE_REPEATS as POSIX now allows them.
2053           
2054         * regex.c (#include <sys/types.h>): Added this as new POSIX
2055           standard has the user include it instead of us putting it in
2056           regex.h.
2057           (extern char *re_syntax_table): Made into an extern so the
2058           user could allocate it.
2059           (DO_RANGE): If don't find a range end, now goto invalid_range_end 
2060           instead of unmatched_left_bracket.
2061           (regex_compile): Made variable SYNTAX non-const.????
2062           Reformatted some code.
2063           (re_compile_fastmap): Moved is_a_succeed_n's declaration to
2064           inner braces.
2065           Compacted some code.
2066           (SET_NEWLINE_FLAG): Removed and put inline.
2067           (regcomp): Made variable `syntax' non-const so can unset
2068           RE_ANCHOR_NOT_NEWLINE syntax bit if cflag RE_NEWLINE is set.
2069           If cflag RE_NEWLINE is set, set the RE_HAT_LISTS_NOT_NEWLINE
2070           syntax bit and unset RE_ANCHOR_NOT_NEWLINE one of `syntax'.
2071                     
2072 Wed Feb 20 16:33:38 1991  Kathy Hargreaves  (kathy at hayley)
2074         * regex.h (RE_NO_CONSECUTIVE_REPEATS): Changed name from
2075           RE_NO_CONSEC_REPEATS.
2076           (REG_ENESTING): Deleted this POSIX return value, as the stack
2077           is now unbounded.
2078           (struct re_pattern_buffer): Changed some comments.
2079           (re_compile_pattern): Changed a comment.
2080           Deleted check on stack upper bound and corresponding error.
2081           Now when there's no interval contents and it's the end of the
2082           pattern, go to unmatched_left_curly_brace instead of end_of_pattern.
2083           Removed nesting_too_deep error, as the stack is now unbounded.
2084           (regcomp): Removed REG_ENESTING case, as the stack is now unbounded.
2085           (regerror): Removed REG_ENESTING case, as the stack is now unbounded.
2086           
2087         * regex.c (MAX_STACK_SIZE): Deleted because don't need upper
2088           bound on array indexed with an unsigned number.
2090 Sun Feb 17 15:50:24 1991  Kathy Hargreaves  (kathy at hayley)
2092         * regex.h: Changed and added some comments.
2093         
2094         * regex.c (init_syntax_once): Made `_' a word character.
2095           (re_compile_pattern): Added a comment.
2096           (re_match_2): Redid header comment.
2097           (regexec): With header comment about PMATCH, corrected and
2098           removed details found regex.h, adding a reference.
2100 Fri Feb 15 09:21:31 1991  Kathy Hargreaves  (kathy at hayley)
2102         * regex.c (DO_RANGE): Removed argument parentheses.
2103           Now get untranslated range start and end characters and set
2104           list bits for the translated (if at all) versions of them and
2105           all characters between them.
2106           (re_match_2): Now use regs->num_regs instead of num_regs_wanted
2107           wherever possible.
2108           (regcomp): Now build case-fold translate table using isupper
2109           and tolower facilities so will work on foreign language characters.
2111 Sat Feb  9 16:40:03 1991  Kathy Hargreaves  (kathy at hayley)
2113         * regex.h (RE_HAT_LISTS_NOT_NEWLINE): Changed syntax bit name 
2114           from RE_LISTS_NOT_NEWLINE as it only affects nonmatching lists.
2115           Changed all references to the match-beginning-of-string
2116           operator to match-beginning-of-line operator, as this is what
2117           it does.
2118           (RE_NO_CONSEC_REPEATS): Added this syntax bit.
2119           (RE_SYNTAX_POSIX_BASIC): Added above bit to this.
2120           (REG_PREMATURE_END): Changed name to REG_EEND.
2121           (REG_EXCESS_NESTING): Changed name to REG_ENESTING.
2122           (REG_TOO_BIG): Changed name to REG_ESIZE.
2123           (REG_INVALID_PREV_RE): Deleted this return POSIX value.
2124           Added and changed some comments.
2125           
2126         * regex.c (re_compile_pattern): Now sets the pattern buffer's 
2127           `return_default_num_regs' field.
2128           (typedef struct stack_element, stack_type, INIT_STACK_SIZE,
2129           MAX_STACK_SIZE, STACK_EMPTY, STACK_FULL): Added for regex_compile.
2130           (INIT_BUF_SIZE): Changed value from 28 to 32.
2131           (BUF_PUSH): Changed name from BUFPUSH.
2132           (MAX_BUF_SIZE): Added so could use in many places.
2133           (IS_CHAR_CLASS_STRING): Replaced is_char_class with this.
2134           (regex_compile): Added a stack which could grow dynamically
2135           and which has struct elements.
2136           Go back to initializing `zero_times_ok' and `many_time_ok' to
2137           0 and |=ing them inside the loop.
2138           Now disallow consecutive repetition operators if the syntax
2139           bit RE_NO_CONSEC_REPEATS is set.
2140           Now detect trailing backslash when the compiler is expecting a
2141           `?' or a `+'.
2142           Changed calls to GET_BUFFER_SPACE which asked for 6 to ask for
2143           3, as that's all they needed.
2144           Now check for trailing backslash inside lists.
2145           Now disallow an empty alternative right before an end-of-line
2146           operator. 
2147           Now get buffer space before leaving space for a fixup jump.
2148           Now check if at pattern end when at open-interval operator.
2149           Added some comments.
2150           Now check if non-interval repetition operators follow an
2151           interval one if the syntax bit RE_NO_CONSEC_REPEATS is set.
2152           Now only check if what precedes an interval repetition
2153           operator isn't a regular expression which matches one
2154           character if the syntax bit RE_NO_CONSEC_REPEATS is set.
2155           Now return "Unmatched [ or [^" instead of "Unmatched [".
2156           (is_in_stack): Added to check if a given register number is in
2157           the stack.
2158           (re_match_2): If initial variable allocations fail, return -2,
2159           instead of -1.
2160           Now set reg's `num_regs' field when allocating regs.
2161           Now before allocating them, free regs->start and end if they
2162           aren't NULL and return -2 if either allocation fails.
2163           Now use regs->num_regs instead of num_regs_wanted to control
2164           regs loops. 
2165           Now increment past the newline when matching it with an
2166           end-of-line operator.
2167           (recomp): Added to the header comment.
2168           Now return REG_ESUBREG if regex_compile returns "Unmatched [
2169           or [^" instead of doing so if it returns "Unmatched [".
2170           Now return REG_BADRPT if in addition to returning "Missing
2171           preceding regular expression", regex_compile returns "Invalid
2172           preceding regular expression".
2173           Now return new return value names (see regex.h changes).
2174           (regexec): Added to header comment.
2175           Initialize regs structure.
2176           Now match whole string.
2177           Now always free regs.start and regs.end instead of just when
2178           the string matched.
2179           (regerror): Now return "Regex error: Unmatched [ or [^.\n"
2180           instead of "Regex error: Unmatched [.\n".
2181           Now return "Regex error: Preceding regular expression either
2182           missing or not simple.\n" instead of "Regex error: Missing
2183           preceding regular expression.\n".
2184           Removed REG_INVALID_PREV_RE case (it got subsumed into the
2185           REG_BADRPT case).
2186           
2187 Thu Jan 17 09:52:35 1991  Kathy Hargreaves  (kathy at hayley)
2189         * regex.h: Changed a comment.
2190         
2191         * regex.c: Changed and added large header comments.  
2192           (re_compile_pattern): Now if detect that `laststart' for an
2193           interval points to a byte code for a regular expression which
2194           matches more than one character, make it an internal error.
2195           (regerror): Return error message, don't print it.
2197 Tue Jan 15 15:32:49 1991  Kathy Hargreaves  (kathy at hayley)
2199         * regex.h (regcomp return codes): Added GNU ones.
2200           Updated some comments.
2201           
2202         * regex.c (DO_RANGE): Changed `obscure_syntax' to `syntax'.
2203           (regex_compile): Added `following_left_brace' to keep track of
2204           where pseudo interval following a valid interval starts.
2205           Changed some instances that returned "Invalid regular
2206           expression" to instead return error strings coinciding with
2207           POSIX error codes.
2208           Changed some comments.
2209           Now consider only things between `[:' and `:]' to be possible
2210           character class names.
2211           Now a character class expression can't end a pattern; at
2212           least a `]' must close the list.
2213           Now if the syntax bit RE_NO_BK_CURLY_BRACES is set, then a
2214           valid interval must be followed by yet another to get an error
2215           for preceding an interval (in this case, the second one) with
2216           a regular expression that matches more than one character.
2217           Now if what follows a valid interval begins with a open
2218           interval operator but doesn't begin a valid interval, then set
2219           following_left_bracket to it, put it in C and go to
2220           normal_char label.
2221           Added some comments.
2222           Return "Invalid character class name" instead of "Invalid
2223           character class".
2224           (regerror): Return messages for all POSIX error codes except
2225           REG_ECOLLATE and REG_NEWLINE, along with all GNU error codes.
2226           Added `break's after all cases.
2227           (main): Call re_set_syntax instead of setting `obscure_syntax'
2228           directly. 
2229           
2230 Sat Jan 12 13:37:59 1991  Kathy Hargreaves  (kathy at hayley)
2232         * regex.h (Copyright): Updated date.
2233           (#include <sys/types.h>): Include unconditionally.
2234           (RE_CANNOT_MATCH_NEWLINE): Deleted this syntax bit.
2235           (RE_SYNTAX_POSIX_BASIC, RE_SYNTAX_POSIX_EXTENDED): Removed
2236           setting the RE_ANCHOR_NOT_NEWLINE syntax bit from these.
2237           Changed and added some comments.
2238           (struct re_pattern_buffer):  Changed some flags from chars to bits.
2239           Added field `syntax'; holds which syntax pattern was compiled with.
2240           Added bit flag `return_default_num_regs'.
2241           (externs for GNU and Berkeley UNIX routines): Added `const's to 
2242           parameter types to be compatible with POSIX.
2243           (#define const): Added to support old C compilers.
2244           
2245         * regex.c (Copyright): Updated date.
2246           (enum regexpcode): Deleted `newline'.
2247           (regex_compile): Renamed re_compile_pattern to this, added a
2248           syntax parameter so it can set the pattern buffer's `syntax'
2249           field.
2250           Made `pattern', and `size' `const's so could pass to POSIX
2251           interface routines; also made `const' whatever interval
2252           variables had to be to make this work.
2253           Changed references to `obscure_syntax' to new parameter `syntax'.
2254           Deleted putting `newline' in buffer when see `\n'.
2255           Consider invalid character classes which have nothing wrong
2256           except the character class name; if so, return character-class error.
2257           (is_char_class): Added routine for regex_compile.
2258           (re_compile_pattern): added a new one which calls
2259           regex_compile with `obscure_syntax' as the actual parameter
2260           for the formal `syntax'. 
2261           Gave this the old routine's header comments.
2262           Made `pattern', and `size' `const's so could use POSIX interface
2263           routine parameters.
2264           (re_search, re_search_2, re_match, re_match_2): Changed
2265           `pbufp' to `bufp'.
2266           (re_search_2, re_match_2): Changed `mstop' to `stop'.
2267           (re_search, re_search_2): Made all parameters except `regs'
2268           `const's so could use POSIX interface routines parameters.
2269           (re_search_2): Added private copies of `const' parameters so
2270           could change their values.
2271           (re_match_2): Made all parameters except `regs' `const's so
2272           could use POSIX interface routines parameters.
2273           Changed `size1' and `size2' parameters to `size1_arg' and
2274           `size2_arg' and so could change; added local `size1' and
2275           `size2' and set to these.
2276           Added some comments.
2277           Deleted `newline' case.
2278           `begline' can also possibly match if `d' contains a newline;
2279           if it does, we have to increment d to point past the newline.
2280           Replaced references to `obscure_syntax' with `bufp->syntax'.
2281           (re_comp, re_exec): Made parameter `s' a `const' so could use POSIX
2282           interface routines parameters.
2283           Now call regex_compile, passing `obscure_syntax' via the
2284           `syntax' parameter. 
2285           (re_exec): Made local `len' a `const' so could pass to re_search.
2286           (regcomp): Added header comment.
2287           Added local `syntax' to set and pass to regex_compile rather
2288           than setting global `obscure_syntax' and passing it.
2289           Call regex_compile with its `syntax' parameter rather than
2290           re_compile_pattern.
2291           Return REG_ECTYPE if character-class error.
2292           (regexec): Don't initialize `regs' to anything.
2293           Made `private_preg' a nonpointer so could set to what the
2294           constant `preg' points.
2295           Initialize `private_preg's `return_default_num_regs' field to
2296           zero because want to return `nmatch' registers, not however
2297           many there are subexpressions in the pattern.
2298           Also test if `nmatch' > 0 to see if should pass re_match `regs'.
2300 Tue Jan  8 15:57:17 1991  Kathy Hargreaves  (kathy at hayley)
2302         * regex.h (struct re_pattern_buffer): Reworded comment.
2303         
2304         * regex.c (EXTEND_BUFFER): Also reset beg_interval.
2305           (re_search_2): Return val if val = -2.
2306           (NUM_REG_ITEMS): Listed items in comment.
2307           (NUM_OTHER_ITEMS): Defined this for using in > 1 definition.
2308           (MAX_NUM_FAILURE_ITEMS): Replaced `+ 2' with NUM_OTHER_ITEMS.
2309           (NUM_FAILURE_ITEMS): As with definition above and added to
2310           comment. 
2311           (PUSH_FAILURE_POINT): Replaced `* 2's with `<< 1's.
2312           (re_match_2): Test with equality with 1 to see pbufp->bol and
2313           pbufp->eol are set.
2314           
2315 Fri Jan  4 15:07:22 1991  Kathy Hargreaves  (kathy at hayley)
2317         * regex.h (struct re_pattern_buffer): Reordered some fields.
2318           Updated some comments.
2319           Added not_bol and not_eol fields.
2320           (extern regcomp, regexec, regerror): Added return types.
2321           (extern regfree): Added `extern'.
2322           
2323         * regex.c (min): Deleted unused macro.
2324           (re_match_2): Compacted some code.
2325           Removed call to macro `min' from `for' loop.
2326           Fixed so unused registers get filled with -1's.
2327           Fail if the pattern buffer's `not_bol' field is set and
2328           encounter a `begline'.  
2329           Fail if the pattern buffer's `not_eol' field is set and
2330           encounter a `endline'.  
2331           Deleted redundant check for empty stack in fail case.
2332           Don't free pattern buffer's components in re_comp.
2333           (regexec): Initialize variable regs.
2334           Added `private_preg' pattern buffer so could set `not_bol' and
2335           `not_eol' fields and hand to re_match.
2336           Deleted naive attempt to detect anchors.
2337           Set private pattern buffer's `not_bol' and `not_eol' fields
2338           according to eflags value.
2339           `nmatch' must also be > 0 for us to bother allocating
2340           registers to send to re_match and filling pmatch
2341           with their results after the call to re_match.
2342           Send private pattern buffer instead of argument to re_match.
2343           If use the registers, always free them and then set them to NULL.
2344           (regerror): Added this Posix routine.
2345           (regfree): Added this Posix routine.
2346           
2347 Tue Jan  1 15:02:45 1991  Kathy Hargreaves  (kathy at hayley)
2349         * regex.h (RE_NREGS): Deleted this definition, as now the user
2350           can choose how many registers to have.  
2351           (REG_NOTBOL, REG_NOTEOL): Defined these Posix eflag bits.  
2352           (REG_NOMATCH, REG_BADPAT, REG_ECOLLATE, REG_ECTYPE,
2353           REG_EESCAPE, REG_ESUBREG, REG_EBRACK, REG_EPAREN, REG_EBRACE,
2354           REG_BADBR, REG_ERANGE, REG_ESPACE, REG_BADRPT, REG_ENEWLINE):
2355           Defined these return values for Posix's regcomp and regexec.
2356           Updated some comments.
2357           (struct re_pattern_buffer): Now typedef this as regex_t
2358           instead of the other way around.
2359           (struct re_registers): Added num_regs field.  Made start and
2360           end fields pointers to char instead of fixed size arrays.
2361           (regmatch_t): Added this Posix register type.
2362           (regcomp, regexec, regerror, regfree): Added externs for these
2363           Posix routines.
2364           
2365         * regex.c (enum boolean): Typedefed this.
2366           (re_pattern_buffer): Reformatted some comments.
2367           (re_compile_pattern): Updated some comments.
2368           Always push start_memory and its attendant number whenever
2369           encounter a group, not just when its number is less than the
2370           previous maximum number of registers; same for stop_memory.
2371           Get 4 bytes of buffer space instead of 2 when pushing a
2372           set_number_at.
2373           (can_match_nothing): Added this to elaborate on and replace
2374           code in re_match_2.
2375           (reg_info_type): Made can_match_nothing field a bit instead of int.
2376           (MIN): Added for re_match_2.
2377           (re_match_2 macros): Changed all `for' loops which used
2378           RE_NREGS to now use num_internal_regs as upper bounds.
2379           (MAX_NUM_FAILURE_ITEMS): Use num_internal_regs instead of RE_NREGS.
2380           (POP_FAILURE_POINT): Added check for empty stack.
2381           (FREE_VARIABLES): Added this to free (and set to NULL)
2382           variables allocated in re_match_2.
2383           (re_match_2): Rearranged parameters to be in order.
2384           Added variables num_regs_wanted (how many registers the user wants)
2385           and num_internal_regs (how many groups there are).
2386           Allocated initial_stack, regstart, regend, old_regstart,
2387           old_regend, reginfo, best_regstart, and best_regend---all
2388           which used to be fixed size arrays.  Free them all and return
2389           -1 if any fail.
2390           Free above variables if starting position pos isn't valid.
2391           Changed all `for' loops which used RE_NREGS to now use
2392           num_internal_regs as upper bounds---except for the loops which
2393           fill regs; then use num_regs_wanted.
2394           Allocate regs if the user has passed it and wants more than 0
2395           registers filled.
2396           Set regs->start[i] and regs->end[i] to -1 if either
2397           regstart[i] or regend[i] equals -1, not just the first.
2398           Free allocated variables before returning.
2399           Updated some comments.
2400           (regcomp): Return REG_ESPACE, REG_BADPAT, REG_EPAREN when
2401           appropriate.
2402           Free translate array.
2403           (regexec): Added this Posix interface routine.
2404           
2405 Mon Dec 24 14:21:13 1990  Kathy Hargreaves  (kathy at hayley)
2406         
2407         * regex.h: If _POSIX_SOURCE is defined then #include <sys/types.h>.
2408           Added syntax bit RE_CANNOT_MATCH_NEWLINE.
2409           Defined Posix cflags: REG_EXTENDED, REG_NEWLINE, REG_ICASE, and
2410             REG_NOSUB.
2411           Added fields re_nsub and no_sub to struct re_pattern_buffer.
2412           Typedefed regex_t to be `struct re_pattern_buffer'.
2413         
2414         * regex.c (CHAR_SET_SIZE): Defined this to be 256 and replaced
2415           incidences of this value with this constant.
2416           (re_compile_pattern): Added switch case for `\n' and put
2417           `newline' into the pattern buffer when encounter this.
2418           Increment the pattern_buffer's `re_nsub' field whenever open a
2419           group. 
2420           (re_match_2): Match a newline with `newline'---provided the
2421           syntax bit RE_CANNOT_MATCH_NEWLINE isn't set.
2422           (regcomp): Added this Posix interface routine.
2423           (enum test_type): Added interface_test tag.
2424           (main): Added Posix interface test.
2425           
2426 Tue Dec 18 12:58:12 1990  Kathy Hargreaves  (kathy at hayley)
2428         * regex.h (struct re_pattern_buffer): reformatted so would fit
2429           in texinfo documentation.
2430           
2431 Thu Nov 29 15:49:16 1990  Kathy Hargreaves  (kathy at hayley)
2433         * regex.h (RE_NO_EMPTY_ALTS): Added this bit.
2434           (RE_SYNTAX_POSIX_EXTENDED): Added above bit.
2435         
2436         * regex.c (re_compile_pattern): Disallow empty alternatives only
2437           when RE_NO_EMPTY_ALTS is set, not when RE_CONTEXTUAL_INVALID_OPS is.
2438           Changed RE_NO_BK_CURLY_BRACES to RE_NO_BK_PARENS when testing
2439           for empty groups at label handle_open.
2440           At label handle_bar: disallow empty alternatives if RE_NO_EMPTY_ALTS
2441           is set.
2442           Rewrote some comments.
2444           (re_compile_fastmap): cleaned up code.
2446           (re_search_2): Rewrote comment.
2448           (struct register_info): Added field `inner_groups'; it records
2449           which groups are inside of the current one.  
2450           Added field can_match_nothing; it's set if the current group
2451           can match nothing.  
2452           Added field ever_match_something; it's set if current group
2453           ever matched something.
2455           (INNER_GROUPS): Added macro to access inner_groups field of
2456           struct register_info.
2458           (CAN_MATCH_NOTHING): Added macro to access can_match_nothing
2459           field of struct register_info.
2461           (EVER_MATCHED_SOMETHING): Added macro to access
2462           ever_matched_something field of struct register_info.
2464           (NOTE_INNER_GROUP): Defined macro to record that a given group
2465           is inside of all currently active groups.
2466           
2467           (re_match_2): Added variables *p1 and mcnt2 (multipurpose).
2468           Added old_regstart and old_regend arrays to hold previous
2469           register values if they need be restored.
2470           Initialize added fields and variables.
2471           case start_memory: Find out if the group can match nothing.
2472             Save previous register values in old_restart and old_regend.
2473             Record that current group is inside of all currently active
2474             groups. 
2475             If the group is inside a loop and it ever matched anything,
2476             restore its registers to values before the last failed match.
2477             Restore the registers for the inner groups, too.
2478           case duplicate: Can back reference to a group that never
2479             matched if it can match nothing.
2481 Thu Nov 29 11:12:54 1990  Karl Berry  (karl at hayley)
2483         * regex.c (bcopy, ...): define these if either _POSIX_SOURCE or
2484           STDC_HEADERS is defined; same for including <stdlib.h>.
2486 Sat Oct  6 16:04:55 1990  Kathy Hargreaves  (kathy at hayley)
2488         * regex.h (struct re_pattern_buffer): Changed field comments.
2489         
2490         * regex.c (re_compile_pattern): Allow a `$' to precede an
2491         alternation operator (`|' or `\|').
2492         Disallow `^' and/or `$' in empty groups if the syntax bit
2493         RE_NO_EMPTY_GROUPS is set.
2494         Wait until have parsed a valid `\{...\}' interval expression
2495         before testing RE_CONTEXTUAL_INVALID_OPS to see if it's
2496         invalidated by that.
2497         Don't use RE_NO_BK_CURLY_BRACES to test whether or not a validly
2498         parsed interval expression is invalid if it has no preceding re;
2499         rather, use RE_CONTEXTUAL_INVALID_OPS.
2500         If an interval parses, but there is no preceding regular
2501         expression, yet the syntax bit RE_CONTEXTUAL_INDEP_OPS is set,
2502         then that interval can match the empty regular expression; if
2503         the bit isn't set, then the characters in the interval
2504         expression are parsed as themselves (sans the backslashes).
2505         In unfetch_interval case: Moved PATFETCH to above the test for
2506         RE_NO_BK_CURLY_BRACES being set, which would force a goto
2507         normal_backslash; the code at both normal_backsl and normal_char
2508         expect a character in `c.'
2509         
2510 Sun Sep 30 11:13:48 1990  Kathy Hargreaves  (kathy at hayley)
2512         * regex.h: Changed some comments to use the terms used in the
2513         documentation. 
2514         (RE_CONTEXTUAL_INDEP_OPS): Changed name from `RE_CONTEXT_INDEP_OPS'.
2515         (RE_LISTS_NOT_NEWLINE): Changed name from `RE_HAT_NOT_NEWLINE.'
2516         (RE_ANCHOR_NOT_NEWLINE): Added this syntax bit.
2517         (RE_NO_EMPTY_GROUPS): Added this syntax bit.
2518         (RE_NO_HYPHEN_RANGE_END): Deleted this syntax bit.
2519         (RE_SYNTAX_...): Reformatted.
2520         (RE_SYNTAX_POSIX_BASIC, RE_SYNTAX_EXTENDED): Added syntax bits 
2521         RE_ANCHOR_NOT_NEWLINE and RE_NO_EMPTY_GROUPS, and deleted
2522         RE_NO_HYPHEN_RANGE_END.
2523         (RE_SYNTAX_POSIX_EXTENDED): Added syntax bit RE_DOT_NOT_NULL.
2525         * regex.c (bcopy, bcmp, bzero): Define if _POSIX_SOURCE is defined.
2526         (_POSIX_SOURCE): ifdef this, #include <stdlib.h>
2527         (#ifdef emacs): Changed comment of the #endif for the its #else
2528         clause to be `not emacs', not `emacs.'
2529         (no_pop_jump): Changed name from `jump'.
2530         (pop_failure_jump): Changed name from `finalize_jump.'
2531         (maybe_pop_failure_jump): Changed name from `maybe_finalize_jump'.
2532         (no_pop_jump_n): Changed name from `jump_n.'
2533         (EXTEND_BUFFER): Use shift instead of multiplication to double
2534         buf->allocated.
2535         (DO_RANGE, recompile_pattern): Added macro to set the list bits
2536         for a range.
2537         (re_compile_pattern): Fixed grammar problems in some comments.
2538         Checked that RE_NO_BK_VBAR is set to make `$' valid before a `|'
2539         and not set to make it valid before a `\|'.
2540         Checked that RE_NO_BK_PARENS is set to make `$' valid before a ')' 
2541         and not set to make it valid before a `\)'.
2542         Disallow ranges starting with `-', unless the range is the
2543         first item in a list, rather than disallowing ranges which end
2544         with `-'.
2545         Disallow empty groups if the syntax bit RE_NO_EMPTY_GROUPS is set.
2546         Disallow nothing preceding `{' and `\{' if they represent the
2547         open-interval operator and RE_CONTEXTUAL_INVALID_OPS is set.
2548         (register_info_type): typedef-ed this using `struct register_info.'
2549         (SET_REGS_MATCHED): Compacted the code.
2550         (re_match_2): Made it fail if back reference a group which we've
2551         never matched.
2552         Made `^' not match a newline if the syntax bit
2553         RE_ANCHOR_NOT_NEWLINE is set.
2554         (really_fail): Added this label so could force a final fail that
2555         would not try to use the failure stack to recover.
2556         
2557 Sat Aug 25 14:23:01 1990  Kathy Hargreaves  (kathy at hayley)
2559         * regex.h (RE_CONTEXTUAL_OPS): Changed name from RE_CONTEXT_OPS.
2560           (global): Rewrote comments and rebroke some syntax #define lines.
2562         * regex.c (isgraph): Added definition for sequents.  
2563         (global): Now refer to character set lists as ``lists.''
2564         Rewrote comments containing ``\('' or ``\)'' to now refer to
2565         ``groups.''
2566         (RE_CONTEXTUAL_OPS): Changed name from RE_CONTEXT_OPS.
2567         
2568         (re_compile_pattern): Expanded header comment.
2570 Sun Jul 15 14:50:25 1990  Kathy Hargreaves  (kathy at hayley)
2572         * regex.h (RE_CONTEX_INDEP_OPS): the comment's sense got turned
2573         around when we changed how it read; changed it to be correct.
2575 Sat Jul 14 16:38:06 1990  Kathy Hargreaves  (kathy at hayley)
2577         * regex.h (RE_NO_EMPTY_BK_REF): changed name to 
2578         RE_NO_MISSING_BK_REF, as this describes it better.
2579         
2580         * regex.c (re_compile_pattern): changed RE_NO_EMPTY_BK_REF
2581         to RE_NO_MISSING_BK_REF, as above.
2582         
2583 Thu Jul 12 11:45:05 1990  Kathy Hargreaves  (kathy at hayley)
2585         * regex.h (RE_NO_EMPTY_BRACKETS): removed this syntax bit, as
2586         bracket expressions should *never* be empty regardless of the
2587         syntax.  Removes this bit from RE_SYNTAX_POSIX_BASIC and
2588         RE_SYNTAX_POSIX_EXTENDED. 
2589         
2590         * regex.c (SET_LIST_BIT): in the comment, now refer to character
2591         sets as (non)matching sets, as bracket expressions can now match
2592         other things in addition to characters.
2593         (re_compile_pattern): refer to groups as such instead of `\(...\)'
2594         or somesuch, because groups can now be enclosed in either plain
2595         parens or backslashed ones, depending on the syntax.
2596         In the '[' case, added a boolean just_had_a_char_class to detect
2597         whether or not a character class begins a range (which is invalid).
2598         Restore way of breaking out of a bracket expression to original way.
2599         Add way to detect a range if the last thing in a bracket
2600         expression was a character class.                
2601         Took out check for c != ']' at the end of a character class in
2602         the else clause, as it had already been checked in the if part
2603         that also checked the validity of the string.
2604         Set or clear just_had_a_char_class as appropriate.
2605         Added some comments.  Changed references to character sets to
2606         ``(non)matching lists.''
2607         
2608 Sun Jul  1 12:11:29 1990  Karl Berry  (karl at hayley)
2610         * regex.h (BYTEWIDTH): moved back to regex.c.
2612         * regex.h (re_compile_fastmap): removed declaration; this
2613         shouldn't be advertised.
2614         
2615 Mon May 28 15:27:53 1990  Kathy Hargreaves  (kathy at hayley)
2617         * regex.c (ifndef Sword): Made comments more specific.
2618         (global): include <stdio.h> so can write fatal messages on
2619         standard error.  Replaced calls to assert with fprintfs to
2620         stderr and exit (1)'s.
2621         (PREFETCH): Reformatted to make more readable.
2622         (AT_STRINGS_BEG): Defined to test if we're at the beginning of
2623         the virtual concatenation of string1 and string2.
2624         (AT_STRINGS_END): Defined to test if at the end of the virtual
2625         concatenation of string1 and string2.
2626         (AT_WORD_BOUNDARY): Defined to test if are at a word boundary.
2627         (IS_A_LETTER(d)): Defined to test if the contents of the pointer D
2628         is a letter.
2629         (re_match_2): Rewrote the wordbound, notwordbound, wordbeg, wordend,
2630         begbuf, and endbuf cases in terms of the above four new macros.
2631         Called SET_REGS_MATCHED in the matchsyntax, matchnotsyntax,
2632         wordchar, and notwordchar cases.
2634 Mon May 14 14:49:13 1990  Kathy Hargreaves  (kathy at hayley)
2636         * regex.c (re_search_2): Fixed RANGE to not ever take STARTPOS
2637         outside of virtual concatenation of STRING1 and STRING2.
2638         Updated header comment as to this.
2639         (re_match_2): Clarified comment about MSTOP in header.
2641 Sat May 12 15:39:00 1990  Kathy Hargreaves  (kathy at hayley)
2643         * regex.c (re_search_2): Checked for out-of-range STARTPOS.
2644         Added comments.
2645         When searching backwards, not only get the character with which
2646         to compare to the fastmap from string2 if the starting position
2647         >= size1, but also if size1 is zero; this is so won't get a
2648         segmentation fault if string1 is null.
2649         Reformatted code at label advance.
2651 Thu Apr 12 20:26:21 1990  Kathy Hargreaves  (kathy at hayley)
2653         * regex.h: Added #pragma once and #ifdef...endif __REGEXP_LIBRARY.
2654         (RE_EXACTN_VALUE): Added for search.c to use.
2655         Reworded some comments.
2656         
2657         regex.c: Punctuated some comments correctly.
2658         (NULL): Removed this.
2659         (RE_EXACTN_VALUE): Added for search.c to use.
2660         (<ctype.h>): Moved this include to top of file.
2661         (<assert.h>): Added this include.
2662         (struct regexpcode): Assigned 0 to unused and 1 to exactn
2663         because of RE_EXACTN_VALUE. 
2664         Added comment.
2665         (various macros): Lined up backslashes near end of line.
2666         (insert_jump): Cleaned up the header comment.
2667         (re_search): Corrected the header comment.
2668         (re_search_2): Cleaned up and completed the header comment.
2669         (re_max_failures): Updated comment.
2670         (struct register_info): Constructed as bits so as to save space
2671         on the stack when pushing register information.
2672         (IS_ACTIVE): Macro for struct register_info.
2673         (MATCHED_SOMETHING): Macro for struct register_info.
2674         (NUM_REG_ITEMS): How many register information items for each
2675         register we have to push on the stack at each failure.
2676         (MAX_NUM_FAILURE_ITEMS): If push all the registers on failure,
2677         this is how many items we push on the stack.
2678         (PUSH_FAILURE_POINT): Now pushes whether or not the register is
2679         currently active, and whether or not it matched something.
2680         Checks that there's enough space allocated to accomodate all the
2681         items we currently want to push. (Before, a test for an empty
2682         stack sufficed because we always pushed and popped the same
2683         number of items).
2684         Replaced ``2'' with MAX_NUM_FAILURE_POINTS when ``2'' refers
2685         to how many things get pushed on the stack each time.
2686         When copy the stack into the newly allocated storage, now only copy
2687         the area in use.
2688         Clarified comment.
2689         (POP_FAILURE_POINT): Defined to use in places where put number
2690         of registers on the stack into a variable before using it to
2691         decrement the stack, so as to not confuse the compiler.
2692         (IS_IN_FIRST_STRING): Defined to check if a pointer points into
2693         the first string.
2694         (SET_REGS_MATCHED): Changed to use the struct register_info
2695         bits; also set the matched-something bit to false if the
2696         register isn't currently active. (This is a redundant setting.)
2697         (re_match_2): Cleaned up and completed the header comment.
2698         Updated the failure stack comment.
2699         Replaced the ``2'' with MAX_NUM_FAILURE_ITEMS in the static
2700         allocation of initial_stack, because now more than two (now up
2701         to MAX_FAILURE_ITEMS) items get pushed on the failure stack each
2702         time.
2703         Ditto for stackb.
2704         Trashed restart_seg1, regend_seg1, best_regstart_seg1, and
2705         best_regend_seg1 because they could have erroneous information
2706         in them, such as when matching ``a'' (in string1) and ``ab'' (in
2707         string2) with ``(a)*ab''; before using IS_IN_FIRST_STRING to see
2708         whether or not the register starts or ends in string1,
2709         regstart[1] pointed past the end of string1, yet regstart_seg1
2710         was 0!
2711         Added variable reg_info of type struct register_info to keep
2712         track of currently active registers and whether or not they
2713         currently match anything.
2714         Commented best_regs_set.
2715         Trashed reg_active and reg_matched_something and put the
2716         information they held into reg_info; saves space on the stack.
2717         Replaced NULL with '\000'.
2718         In begline case, compacted the code.
2719         Used assert to exit if had an internal error.
2720         In begbuf case, because now force the string we're working on
2721         into string2 if there aren't two strings, now allow d == string2
2722         if there is no string1 (and the check for that is size1 == 0!);
2723         also now succeeds if there aren't any strings at all.
2724         (main, ifdef canned): Put test type into a variable so could
2725         change it while debugging.
2726         
2727 Sat Mar 24 12:24:13 1990  Kathy Hargreaves  (kathy at hayley)
2729         * regex.c (GET_UNSIGNED_NUMBER): Deleted references to num_fetches.
2730         (re_compile_pattern): Deleted num_fetches because could keep
2731         track of the number of fetches done by saving a pointer into the
2732         pattern. 
2733         Added variable beg_interval to be used as a pointer, as above.
2734         Assert that beg_interval points to something when it's used as above.
2735         Initialize succeed_n's to lower_bound because re_compile_fastmap
2736         needs to know it.
2737         (re_compile_fastmap): Deleted unnecessary variable is_a_jump_n.
2738         Added comment.
2739         (re_match_2): Put number of registers on the stack into a
2740         variable before using it to decrement the stack, so as to not
2741         confuse the compiler.
2742         Updated comments.
2743         Used error routine instead of printf and exit.
2744         In exactn case, restored longer code from ``original'' regex.c
2745         which doesn't test translate inside a loop.
2747         * regex.h: Moved #define NULL and the enum regexpcode definition
2748         and to regex.c.  Changed some comments.
2749         
2750         regex.c (global): Updated comments about compiling and for the
2751         re_compile_pattern jump routines.
2752         Added #define NULL and the enum regexpcode definition (from
2753         regex.h).
2754         (enum regexpcode): Added set_number_at to reset the n's of
2755         succeed_n's and jump_n's.
2756         (re_set_syntax): Updated its comment.
2757         (re_compile_pattern): Moved its heading comment to after its macros.
2758         Moved its include statement to the top of the file.
2759         Commented or added to comments of its macros.
2760         In start_memory case: Push laststart value before adding
2761         start_memory and its register number to the buffer, as they
2762         might not get added.
2763         Added code to put a set_number_at before each succeed_n and one
2764         after each jump_n; rewrote code in what seemed a more
2765         straightforward manner to put all these things in the pattern so
2766         the succeed_n's would correctly jump to the set_number_at's of
2767         the matching jump_n's, and so the jump_n's would correctly jump
2768         to after the set_number_at's of the matching succeed_n's.
2769         Initialize succeed_n n's to -1.
2770         (insert_op_2): Added this to insert an operation followed by
2771         two integers.
2772         (re_compile_fastmap): Added set_number_at case.
2773         (re_match_2): Moved heading comment to after macros.
2774         Added mention of REGS to heading comment.
2775         No longer turn a succeed_n with n = 0 into an on_failure_jump,
2776         because n needs to be reset each time through a loop.
2777         Check to see if a succeed_n's n is set by its set_number_at.
2778         Added set_number_at case.
2779         Updated some comments.
2780         (main): Added another main to run posix tests, which is compiled
2781         ifdef both test and canned.  (Old main is still compiled ifdef
2782         test only).
2784 Tue Mar 19 09:22:55 1990 Kathy Hargreaves (kathy at hayley)
2786         * regex.[hc]: Change all instances of the word ``legal'' to
2787         ``valid'' and all instances of ``illegal'' to ``invalid.''
2789 Sun Mar  4 12:11:31 1990  Kathy Hargreaves  (kathy at hayley)
2791         * regex.h: Added syntax bit RE_NO_EMPTY_RANGES which is set if
2792         an ending range point has to collate higher or equal to the
2793         starting range point.
2794         Added syntax bit RE_NO_HYPHEN_RANGE_END which is set if a hyphen
2795         can't be an ending range point.
2796         Set to two above bits in RE_SYNTAX_POSIX_BASIC and 
2797         RE_SYNTAX_POSIX_EXTENDED.
2798         
2799         regex.c: (re_compile_pattern): Don't allow empty ranges if the
2800         RE_NO_EMPTY_RANGES syntax bit is set.
2801         Don't let a hyphen be a range end if the RE_NO_HYPHEN_RANGE_END 
2802         syntax bit is set.
2803         (ESTACK_PUSH_2): renamed this PUSH_FAILURE_POINT and made it
2804         push all the used registers on the stack, as well as the number
2805         of the highest numbered register used, and (as before) the two
2806         failure points.
2807         (re_match_2): Fixed up comments.
2808         Added arrays best_regstart[], best_regstart_seg1[], best_regend[], 
2809         and best_regend_seg1[] to keep track of the best match so far
2810         whenever reach the end of the pattern but not the end of the
2811         string, and there are still failure points on the stack with
2812         which to backtrack; if so, do the saving and force a fail.
2813         If reach the end of the pattern but not the end of the string,
2814         but there are no more failure points to try, restore the best
2815         match so far, set the registers and return.
2816         Compacted some code.
2817         In stop_memory case, if the subexpression we've just left is in
2818         a loop, push onto the stack the loop's on_failure_jump failure
2819         point along with the current pointer into the string (d).
2820         In finalize_jump case, in addition to popping the failure
2821         points, pop the saved registers.
2822         In the fail case, restore the registers, as well as the failure
2823         points. 
2825 Sun Feb 18 15:08:10 1990  Kathy Hargreaves  (kathy at hayley)
2827         * regex.c: (global): Defined a macro GET_BUFFER_SPACE which
2828         makes sure you have a specified number of buffer bytes
2829         allocated. 
2830         Redefined the macro BUFPUSH to use this.
2831         Added comments.
2832         
2833         (re_compile_pattern): Call GET_BUFFER_SPACE before storing or
2834         inserting any jumps.
2836         (re_match_2): Set d to string1 + pos and dend to end_match_1
2837         only if string1 isn't null.
2838         Force exit from a loop if it's around empty parentheses.
2839         In stop_memory case, if found some jumps, increment p2 before
2840         extracting address to which to jump. Also, don't need to know
2841         how many more times can jump_n.
2842         In begline case, d must equal string1 or string2, in that order,
2843         only if they are not null.
2844         In maybe_finalize_jump case, skip over start_memorys' and
2845         stop_memorys' register numbers, too.
2847 Thu Feb 15 15:53:55 1990  Kathy Hargreaves  (kathy at hayley)
2849         * regex.c (BUFPUSH): off by one goof in deciding whether to
2850         EXTEND_BUFFER.
2852 Wed Jan 24 17:07:46 1990  Kathy Hargreaves  (kathy at hayley)
2854         * regex.h: Moved definition of NULL to here.
2855         Got rid of ``In other words...'' comment.
2856         Added to some comments.        
2858         regex.c: (re_compile_pattern): Tried to bulletproof some code,
2859         i.e., checked if backward references (e.g., p[-1]) were within
2860         the range of pattern.
2862         (re_compile_fastmap): Fixed a bug in succeed_n part where was
2863         getting the amount to jump instead of how many times to jump.
2864         
2865         (re_search_2): Changed the name of the variable ``total'' to
2866         ``total_size.''
2867         Condensed some code.
2869         (re_match_2): Moved the comment about duplicate from above the
2870         start_memory case to above duplicate case.
2871         
2872         (global): Rewrote some comments.
2873         Added commandline arguments to testing.
2874         
2875 Wed Jan 17 11:47:27 1990  Kathy Hargreaves  (kathy at hayley)
2877         * regex.c: (global): Defined a macro STORE_NUMBER which stores a
2878         number into two contiguous bytes.  Also defined STORE_NUMBER_AND_INCR
2879         which does the same thing and then increments the pointer to the
2880         storage place to point after the number.
2881         Defined a macro EXTRACT_NUMBER which extracts a number from two
2882         continguous bytes.  Also defined EXTRACT_NUMBER_AND_INCR which
2883         does the same thing and then increments the pointer to the
2884         source to point to after where the number was.
2885         
2886 Tue Jan 16 12:09:19 1990  Kathy Hargreaves  (kathy at hayley)
2888         * regex.h: Incorporated rms' changes.
2889         Defined RE_NO_BK_REFS syntax bit which is set when want to
2890         interpret back reference patterns as literals.
2891         Defined RE_NO_EMPTY_BRACKETS syntax bit which is set when want
2892         empty bracket expressions to be illegal.
2893         Defined RE_CONTEXTUAL_ILLEGAL_OPS syntax bit which is set when want
2894         it to be illegal for *, +, ? and { to be first in an re or come
2895         immediately after a | or a (, and for ^ not to appear in a
2896         nonleading position and $ in a nontrailing position (outside of
2897         bracket expressions, that is).        
2898         Defined RE_LIMITED_OPS syntax bit which is set when want +, ?
2899         and | to always be literals instead of ops.
2900         Fixed up the Posix syntax.
2901         Changed the syntax bit comments from saying, e.g., ``0 means...'' 
2902         to ``If this bit is set, it means...''.
2903         Changed the syntax bit defines to use shifts instead of integers.
2905         * regex.c: (global): Incorporated rms' changes.
2907         (re_compile_pattern): Incorporated rms' changes
2908         Made it illegal for a $ to appear anywhere but inside a bracket
2909         expression or at the end of an re when RE_CONTEXTUAL_ILLEGAL_OPS 
2910         is set. Made the same hold for $ except it has to be at the
2911         beginning of an re instead of the end. 
2912         Made the re "[]" illegal if RE_NO_EMPTY_BRACKETS is set.
2913         Made it illegal for | to be first or last in an re, or immediately 
2914         follow another | or a (.
2915         Added and embellished some comments.
2916         Allowed \{ to be interpreted as a literal if RE_NO_BK_CURLY_BRACES 
2917         is set.
2918         Made it illegal for *, +, ?, and { to appear first in an re, or
2919         immediately follow a | or a ( when RE_CONTEXTUAL_ILLEGAL_OPS is set.
2920         Made back references interpreted as literals if RE_NO_BK_REFS is set.
2921         Made recursive intervals either illegal (if RE_NO_BK_CURLY_BRACES 
2922         isn't set) or interpreted as literals (if is set), if RE_INTERVALS
2923         is set.
2924         Made it treat +, ? and | as literals if RE_LIMITED_OPS is set.
2925         Cleaned up some code.        
2926         
2927 Thu Dec 21 15:31:32 1989  Kathy Hargreaves  (kathy at hayley)
2929         * regex.c: (global): Moved RE_DUP_MAX to regex.h and made it
2930         equal 2^15 - 1 instead of 1000.
2931         Defined NULL to be zero.
2932         Moved the definition of BYTEWIDTH to regex.h.
2933         Made the global variable obscure_syntax nonstatic so the tests in
2934         another file could use it.
2935         
2936         (re_compile_pattern): Defined a maximum length (CHAR_CLASS_MAX_LENGTH) 
2937         for character class strings (i.e., what's between the [: and the 
2938         :]'s).
2939         Defined a macro SET_LIST_BIT(c) which sets the bit for C in a
2940         character set list.
2941         Took out comments that EXTEND_BUFFER clobbers C.
2942         Made the string "^" match itself, if not RE_CONTEXT_IND_OPS.
2943         Added character classes to bracket expressions.
2944         Change the laststart pointer saved with the start of each
2945         subexpression to point to start_memory instead of after the
2946         following register number.  This is because the subexpression
2947         might be in a loop.
2948         Added comments and compacted some code.
2949         Made intervals only work if preceded by an re matching a single
2950         character or a subexpression.
2951         Made back references to nonexistent subexpressions illegal if
2952         using POSIX syntax.
2953         Made intervals work on the last preceding character of a
2954         concatenation of characters, e.g., ab{0,} matches abbb, not abab.
2955         Moved macro PREFETCH to outside the routine.
2956         
2957         (re_compile_fastmap): Added succeed_n to work analogously to
2958         on_failure_jump if n is zero and jump_n to work analogously to
2959         the other backward jumps.
2960         
2961         (re_match_2): Defined macro SET_REGS_MATCHED to set which
2962         current subexpressions had matches within them.
2963         Changed some comments.
2964         Added reg_active and reg_matched_something arrays to keep track
2965         of in which subexpressions currently have matched something.
2966         Defined MATCHING_IN_FIRST_STRING and replaced ``dend == end_match_1'' 
2967         with it to make code easier to understand.
2968         Fixed so can apply * and intervals to arbitrarily nested
2969         subexpressions.  (Lots of previous bugs here.)
2970         Changed so won't match a newline if syntax bit RE_DOT_NOT_NULL is set.
2971         Made the upcase array nonstatic so the testing file could use it also.
2972         
2973         (main.c): Moved the tests out to another file.
2974         
2975         (tests.c): Moved all the testing stuff here.
2976         
2977 Sat Nov 18 19:30:30 1989  Kathy Hargreaves  (kathy at hayley)
2978         
2979         * regex.c: (re_compile_pattern): Defined RE_DUP_MAX, the maximum
2980         number of times an interval can match a pattern.
2981         Added macro GET_UNSIGNED_NUMBER (used to get below):
2982         Added variables lower_bound and upper_bound for upper and lower
2983         bounds of intervals.
2984         Added variable num_fetches so intervals could do backtracking.
2985         Added code to handle '{' and "\{" and intervals.
2986         Added to comments.
2987         
2988         (store_jump_n): (Added) Stores a jump with a number following the
2989         relative address (for intervals).
2990         
2991         (insert_jump_n): (Added) Inserts a jump_n.
2993         (re_match_2): Defined a macro ESTACK_PUSH_2 for the error stack; 
2994         it checks for overflow and reallocates if necessary.
2996         * regex.h: Added bits (RE_INTERVALS and RE_NO_BK_CURLY_BRACES)
2997         to obscure syntax to indicate whether or not
2998         a syntax handles intervals and recognizes either \{ and
2999         \} or { and } as operators.  Also added two syntaxes
3000         RE_SYNTAX_POSIX_BASIC and RE_POSIX_EXTENDED and two command codes
3001         to the enumeration regexpcode; they are succeed_n and jump_n.
3003 Sat Nov 18 19:30:30 1989  Kathy Hargreaves  (kathy at hayley)
3004         
3005         * regex.c: (re_compile_pattern): Defined INIT_BUFF_SIZE to get rid
3006         of repeated constants in code.  Tested with value 1.
3007         Renamed PATPUSH as BUFPUSH, since it pushes things onto the
3008         buffer, not the pattern.  Also made this macro extend the buffer
3009         if it's full (so could do the following):
3010         Took out code at top of loop that checks to see if buffer is going
3011         to be full after 10 additions (and reallocates if necessary). 
3013         (insert_jump): Rearranged declaration lines so comments would read
3014         better.
3016         (re_match_2): Compacted exactn code and added more comments.
3017         
3018         (main): Defined macros TEST_MATCH and MATCH_SELF to do
3019         testing; took out loop so could use these instead.
3020         
3021 Tue Oct 24 20:57:18 1989  Kathy Hargreaves  (kathy at hayley)
3023         * regex.c (re_set_syntax): Gave argument `syntax' a type.
3024         (store_jump, insert_jump): made them void functions.
3026 Local Variables:
3027 mode: indented-text
3028 left-margin: 8
3029 version-control: never
3030 End: