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.
This commit is contained in:
Edwin Brady 2014-01-20 10:42:28 +00:00
parent 1dfc8fdb20
commit f44fe3290f
3 changed files with 11 additions and 2 deletions

View File

@ -532,12 +532,16 @@ ferror (FHandle h) = do err <- do_ferror h
partial
nullPtr : Ptr -> IO Bool
nullPtr p = do ok <- mkForeign (FFun "isNull" [FPtr] FInt) p
return (ok /= 0);
return (ok /= 0)
partial
nullStr : String -> IO Bool
nullStr p = do ok <- mkForeign (FFun "isNull" [FString] FInt) p
return (ok /= 0);
return (ok /= 0)
eqPtr : Ptr -> Ptr -> IO Bool
eqPtr x y = do eq <- mkForeign (FFun "idris_eqPtr" [FPtr, FPtr] FInt) x y
return (eq /= 0)
partial
validFile : File -> IO Bool

View File

@ -36,6 +36,10 @@ int isNull(void* ptr) {
return ptr==NULL;
}
int idris_eqPtr(void* x, void* y) {
return x==y;
}
void* idris_stdin() {
return (void*)stdin;
}

View File

@ -12,6 +12,7 @@ int fileEOF(void* h);
int fileError(void* h);
void fputStr(void*h, char* str);
int idris_eqPtr(void* x, void* y);
int isNull(void* ptr);
void* idris_stdin();