6 | `PackageNamespace of string
7 | `PackageInternalNamespace of string
8 | `ProtectedNamespace of string
9 | `ExplicitNamespace of string
10 | `StaticProtectedNamespace of string
11 | `PrivateNamespace of string ]
13 type namespace_set = namespace list
16 `QName of namespace * string
17 | `Multiname of string * namespace_set
32 double: float RevList.t;
33 string: string RevList.t;
34 namespace: namespace RevList.t;
35 namespace_set: namespace_set RevList.t;
36 multiname: multiname RevList.t;
42 double = RevList.empty;
43 string = RevList.empty;
44 namespace = RevList.empty;
45 namespace_set = RevList.empty;
46 multiname = RevList.empty}
51 | `PackageNamespace name
52 | `PackageInternalNamespace name
53 | `ProtectedNamespace name
54 | `ExplicitNamespace name
55 | `StaticProtectedNamespace name
56 | `PrivateNamespace name ->
60 if RevList.mem x xs then
66 RevList.add_list (List.filter (fun x -> not (RevList.mem x ys)) xs) ys
68 let add_namespace ns cpool =
72 namespace = add ns cpool.namespace }
74 let add_multiname name cpool =
81 multiname = add name cpool.multiname } in
82 add_namespace ns cpool
83 | `Multiname (str,ns_set) ->
86 +> add_list (List.map ns_name ns_set)
88 namespace = add_list ns_set cpool.namespace;
89 namespace_set = add ns_set cpool.namespace_set;
90 multiname = add name cpool.multiname }
95 { cpool with int= add n cpool.int }
97 { cpool with uint= add n cpool.uint }
99 { cpool with string = add s cpool.string }
101 { cpool with double = add d cpool.double }
102 | #namespace as ns ->
103 add_namespace ns cpool
105 add_multiname m cpool
110 - list has only unique element
113 1 + RevList.index x set
115 let index cpool entry =
122 rindex d cpool.double
124 rindex s cpool.string
125 | #namespace as ns ->
126 rindex ns cpool.namespace
128 rindex m cpool.multiname
130 let of_namespace {string=string} (ns : namespace) =
132 rindex (ns_name ns) string in
136 | `PackageNamespace _ ->
138 | `PackageInternalNamespace _ ->
139 PackageInternalNamespace i
140 | `ProtectedNamespace _ ->
142 | `ExplicitNamespace _ ->
144 | `StaticProtectedNamespace _ ->
145 StaticProtectedNamespace i
146 | `PrivateNamespace _ ->
149 let of_namespace_set {namespace=namespace} nss =
150 List.map (fun ns -> rindex ns namespace) nss
152 let of_multiname {namespace=namespace; namespace_set=namespace_set; string=string} =
155 QName (rindex ns namespace, rindex s string)
156 | `Multiname (s,nss) ->
157 Multiname (rindex s string,rindex nss namespace_set)
161 RevList.to_list cpool.int;
163 RevList.to_list cpool.uint;
165 RevList.to_list cpool.double;
167 RevList.to_list cpool.string;
171 +> List.map (of_namespace cpool);
175 +> List.map (of_namespace_set cpool);
179 +> List.map (of_multiname cpool)
182 let add_list cpool xs =
183 List.fold_left add cpool xs