on master help sign in
encodeUtf8_1: refactor loop body
commit27bd76fc439b7304d39c25d371c3958941cea3ab authorBryan O'Sullivan <bos@serpentine.com> dateTue 7 Jan 2014, 00:22 (13 years ago) parentf9a39d1
1 file changed+11−11
Data/Text/Encoding.hs+11−11
Data/Text/Encoding.hs+11−11
@@ -450,17 +450,17 @@ encodeUtf8_1 (Text arr off len)
450450 fp' <- resize k m fp
451451 go n m fp' (unsafeForeignPtrToPtr fp')
452452 do1 ptr n m w k = poke8 ptr m w >> k (n+1) (m+1)
453− go1 !n0 !m0 fp ptr = do
454− let hot !n !m
455− | n == offLen = touchForeignPtr fp >> return (PS fp 0 m)
456− | otherwise = do
457− case A.unsafeIndex arr n of
458− w| w <= 0x7F -> do1 ptr n m w hot
459− | w <= 0x7FF -> ensure 2 n m fp go2
460− | w < 0xD800 -> ensure 3 n m fp go3
461− | w > 0xDBFF -> ensure 3 n m fp go3
462− | otherwise -> ensure 4 n m fp go4
463− hot n0 m0
453+ loop act !n0 !m0 fp ptr = hot n0 m0
454+ where hot !n !m
455+ | n == offLen = touchForeignPtr fp >> return (PS fp 0 m)
456+ | otherwise = act (A.unsafeIndex arr n) n m fp ptr hot
457+ go1 = loop $ \ w !n !m fp ptr cont ->
458+ case w of
459+ _| w <= 0x7F -> do1 ptr n m w cont
460+ | w <= 0x7FF -> ensure 2 n m fp go2
461+ | w < 0xD800 -> ensure 3 n m fp go3
462+ | w > 0xDBFF -> ensure 3 n m fp go3
463+ | otherwise -> ensure 4 n m fp go4
464464 do2 ptr n m w k = do
465465 poke8 ptr m $ (w `shiftR` 6) + 0xC0
466466 poke8 ptr (m+1) $ (w .&. 0x3f) + 0x80