yamlscript 0.2.8.0 → 0.2.12.0
raw patch · 2 files changed
+28/−14 lines, 2 files
Files
- lib/YAMLScript/FFI.hs +27/−13
- yamlscript.cabal +1/−1
lib/YAMLScript/FFI.hs view
@@ -2,7 +2,6 @@ -- This code is licensed under MIT license (See License for details) {-# LANGUAGE ForeignFunctionInterface #-}-{-# LANGUAGE CApiFFI #-} {-# LANGUAGE ScopedTypeVariables #-} module YAMLScript.FFI@@ -17,24 +16,33 @@ import Control.Exception (bracket) -- | GraalVM isolate thread type-type GraalIsolateThread = Ptr ()+data GraalCreateIsolateParams+data GraalIsolate+data GraalIsolateThread +type GraalIsolateThreadPtr = Ptr GraalIsolateThread+ -- | Foreign function interface to GraalVM isolate management-foreign import capi "graal_isolate.h graal_create_isolate"- c_graal_create_isolate :: Ptr () -> Ptr () -> Ptr GraalIsolateThread -> IO CInt+foreign import ccall "graal_create_isolate"+ c_graal_create_isolate+ :: Ptr GraalCreateIsolateParams+ -> Ptr (Ptr GraalIsolate)+ -> Ptr GraalIsolateThreadPtr+ -> IO CInt -foreign import capi "graal_isolate.h graal_tear_down_isolate"- c_graal_tear_down_isolate :: GraalIsolateThread -> IO CInt+foreign import ccall "graal_tear_down_isolate"+ c_graal_tear_down_isolate :: GraalIsolateThreadPtr -> IO CInt -- | Foreign function interface to load_ys_to_json-foreign import capi "libys.0.2.8.h load_ys_to_json"- c_load_ys_to_json :: GraalIsolateThread -> CString -> IO CString+foreign import ccall "load_ys_to_json"+ c_load_ys_to_json :: CLLong -> CString -> IO CString -- | Create a GraalVM isolate and run an action with it-withGraalIsolate :: (GraalIsolateThread -> IO a) -> IO a+withGraalIsolate :: (GraalIsolateThreadPtr -> IO a) -> IO a withGraalIsolate action =- alloca $ \(isolateThreadPtr :: Ptr GraalIsolateThread) -> do- -- Create the isolate (following Python binding pattern: None, None, &isolatethread)+ alloca $ \(isolateThreadPtr :: Ptr GraalIsolateThreadPtr) -> do+ -- Create the isolate (following Python binding pattern:+ -- None, None, &isolatethread). rc <- c_graal_create_isolate nullPtr nullPtr isolateThreadPtr if rc /= 0 then error $ "Failed to create GraalVM isolate (code " ++ show rc ++ ")"@@ -46,7 +54,10 @@ (\thread -> do rc' <- c_graal_tear_down_isolate thread if rc' /= 0- then error $ "Failed to tear down GraalVM isolate (code " ++ show rc' ++ ")"+ then+ error $+ "Failed to tear down GraalVM isolate (code " +++ show rc' ++ ")" else return ()) action @@ -55,7 +66,10 @@ loadYsToJsonFFI input = withGraalIsolate $ \isolateThread -> BSU.unsafeUseAsCString input $ \cInput -> do- cResult <- c_load_ys_to_json isolateThread cInput+ cResult <- c_load_ys_to_json (threadId isolateThread) cInput if cResult == nullPtr then return BS.empty else BS.packCString cResult++threadId :: GraalIsolateThreadPtr -> CLLong+threadId = fromIntegral . ptrToIntPtr
yamlscript.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: yamlscript-version: 0.2.8.0+version: 0.2.12.0 synopsis: Haskell bindings for YAMLScript description: Haskell bindings for YAMLScript, a functional programming language with YAML syntax.