diff options
Diffstat (limited to 'checker/values.ml')
| -rw-r--r-- | checker/values.ml | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/checker/values.ml b/checker/values.ml index e1b5a949ac..35027d5bfb 100644 --- a/checker/values.ml +++ b/checker/values.ml @@ -15,7 +15,7 @@ To ensure this file is up-to-date, 'make' now compares the md5 of cic.mli with a copy we maintain here: -MD5 f7b267579138eabf86a74d6f2a7ed794 checker/cic.mli +MD5 a127e0c2322c7846914bbca9921309c7 checker/cic.mli *) @@ -45,6 +45,13 @@ type value = | String | Annot of string * value | Dyn + | Proxy of value ref + +let fix (f : value -> value) : value = + let self = ref Any in + let ans = f (Proxy self) in + let () = self := ans in + ans (** Some pseudo-constructors *) @@ -185,10 +192,7 @@ let v_resolver = let v_mp_resolver = v_tuple "" [|v_mp;v_resolver|] let v_subst = - v_tuple "substitution" - [|v_map v_mp v_mp_resolver; - v_map v_uid v_mp_resolver|] - + Annot ("substitution", v_map v_mp v_mp_resolver) (** kernel/lazyconstr *) @@ -350,18 +354,16 @@ let v_states = v_pair Any v_frozen let v_state = Tuple ("state", [|v_states; Any; v_bool|]) let v_vcs = - let data = Opt Any in - let vcs = + let vcs self = Tuple ("vcs", [|Any; Any; Tuple ("dag", [|Any; Any; v_map Any (Tuple ("state_info", - [|Any; Any; Opt v_state; v_pair data Any|])) + [|Any; Any; Opt v_state; v_pair (Opt self) Any|])) |]) |]) in - let () = Obj.set_field (Obj.magic data) 0 (Obj.magic vcs) in - vcs + fix vcs let v_uuid = Any let v_request id doc = |
