X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=Size.xs;h=e0ef024bfa377d7e1fdc32109aaa615f12a639d2;hb=1894b4b4bf128fc2c14e2534c013103ce1da4ee0;hp=ada99cc34d8bf8e6c195c7f2b9f790597b259e0d;hpb=98b91a13eb79864172fa4bf6a7eb84ed0ab7d468;p=p5sagit%2FDevel-Size.git diff --git a/Size.xs b/Size.xs index ada99cc..e0ef024 100644 --- a/Size.xs +++ b/Size.xs @@ -7,6 +7,11 @@ #include "XSUB.h" #include "ppport.h" +#ifndef PERL_COMBI_VERSION +#define PERL_COMBI_VERSION (PERL_REVISION * 1000000 + PERL_VERSION * 1000 + \ + PERL_SUBVERSION) +#endif + /* Not yet in ppport.h */ #ifndef CvISXSUB # define CvISXSUB(cv) (CvXSUB(cv) ? TRUE : FALSE) @@ -128,9 +133,10 @@ check_new(struct state *st, const void *const p) { bits -= 8; } while (bits > LEAF_BITS + BYTE_BITS); /* bits now 16 always */ -#if !defined(MULTIPLICITY) || PERL_VERSION > 8 || (PERL_VERSION == 8 && PERL_SUBVERSION > 8) - /* 5.8.8 and early have an assert() macro that uses Perl_croak, hence needs - a my_perl under multiplicity */ +#if PERL_COMBI_VERSION > 5008008 || (!defined(MULTIPLICITY) && !defined(USE_THREADS)) + /* 5.8.8 and earlier have an assert() macro that uses Perl_croak, hence + needs a my_perl under multiplicity. Similarly, under 5.005 threads + Perl_croak needs a thr. In both cases, just skip the assert. */ assert(bits == 16); #endif leaf_p = (U8 **)tv_p; @@ -762,11 +768,17 @@ const U8 body_sizes[SVt_LAST] = { #endif }; +#if PERL_COMBI_VERSION < 5008001 +typedef AV PADLIST; +#endif + +static void +padlist_size(pTHX_ struct state *const st, const PADLIST * const padl, + const int recurse) { + #if PERL_VERSION*1000+PERL_SUBVERSION >= 21007 /* This is, as ever, excessively nosey with the implementation, and hence fragile. */ -padlist_size(pTHX_ struct state *const st, const PADLIST * const padl, - const int recurse) { SSize_t i; const PADNAMELIST *pnl; @@ -793,12 +805,9 @@ padlist_size(pTHX_ struct state *const st, const PADLIST * const padl, st->total_size += sizeof(PAD*) * i; while (--i) sv_size(aTHX_ st, (SV*)PadlistARRAY(padl)[i], recurse); -} #elif defined PadlistNAMES -static void -padlist_size(pTHX_ struct state *const st, const PADLIST * const padl, - const int recurse) { + SSize_t i; if (!check_new(st, padl)) return; @@ -808,14 +817,13 @@ padlist_size(pTHX_ struct state *const st, const PADLIST * const padl, st->total_size += sizeof(PAD*) * i; while (--i) sv_size(aTHX_ st, (SV*)PadlistARRAY(padl)[i], recurse); -} + #else -static void -padlist_size(pTHX_ struct state *const st, const AV * const padl, - const int recurse) { + sv_size(aTHX_ st, (SV*)padl, recurse); -} + #endif +} static void sv_size(pTHX_ struct state *const st, const SV * const orig_thing,