@@ -431,13 +431,11 @@ encodeUtf8_1 (Text arr off len)
431431 let size0 = max len 4
432432 mallocByteString size0 >>= start size0 off 0
433433 where
434− start size n0 m0 fp = withForeignPtr fp $ loop n0 m0
435− where
436− loop n1 m1 ptr = go n1 m1
434+ start size n0 m0 fp = withForeignPtr fp $ go n0 m0
437435 where
438436 offLen = off + len
439437 poke8 p k v = poke (p `plusPtr` k) (fromIntegral v :: Word8)
440− go !n !m
438+ go !n !m ptr
441439 | n == offLen = return (PS fp 0 m)
442440 | otherwise = do
443441 let ensure k act
@@ -452,23 +450,23 @@ encodeUtf8_1 (Text arr off len)
452450 case A.unsafeIndex arr n of
453451 w| w <= 0x7F -> ensure 1 $ do
454452 poke8 ptr m (fromIntegral w :: Word8)
455− go (n+1) (m+1)
453+ go (n+1) (m+1) ptr
456454 | w <= 0x7FF -> ensure 2 $ do
457455 poke8 ptr m $ (w `shiftR` 6) + 0xC0
458456 poke8 ptr (m+1) $ (w .&. 0x3f) + 0x80
459− go (n+1) (m+2)
457+ go (n+1) (m+2) ptr
460458 | 0xD800 <= w && w <= 0xDBFF -> ensure 4 $ do
461459 let c = ord $ U16.chr2 w (A.unsafeIndex arr (n+1))
462460 poke8 ptr m $ (c `shiftR` 18) + 0xF0
463461 poke8 ptr (m+1) $ ((c `shiftR` 12) .&. 0x3F) + 0x80
464462 poke8 ptr (m+2) $ ((c `shiftR` 6) .&. 0x3F) + 0x80
465463 poke8 ptr (m+3) $ (c .&. 0x3F) + 0x80
466− go (n+2) (m+4)
464+ go (n+2) (m+4) ptr
467465 | otherwise -> ensure 3 $ do
468466 poke8 ptr m $ (w `shiftR` 12) + 0xE0
469467 poke8 ptr (m+1) $ ((w `shiftR` 6) .&. 0x3F) + 0x80
470468 poke8 ptr (m+2) $ (w .&. 0x3F) + 0x80
471− go (n+1) (m+3)
469+ go (n+1) (m+3) ptr
472470
473471#endif
474472