on master help sign in
Use unpackJSString#
commit9e3959575d871520115a8337e4fc10299dc02d9f authorRyan Trinkle <ryan.trinkle@gmail.com> dateSun 29 Apr 2018, 11:27 (8 years ago) parente949bda
1 file changed+4−5
Data/Text.hs+4−5
Data/Text.hs+4−5
@@ -232,7 +232,8 @@ import Data.Text.Internal (Text(..), empty, empty_, firstf, mul, safe, text)
232232-- import Data.Text.Show (singleton, unpack, unpackCString#)
233233import qualified Prelude as P
234234import Data.Text.Unsafe (Iter(..), iter, iter_, lengthWord16, reverseIter,
235− reverseIter_, unsafeHead, unsafeTail)
235+ reverseIter_, unsafeHead, unsafeTail,
236+ unsafeDupablePerformIO)
236237import Data.Text.Internal.Unsafe.Char (unsafeChr)
237238import qualified Data.Text.Internal.Functions as F
238239import qualified Data.Text.Internal.Encoding.Utf16 as U16
@@ -259,7 +260,7 @@ import Data.Coerce
259260import GHC.Base (build)
260261import qualified GHC.CString as GHC
261262import GHC.Exts (Addr#, ByteArray#)
262−import GHCJS.Prim (JSVal (..))
263+import GHCJS.Prim (JSVal (..), unpackJSString#)
263264
264265unpack :: Text -> String
265266unpack = coerce JSS.unpack
@@ -276,9 +277,7 @@ singleton = coerce JSS.singleton
276277 unstream (S.singleton (safe a)) = singleton a
277278 #-}
278279
279−foreign import javascript unsafe "$r = $1;" addrToByteArray :: Addr# -> ByteArray#
280−
281−{-# RULES "inlineJSString" forall s. pack (GHC.Base.build (GHC.unpackFoldrCString# s)) = Text (JSString (JSVal (addrToByteArray s))) #-}
280+{-# RULES "inlineJSString" forall s. pack (GHC.Base.build (GHC.unpackFoldrCString# s)) = Text (JSString (unsafeDupablePerformIO (unpackJSString# s))) #-}
282281
283282-- | /O(n)/ Convert a literal string into a JSString. Subject to fusion.
284283unpackCString# :: Addr# -> Text