ddc-code-0.4.2.1: salt/runtime64/primitive/Ref.dcs
-- | References to boxed values.
module Runtime.Prim.Ref
export value
allocRef : [r1 r2 : Region]. Ptr# r1 Obj -> Ptr# r2 Obj
readRef : [r1 r2 : Region]. Ptr# r1 Obj -> Ptr# r2 Obj
writeRef_ : [r1 r2 : Region]. Ptr# r1 Obj -> Ptr# r2 Obj -> Void#
import value
allocBoxed : [r1 : Region]. Tag# -> Nat# -> Ptr# r1 Obj
getBoxed : [r1 r2 : Region]. Ptr# r1 Obj -> Nat# -> Ptr# r2 Obj
setBoxed : [r1 r2 : Region]. Ptr# r1 Obj -> Nat# -> Ptr# r2 Obj -> Void#
with letrec
-- | Allocate a new reference to some boxed value.
allocRef [r1 r2: Region] (val: Ptr# r1 Obj): Ptr# r2 Obj
= do ref = allocBoxed [r2] (truncate# 0#) 1#
setBoxed ref 0# val
ref
-- | Read the value from a reference.
readRef [r1 r2: Region] (ref: Ptr# r1 Obj): Ptr# r2 Obj
= getBoxed ref 0#
-- | Write a value into reference.
writeRef_ [r1 r2: Region] (ref: Ptr# r1 Obj) (val: Ptr# r2 Obj): Void#
= setBoxed ref 0# val