on master help sign in
Foreign pointer equality
f44fe32Edwin Brady
libs/prelude/Prelude.idr+6−2
@@ -532,12 +532,16 @@ ferror (FHandle h) = do err <- do_ferror h
532partial
532partial
533nullPtr : Ptr -> IO Bool
533nullPtr : Ptr -> IO Bool
534nullPtr p = do ok <- mkForeign (FFun "isNull" [FPtr] FInt) p
534nullPtr p = do ok <- mkForeign (FFun "isNull" [FPtr] FInt) p
535− return (ok /= 0);
535+ return (ok /= 0)
536
536
537partial
537partial
538nullStr : String -> IO Bool
538nullStr : String -> IO Bool
539nullStr p = do ok <- mkForeign (FFun "isNull" [FString] FInt) p
539nullStr 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)
541
545
542partial
546partial
543validFile : File -> IO Bool
547validFile : File -> IO Bool
rts/idris_stdfgn.c+4
@@ -36,6 +36,10 @@ int isNull(void* ptr) {
36 return ptr==NULL;
36 return ptr==NULL;
37}
37}
38
38
39+int idris_eqPtr(void* x, void* y) {
40+ return x==y;
41+}
42+
39void* idris_stdin() {
43void* idris_stdin() {
40 return (void*)stdin;
44 return (void*)stdin;
41}
45}
rts/idris_stdfgn.h+1
@@ -12,6 +12,7 @@ int fileEOF(void* h);
12int fileError(void* h);
12int fileError(void* h);
13void fputStr(void*h, char* str);
13void fputStr(void*h, char* str);
14
14
15+int idris_eqPtr(void* x, void* y);
15int isNull(void* ptr);
16int isNull(void* ptr);
16void* idris_stdin();
17void* idris_stdin();
17
18