let get_definition x =
let k = D.index x in
try D.H.find index k
with Not_found ->
let name = fresh_name D.prefix (D.basename x) in
let item = D.declare x name in
let d = {
d_name = name ;
d_section = D.section ;
d_source = D.location x ;
d_item = item ;
d_title = (fun fmt -> D.pp_title fmt x) ;
d_descr = (fun fmt -> D.pp_descr fmt x) ;
} in
add_declaration d ;
D.H.add index k d ;
List.iter (fun f -> f x d) !demons ;
d