From 92d20be8320c8f5311218ccf20b4f918f79c3d05 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 18 Nov 2023 02:08:31 +1100 Subject: [PATCH 1/4] Java string marshalling agnostic of `text` library's internal representation which has changed as of v. 2.x --- .../Foreign/JNI/Unsafe/Internal/Introspection.hs | 4 +++- jvm/src/common/Language/Java/Unsafe.hs | 10 ++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/jni/src/common/Foreign/JNI/Unsafe/Internal/Introspection.hs b/jni/src/common/Foreign/JNI/Unsafe/Internal/Introspection.hs index 46064a4d..ba61869e 100644 --- a/jni/src/common/Foreign/JNI/Unsafe/Internal/Introspection.hs +++ b/jni/src/common/Foreign/JNI/Unsafe/Internal/Introspection.hs @@ -13,12 +13,14 @@ module Foreign.JNI.Unsafe.Internal.Introspection import Control.Exception (bracket) import Control.Monad (forM) +import Data.ByteString as BS import Data.Coerce import Data.Maybe (catMaybes) import Data.Singletons import qualified Data.Text as Text import qualified Data.Text.Encoding as Text import qualified Data.Text.Foreign as Text +import Foreign.Ptr import Foreign.JNI.Unsafe.Internal import Foreign.JNI.Types import qualified Foreign.JNI.String as JNI @@ -101,7 +103,7 @@ toText obj = bracket (releaseStringChars obj) $ \cs -> do sz <- fromIntegral <$> getStringLength obj - txt <- Text.fromPtr cs sz + txt <- Text.decodeUtf16LEWith (\_ _ -> Just '?') <$> BS.packCStringLen (castPtr cs, sz * 2) return txt -- | @getClassName c@ yields the name of class @c@ diff --git a/jvm/src/common/Language/Java/Unsafe.hs b/jvm/src/common/Language/Java/Unsafe.hs index 41c18a69..17221730 100644 --- a/jvm/src/common/Language/Java/Unsafe.hs +++ b/jvm/src/common/Language/Java/Unsafe.hs @@ -111,6 +111,7 @@ import Control.Exception (Exception, throw, finally) import Control.Monad import Control.Monad.Catch (MonadCatch, MonadMask, bracket, onException) import Control.Monad.IO.Class +import qualified Data.ByteString as BS import Data.Char (chr, ord) import qualified Data.Choice as Choice import qualified Data.Coerce as Coerce @@ -124,13 +125,14 @@ import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Unsafe as BS import Data.Kind (Type) import Data.Singletons (SingI(..), SomeSing(..)) +import qualified Data.Text.Encoding as Text import qualified Data.Text.Foreign as Text import Data.Text (Text) import qualified Data.Vector.Storable as Vector import Data.Vector.Storable (Vector) import qualified Data.Vector.Storable.Mutable as MVector import Data.Vector.Storable.Mutable (IOVector) -import Foreign (Ptr, Storable, withForeignPtr) +import Foreign (Ptr, Storable, withForeignPtr, castPtr) import Foreign.Concurrent (newForeignPtr) import Foreign.C (CChar) import Foreign.JNI hiding (throw) @@ -750,14 +752,14 @@ withStatic [d| reify jobj = do sz <- getStringLength jobj cs <- getStringChars jobj - txt <- Text.fromPtr cs (fromIntegral sz) + txt <- Text.decodeUtf16LEWith (\_ _ -> Just '?') <$> BS.packCStringLen (castPtr cs, fromIntegral sz * 2) releaseStringChars jobj cs return txt instance Reflect Text where reflect x = - Text.useAsPtr x $ \ptr len -> - newString ptr (fromIntegral len) + BS.useAsCStringLen (Text.encodeUtf16LE x) $ \(ptr, len) -> + newString (castPtr ptr) (fromIntegral len `div` 2) newtype W8Bool = W8Bool { fromW8Bool :: Word8 } deriving (Enum, Eq, Integral, Num, Ord, Real, Show, Storable) From a503132eb344d72afa8eb92576ecd9f11a37a840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Facundo=20Dom=C3=ADnguez?= Date: Fri, 24 Nov 2023 08:26:16 -0300 Subject: [PATCH 2/4] Update nixpkgs hash --- nixpkgs.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixpkgs.nix b/nixpkgs.nix index 794d0745..db9c8d13 100644 --- a/nixpkgs.nix +++ b/nixpkgs.nix @@ -3,7 +3,7 @@ # # by going to a commit before the one introducing the regression. args: -let pkgs = import (fetchTarball "https://github.com/tweag/nixpkgs/archive/73ad5f9e147.tar.gz") args; +let pkgs = import (fetchTarball "https://github.com/tweag/nixpkgs/archive/0cbe9f69c234a7700596e943bfae7ef27a31b735.tar.gz") args; stack_ignore_global_hints = pkgs.writeScriptBin "stack" '' #!${pkgs.stdenv.shell} # Skips the --global-hints parameter to stack. This is From f723990d7907f42e1d74b8f659ed88f497046642 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Facundo=20Dom=C3=ADnguez?= Date: Fri, 24 Nov 2023 08:27:00 -0300 Subject: [PATCH 3/4] Remove redundant imports --- jni/src/common/Foreign/JNI/Unsafe/Internal/Introspection.hs | 1 - jvm/src/common/Language/Java/Unsafe.hs | 2 -- 2 files changed, 3 deletions(-) diff --git a/jni/src/common/Foreign/JNI/Unsafe/Internal/Introspection.hs b/jni/src/common/Foreign/JNI/Unsafe/Internal/Introspection.hs index ba61869e..4def6135 100644 --- a/jni/src/common/Foreign/JNI/Unsafe/Internal/Introspection.hs +++ b/jni/src/common/Foreign/JNI/Unsafe/Internal/Introspection.hs @@ -19,7 +19,6 @@ import Data.Maybe (catMaybes) import Data.Singletons import qualified Data.Text as Text import qualified Data.Text.Encoding as Text -import qualified Data.Text.Foreign as Text import Foreign.Ptr import Foreign.JNI.Unsafe.Internal import Foreign.JNI.Types diff --git a/jvm/src/common/Language/Java/Unsafe.hs b/jvm/src/common/Language/Java/Unsafe.hs index 17221730..678d532c 100644 --- a/jvm/src/common/Language/Java/Unsafe.hs +++ b/jvm/src/common/Language/Java/Unsafe.hs @@ -121,12 +121,10 @@ import Data.Proxy (Proxy(..)) import Data.Typeable (Typeable, TypeRep, typeOf) import Data.Word import Data.ByteString (ByteString) -import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Unsafe as BS import Data.Kind (Type) import Data.Singletons (SingI(..), SomeSing(..)) import qualified Data.Text.Encoding as Text -import qualified Data.Text.Foreign as Text import Data.Text (Text) import qualified Data.Vector.Storable as Vector import Data.Vector.Storable (Vector) From 030315232f5665229551cc576ffaa23eac3dc1ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Facundo=20Dom=C3=ADnguez?= Date: Fri, 24 Nov 2023 09:09:22 -0300 Subject: [PATCH 4/4] Update changelog --- jni/CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/jni/CHANGELOG.md b/jni/CHANGELOG.md index e20bf5d9..3878129e 100644 --- a/jni/CHANGELOG.md +++ b/jni/CHANGELOG.md @@ -7,6 +7,9 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). ## Next ### Added + +* Support to build with text >= 2 ([#200](https://github.com/tweag/inline-java/pull/200)) + ### Changed ### Removed