In perl.git, the branch smoke-me/khw-lexact has been updated <https://perl5.git.perl.org/perl.git/commitdiff/9416765c517188b87db391d4baecb4ac4895b516?hp=0815f5d3102b0250013fcb8f47623a7aad9de645>
- Log ----------------------------------------------------------------- commit 9416765c517188b87db391d4baecb4ac4895b516 Author: Karl Williamson <[email protected]> Date: Wed Sep 18 10:49:13 2019 -0600 f ----------------------------------------------------------------------- Summary of changes: regcomp.h | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/regcomp.h b/regcomp.h index 82240292eb..d0292d3db8 100644 --- a/regcomp.h +++ b/regcomp.h @@ -156,6 +156,14 @@ struct regnode_string { char string[1]; }; +struct regnode_lstring { /* Constructed this way to keep the string aligned. */ + U8 flags; + U8 type; + U16 next_off; + U32 str_len; /* Only 16 bits allowed before would overflow 'next_off' */ + char string[1]; +}; + /* Argument bearing node - workhorse, arg1 is often for the data field */ struct regnode_1 { @@ -335,22 +343,23 @@ struct regnode_ssc { #define STRINGs(p) (__ASSERT_(OP(p) != LEXACT) ((struct regnode_string *)p)->string) #define OPERANDs(p) STRINGs(p) -#define STR_LENl(p) (__ASSERT_(OP(p) == LEXACT) (U16)((((struct regnode_string *)p)->str_len) | ((((struct regnode_string *)p)->string[0]) << 8))) -#define STRINGl(p) (__ASSERT_(OP(p) == LEXACT) (((struct regnode_string *)p)->string) + 1) +#define STR_LENl(p) (__ASSERT_(OP(p) == LEXACT) (((struct regnode_lstring *)p)->str_len)) +#define STRINGl(p) (__ASSERT_(OP(p) == LEXACT) (((struct regnode_lstring *)p)->string)) #define OPERANDl(p) STRINGl(p) -#define OPERAND(p) ((OP(p) == LEXACT) ? OPERANDl(p) : OPERANDs(p)) #define STR_LEN(p) ((OP(p) == LEXACT) ? STR_LENl(p) : STR_LENs(p)) #define STRING(p) ((OP(p) == LEXACT) ? STRINGl(p) : STRINGs(p)) +#define OPERAND(p) STRING(p) #define MASK(p) ((char*)OPERAND(p)) #define STR_SZ(l) (((l) + sizeof(regnode) - 1) / sizeof(regnode)) #define NODE_SZ_STR(p) (STR_SZ(STR_LEN(p))+1) #define setSTR_LEN(p,v) \ STMT_START{ \ - ((struct regnode_string *)p)->str_len = ((v) & 0xFF); \ if (OP(p) == LEXACT) \ - ((struct regnode_string *)p)->string[0] = ((v) >> 8); \ + ((struct regnode_lstring *)(p))->str_len = (v); \ + else \ + ((struct regnode_string *)(p))->str_len = (v); \ } STMT_END #undef NODE_ALIGN -- Perl5 Master Repository
