let search_in_tree =
let pred pos t =
t.t_pos_left <= pos && pos <= t.t_pos_right
in
let get_t pos l =
try Some (List.find (pred pos) l)
with Not_found -> None
in
let rec iter fallback pos tree =
if pred pos tree then
let fb =
match tree.t_type_info with
None -> fallback
| Some (start,stop) ->
Some (tree.t_pos_left, tree.t_pos_right, start, stop)
in
match get_t pos tree.t_children with
None -> fb
| Some t -> iter fb pos t
else
fallback
in
iter None