X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=regcomp.c;h=61c3e0d3593b5483bdc1b0489cf4e61b06fd7217;hb=469bf43793110471bf2ceb5e99f0e9cc630d60fe;hp=b930e8a0a3518973785bd9d0d11d85d44d830bdf;hpb=c712d3769459fa50fd65778c268dc26d41922ffc;p=p5sagit%2Fp5-mst-13.2.git diff --git a/regcomp.c b/regcomp.c index b930e8a..61c3e0d 100644 --- a/regcomp.c +++ b/regcomp.c @@ -146,6 +146,8 @@ static void regtail _((regnode *, regnode *)); static char* regwhite _((char *, char *)); static char* nextchar _((void)); static void re_croak2 _((const char* pat1,const char* pat2,...)) __attribute__((noreturn)); +static char* regpposixcc _((I32 value)); +static void clear_re _((void *r)); #endif /* Length of a variant. */ @@ -206,6 +208,12 @@ static scan_data_t zero_scan_data = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; #define CHR_DIST(a,b) (UTF ? utf8_distance(a,b) : a - b) STATIC void +clear_re(void *r) +{ + ReREFCNT_dec((regexp *)r); +} + +STATIC void scan_commit(scan_data_t *data) { dTHR; @@ -867,7 +875,12 @@ pregcomp(char *exp, char *xend, PMOP *pm) r->prelen = xend - exp; r->precomp = PL_regprecomp; r->subbeg = r->subbase = NULL; - r->nparens = PL_regnpar - 1; /* set early to validate backrefs */ + r->nparens = PL_regnpar - 1; /* set early to validate backrefs */ + + r->substrs = 0; /* Useful during FAIL. */ + r->startp = 0; /* Useful during FAIL. */ + r->endp = 0; /* Useful during FAIL. */ + PL_regcomp_rx = r; /* Second pass: emit code. */ @@ -1764,6 +1777,7 @@ tryagain: break; case 'b': PL_seen_zerolen++; + PL_regseen |= REG_SEEN_LOOKBEHIND; ret = reg_node( UTF ? (LOC ? BOUNDLUTF8 : BOUNDUTF8) @@ -1775,6 +1789,7 @@ tryagain: break; case 'B': PL_seen_zerolen++; + PL_regseen |= REG_SEEN_LOOKBEHIND; ret = reg_node( UTF ? (LOC ? NBOUNDLUTF8 : NBOUNDUTF8)