on master help sign in
encodeUtf8_1: refactor another loop body
commit2cb8673bdb652980ba29d44213f152abd2697d20 authorBryan O'Sullivan <bos@serpentine.com> dateTue 7 Jan 2014, 00:22 (13 years ago) parent27bd76f
1 file changed+8−11
Data/Text/Encoding.hs+8−11
Data/Text/Encoding.hs+8−11
@@ -454,6 +454,7 @@ encodeUtf8_1 (Text arr off len)
454454 where hot !n !m
455455 | n == offLen = touchForeignPtr fp >> return (PS fp 0 m)
456456 | otherwise = act (A.unsafeIndex arr n) n m fp ptr hot
457+ {-# INLINE loop #-}
457458 go1 = loop $ \ w !n !m fp ptr cont ->
458459 case w of
459460 _| w <= 0x7F -> do1 ptr n m w cont
@@ -465,17 +466,13 @@ encodeUtf8_1 (Text arr off len)
465466 poke8 ptr m $ (w `shiftR` 6) + 0xC0
466467 poke8 ptr (m+1) $ (w .&. 0x3f) + 0x80
467468 k (n+1) (m+2)
468− go2 !n0 !m0 fp ptr = do
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
473− w| w <= 0x7F -> do1 ptr n m w hot
474− | w <= 0x7FF -> do2 ptr n m w hot
475− | w < 0xD800 -> ensure 3 n m fp go3
476− | w > 0xDBFF -> ensure 3 n m fp go3
477− | otherwise -> ensure 4 n m fp go4
478− hot n0 m0
469+ go2 = loop $ \ w !n !m fp ptr cont ->
470+ case w of
471+ _| w <= 0x7F -> do1 ptr n m w cont
472+ | w <= 0x7FF -> do2 ptr n m w cont
473+ | w < 0xD800 -> ensure 3 n m fp go3
474+ | w > 0xDBFF -> ensure 3 n m fp go3
475+ | otherwise -> ensure 4 n m fp go4
479476 do3 ptr !n m w k = do
480477 poke8 ptr m $ (w `shiftR` 12) + 0xE0
481478 poke8 ptr (m+1) $ ((w `shiftR` 6) .&. 0x3F) + 0x80