X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/13f27704e67ca16eefc14851c1cbf02be39509c6..HEAD:/op_reg_common.h diff --git a/op_reg_common.h b/op_reg_common.h index 108589e..1273cb6 100644 --- a/op_reg_common.h +++ b/op_reg_common.h @@ -10,7 +10,7 @@ */ /* These defines are used in both op.h and regexp.h The definitions use the - * shift form so that ext/B/defsubs_h.PL will pick them up. + * shift form so that ext/B/Makefile.PL will pick them up. * * Data structures used in the two headers have common fields, and in fact one * is copied onto the other. This makes it easy to keep them in sync */ @@ -23,16 +23,19 @@ #define RXf_PMf_STD_PMMOD_SHIFT 0 -/* The bits need to be ordered so that the msix are contiguous starting at bit +/* The bits need to be ordered so that the msixn are contiguous starting at bit * RXf_PMf_STD_PMMOD_SHIFT, followed by the p. See STD_PAT_MODS and * INT_PAT_MODS in regexp.h for the reason contiguity is needed */ /* Make sure to update lib/re.pm when changing these! */ /* Make sure you keep the pure PMf_ versions below in sync */ -#define RXf_PMf_MULTILINE (1 << (RXf_PMf_STD_PMMOD_SHIFT+0)) /* /m */ -#define RXf_PMf_SINGLELINE (1 << (RXf_PMf_STD_PMMOD_SHIFT+1)) /* /s */ -#define RXf_PMf_FOLD (1 << (RXf_PMf_STD_PMMOD_SHIFT+2)) /* /i */ -#define RXf_PMf_EXTENDED (1 << (RXf_PMf_STD_PMMOD_SHIFT+3)) /* /x */ -#define RXf_PMf_KEEPCOPY (1 << (RXf_PMf_STD_PMMOD_SHIFT+4)) /* /p */ +#define RXf_PMf_MULTILINE (1U << (RXf_PMf_STD_PMMOD_SHIFT+0)) /* /m */ +#define RXf_PMf_SINGLELINE (1U << (RXf_PMf_STD_PMMOD_SHIFT+1)) /* /s */ +#define RXf_PMf_FOLD (1U << (RXf_PMf_STD_PMMOD_SHIFT+2)) /* /i */ +#define RXf_PMf_EXTENDED (1U << (RXf_PMf_STD_PMMOD_SHIFT+3)) /* /x */ +#define RXf_PMf_EXTENDED_MORE (1U << (RXf_PMf_STD_PMMOD_SHIFT+4)) /* /xx */ +#define RXf_PMf_NOCAPTURE (1U << (RXf_PMf_STD_PMMOD_SHIFT+5)) /* /n */ + +#define RXf_PMf_KEEPCOPY (1U << (RXf_PMf_STD_PMMOD_SHIFT+6)) /* /p */ /* The character set for the regex is stored in a field of more than one bit * using an enum, for reasons of compactness and to ensure that the options are @@ -48,8 +51,8 @@ typedef enum { REGEX_ASCII_MORE_RESTRICTED_CHARSET } regex_charset; -#define _RXf_PMf_CHARSET_SHIFT ((RXf_PMf_STD_PMMOD_SHIFT)+5) -#define RXf_PMf_CHARSET (7 << (_RXf_PMf_CHARSET_SHIFT)) /* 3 bits */ +#define _RXf_PMf_CHARSET_SHIFT ((RXf_PMf_STD_PMMOD_SHIFT)+7) +#define RXf_PMf_CHARSET (7U << (_RXf_PMf_CHARSET_SHIFT)) /* 3 bits */ /* Manually decorate these functions here with gcc-style attributes just to * avoid making the regex_charset typedef global, which it would need to be for @@ -80,41 +83,65 @@ get_regex_charset(const U32 flags) return (regex_charset) ((flags & RXf_PMf_CHARSET) >> _RXf_PMf_CHARSET_SHIFT); } -#define _RXf_PMf_SHIFT_COMPILETIME (RXf_PMf_STD_PMMOD_SHIFT+8) +#define RXf_PMf_STRICT (1U<<(RXf_PMf_STD_PMMOD_SHIFT+10)) + +#define _RXf_PMf_SHIFT_COMPILETIME (RXf_PMf_STD_PMMOD_SHIFT+11) + /* Set in Perl_pmruntime if op_flags & OPf_SPECIAL, i.e. split. Will be used by regex engines to check whether they should set RXf_SKIPWHITE */ -#define RXf_PMf_SPLIT (1<<(RXf_PMf_STD_PMMOD_SHIFT+8)) +#define RXf_PMf_SPLIT (1U<<(RXf_PMf_STD_PMMOD_SHIFT+11)) /* Next available bit after the above. Name begins with '_' so won't be * exported by B */ -#define _RXf_PMf_SHIFT_NEXT (RXf_PMf_STD_PMMOD_SHIFT+9) +#define _RXf_PMf_SHIFT_NEXT (RXf_PMf_STD_PMMOD_SHIFT+12) /* Mask of the above bits. These need to be transferred from op_pmflags to * re->extflags during compilation */ -#define RXf_PMf_COMPILETIME (RXf_PMf_MULTILINE|RXf_PMf_SINGLELINE|RXf_PMf_FOLD|RXf_PMf_EXTENDED|RXf_PMf_KEEPCOPY|RXf_PMf_CHARSET) -#define RXf_PMf_FLAGCOPYMASK (RXf_PMf_MULTILINE|RXf_PMf_SINGLELINE|RXf_PMf_FOLD|RXf_PMf_EXTENDED|RXf_PMf_KEEPCOPY|RXf_PMf_CHARSET|RXf_PMf_SPLIT) - +#define RXf_PMf_COMPILETIME \ + ( RXf_PMf_MULTILINE \ + | RXf_PMf_SINGLELINE \ + | RXf_PMf_FOLD \ + | RXf_PMf_EXTENDED \ + | RXf_PMf_EXTENDED_MORE \ + | RXf_PMf_KEEPCOPY \ + | RXf_PMf_NOCAPTURE \ + | RXf_PMf_CHARSET \ + | RXf_PMf_STRICT ) + +#define RXf_PMf_FLAGCOPYMASK \ + ( RXf_PMf_COMPILETIME \ + | RXf_PMf_SPLIT ) + +/* Temporary to get Jenkins happy again + * See thread starting at http://nntp.perl.org/group/perl.perl5.porters/220710 + */ +#if 0 /* Exclude win32 because it can't cope with I32_MAX definition */ #ifndef WIN32 # if RXf_PMf_COMPILETIME > I32_MAX # error RXf_PMf_COMPILETIME wont fit in arg2 field of eval node # endif #endif +#endif -/* These copies need to be numerical or defsubs_h.PL won't know about them. */ -#define PMf_MULTILINE 1<<0 -#define PMf_SINGLELINE 1<<1 -#define PMf_FOLD 1<<2 -#define PMf_EXTENDED 1<<3 -#define PMf_KEEPCOPY 1<<4 -#define PMf_CHARSET 7<<5 -#define PMf_SPLIT 1<<8 - -#if PMf_MULTILINE != RXf_PMf_MULTILINE || PMf_SINGLELINE != RXf_PMf_SINGLELINE || PMf_FOLD != RXf_PMf_FOLD || PMf_EXTENDED != RXf_PMf_EXTENDED || PMf_KEEPCOPY != RXf_PMf_KEEPCOPY || PMf_SPLIT != RXf_PMf_SPLIT || PMf_CHARSET != RXf_PMf_CHARSET +/* These copies need to be numerical or ext/B/Makefile.PL won't think they are + * constants */ +#define PMf_MULTILINE (1U<<0) +#define PMf_SINGLELINE (1U<<1) +#define PMf_FOLD (1U<<2) +#define PMf_EXTENDED (1U<<3) +#define PMf_EXTENDED_MORE (1U<<4) +#define PMf_NOCAPTURE (1U<<5) +#define PMf_KEEPCOPY (1U<<6) +#define PMf_CHARSET (7U<<7) +#define PMf_STRICT (1U<<10) +#define PMf_SPLIT (1U<<11) + +#if PMf_MULTILINE != RXf_PMf_MULTILINE || PMf_SINGLELINE != RXf_PMf_SINGLELINE || PMf_FOLD != RXf_PMf_FOLD || PMf_EXTENDED != RXf_PMf_EXTENDED || PMf_EXTENDED_MORE != RXf_PMf_EXTENDED_MORE || PMf_KEEPCOPY != RXf_PMf_KEEPCOPY || PMf_SPLIT != RXf_PMf_SPLIT || PMf_CHARSET != RXf_PMf_CHARSET || PMf_NOCAPTURE != RXf_PMf_NOCAPTURE || PMf_STRICT != RXf_PMf_STRICT # error RXf_PMf defines are wrong #endif @@ -122,8 +149,8 @@ get_regex_charset(const U32 flags) * directly in the #define because doing so confuses regcomp.pl. * (2**n - 1) is n 1 bits, so the below gets the contiguous bits between the * beginning and ending shifts */ -#if RXf_PMf_COMPILETIME != (((1 << (_RXf_PMf_SHIFT_COMPILETIME))-1) \ - & (~((1 << RXf_PMf_STD_PMMOD_SHIFT)-1))) +#if RXf_PMf_COMPILETIME != ((nBIT_MASK(_RXf_PMf_SHIFT_COMPILETIME)) \ + & (~(nBIT_MASK( RXf_PMf_STD_PMMOD_SHIFT)))) # error RXf_PMf_COMPILETIME is invalid #endif