- if st.ET.w = [] then st.ET.s <- v
- else EU.raise_error ET.EWaiting
+ if st.ET.w = [] then begin
+ if EU.compare_versions st.ET.s v <> 0 then begin
+ st.ET.s <- v; st.ET.m <- true
+ end
+ end else EU.raise_error ET.EWaiting
st.ET.r <- EU.roles_union [false, r] st.ET.r
| Some r ->
if r.ET.v <> st.ET.s then EU.raise_error ET.EWrongVersion else
r.ET.o <- EU.objs_union os r.ET.o;
r.ET.n <- EU.names_union ns r.ET.n;
end;
st.ET.r <- EU.roles_union [false, r] st.ET.r
| Some r ->
if r.ET.v <> st.ET.s then EU.raise_error ET.EWrongVersion else
r.ET.o <- EU.objs_union os r.ET.o;
r.ET.n <- EU.names_union ns r.ET.n;
end;
let add_tops v =
if EU.exists_role_deleted st.ET.s st.ET.r || st.ET.t <> []
then EU.raise_error ET.ETops else
let ds, ts = EU.get_tops v st.ET.r in
if ds <> [] then begin
let add_tops v =
if EU.exists_role_deleted st.ET.s st.ET.r || st.ET.t <> []
then EU.raise_error ET.ETops else
let ds, ts = EU.get_tops v st.ET.r in
if ds <> [] then begin
let ws = EI.read_rev_names ich [] in
Scanf.Scanning.close_in ich;
let map ws w = EU.names_union ws [w] in
let ws = EI.read_rev_names ich [] in
Scanf.Scanning.close_in ich;
let map ws w = EU.names_union ws [w] in
- before (EU.string_of_pointer (List.rev p));
- EU.list_visit before_t each_t visit_tw after_t EU.string_of_obj (1::p) r.ET.o;
- EU.list_visit before_w each_w visit_tw after_w EU.string_of_name (2::p) r.ET.n;
- after ()
+ if r.ET.x then begin
+ before ();
+ EU.list_visit before_t each_t visit_tw after_t EU.string_of_obj (1::p) r.ET.o;
+ EU.list_visit before_w each_w visit_tw after_w EU.string_of_name (2::p) r.ET.n;
+ after ()
+ end
EU.list_visit before_t each_t visit_tw after_t EU.string_of_obj [1] st.ET.t;
EU.list_visit before_w each_w visit_tw after_w EU.string_of_name [2] st.ET.w
EU.list_visit before_t each_t visit_tw after_t EU.string_of_obj [1] st.ET.t;
EU.list_visit before_w each_w visit_tw after_w EU.string_of_name [2] st.ET.w