(************************************************************************) (* * The Coq Proof Assistant / The Coq Development Team *) (* v * INRIA, CNRS and contributors - Copyright 1999-2018 *) (* None | Some l , None -> Some l | None, Some l -> Some l | Some l1, Some l2 -> Some (merge l1 l2) let finer l1 l2 = match l1, l2 with | None, _ -> false | Some l , None -> true | Some l1, Some l2 -> l1.fname = l2.fname && merge l1 l2 = l2 let unloc loc = (loc.bp, loc.ep) let shift_loc kb kp loc = { loc with bp = loc.bp + kb ; ep = loc.ep + kp } (** Located type *) type 'a located = t option * 'a let tag ?loc x = loc, x let map f (l,x) = (l, f x) (** Exceptions *) let location : t Exninfo.t = Exninfo.make () let add_loc e loc = Exninfo.add e location loc let get_loc e = Exninfo.get e location let raise ?loc e = match loc with | None -> raise e | Some loc -> let info = Exninfo.add Exninfo.null location loc in Exninfo.iraise (e, info)