From: Nicholas Clark Date: Mon, 20 Mar 2006 12:13:46 +0000 (+0000) Subject: The two loops in Perl_utf8_distance can be merged. X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=eb63405fd7f24e5bad9ec7f42adce6af6314724e;p=p5sagit%2Fp5-mst-13.2.git The two loops in Perl_utf8_distance can be merged. p4raw-id: //depot/perl@27552 --- diff --git a/utf8.c b/utf8.c index e5079cb..af63ac3 100644 --- a/utf8.c +++ b/utf8.c @@ -705,41 +705,37 @@ Perl_utf8_distance(pTHX_ const U8 *a, const U8 *b) { dVAR; IV off = 0; + IV sign = 1; /* Note: cannot use UTF8_IS_...() too eagerly here since e.g. * the bitops (especially ~) can create illegal UTF-8. * In other words: in Perl UTF-8 is not just for Unicode. */ if (a < b) { - while (a < b) { - const U8 c = UTF8SKIP(a); - if (b - a < c) - goto warn_and_return; - a += c; - off--; - } + const U8 *const temp = a; + a = b; + b = temp; + sign = -1; } - else { - while (b < a) { - const U8 c = UTF8SKIP(b); - - if (a - b < c) { - warn_and_return: - if (ckWARN_d(WARN_UTF8)) { - if (PL_op) - Perl_warner(aTHX_ packWARN(WARN_UTF8), - "%s in %s", unees, OP_DESC(PL_op)); - else - Perl_warner(aTHX_ packWARN(WARN_UTF8), unees); - } - return off; + + while (b < a) { + const U8 c = UTF8SKIP(b); + + if (a - b < c) { + if (ckWARN_d(WARN_UTF8)) { + if (PL_op) + Perl_warner(aTHX_ packWARN(WARN_UTF8), + "%s in %s", unees, OP_DESC(PL_op)); + else + Perl_warner(aTHX_ packWARN(WARN_UTF8), unees); } - b += c; - off++; + return off * sign; } + b += c; + off++; } - return off; + return off * sign; } /*