summaryrefslogtreecommitdiff
path: root/sv.c
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2006-03-22 22:49:42 +0000
committerNicholas Clark <nick@ccl4.org>2006-03-22 22:49:42 +0000
commit75c33c120988d1ac9c551ac7361ab5df33793713 (patch)
tree1d096dfe2e8456313232ed60b58a5506b492448a /sv.c
parentc336ad0b0ffc3d19ec24d23d8bc7a30158ac1ae5 (diff)
downloadperl-75c33c120988d1ac9c551ac7361ab5df33793713.tar.gz
Take advantage of uoffset >= uoffset0, to simplify some logic.
p4raw-id: //depot/perl@27574
Diffstat (limited to 'sv.c')
-rw-r--r--sv.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/sv.c b/sv.c
index 69232be8c1..e2f427d522 100644
--- a/sv.c
+++ b/sv.c
@@ -5545,25 +5545,27 @@ S_sv_pos_u2b_cached(pTHX_ SV *sv, MAGIC **mgp, const U8 *const start,
STRLEN boffset;
bool found = FALSE;
+ assert (uoffset >= uoffset0);
+
if (SvMAGICAL(sv) && !SvREADONLY(sv) && PL_utf8cache
&& (*mgp = mg_find(sv, PERL_MAGIC_utf8))) {
if ((*mgp)->mg_len != -1) {
- boffset = S_sv_pos_u2b_midway(aTHX_ start, send, uoffset,
- (*mgp)->mg_len);
+ /* If we can take advantage of a passed in offset, do so. */
+ /* In fact, offset0 is either 0, or less than offset, so don't
+ need to worry about the other possibility. */
+ boffset = boffset0
+ + S_sv_pos_u2b_midway(aTHX_ start + boffset0, send,
+ uoffset - uoffset0,
+ (*mgp)->mg_len - uoffset0);
found = TRUE;
}
}
if (!found || PL_utf8cache < 0) {
- STRLEN real_boffset;
- if (uoffset >= uoffset0) {
- real_boffset
- = boffset0 + S_sv_pos_u2b_forwards(aTHX_ start + boffset0,
- send, uoffset - uoffset0);
- }
- else {
- real_boffset = S_sv_pos_u2b_forwards(aTHX_ start, send, uoffset);
- }
+ const STRLEN real_boffset
+ = boffset0 + S_sv_pos_u2b_forwards(aTHX_ start + boffset0,
+ send, uoffset - uoffset0);
+
if (found && PL_utf8cache < 0) {
if (real_boffset != boffset) {
/* Need to turn the assertions off otherwise we may recurse