@@ -6,7 +6,7 @@
6#if __GLASGOW_HASKELL__ >= 708
6#if __GLASGOW_HASKELL__ >= 708
7{-# LANGUAGE TypeFamilies #-}
7{-# LANGUAGE TypeFamilies #-}
9−{-# LANGUAGE ForeignFunctionInterface, JavaScriptFFI #-}
9+{-# LANGUAGE ForeignFunctionInterface, JavaScriptFFI, UnliftedFFITypes #-}
11-- Module : Data.Text
11-- Module : Data.Text
12-- Copyright : (c) 2009, 2010, 2011, 2012 Bryan O'Sullivan,
12-- Copyright : (c) 2009, 2010, 2011, 2012 Bryan O'Sullivan,
@@ -247,13 +247,15 @@ import Text.Printf (PrintfArg, formatArg, formatString)
249-- GHCJS ------------------------------------------------------------
249-- GHCJS ------------------------------------------------------------
250−import Data.JSString (JSString)
250+import Data.JSString.Internal.Type (JSString (..))
251import qualified Data.JSString as JSS
251import qualified Data.JSString as JSS
252import qualified Data.JSString.Internal.Fusion as SJS
252import qualified Data.JSString.Internal.Fusion as SJS
253import qualified Data.JSString.Internal.Fusion.Common as SJS
253import qualified Data.JSString.Internal.Fusion.Common as SJS
254import Data.Coerce
254import Data.Coerce
255−import GHC.Exts (Addr#)
255+import GHC.Base (build)
256import qualified GHC.CString as GHC
256import qualified GHC.CString as GHC
257+import GHC.Exts (Addr#, ByteArray#)
258+import GHCJS.Prim (JSVal (..))
258unpack :: Text -> String
260unpack :: Text -> String
259unpack = coerce JSS.unpack
261unpack = coerce JSS.unpack
@@ -270,6 +272,10 @@ singleton = coerce JSS.singleton
270 unstream (S.singleton (safe a)) = singleton a
272 unstream (S.singleton (safe a)) = singleton a
275+foreign import javascript unsafe "$r = $1;" addrToByteArray :: Addr# -> ByteArray#
277+{-# RULES "inlineJSString" forall s. pack (GHC.Base.build (GHC.unpackFoldrCString# s)) = Text (JSString (JSVal (addrToByteArray s))) #-}
273-- | /O(n)/ Convert a literal string into a JSString. Subject to fusion.
279-- | /O(n)/ Convert a literal string into a JSString. Subject to fusion.
274unpackCString# :: Addr# -> Text
280unpackCString# :: Addr# -> Text
275unpackCString# addr# = Text $ SJS.unstream (SJS.streamCString# addr#)
281unpackCString# addr# = Text $ SJS.unstream (SJS.streamCString# addr#)