on master help sign in
Add primitive for equality on Ptr
6517a95Edwin Brady
libs/prelude/Builtins.idr+2
@@ -170,6 +170,8 @@ abstract data ManagedPtr : Type
170%extern prim__stderr : Ptr
170%extern prim__stderr : Ptr
171
171
172%extern prim__null : Ptr
172%extern prim__null : Ptr
173+%extern prim__eqPtr : Ptr -> Ptr -> Int
174+%extern prim__eqManagedPtr : ManagedPtr -> ManagedPtr -> Int
173%extern prim__registerPtr : Ptr -> Int -> ManagedPtr
175%extern prim__registerPtr : Ptr -> Int -> ManagedPtr
174
176
175
177
libs/prelude/Prelude/Classes.idr+6
@@ -46,6 +46,12 @@ instance Eq Char where
46instance Eq String where
46instance Eq String where
47 (==) = boolOp prim__eqString
47 (==) = boolOp prim__eqString
48
48
49+instance Eq Ptr where
50+ (==) = boolOp prim__eqPtr
51+
52+instance Eq ManagedPtr where
53+ (==) = boolOp prim__eqManagedPtr
54+
49instance Eq Bool where
55instance Eq Bool where
50 True == True = True
56 True == True = True
51 True == False = False
57 True == False = False
src/IRTS/CodegenC.hs+4
@@ -570,6 +570,10 @@ doOp v (LExternal so) [] | so == sUN "prim__stdout" = v ++ "MKPTR(vm, stdout)"
570doOp v (LExternal se) [] | se == sUN "prim__stderr" = v ++ "MKPTR(vm, stderr)"
570doOp v (LExternal se) [] | se == sUN "prim__stderr" = v ++ "MKPTR(vm, stderr)"
571
571
572doOp v (LExternal nul) [] | nul == sUN "prim__null" = v ++ "MKPTR(vm, NULL)"
572doOp 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 ++ ")"
573doOp v (LExternal rp) [p, i] | rp == sUN "prim__registerPtr"
577doOp v (LExternal rp) [p, i] | rp == sUN "prim__registerPtr"
574 = v ++ "MKMPTR(vm, GETPTR(" ++ creg p ++ "), GETINT(" ++ creg i ++ "))"
578 = v ++ "MKMPTR(vm, GETPTR(" ++ creg p ++ "), GETINT(" ++ creg i ++ "))"
575
579