X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=XSUB.h;h=c940d77845ae6042bb0a6fb79576d10b12d680ad;hb=64a7a97c20dd04240e4f413ed151ebe43591df37;hp=a1e48dd47c283dbcc2fb5bfe1dda0068b3f1d25d;hpb=88037a85d6a4b105a485a30b7ae673eff41a9098;p=p5sagit%2Fp5-mst-13.2.git diff --git a/XSUB.h b/XSUB.h index a1e48dd..c940d77 100644 --- a/XSUB.h +++ b/XSUB.h @@ -114,7 +114,7 @@ is a lexical $_ in scope. #define XSINTERFACE_FUNC_SET(cv,f) \ CvXSUBANY(cv).any_dxptr = (void (*) (pTHX_ void*))(f) -#define dUNDERBAR I32 padoff_du = pad_findmy("$_") +#define dUNDERBAR I32 padoff_du = find_rundefsvoffset() #define UNDERBAR ((padoff_du == NOT_IN_PAD \ || PAD_COMPNAME_FLAGS(padoff_du) & SVpad_OUR) \ ? DEFSV : PAD_SVl(padoff_du)) @@ -179,7 +179,7 @@ Return an empty list from an XSUB immediately. =head1 Variables created by C and C internal functions -=for apidoc AmU||newXSproto +=for apidoc AmU||newXSproto|char* name|XSUBADDR_t f|char* filename|const char *proto Used by C to hook up XSUBs as Perl subs. Adds Perl prototypes to the subs. @@ -238,11 +238,17 @@ C. See L. _sv = get_sv(Perl_form(aTHX_ "%s::%s", module, \ vn = "VERSION"), FALSE); \ } \ - if (_sv && (!SvOK(_sv) || strNE(XS_VERSION, SvPV(_sv, n_a)))) \ - Perl_croak(aTHX_ "%s object version %s does not match %s%s%s%s %"SVf,\ - module, XS_VERSION, \ - vn ? "$" : "", vn ? module : "", vn ? "::" : "", \ - vn ? vn : "bootstrap parameter", _sv); \ + if (_sv) { \ + SV *xssv = Perl_newSVpvf(aTHX_ "%s",XS_VERSION); \ + xssv = new_version(xssv); \ + if ( !sv_derived_from(_sv, "version") ) \ + _sv = new_version(_sv); \ + if ( vcmp(_sv,xssv) ) \ + Perl_croak(aTHX_ "%s object version %_ does not match %s%s%s%s %_",\ + module, vstringify(xssv), \ + vn ? "$" : "", vn ? module : "", vn ? "::" : "", \ + vn ? vn : "bootstrap parameter", vstringify(_sv));\ + } \ } STMT_END #else # define XS_VERSION_BOOTCHECK