X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=regcomp.h;h=b2d9b846f7bcbafc95e6f27c47f3395b76f75820;hb=5e79a27ab8657b40a1ba45b02fa151bd3d5fcd46;hp=8d0d1faf6e1017b2cd31b2a0206a4dc9a4525a2e;hpb=9ef589d8078fdf16316dec772c00e81b3c38fd22;p=p5sagit%2Fp5-mst-13.2.git diff --git a/regcomp.h b/regcomp.h index 8d0d1fa..b2d9b84 100644 --- a/regcomp.h +++ b/regcomp.h @@ -1,12 +1,4 @@ -/* $RCSfile: regcomp.h,v $$Revision: 4.0.1.1 $$Date: 91/06/07 11:49:40 $ - * - * $Log: regcomp.h,v $ - * Revision 4.0.1.1 91/06/07 11:49:40 lwall - * patch4: no change - * - * Revision 4.0 91/03/20 01:39:09 lwall - * 4.0 baseline. - * +/* regcomp.h */ /* @@ -14,20 +6,20 @@ * compile to execute that permits the execute phase to run lots faster on * simple cases. They are: * - * regstart str that must begin a match; Nullch if none obvious + * regstart sv that must begin a match; Nullch if none obvious * reganch is the match anchored (at beginning-of-line only)? * regmust string (pointer into program) that match must include, or NULL - * [regmust changed to STR* for bminstr()--law] + * [regmust changed to SV* for bminstr()--law] * regmlen length of regmust string * [regmlen not used currently] * * Regstart and reganch permit very fast decisions on suitable starting points * for a match, cutting down the work a lot. Regmust permits fast rejection * of lines that cannot possibly match. The regmust tests are costly enough - * that regcomp() supplies a regmust only if the r.e. contains something + * that pregcomp() supplies a regmust only if the r.e. contains something * potentially expensive (at present, the only such thing detected is * or + * at the start of the r.e., which can involve a lot of backup). Regmlen is - * supplied because the test in regexec() needs it and regcomp() is computing + * supplied because the test in pregexec() needs it and pregcomp() is computing * it anyway. * [regmust is now supplied always. The tests that use regmust have a * heuristic that disables the test if it usually matches.] @@ -58,27 +50,39 @@ /* definition number opnd? meaning */ #define END 0 /* no End of program. */ #define BOL 1 /* no Match "" at beginning of line. */ -#define EOL 2 /* no Match "" at end of line. */ -#define ANY 3 /* no Match any one character. */ -#define ANYOF 4 /* str Match character in (or not in) this class. */ -#define CURLY 5 /* str Match this simple thing {n,m} times. */ -#define BRANCH 6 /* node Match this alternative, or the next... */ -#define BACK 7 /* no Match "", "next" ptr points backward. */ -#define EXACTLY 8 /* str Match this string (preceded by length). */ -#define NOTHING 9 /* no Match empty string. */ -#define STAR 10 /* node Match this (simple) thing 0 or more times. */ -#define PLUS 11 /* node Match this (simple) thing 1 or more times. */ -#define ALNUM 12 /* no Match any alphanumeric character */ -#define NALNUM 13 /* no Match any non-alphanumeric character */ -#define BOUND 14 /* no Match "" at any word boundary */ -#define NBOUND 15 /* no Match "" at any word non-boundary */ -#define SPACE 16 /* no Match any whitespace character */ -#define NSPACE 17 /* no Match any non-whitespace character */ -#define DIGIT 18 /* no Match any numeric character */ -#define NDIGIT 19 /* no Match any non-numeric character */ -#define REF 20 /* num Match some already matched string */ -#define OPEN 21 /* num Mark this point in input as start of #n. */ -#define CLOSE 22 /* num Analogous to OPEN. */ +#define MBOL 2 /* no Same, assuming multiline. */ +#define SBOL 3 /* no Same, assuming singleline. */ +#define EOL 4 /* no Match "" at end of line. */ +#define MEOL 5 /* no Same, assuming multiline. */ +#define SEOL 6 /* no Same, assuming singleline. */ +#define ANY 7 /* no Match any one character (except newline). */ +#define SANY 8 /* no Match any one character. */ +#define ANYOF 9 /* sv Match character in (or not in) this class. */ +#define CURLY 10 /* sv Match this simple thing {n,m} times. */ +#define CURLYX 11 /* sv Match this complex thing {n,m} times. */ +#define BRANCH 12 /* node Match this alternative, or the next... */ +#define BACK 13 /* no Match "", "next" ptr points backward. */ +#define EXACTLY 14 /* sv Match this string (preceded by length). */ +#define NOTHING 15 /* no Match empty string. */ +#define STAR 16 /* node Match this (simple) thing 0 or more times. */ +#define PLUS 17 /* node Match this (simple) thing 1 or more times. */ +#define ALNUM 18 /* no Match any alphanumeric character */ +#define NALNUM 19 /* no Match any non-alphanumeric character */ +#define BOUND 20 /* no Match "" at any word boundary */ +#define NBOUND 21 /* no Match "" at any word non-boundary */ +#define SPACE 22 /* no Match any whitespace character */ +#define NSPACE 23 /* no Match any non-whitespace character */ +#define DIGIT 24 /* no Match any numeric character */ +#define NDIGIT 25 /* no Match any non-numeric character */ +#define REF 26 /* num Match some already matched string */ +#define OPEN 27 /* num Mark this point in input as start of #n. */ +#define CLOSE 28 /* num Analogous to OPEN. */ +#define MINMOD 29 /* no Next operator is not greedy. */ +#define GBOL 30 /* no Matches where last m//g left off. */ +#define IFMATCH 31 /* no Succeeds if the following matches. */ +#define UNLESSM 32 /* no Fails if the following matches. */ +#define SUCCEED 33 /* no Return from a subroutine, basically. */ +#define WHILEM 34 /* no Do curly processing and see if rest matches. */ /* * Opcode notes: @@ -103,23 +107,65 @@ */ #ifndef DOINIT -extern char regarglen[]; +EXT char regarglen[]; +#else +EXT char regarglen[] = {0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0}; +#endif + +#ifndef DOINIT +EXT char regkind[]; #else -char regarglen[] = {0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2}; +EXT char regkind[] = { + END, + BOL, + BOL, + BOL, + EOL, + EOL, + EOL, + ANY, + ANY, + ANYOF, + CURLY, + CURLY, + BRANCH, + BACK, + EXACTLY, + NOTHING, + STAR, + PLUS, + ALNUM, + NALNUM, + BOUND, + NBOUND, + SPACE, + NSPACE, + DIGIT, + NDIGIT, + REF, + OPEN, + CLOSE, + MINMOD, + BOL, + BRANCH, + BRANCH, + END, + WHILEM +}; #endif /* The following have no fixed length. */ #ifndef DOINIT -extern char varies[]; +EXT char varies[]; #else -char varies[] = {BRANCH,BACK,STAR,PLUS,CURLY,REF,0}; +EXT char varies[] = {BRANCH,BACK,STAR,PLUS,CURLY,CURLYX,REF,WHILEM,0}; #endif /* The following always have a length of 1. */ #ifndef DOINIT -extern char simple[]; +EXT char simple[]; #else -char simple[] = {ANY,ANYOF,ALNUM,NALNUM,SPACE,NSPACE,DIGIT,NDIGIT,0}; +EXT char simple[] = {ANY,SANY,ANYOF,ALNUM,NALNUM,SPACE,NSPACE,DIGIT,NDIGIT,0}; #endif EXT char regdummy; @@ -168,8 +214,10 @@ EXT char regdummy; #ifdef REGALIGN #define NEXTOPER(p) ((p) + 4) +#define PREVOPER(p) ((p) - 4) #else #define NEXTOPER(p) ((p) + 3) +#define PREVOPER(p) ((p) - 3) #endif #define MAGIC 0234 @@ -178,20 +226,13 @@ EXT char regdummy; * Utility definitions. */ #ifndef lint -#ifndef CHARBITS +#ifndef CHARMASK #define UCHARAT(p) ((int)*(unsigned char *)(p)) #else -#define UCHARAT(p) ((int)*(p)&CHARBITS) +#define UCHARAT(p) ((int)*(p)&CHARMASK) #endif #else /* lint */ #define UCHARAT(p) regdummy #endif /* lint */ -#define FAIL(m) fatal("/%s/: %s",regprecomp,m) - -char *regnext(); -#ifdef DEBUGGING -void regdump(); -char *regprop(); -#endif - +#define FAIL(m) croak("/%.127s/: %s",regprecomp,m)