Foreign pointer equality
Can be useful when dealing with values originating in foreign functions.
Intended in particular for checking sending VM in message passing
concurrency.
commitf44fe3290f5c630e0d1dacb0712cd18e4c4feb05
authorEdwin Brady <ecb10@st-andrews.ac.uk>
dateMon 20 Jan 2014, 10:42 (13 years ago)
parent1dfc8fd
libs/prelude/Prelude.idr+6−2
@@ -532,12 +532,16 @@ ferror (FHandle h) = do err <- do_ferror h
532532partial
533533nullPtr : Ptr -> IO Bool
534534nullPtr p = do ok <- mkForeign (FFun "isNull" [FPtr] FInt) p
535− return (ok /= 0);
535+ return (ok /= 0)
536536
537537partial
538538nullStr : String -> IO Bool
539539nullStr p = do ok <- mkForeign (FFun "isNull" [FString] FInt) p
540− return (ok /= 0);
540+ return (ok /= 0)
541+
542+eqPtr : Ptr -> Ptr -> IO Bool
543+eqPtr x y = do eq <- mkForeign (FFun "idris_eqPtr" [FPtr, FPtr] FInt) x y
544+ return (eq /= 0)
541545
542546partial
543547validFile : File -> IO Bool
rts/idris_stdfgn.c+4
@@ -36,6 +36,10 @@ int isNull(void* ptr) {
3636 return ptr==NULL;
3737}
3838
39+int idris_eqPtr(void* x, void* y) {
40+ return x==y;
41+}
42+
3943void* idris_stdin() {
4044 return (void*)stdin;
4145}
rts/idris_stdfgn.h+1
@@ -12,6 +12,7 @@ int fileEOF(void* h);
1212int fileError(void* h);
1313void fputStr(void*h, char* str);
1414
15+int idris_eqPtr(void* x, void* y);
1516int isNull(void* ptr);
1617void* idris_stdin();
1718