on master help sign in
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
3 files changed+11−2
libs/prelude/Prelude.idr+6−2 rts/idris_stdfgn.c+4 rts/idris_stdfgn.h+1
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