summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2013-08-06 06:08:21 -0700
committerFather Chrysostomos <sprout@cpan.org>2013-08-06 06:08:21 -0700
commit11609d9c96f9c025675f6215051ab94d6735ddd9 (patch)
tree08fa589b758a362e67cfcd1ba2860bc776acca4b
parent1cd19e121cab50d0b5b0e45a0c70cd9294a7ed9a (diff)
downloadperl-11609d9c96f9c025675f6215051ab94d6735ddd9.tar.gz
[perl #119169] index with __PACKAGE__ for 2nd argument
The refactoring of fbm_compile in 66379c06cd to prepare for c72a4eedff1 put in an SvIsCOW check before doing SvPV_force. I sim- ply changed the logic there so that SvPV_force would continue to have its effect but without tripping up on read-only variables for which SvPV_force would not need to make any changes anyway. Now, if a COW scalar is read-only, we can’t call SvPV_force on it, because it will die. It turns out that we don’t actually need to call SvPV_force on COWs. We can just go ahead and attach the BM magic and continue sharing the buffer.
-rw-r--r--t/op/index.t5
-rw-r--r--util.c2
2 files changed, 5 insertions, 2 deletions
diff --git a/t/op/index.t b/t/op/index.t
index d53405383e..eaed4b3d65 100644
--- a/t/op/index.t
+++ b/t/op/index.t
@@ -7,7 +7,7 @@ BEGIN {
}
use strict;
-plan( tests => 120 );
+plan( tests => 121 );
run_tests() unless caller;
@@ -248,4 +248,7 @@ use constant u => undef;
}
is u, undef, 'undef constant is still undef';
+is index('the main road', __PACKAGE__), 4,
+ '[perl #119169] __PACKAGE__ as 2nd argument';
+
} # end of sub run_tests
diff --git a/util.c b/util.c
index be75796eda..316f45d5fe 100644
--- a/util.c
+++ b/util.c
@@ -539,7 +539,7 @@ Perl_fbm_compile(pTHX_ SV *sv, U32 flags)
if (mg && mg->mg_len >= 0)
mg->mg_len++;
}
- if (!SvPOK(sv) || SvNIOKp(sv) || SvIsCOW(sv))
+ if (!SvPOK(sv) || SvNIOKp(sv))
s = (U8*)SvPV_force_mutable(sv, len);
else s = (U8 *)SvPV_mutable(sv, len);
if (len == 0) /* TAIL might be on a zero-length string. */