@@ -450,17 +450,17 @@ encodeUtf8_1 (Text arr off len)
450 fp' <- resize k m fp
450 fp' <- resize k m fp
451 go n m fp' (unsafeForeignPtrToPtr fp')
451 go n m fp' (unsafeForeignPtrToPtr fp')
452 do1 ptr n m w k = poke8 ptr m w >> k (n+1) (m+1)
452 do1 ptr n m w k = poke8 ptr m w >> k (n+1) (m+1)
453− go1 !n0 !m0 fp ptr = do
453+ loop act !n0 !m0 fp ptr = hot n0 m0
454− let 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)
457− case A.unsafeIndex arr n of
456+ | otherwise = act (A.unsafeIndex arr n) n m fp ptr hot
457+ go1 = loop $ \ w !n !m fp ptr cont ->
458− w| w <= 0x7F -> do1 ptr n m w hot
459+ _| w <= 0x7F -> do1 ptr n m w cont
459− | w <= 0x7FF -> ensure 2 n m fp go2
460+ | w <= 0x7FF -> ensure 2 n m fp go2
460− | w < 0xD800 -> ensure 3 n m fp go3
461+ | w < 0xD800 -> ensure 3 n m fp go3
461− | w > 0xDBFF -> ensure 3 n m fp go3
462+ | w > 0xDBFF -> ensure 3 n m fp go3
462− | otherwise -> ensure 4 n m fp go4
463+ | otherwise -> ensure 4 n m fp go4
464 do2 ptr n m w k = do
464 do2 ptr n m w k = do
465 poke8 ptr m $ (w `shiftR` 6) + 0xC0
465 poke8 ptr m $ (w `shiftR` 6) + 0xC0
466 poke8 ptr (m+1) $ (w .&. 0x3f) + 0x80
466 poke8 ptr (m+1) $ (w .&. 0x3f) + 0x80