let iter_all section f =
try
locked := true ;
exported_macros := Mset.empty ;
Array.iter
(fun (s,t) ->
let k = s_index s in
if not (Dset.is_empty gsection.(k)) then
begin
let job = if is_macro_section s then do_export f else f in
section t ; Dset.iter job gsection.(k) ;
end
) gtoc ;
locked := false ;
exported_macros := Mset.empty ;
with e ->
locked := false ;
exported_macros := Mset.empty ;
raise e