In perl.git, the branch blead has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/571f0e8653a532c34edde36e797ecba446978b1c?hp=41e07bbccec49c484a622d86a1ba01136a740d9f>

- Log -----------------------------------------------------------------
commit 571f0e8653a532c34edde36e797ecba446978b1c
Author: Nicholas Clark <[email protected]>
Date:   Tue Jun 14 17:52:46 2011 +0200

    pos in lvalue context now returns a PVMG instead of a PVLV.
    
    Store the target SV in mg_obj, instead of LvTARG(). This slightly reduces 
both
    code complexity and runtime memory use.
-----------------------------------------------------------------------

Summary of changes:
 mg.c              |    6 ++----
 pod/perldelta.pod |    5 +++++
 pp.c              |    6 ++----
 3 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/mg.c b/mg.c
index 1bdf5c4..64c7d20 100644
--- a/mg.c
+++ b/mg.c
@@ -2064,10 +2064,9 @@ int
 Perl_magic_getpos(pTHX_ SV *sv, MAGIC *mg)
 {
     dVAR;
-    SV* const lsv = LvTARG(sv);
+    SV *const lsv = mg->mg_obj;
 
     PERL_ARGS_ASSERT_MAGIC_GETPOS;
-    PERL_UNUSED_ARG(mg);
 
     if (SvTYPE(lsv) >= SVt_PVMG && SvMAGIC(lsv)) {
        MAGIC * const found = mg_find(lsv, PERL_MAGIC_regex_global);
@@ -2087,14 +2086,13 @@ int
 Perl_magic_setpos(pTHX_ SV *sv, MAGIC *mg)
 {
     dVAR;
-    SV* const lsv = LvTARG(sv);
+    SV *const lsv = mg->mg_obj;
     SSize_t pos;
     STRLEN len;
     STRLEN ulen = 0;
     MAGIC* found;
 
     PERL_ARGS_ASSERT_MAGIC_SETPOS;
-    PERL_UNUSED_ARG(mg);
 
     if (SvTYPE(lsv) >= SVt_PVMG && SvMAGIC(lsv))
        found = mg_find(lsv, PERL_MAGIC_regex_global);
diff --git a/pod/perldelta.pod b/pod/perldelta.pod
index 8684157..e067934 100644
--- a/pod/perldelta.pod
+++ b/pod/perldelta.pod
@@ -766,6 +766,11 @@ stored via the mg_ptr of their PERL_MAGIC_bm. Previously 
they were PVGVs, with
 the tables stored in the string buffer, beyond SvLEN(). This eliminates the
 last place where the core stores data beyond SvLEN().
 
+=item *
+
+C<pos> in lvalue context now returns a PVMG instead of a PVLV, storing the
+target SV in C<mg_obj>, instead of C<LvTARG()>.
+
 =back
 
 =head1 Selected Bug Fixes
diff --git a/pp.c b/pp.c
index 385f1be..f87e0dd 100644
--- a/pp.c
+++ b/pp.c
@@ -361,10 +361,8 @@ PP(pp_pos)
     dVAR; dSP; dPOPss;
 
     if (PL_op->op_flags & OPf_MOD || LVRET) {
-       SV * const ret = sv_2mortal(newSV_type(SVt_PVLV));  /* Not TARG 
RT#67838 */
-       sv_magic(ret, NULL, PERL_MAGIC_pos, NULL, 0);
-       LvTYPE(ret) = '.';
-       LvTARG(ret) = SvREFCNT_inc_simple(sv);
+       SV * const ret = sv_2mortal(newSV_type(SVt_PVMG));  /* Not TARG 
RT#67838 */
+       sv_magic(ret, sv, PERL_MAGIC_pos, NULL, 0);
        PUSHs(ret);    /* no SvSETMAGIC */
        RETURN;
     }

--
Perl5 Master Repository

Reply via email to