@@ -461,22 +461,20 @@ encodeUtf8_1 (Text arr off len)
461 {-# INLINE loop #-}
461 {-# INLINE loop #-}
462 go1 = loop $ \ w !n !m fp ptr cont ->
462 go1 = loop $ \ w !n !m fp ptr cont ->
463 case w of
463 case w of
464− _| w <= 0x7F -> do1 ptr n m w cont
464+ _| w <= 0x7F -> do1 ptr n m w cont
465− | w <= 0x7FF -> ensure 2 n m fp go2
465+ | w <= 0x7FF -> ensure 2 n m fp go2
466− | w < 0xD800 -> ensure 3 n m fp go3
467− | w > 0xDBFF -> ensure 3 n m fp go3
466+ | w < 0xD800 || w > 0xDBFF -> ensure 3 n m fp go3
468− | otherwise -> ensure 4 n m fp go4
467+ | otherwise -> ensure 4 n m fp go4
469 do2 ptr n m w k = do
468 do2 ptr n m w k = do
470 poke8 ptr m $ (w `shiftR` 6) + 0xC0
469 poke8 ptr m $ (w `shiftR` 6) + 0xC0
471 poke8 ptr (m+1) $ (w .&. 0x3f) + 0x80
470 poke8 ptr (m+1) $ (w .&. 0x3f) + 0x80
472 k (n+1) (m+2)
471 k (n+1) (m+2)
473 go2 = loop $ \ w !n !m fp ptr cont ->
472 go2 = loop $ \ w !n !m fp ptr cont ->
474 case w of
473 case w of
475− _| w <= 0x7F -> do1 ptr n m w cont
474+ _| w <= 0x7F -> do1 ptr n m w cont
476− | w <= 0x7FF -> do2 ptr n m w cont
475+ | w <= 0x7FF -> do2 ptr n m w cont
477− | w < 0xD800 -> ensure 3 n m fp go3
478− | w > 0xDBFF -> ensure 3 n m fp go3
476+ | w < 0xD800 || w > 0xDBFF -> ensure 3 n m fp go3
479− | otherwise -> ensure 4 n m fp go4
477+ | otherwise -> ensure 4 n m fp go4
480 do3 ptr !n m w k = do
478 do3 ptr !n m w k = do
481 poke8 ptr m $ (w `shiftR` 12) + 0xE0
479 poke8 ptr m $ (w `shiftR` 12) + 0xE0
482 poke8 ptr (m+1) $ ((w `shiftR` 6) .&. 0x3F) + 0x80
480 poke8 ptr (m+1) $ ((w `shiftR` 6) .&. 0x3F) + 0x80
@@ -484,21 +482,19 @@ encodeUtf8_1 (Text arr off len)
484 k (n+1) (m+3)
482 k (n+1) (m+3)
485 go3 = loop body where body w !n !m fp ptr cont =
483 go3 = loop body where body w !n !m fp ptr cont =
486 case w of
484 case w of
487− _| w <= 0x7F -> do1 ptr n m w cont
485+ _| w <= 0x7F -> do1 ptr n m w cont
488− | w <= 0x7FF -> do2 ptr n m w cont
486+ | w <= 0x7FF -> do2 ptr n m w cont
489− | w < 0xD800 -> do3 ptr n m w cont
490− | w > 0xDBFF -> do3 ptr n m w cont
487+ | w < 0xD800 || w > 0xDBFF -> do3 ptr n m w cont
491− | otherwise -> ensure 4 n m fp go4
488+ | otherwise -> ensure 4 n m fp go4
492 {-# INLINE body #-}
489 {-# INLINE body #-}
493 go4 !n0 !m0 fp ptr = do
490 go4 !n0 !m0 fp ptr = do
494 let hot !n !m
491 let hot !n !m
495 | n == offLen = touchForeignPtr fp >> return (PS fp 0 m)
492 | n == offLen = touchForeignPtr fp >> return (PS fp 0 m)
496 | otherwise = do
493 | otherwise = do
497 case A.unsafeIndex arr n of
494 case A.unsafeIndex arr n of
498− w| w <= 0x7F -> do1 ptr n m w hot
495+ w| w <= 0x7F -> do1 ptr n m w hot
499− | w <= 0x7FF -> do2 ptr n m w hot
496+ | w <= 0x7FF -> do2 ptr n m w hot
500− | w < 0xD800 -> do3 ptr n m w hot
501− | w > 0xDBFF -> do3 ptr n m w hot
497+ | w < 0xD800 || w > 0xDBFF -> do3 ptr n m w hot
502 | otherwise -> do
498 | otherwise -> do
503 let c = ord $ U16.chr2 w (A.unsafeIndex arr (n+1))
499 let c = ord $ U16.chr2 w (A.unsafeIndex arr (n+1))
504 poke8 ptr m $ (c `shiftR` 18) + 0xF0
500 poke8 ptr m $ (c `shiftR` 18) + 0xF0