Source file longident.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
type t =
| Lident of string
| Ldot of t * string
| Lapply of t * t
let rec flat accu = function
| Lident s -> s :: accu
| Ldot (lid, s) -> flat (s :: accu) lid
| Lapply (_, _) -> Misc.fatal_error "Longident.flat"
let flatten lid = flat [] lid
let rec split_at_dots s pos =
try
let dot = String.index_from s pos '.' in
String.sub s pos (dot - pos) :: split_at_dots s (dot + 1)
with Not_found -> [ String.sub s pos (String.length s - pos) ]
let unflatten l =
match l with
| [] -> None
| hd :: tl -> Some (List.fold_left (fun p s -> Ldot (p, s)) (Lident hd) tl)
let parse s =
match unflatten (split_at_dots s 0) with
| None ->
Lident ""
| Some v -> v
let rec to_504_plus lid =
let loc = Location.none in
match lid with
| Lident s -> Longident_504.Lident s
| Ldot (lid, s) ->
Longident_504.Ldot ({txt = to_504_plus lid; loc}, { txt = s; loc})
| Lapply (lid, lid2) ->
Longident_504.Lapply
({txt = to_504_plus lid; loc}, {txt= to_504_plus lid2; loc})
let rec from_504_plus lid =
match lid with
| Longident_504.Lident s -> Lident s
| Longident_504.Ldot (lid, s) -> Ldot (from_504_plus lid.txt, s.txt)
| Longident_504.Lapply (lid, lid2) ->
Lapply (from_504_plus lid.txt, from_504_plus lid2.txt)
let to_compiler lid =
let from_compiler lid =