diff options
author | Daniel Dragan <bulk88@hotmail.com> | 2014-11-08 00:20:52 -0500 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2014-11-07 22:52:22 -0800 |
commit | db6e00bd00dae7b918216c69bd58fe860e640276 (patch) | |
tree | b812a379126e4f58290cb6f2a9f293aa878abead /sv.c | |
parent | 6402d4ee6fab9f5d76a131921ef72d686ad7aac5 (diff) | |
download | perl-db6e00bd00dae7b918216c69bd58fe860e640276.tar.gz |
add xs_handshake API
This API elevates the amount of ABI compatibility protection between XS
modules and the interp. It also makes each boot XSUB smaller in machine
code by removing function calls and factoring out code into the new
Perl_xs_handshake and Perl_xs_epilog functions.
sv.c :
- revise padlist duping code to reduce code bloat/asserts on DEBUGGING
ext/DynaLoader/dlutils.c :
- disable version checking so interp startup is faster, ABI mismatches are
impossible because DynaLoader is never available as a shared library
ext/XS-APItest/XSUB-redefined-macros.xs :
- "" means dont check the version, so switch to " " to make the test in
xsub_h.t pass, see ML thread "XS_APIVERSION_BOOTCHECK and XS_VERSION
is CPP defined but "", mow what?"
ext/re/re.xs :
- disable API version checking until #123007 is resolved
ParseXS/Utilities.pm :
109-standard_XS_defs.t :
- remove context from S_croak_xs_usage similar to core commit cb077ed296 .
CvGV doesn't need a context until 5.21.4 and commit ae77754ae2 and
by then core's croak_xs_uage API has been long available and this
backport doesn't need to account for newer perls
- fix test where lack of having PERL_IMPLICIT_CONTEXT caused it to fail
Diffstat (limited to 'sv.c')
-rw-r--r-- | sv.c | 15 |
1 files changed, 8 insertions, 7 deletions
@@ -13631,13 +13631,14 @@ S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param) : gv_dup(CvGV(sstr), param); if (!CvISXSUB(sstr)) { - if(CvPADLIST(sstr)) - CvPADLIST_set(dstr, padlist_dup(CvPADLIST(sstr), param)); - else - CvPADLIST_set(dstr, NULL); - } else { /* future union here */ - CvRESERVED(dstr) = NULL; - } + PADLIST * padlist = CvPADLIST(sstr); + if(padlist) + padlist = padlist_dup(padlist, param); + CvPADLIST_set(dstr, padlist); + } else +/* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */ + PoisonPADLIST(dstr); + CvOUTSIDE(dstr) = CvWEAKOUTSIDE(sstr) ? cv_dup( CvOUTSIDE(dstr), param) |