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

Reply via email to