on master help sign in
Add primitive for equality on Ptr
commit6517a95529422d8386f6905f7d54ff7db8a284f1 authorEdwin Brady <ecb10@st-andrews.ac.uk> dateTue 14 Jul 2015, 18:01 (11 years ago) parent6e5e40c
3 files changed+12
libs/prelude/Builtins.idr+2 libs/prelude/Prelude/Classes.idr+6 src/IRTS/CodegenC.hs+4
libs/prelude/Builtins.idr+2
@@ -170,6 +170,8 @@ abstract data ManagedPtr : Type
170170%extern prim__stderr : Ptr
171171
172172%extern prim__null : Ptr
173+%extern prim__eqPtr : Ptr -> Ptr -> Int
174+%extern prim__eqManagedPtr : ManagedPtr -> ManagedPtr -> Int
173175%extern prim__registerPtr : Ptr -> Int -> ManagedPtr
174176
175177
libs/prelude/Prelude/Classes.idr+6
@@ -46,6 +46,12 @@ instance Eq Char where
4646instance Eq String where
4747 (==) = boolOp prim__eqString
4848
49+instance Eq Ptr where
50+ (==) = boolOp prim__eqPtr
51+
52+instance Eq ManagedPtr where
53+ (==) = boolOp prim__eqManagedPtr
54+
4955instance Eq Bool where
5056 True == True = True
5157 True == False = False
src/IRTS/CodegenC.hs+4
@@ -570,6 +570,10 @@ doOp v (LExternal so) [] | so == sUN "prim__stdout" = v ++ "MKPTR(vm, stdout)"
570570doOp v (LExternal se) [] | se == sUN "prim__stderr" = v ++ "MKPTR(vm, stderr)"
571571
572572doOp v (LExternal nul) [] | nul == sUN "prim__null" = v ++ "MKPTR(vm, NULL)"
573+doOp v (LExternal eqp) [x, y] | eqp == sUN "prim__eqPtr"
574+ = v ++ "GETPTR(" ++ creg x ++ ") == GETPTR(" ++ creg y ++ ")"
575+doOp v (LExternal eqp) [x, y] | eqp == sUN "prim__eqManagedPtr"
576+ = v ++ "GETMPTR(" ++ creg x ++ ") == GETMPTR(" ++ creg y ++ ")"
573577doOp v (LExternal rp) [p, i] | rp == sUN "prim__registerPtr"
574578 = v ++ "MKMPTR(vm, GETPTR(" ++ creg p ++ "), GETINT(" ++ creg i ++ "))"
575579