@@ -15,6 +15,10 @@ data CPtr = CPt Ptr Int
1515implicit toCPtr : Ptr -> CPtr
1616toCPtr p = CPt p 0
1717
18+implicit toPtr : CPtr -> Ptr
19+toPtr (CPt p 0) = p
20+toPtr (CPt p o) = prim__ptrOffset p o
21+
1822||| Import of malloc from the C standard library.
1923malloc : Int -> IO Ptr
2024malloc size = foreign FFI_C "malloc" (Int -> IO Ptr) size
@@ -77,10 +81,10 @@ update ty cp f = do val <- peek ty cp
7781
7882||| Get a pointer to a field in a composite value
7983field : Composite -> Nat -> CPtr -> CPtr
80−field arr@(ARRAY n t) i (CPt p o ) = CPt p (o + offset arr i)
81−field un@(UNION xs) i (CPt p o ) = CPt p o
82−field st@(STRUCT xs) i (CPt p o ) = CPt p (o + offset st i)
83−field ps@(PACKEDSTRUCT xs) i (CPt p o ) = CPt p (o + offset ps i)
84+field arr@(ARRAY n t) i (CPt p o) = CPt p (o + offset arr i)
85+field un@(UNION xs) i (CPt p o) = CPt p o
86+field st@(STRUCT xs) i (CPt p o) = CPt p (o + offset st i)
87+field ps@(PACKEDSTRUCT xs) i (CPt p o) = CPt p (o + offset ps i)
8488field (T t) Z p = p
8589
8690infixl 10 #