In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/41e1f0ed87316699cf6574906797bee3dd759fb0?hp=a13ded5516803d9baff49d9177619361dcc9d083>
- Log ----------------------------------------------------------------- commit 41e1f0ed87316699cf6574906797bee3dd759fb0 Author: Nicholas Clark <[email protected]> Date: Wed Oct 13 11:09:02 2010 +0100 XS_Tie_Hash_NamedCapture_DELETE should return a value. The core's regexp implementation will always croak, but other pluggable engines may have read/write semantics, and hence return from their delete call. Note that STORE and EXISTS are called in void context, hence their return stack is discarded. ----------------------------------------------------------------------- Summary of changes: universal.c | 12 +++++++++++- 1 files changed, 11 insertions(+), 1 deletions(-) diff --git a/universal.c b/universal.c index 5442f87..e66e0db 100644 --- a/universal.c +++ b/universal.c @@ -1314,6 +1314,9 @@ XS(XS_Tie_Hash_NamedCapture_STORE) flags = (U32)SvUV(SvRV(MUTABLE_SV(ST(0)))); CALLREG_NAMED_BUFF_STORE(rx,ST(1), ST(2), flags); + + /* Perl_magic_setpack calls us with G_DISCARD, so our return stack state + is thrown away. */ } XS(XS_Tie_Hash_NamedCapture_DELETE) @@ -1322,6 +1325,7 @@ XS(XS_Tie_Hash_NamedCapture_DELETE) dXSARGS; REGEXP * rx = PL_curpm ? PM_GETRE(PL_curpm) : NULL; U32 flags; + SV *ret; if (items != 2) croak_xs_usage(cv, "$key, $flags"); @@ -1332,7 +1336,10 @@ XS(XS_Tie_Hash_NamedCapture_DELETE) SP -= items; flags = (U32)SvUV(SvRV(MUTABLE_SV(ST(0)))); - CALLREG_NAMED_BUFF_DELETE(rx, ST(1), flags); + ret = CALLREG_NAMED_BUFF_DELETE(rx, ST(1), flags); + + PUSHs(ret ? sv_2mortal(ret) : &PL_sv_undef); + XSRETURN(1); } XS(XS_Tie_Hash_NamedCapture_CLEAR) @@ -1354,6 +1361,9 @@ XS(XS_Tie_Hash_NamedCapture_CLEAR) flags = (U32)SvUV(SvRV(MUTABLE_SV(ST(0)))); CALLREG_NAMED_BUFF_CLEAR(rx, flags); + + /* Perl_magic_wipepack calls us with G_DISCARD, so our return stack state + is thrown away. */ } XS(XS_Tie_Hash_NamedCapture_EXISTS) -- Perl5 Master Repository
