package dune-private-libs
Source file fdecl.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30type 'a state = | Unset | Set of 'a type 'a t = { mutable state : 'a state ; to_dyn : 'a -> Dyn.t } let create to_dyn = { state = Unset; to_dyn } let set t new_ = match t.state with | Unset -> t.state <- Set new_ | Set old -> Code_error.raise "Fdecl.set: already set" [ ("old", t.to_dyn old); ("new_", t.to_dyn new_) ] let set_idempotent ~equal t new_ = match t.state with | Unset -> t.state <- Set new_ | Set old -> if not (equal new_ old) then Code_error.raise "Fdecl.set_idempotent: already set to a different value" [ ("old", t.to_dyn old); ("new_", t.to_dyn new_) ] let get t = match t.state with | Unset -> Code_error.raise "Fdecl.get: not set" [] | Set x -> x