This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Tweak sv_pos_b2u_flags check in pp_index
authorJames Raspass <jraspass@gmail.com>
Sat, 6 Dec 2014 22:51:57 +0000 (22:51 +0000)
committerFather Chrysostomos <sprout@cpan.org>
Sun, 7 Dec 2014 03:42:32 +0000 (19:42 -0800)
There's no need to run sv_pos_b2u_flags if the retval is one as
one byte can only be one character, therefore change the test to
"> 1". This makes index on unicode strings that match at 1 slightly
faster.

pp.c
t/op/index.t
t/perf/benchmarks

diff --git a/pp.c b/pp.c
index 49798e2..97ad595 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -3343,7 +3343,7 @@ PP(pp_index)
        retval = -1;
     else {
        retval = little_p - big_p;
-       if (retval > 0 && big_utf8)
+       if (retval > 1 && big_utf8)
            retval = sv_pos_b2u_flags(big, retval, SV_CONST_RETURN);
     }
     SvREFCNT_dec(temp);
index fd5a98f..29a4771 100644 (file)
@@ -8,7 +8,7 @@ BEGIN {
 }
 
 use strict;
-plan( tests => 121 );
+plan( tests => 122 );
 
 run_tests() unless caller;
 
@@ -253,3 +253,7 @@ is index('the main road', __PACKAGE__), 4,
     '[perl #119169] __PACKAGE__ as 2nd argument';
 
 } # end of sub run_tests
+
+utf8::upgrade my $substr = "\x{a3}a";
+
+is index($substr, 'a'), 1, 'index reply reflects characters not octets';
index c137d0c..52e2af9 100644 (file)
         setup   => 'my ($x, $y)',
         code    => '($x, $y) = (1, 2)',
     },
+
+    'expr::index::utf8_postion_1' => {
+        desc    => 'index of a utf8 string, matching at position 1',
+        setup   => 'utf8::upgrade my $x = "abc"',
+        code    => 'index $x, "b"',
+    },
 ];