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

diff --git a/mg.c b/mg.c
index 09f9b60..2de58e4 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -2204,7 +2204,7 @@ Perl_magic_getsubstr(pTHX_ SV *sv, MAGIC *mg)
     PERL_UNUSED_ARG(mg);
 
     if (!translate_substr_offsets(
-           SvUTF8(lsv) ? sv_len_utf8(lsv) : len,
+           SvUTF8(lsv) ? sv_len_utf8_nomg(lsv) : len,
            negoff ? -(IV)offs : (IV)offs, !negoff,
            negrem ? -(IV)rem  : (IV)rem,  !negrem, &offs, &rem
     )) {
index 977b8bf..dfed65e 100644 (file)
@@ -7,7 +7,7 @@ BEGIN {
     chdir 't' if -d 't';
     @INC = '../lib';
     require './test.pl';
-    plan (tests => 305);
+    plan (tests => 306);
 }
 
 use strict;
@@ -251,6 +251,8 @@ for ([chdir=>''],[chmod=>'0,'],[chown=>'0,0,'],[utime=>'0,0,'],
 tie $var, "main", "\x{100}";
 pos$var = 0             ; check_count 'lvalue pos $utf8';
 $dummy  = substr$var,0,1; check_count 'substr $utf8';
+my $l   =\substr$var,0,1;
+$dummy  = $$l           ; check_count 'reading lvalue substr($utf8)';
 
 {
     local $SIG{__WARN__} = sub {};