This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Stop calling get-magic twice for lvalue pos($utf8)
authorFather Chrysostomos <sprout@cpan.org>
Fri, 31 Aug 2012 05:26:33 +0000 (22:26 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Fri, 31 Aug 2012 05:27:44 +0000 (22:27 -0700)
mg.c
t/op/tie_fetch_count.t

diff --git a/mg.c b/mg.c
index 089f9c6..09f9b60 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -2166,7 +2166,7 @@ Perl_magic_setpos(pTHX_ SV *sv, MAGIC *mg)
     pos = SvIV(sv);
 
     if (DO_UTF8(lsv)) {
-       ulen = sv_len_utf8(lsv);
+       ulen = sv_len_utf8_nomg(lsv);
        if (ulen)
            len = ulen;
     }
@@ -2180,9 +2180,7 @@ Perl_magic_setpos(pTHX_ SV *sv, MAGIC *mg)
        pos = len;
 
     if (ulen) {
-       I32 p = pos;
-       sv_pos_u2b(lsv, &p, 0);
-       pos = p;
+       pos = sv_pos_u2b_flags(lsv, pos, 0, 0);
     }
 
     found->mg_len = pos;
index 9cadaf6..977b8bf 100644 (file)
@@ -7,7 +7,7 @@ BEGIN {
     chdir 't' if -d 't';
     @INC = '../lib';
     require './test.pl';
-    plan (tests => 304);
+    plan (tests => 305);
 }
 
 use strict;
@@ -248,7 +248,8 @@ for ([chdir=>''],[chmod=>'0,'],[chown=>'0,0,'],[utime=>'0,0,'],
                             ; check_count 'select $tied_undef, ...';
 }
 
-$var = "\x{100}";
+tie $var, "main", "\x{100}";
+pos$var = 0             ; check_count 'lvalue pos $utf8';
 $dummy  = substr$var,0,1; check_count 'substr $utf8';
 
 {