diff options
Diffstat (limited to 'libs')
-rw-r--r-- | libs/util.ml | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/libs/util.ml b/libs/util.ml index 522c3ec..494faac 100644 --- a/libs/util.ml +++ b/libs/util.ml @@ -1,11 +1,30 @@ -exception TypeError +(* Locations *) + +type position = Lexing.position +let position_unknown = Lexing.dummy_pos + +type extent = position * position +let extent_unknown = (position_unknown, position_unknown) + + +(* Exceptions *) + +exception NoLocError of string +let error x = raise (NoLocError x) + +exception LocError of extent list * string +let loc_error l f x = + try f x with + | NoLocError e -> raise (LocError([l], e)) + | LocError(q, e) -> raise (LocError(l::q, e)) + +(* Varmaps *) module VarMap = Mapext.Make(String) -exception Duplicate of string let disjoint_union k a b = match a, b with | Some x, None -> Some x | None, Some y -> Some y - | _ -> raise (Duplicate k) + | _ -> error ("Duplicate name in disjoint union: " ^ k) let rec fix equal f s = let fs = f s in |