X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=regexp.h;h=3ff959c1201955114a96a49f87dbbe230767e56d;hb=7581d28c2d4dcb4f3b408247518e6164f6b89764;hp=05640548b186d46e330396369a9deafab516b4c4;hpb=a30b2f1f43446bf5477e7baa5fee5d5c59659ce6;p=p5sagit%2Fp5-mst-13.2.git diff --git a/regexp.h b/regexp.h index 0564054..3ff959c 100644 --- a/regexp.h +++ b/regexp.h @@ -1,6 +1,7 @@ /* regexp.h * - * Copyright (c) 1997-2002, Larry Wall + * Copyright (C) 1993, 1994, 1996, 1997, 1999, 2000, 2001, 2003, + * by Larry Wall and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -36,6 +37,9 @@ typedef struct regexp { struct reg_data *data; /* Additional data. */ char *subbeg; /* saved or original string so \digit works forever. */ +#ifdef PERL_OLD_COPY_ON_WRITE + SV *saved_copy; /* If non-NULL, SV which is COW from original */ +#endif U32 *offsets; /* offset annotations 20001228 MJD */ I32 sublen; /* Length of string pointed by subbeg */ I32 refcnt; @@ -100,6 +104,23 @@ typedef struct regexp { ? RX_MATCH_COPIED_on(prog) \ : RX_MATCH_COPIED_off(prog)) +#ifdef PERL_OLD_COPY_ON_WRITE +#define RX_MATCH_COPY_FREE(rx) \ + STMT_START {if (rx->saved_copy) { \ + SV_CHECK_THINKFIRST_COW_DROP(rx->saved_copy); \ + } \ + if (RX_MATCH_COPIED(rx)) { \ + Safefree(rx->subbeg); \ + RX_MATCH_COPIED_off(rx); \ + }} STMT_END +#else +#define RX_MATCH_COPY_FREE(rx) \ + STMT_START {if (RX_MATCH_COPIED(rx)) { \ + Safefree(rx->subbeg); \ + RX_MATCH_COPIED_off(rx); \ + }} STMT_END +#endif + #define RX_MATCH_UTF8(prog) ((prog)->reganch & ROPT_MATCH_UTF8) #define RX_MATCH_UTF8_on(prog) ((prog)->reganch |= ROPT_MATCH_UTF8) #define RX_MATCH_UTF8_off(prog) ((prog)->reganch &= ~ROPT_MATCH_UTF8)