let obtain f cc =
match lookup f with
| Defined item -> item
| Undefined ->
let c = { ccitem=Cnone ; stable=true ; inners=Iset.empty } in
Ihmap.replace cofix f c ;
lock f ; fixpoint c f cc
| Cyclic c ->
if recursive f then
let fs = get_cycle f !stack in
List.iter (add_cycle fs) (f::fs) ;
( current c.ccitem )
else
( fixpoint c f cc )