@@ -13,13 +13,14 @@ import System
1313||| the receiver will create a new channel ID
1414sendToThread : (thread_id : Ptr) -> (channel : Int) -> a -> IO Int
1515sendToThread {a} dest channel val
16− = foreign FFI_C "idris_sendMessage" (Ptr -> Int -> Ptr -> Raw a -> IO Int)
17− prim__vm channel dest (MkRaw val)
16+ = do me <- getMyVM
17+ foreign FFI_C "idris_sendMessage" (Ptr -> Int -> Ptr -> Raw a -> IO Int)
18+ me channel dest (MkRaw val)
1819
1920||| Check for messages in the process inbox
2021checkMsgs : IO Bool
21−checkMsgs = do msgs <- foreign FFI_C "idris_checkMessages" (Ptr -> IO Ptr)
22− prim__vm
22+checkMsgs = do me <- getMyVM
23+ msgs <- foreign FFI_C "idris_checkMessages" (Ptr -> IO Ptr) me
2324 null <- nullPtr msgs
2425 pure (not null)
2526
@@ -27,8 +28,9 @@ checkMsgs = do msgs <- foreign FFI_C "idris_checkMessages" (Ptr -> IO Ptr)
2728||| If no messages, waits for the given number of seconds
2829checkMsgsTimeout : Int -> IO Bool
2930checkMsgsTimeout timeout
30− = do msgs <- foreign FFI_C "idris_checkMessagesTimeout"
31− (Ptr -> Int -> IO Ptr) prim__vm timeout
31+ = do me <- getMyVM
32+ msgs <- foreign FFI_C "idris_checkMessagesTimeout"
33+ (Ptr -> Int -> IO Ptr) me timeout
3234 null <- nullPtr msgs
3335 pure (not null)
3436
@@ -44,8 +46,9 @@ channel_id msg = foreign FFI_C "idris_getChannel" (Ptr -> IO Int) msg
4446||| Returns either 'Nothing', if none, or 'Just (pid, channel)' as pid
4547||| of sender and new channel id.
4648listenMsgs : IO (Maybe (Ptr, Int))
47−listenMsgs = do msg <- foreign FFI_C "idris_checkInitMessages" (Ptr -> IO Ptr)
48− prim__vm
49+listenMsgs = do me <- getMyVM
50+ msg <- foreign FFI_C "idris_checkInitMessages" (Ptr -> IO Ptr)
51+ me
4952 null <- nullPtr msg
5053 if null then pure Nothing
5154 else do s_id <- sender msg
@@ -56,8 +59,9 @@ listenMsgs = do msg <- foreign FFI_C "idris_checkInitMessages" (Ptr -> IO Ptr)
5659||| If channel is '0', accept on any channel.
5760checkMsgsFrom : Ptr -> (channel : Int) -> IO Bool
5861checkMsgsFrom sender channel
59− = do msgs <- foreign FFI_C "idris_checkMessagesFrom" (Ptr -> Int -> Ptr -> IO Ptr)
60− prim__vm channel sender
62+ = do me <- getMyVM
63+ msgs <- foreign FFI_C "idris_checkMessagesFrom" (Ptr -> Int -> Ptr -> IO Ptr)
64+ me channel sender
6165 null <- nullPtr msgs
6266 pure (not null)
6367
@@ -66,8 +70,8 @@ checkMsgsFrom sender channel
6670||| Note that this is not at all type safe! It is intended to be used in
6771||| a type safe wrapper.
6872getMsg : IO a
69−getMsg {a} = do m <- foreign FFI_C "idris_recvMessage"
70− (Ptr -> IO Ptr) prim__vm
73+getMsg {a} = do me <- getMyVM
74+ m <- foreign FFI_C "idris_recvMessage" (Ptr -> IO Ptr) me
7175 MkRaw x <- foreign FFI_C "idris_getMsg" (Ptr -> IO (Raw a)) m
7276 pure x
7377
@@ -77,8 +81,9 @@ getMsg {a} = do m <- foreign FFI_C "idris_recvMessage"
7781||| a type safe wrapper.
7882getMsgWithSender : IO (Ptr, Int, a)
7983getMsgWithSender {a}
80− = do m <- foreign FFI_C "idris_recvMessage"
81− (Ptr -> IO Ptr) prim__vm
84+ = do me <- getMyVM
85+ m <- foreign FFI_C "idris_recvMessage"
86+ (Ptr -> IO Ptr) me
8287 MkRaw x <- foreign FFI_C "idris_getMsg" (Ptr -> IO (Raw a)) m
8388 vm <- sender m
8489 chan <- channel_id m
@@ -90,8 +95,9 @@ getMsgWithSender {a}
9095||| alive
9196getMsgFrom : Ptr -> (channel : Int) -> IO (Maybe a)
9297getMsgFrom {a} sender channel
93− = do m <- foreign FFI_C "idris_recvMessageFrom"
94− (Ptr -> Int -> Ptr -> IO Ptr) prim__vm channel sender
98+ = do me <- getMyVM
99+ m <- foreign FFI_C "idris_recvMessageFrom"
100+ (Ptr -> Int -> Ptr -> IO Ptr) me channel sender
95101 null <- nullPtr m
96102 if null
97103 then pure Nothing