Path: blob/develop/haskell-overlays/text-jsstring-8.10/buffer-builder-text-jsstring.patch
1 views
From ece29d689b56e51b22b39c8d0b8740e325830f23 Mon Sep 17 00:00:00 20011From: Luigy Leon <[email protected]>2Date: Fri, 6 Oct 2017 18:39:35 -04003Subject: [PATCH] text-jsstring45---6buffer-builder.cabal | 3 +++7src/Data/BufferBuilder.hs | 25 +++++++++++++++++++++++--82 files changed, 26 insertions(+), 2 deletions(-)910diff --git a/buffer-builder.cabal b/buffer-builder.cabal11index fe24f73..868d3c1 10064412--- a/buffer-builder.cabal13+++ b/buffer-builder.cabal14@@ -65,6 +65,9 @@ library15if !impl(ghc >= 8.0)16build-depends: semigroups1718+ if impl(ghcjs)19+ build-depends: ghcjs-base20+21default-language: Haskell201022ghc-options: -O2 -Wall23--ghc-options: -ddump-ds -ddump-simpl -ddump-stg -ddump-opt-cmm -ddump-asm -ddump-to-file24diff --git a/src/Data/BufferBuilder.hs b/src/Data/BufferBuilder.hs25index 30b39ce..0468afb 10064426--- a/src/Data/BufferBuilder.hs27+++ b/src/Data/BufferBuilder.hs28@@ -1,4 +1,7 @@29-{-# LANGUAGE OverloadedStrings, MagicHash, BangPatterns, RecordWildCards, DeriveDataTypeable #-}30+{-# LANGUAGE OverloadedStrings, MagicHash, BangPatterns, RecordWildCards, DeriveDataTypeable, CPP #-}31+#ifdef ghcjs_HOST_OS32+{-# LANGUAGE UnboxedTuples, ForeignFunctionInterface, UnliftedFFITypes #-}33+#endif3435{-|36A library for efficiently building up a buffer of data. When given data37@@ -71,6 +74,9 @@ import Data.Typeable (Typeable)38import Data.Text () -- Show39import Data.Text.Internal (Text (..))40import Data.Text.Array (Array (..))41+#ifdef ghcjs_HOST_OS42+import Data.JSString43+#endif4445data Handle'46type Handle = Ptr Handle'47@@ -349,8 +355,17 @@ appendEscapedJsonLiteral addr =48{-# INLINE appendEscapedJsonLiteral #-}4950appendEscapedJsonText :: Text -> BufferBuilder ()51+#ifndef ghcjs_HOST_OS52appendEscapedJsonText !(Text arr ofs len) =53- let byteArray = aBA arr54+ let55+#else56+appendEscapedJsonText !(Text t) =57+ let (# ba#, len# #) = js_fromString t58+ len = I# len#59+ arr = Array ba#60+ ofs = 061+#endif62+ byteArray = aBA arr63in withHandle $ \h ->64bw_append_json_escaped_utf16 h len (Ptr (byteArrayContents# byteArray) `plusPtr` (2 * ofs))65{-# INLINE appendEscapedJsonText #-}66@@ -364,3 +379,9 @@ appendUrlEncoded !(BS.PS (ForeignPtr addr _) offset len) =67withHandle $ \h ->68bw_append_url_encoded h len (plusPtr (Ptr addr) offset)69{-# INLINE appendUrlEncoded #-}70+71+#ifdef ghcjs_HOST_OS72+foreign import javascript unsafe73+ "h$textFromString"74+ js_fromString :: JSString -> (# ByteArray#, Int# #)75+#endif76--772.31.178798081