X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=regcomp.h;h=d6ee2f1be4844e33904012d98da4127e623bdbb3;hb=d1fdab8951cfd4b59ef0f71acc62a3d2fdcc4910;hp=7bddc1b051e4a104f6621ae15397ae3586a8d325;hpb=51371543ca1a75ed152020ad0846b5b8cf11c32f;p=p5sagit%2Fp5-mst-13.2.git diff --git a/regcomp.h b/regcomp.h index 7bddc1b..d6ee2f1 100644 --- a/regcomp.h +++ b/regcomp.h @@ -66,10 +66,10 @@ typedef OP OP_4tree; /* Will be redefined later. */ */ struct regnode_string { - U8 flags; + U8 str_len; U8 type; U16 next_off; - U8 string[1]; + char string[1]; }; struct regnode_1 { @@ -133,6 +133,12 @@ struct regnode_2 { #define OP(p) ((p)->type) #define OPERAND(p) (((struct regnode_string *)p)->string) +#define MASK(p) ((char*)OPERAND(p)) +#define STR_LEN(p) (((struct regnode_string *)p)->str_len) +#define STRING(p) (((struct regnode_string *)p)->string) +#define STR_SZ(l) ((l + sizeof(regnode) - 1) / sizeof(regnode)) +#define NODE_SZ_STR(p) (STR_SZ(STR_LEN(p))+1) + #define NODE_ALIGN(node) #define ARG_LOC(p) (((struct regnode_1 *)p)->arg1) #define ARG1_LOC(p) (((struct regnode_2 *)p)->arg1) @@ -241,14 +247,14 @@ struct regnode_2 { #define FAIL(m) \ STMT_START { \ if (!SIZE_ONLY) \ - SAVEDESTRUCTOR(clear_re,(void*)PL_regcomp_rx); \ + SAVEDESTRUCTOR_X(clear_re,(void*)PL_regcomp_rx); \ Perl_croak(aTHX_ "/%.127s/: %s", PL_regprecomp,m); \ } STMT_END #define FAIL2(pat,m) \ STMT_START { \ if (!SIZE_ONLY) \ - SAVEDESTRUCTOR(clear_re,(void*)PL_regcomp_rx); \ + SAVEDESTRUCTOR_X(clear_re,(void*)PL_regcomp_rx); \ S_re_croak2(aTHX_ "/%.127s/: ",pat,PL_regprecomp,m); \ } STMT_END