on master help sign in
encodeUtf8_1: refactor another loop body
2cb8673Bryan O'Sullivan
Data/Text/Encoding.hs+8−11
@@ -454,6 +454,7 @@ encodeUtf8_1 (Text arr off len)
454 where hot !n !m
454 where hot !n !m
455 | n == offLen = touchForeignPtr fp >> return (PS fp 0 m)
455 | n == offLen = touchForeignPtr fp >> return (PS fp 0 m)
456 | otherwise = act (A.unsafeIndex arr n) n m fp ptr hot
456 | otherwise = act (A.unsafeIndex arr n) n m fp ptr hot
457+ {-# INLINE loop #-}
457 go1 = loop $ \ w !n !m fp ptr cont ->
458 go1 = loop $ \ w !n !m fp ptr cont ->
458 case w of
459 case w of
459 _| w <= 0x7F -> do1 ptr n m w cont
460 _| w <= 0x7F -> do1 ptr n m w cont
@@ -465,17 +466,13 @@ encodeUtf8_1 (Text arr off len)
465 poke8 ptr m $ (w `shiftR` 6) + 0xC0
466 poke8 ptr m $ (w `shiftR` 6) + 0xC0
466 poke8 ptr (m+1) $ (w .&. 0x3f) + 0x80
467 poke8 ptr (m+1) $ (w .&. 0x3f) + 0x80
467 k (n+1) (m+2)
468 k (n+1) (m+2)
468− go2 !n0 !m0 fp ptr = do
469+ go2 = loop $ \ w !n !m fp ptr cont ->
469− let hot !n !m
470− | n == offLen = touchForeignPtr fp >> return (PS fp 0 m)
471− | otherwise = do
472− case A.unsafeIndex arr n of
470+ case w of
473− w| w <= 0x7F -> do1 ptr n m w hot
471+ _| w <= 0x7F -> do1 ptr n m w cont
474− | w <= 0x7FF -> do2 ptr n m w hot
472+ | w <= 0x7FF -> do2 ptr n m w cont
475− | w < 0xD800 -> ensure 3 n m fp go3
473+ | w < 0xD800 -> ensure 3 n m fp go3
476− | w > 0xDBFF -> ensure 3 n m fp go3
474+ | w > 0xDBFF -> ensure 3 n m fp go3
477− | otherwise -> ensure 4 n m fp go4
475+ | otherwise -> ensure 4 n m fp go4
478− hot n0 m0
479 do3 ptr !n m w k = do
476 do3 ptr !n m w k = do
480 poke8 ptr m $ (w `shiftR` 12) + 0xE0
477 poke8 ptr m $ (w `shiftR` 12) + 0xE0
481 poke8 ptr (m+1) $ ((w `shiftR` 6) .&. 0x3F) + 0x80
478 poke8 ptr (m+1) $ ((w `shiftR` 6) .&. 0x3F) + 0x80