From: Nicholas Clark Date: Thu, 23 Mar 2006 13:16:53 +0000 (+0000) Subject: Complete the other 2 arms of the cache update code. X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=57d7fbf1cb64ed175ce62552c70317e98a87db33;p=p5sagit%2Fp5-mst-13.2.git Complete the other 2 arms of the cache update code. p4raw-id: //depot/perl@27583 --- diff --git a/sv.c b/sv.c index bc0cde8..5360a30 100644 --- a/sv.c +++ b/sv.c @@ -5623,6 +5623,48 @@ S_utf8_mg_pos_cache_update(pTHX_ SV *sv, MAGIC **mgp, STRLEN byte, STRLEN utf8, } } } + else if (byte > cache[3]) { + /* New position is between the existing pair of pairs. */ + const float keep_earlier + = THREEWAY_SQUARE(0, cache[3], byte, blen); + const float keep_later + = THREEWAY_SQUARE(0, byte, cache[1], blen); + + if (keep_later < keep_earlier) { + if (keep_later < existing) { + cache[2] = utf8; + cache[3] = byte; + } + } + else { + if (keep_earlier < existing) { + cache[0] = utf8; + cache[1] = byte; + } + } + } + else { + /* New position is before the existing pair of pairs. */ + const float keep_earlier + = THREEWAY_SQUARE(0, byte, cache[3], blen); + const float keep_later + = THREEWAY_SQUARE(0, byte, cache[1], blen); + + if (keep_later < keep_earlier) { + if (keep_later < existing) { + cache[2] = utf8; + cache[3] = byte; + } + } + else { + if (keep_earlier < existing) { + cache[0] = cache[2]; + cache[1] = cache[3]; + cache[2] = utf8; + cache[3] = byte; + } + } + } } ASSERT_UTF8_CACHE(cache); }