packages feed

yamlscript 0.2.8.0 → 0.2.12.0

raw patch · 2 files changed

+28/−14 lines, 2 files

Files

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.